diff --git a/.gitignore b/.gitignore index d1460a1..f01a9d2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,13 +7,13 @@ node_modules/ nodemon.json *.env !example.env -/config/instance.* +/config/instance* !/config/instance-example.js # FRONT END : /front/node_modules/ -/front/webpack.config-*.js +/front/webpack.config* !/front/webpack.config.js /front/public/img/quizs/ /front/public/JS/*/ diff --git a/config/instance-demo.js b/config/instance-demo.js deleted file mode 100644 index bd45146..0000000 --- a/config/instance-demo.js +++ /dev/null @@ -1,63 +0,0 @@ -const users = require("./users"); -const questionnaires = require("./questionnaires"); - -module.exports = -{ - apiUrl: "https://apitest.wikilerni.com/api", - siteUrl: "https://test.wikilerni.com", - adminName: "Fabrice", - adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni (démo)", - senderEmail: "bonjour@wikilerni.com", - adminLang: "fr", - theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. - availableLangs: ["fr"],// Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni (démo)", - beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! - cronTimingAlertInSeconde: 120, // for logs - responseTimingAlertInSeconde: 3, // idem - tokenSignupValidationTimeInHours: "48h", // https://github.com/zeit/ms - tokenLoginLinkTimeInHours: "1h", - tokenConnexionMinTimeInHours: "24h", - tokenConnexionMaxTimeInDays: "180 days", - tokenLoginChangingTimeInHours: "1h",// for email & password changing - tokenDeleteUserTimeInHours: "1h", - tokenUnsubscribeLinkTimeInDays: "7 days", // token send with subscription's emails - freeAccountTimingInDays: 15, - freeAccountExpirationNotificationInDays: 2, - accountExpirationFirstNotificationInDays: 15, - accountExpirationSecondNotificationInDays: 3, - inactiveAccountTimeToDeleteInDays: 180, - // Questionnaires: - nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 0, // if 0 = not maximum - nbChoicesMax: 10, - nbNewQuestionnaires: 10,// for RSS, etc. - hourGiveNewQuestionnaireBegin: 3, // in user local time - hourGiveNewQuestionnaireEnd: 8, // idem - numberNewQuestionnaireAtSameTime: 50, // for mass mailing - minSearchQuestionnaires: 3, - // Illustrations: - nbIllustrationsMin: 0, - nbIllustrationsMax: 1, - maxIllustrationSizeinOctet: 1000000,// pas contrôlé pour l'instant. À revoir. - mimeTypesForIllustration: [ "image/jpg", "image/jpeg", "image/png", "image/gif", "image/png" ], - // -- Upload and resize: - illustrationsWidthMaxInPx: 400, - illustrationsMiniaturesWidthMaxInPx: 200, - // Links: - nbLinksMin: 1, - nbLinksMax: 1, - // à supprimer quand tous les "require" à jour: - nbQuestionsMin: questionnaires.nbQuestionsMin, - nbQuestionsMax: questionnaires.nbQuestionsMax, - nbChoicesMax: questionnaires.nbChoicesMax, - passwordMinLength: users.password.minlength, - dirCacheUsers: users.dirCacheUsers, - dirCacheUsersAnswers: users.dirCacheUsersAnswers, - dirCacheQuestionnaires: questionnaires.dirCacheQuestionnaires, - dirCacheQuestions: questionnaires.dirCacheQuestions, - dirCacheUsersQuestionnaires: questionnaires.dirCacheUsersQuestionnaires, - dirHTMLQuestionnaire: questionnaires.dirHTMLQuestionnaire, - dirWebQuestionnaire: questionnaires.dirWebQuestionnaire -}; \ No newline at end of file diff --git a/config/instance-prod.js b/config/instance-prod.js deleted file mode 100644 index 43e4388..0000000 --- a/config/instance-prod.js +++ /dev/null @@ -1,63 +0,0 @@ -const users = require("./users"); -const questionnaires = require("./questionnaires"); - -module.exports = -{ - apiUrl: "https://api.wikilerni.com/api", - siteUrl: "https://www.wikilerni.com", - adminName: "Fab", - adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", - senderEmail: "bonjour@wikilerni.com", - adminLang: "fr", - theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. - availableLangs: ["fr"],// Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! - cronTimingAlertInSeconde: 120, // for logs - responseTimingAlertInSeconde: 3, // idem - tokenSignupValidationTimeInHours: "48h", // https://github.com/zeit/ms - tokenLoginLinkTimeInHours: "1h", - tokenConnexionMinTimeInHours: "24h", - tokenConnexionMaxTimeInDays: "180 days", - tokenLoginChangingTimeInHours: "1h",// for email & password changing - tokenDeleteUserTimeInHours: "1h", - tokenUnsubscribeLinkTimeInDays: "7 days", // token send with subscription's emails - freeAccountTimingInDays: 15, - freeAccountExpirationNotificationInDays: 3, - accountExpirationFirstNotificationInDays: 10, - accountExpirationSecondNotificationInDays: 3, - inactiveAccountTimeToDeleteInDays: 180, - // Questionnaires: - nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 0, // if 0 = not maximum - nbChoicesMax: 10, - nbNewQuestionnaires: 10,// for RSS, etc. - hourGiveNewQuestionnaireBegin: 3, // in user local time - hourGiveNewQuestionnaireEnd: 8, // idem - numberNewQuestionnaireAtSameTime: 50, // for mass mailing - minSearchQuestionnaires: 3, - // Illustrations: - nbIllustrationsMin: 0, - nbIllustrationsMax: 1, - maxIllustrationSizeinOctet: 1000000,// pas contrôlé pour l'instant. À revoir. - mimeTypesForIllustration: [ "image/jpg", "image/jpeg", "image/png", "image/gif", "image/png" ], - // -- Upload and resize: - illustrationsWidthMaxInPx: 400, - illustrationsMiniaturesWidthMaxInPx: 200, - // Links: - nbLinksMin: 1, - nbLinksMax: 1, - // à supprimer quand tous les "require" à jour: - nbQuestionsMin: questionnaires.nbQuestionsMin, - nbQuestionsMax: questionnaires.nbQuestionsMax, - nbChoicesMax: questionnaires.nbChoicesMax, - passwordMinLength: users.password.minlength, - dirCacheUsers: users.dirCacheUsers, - dirCacheUsersAnswers: users.dirCacheUsersAnswers, - dirCacheQuestionnaires: questionnaires.dirCacheQuestionnaires, - dirCacheQuestions: questionnaires.dirCacheQuestions, - dirCacheUsersQuestionnaires: questionnaires.dirCacheUsersQuestionnaires, - dirHTMLQuestionnaire: questionnaires.dirHTMLQuestionnaire, - dirWebQuestionnaire: questionnaires.dirWebQuestionnaire -}; \ No newline at end of file diff --git a/front/public/JS/accountUser.app.js b/front/public/JS/accountUser.app.js index 727b9be..9638087 100644 --- a/front/public/JS/accountUser.app.js +++ b/front/public/JS/accountUser.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -420,8 +424,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -444,6 +448,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -468,17 +473,18 @@ module.exports = { unsubscriptionOk: "Votre demande a bien été prise en compte. Vous ne recevrez plus de messages venant du site, sauf pour vous signaler la fin de votre abonnement.
N'hésitez pas à accéder à votre compte pour de nouveau autoriser certains envois.", unsubscriptionFail: "Si vous voyez ce message, c'est que votre lien de désabonnement ne fonctionne pas.
Vous pouvez accéder à votre compte pour désactiver les envois manuellement.", allSubscriptionProcessed: "Tous les abonnés ont été traités pour le moment.", - mailNewQuestionnaireSubject: "Qu'allez-vous apprendre aujourd'hui ?", - mailNewQuestionnaireBodyTxt: "Bonjour USER_NAME,\n\nUn nouveau quiz vient de vous être proposé :\nQUESTIONNAIRE_URL\n\nBonne lecture !\n\nStopper les envois ?\nUNSUBSCRIBE_URL", - mailNewQuestionnaireBodyHTML: "

Bonjour USER_NAME,

MAIL_INTRODUCTION

Stopper les envois.

", + mailStopMailLinkTxt: "Stopper les envois.", + mailNewQuestionnaireBodyTxt: "Bonjour USER_NAME,\n\nUn nouveau quiz vient de vous être proposé :\n\nQUESTIONNAIRE_URL\n\nBonne lecture !\n\nStopper les envois ?\nUNSUBSCRIBE_URL", noNewQuestionnaireForUser: "Aucun nouveau questionnaire trouvé pour un abonné : ", mailEndFreeTimeSubject: "Votre abonnement gratuit va expirer", - mailEndFreeTimeBodyTxt: "Bonjour USER_NAME,\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\nPour continuer à utiliser le site, vous pouvez souscrire à un abonnement dès aujourd'hui :\nLINK_URL", - mailEndFreeTimeBodyHTML: "

Bonjour USER_NAME,

Votre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours. Pour continuer à utiliser le site, vous pouvez souscrire à un abonnement dès aujourd'hui en cliquez ici sans tarder.

", + mailEndFreeTimeLinkTxt: "M'abonner.", + mailEndFreeTimeBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez sans attendre souscrire à un abonnement :\nLINK_URL", + mailEndFreeTimeBodyHTML: "

Bonjour USER_NAME,

Votre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.

Pour continuer à utiliser le site, vous pouvez souscrire à un abonnement sans tarder en cliquant sur le lien ci-dessous.

", mailEndFreeTimeMessage: " relances envoyées.", mailExpirationSubject: "Votre abonnement va bientôt expirer", - mailExpirationBodyTxt: "Bonjour USER_NAME,\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL", - mailExpirationBodyHTML: "

Bonjour USER_NAME,

Votre abonnement à SITE_NAME va expirer d'ici quelques jours.
Pour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui en cliquant ici.

", + mailExpirationLinkTxt: "Prolonger mon abonnement.", + mailExpirationBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL", + mailExpirationBodyHTML: "

Bonjour USER_NAME,

Votre abonnement à SITE_NAME va expirer d'ici quelques jours.

Pour continuer à utiliser SITE_NAME, vous pouvez le prolonger dès aujourd'hui en cliquant sur le lien ci-dessous.

", mailExpirationMessage: "FIRST premières et SECOND deuxièmes relances envoyées pour des abonnements expirant d'ici peu.", infosNbDays: "Votre abonnement est encore valable pendant NB_DAYS jours.
Vous pouvez à tout moment prolonger votre abonnement en suivant les indications ci-dessous :", infosExpirated: "Votre abonnement a expiré, mais il vous reste encore quelques jours avant que votre compte et vos données ne soient complètement supprimées.
Pour ce faire, suivez sans tarder les indications ci-dessous :", @@ -506,7 +512,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -517,20 +523,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -543,15 +552,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -559,8 +570,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -674,7 +686,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -715,7 +728,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -778,7 +791,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -801,6 +916,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../tools/main */ "../tools/main.js"); /* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__); /* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); +/* harmony import */ var _tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./tools/webportage.js */ "./src/tools/webportage.js"); function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } @@ -825,6 +941,8 @@ var configFrontEnd = __webpack_require__("../views sync recursive ^\\.\\/.*\\.js + // Spécifique WebPortage pour paiements: + // Dictionnaires : var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + lang + "/general"); @@ -834,6 +952,7 @@ var txtUsers = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")(" var txtSubscriptions = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/subscription$")("./" + lang + "/subscription"); // Principaux éléments du DOM manipulés : +var divCrash = document.getElementById("crash"); var divMain = document.getElementById("main-content"); var divMessage = document.getElementById("message"); var divResponse = document.getElementById("response"); @@ -847,7 +966,7 @@ Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); var initialise = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var config, isConnected, user, getInfos, divCGV, div180, div365, divWP180, divWP365, divWPNone, xhrGetGodchilds; + var config, isConnected, user, getInfos, CGV, abo12, abo24, abo60, abo120, divWPBtns, xhrGetGodchilds; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -864,7 +983,7 @@ var initialise = /*#__PURE__*/function () { break; } - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", txt.serverError, "", ["error"]); _context.next = 12; break; @@ -980,25 +1099,34 @@ var initialise = /*#__PURE__*/function () { } }); // on passe à la caisse ? - divCGV = document.getElementById("CGVOk"); - div180 = document.getElementById("180Ok"); - div365 = document.getElementById("365Ok"); - divWP180 = document.getElementById("WPBtn180"); - divWP365 = document.getElementById("WPBtn365"); - divWPNone = document.getElementById("WPNone"); - divCGV.addEventListener("change", function (e) { - // on commence par tout (re)cacher : - divWP180.style.display = "none"; - divWP365.style.display = "none"; - divWPNone.style.display = "none"; - - if (divCGV.checked === true) { - if (div180.checked === true) divWP180.style.display = "block";else if (div365.checked === true) divWP365.style.display = "block";else { - divWPNone.style.display = "block"; - divCGV.checked = false; + CGV = document.getElementById("CGVOk"); + abo12 = document.getElementById("abo12"); + abo24 = document.getElementById("abo24"); + abo60 = document.getElementById("abo60"); + abo120 = document.getElementById("abo120"); + divWPBtns = document.getElementById("WPBtns"); + divWPBtns.style.display = "none"; + abo12.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo12"); + }); + abo24.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo24"); + }); + abo60.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo60"); + }); + abo120.addEventListener("change", function (e) { + Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["unCheckAllOthers"])("abo120"); + }); + CGV.addEventListener("change", function (e) { + if (CGV.checked === true) { + divWPBtns.style.display = "block"; + if (abo12.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn12");else if (abo24.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn24");else if (abo60.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn60");else if (abo120.checked === true) Object(_tools_webportage_js__WEBPACK_IMPORTED_MODULE_7__["showBtnPayment"])("btn120");else { + divWPBtns.style.display = "none"; + CGV.checked = false; } - } - }); // Liste des filleuils, si il y en a - revoir afficher un code parrainage en plus de l'email + } else divWPBtns.style.display = "none"; + }); // Liste des filleuils, si il y en a xhrGetGodchilds = new XMLHttpRequest(); xhrGetGodchilds.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + config.userRoutes + config.getGodChilds); @@ -1010,9 +1138,9 @@ var initialise = /*#__PURE__*/function () { if (this.status === 200) { var nbGodchilds = response.length; - if (nbGodchilds === 0) txtGodchilds = "Pas encore d'utilisateur associés à votre compte."; // revoir : utiliser le dictionnaire User + if (nbGodchilds === 0) txtGodchilds = "Pour l'instant, aucune personne ne s'est inscrite, en vous désignant comme \"parrain\"."; // revoir : utiliser le dictionnaire User else { - txtGodchilds = nbGodchilds + " utilisateur(s) inscrit(s) grâce à vous : "; + txtGodchilds = nbGodchilds + " utilisateur(s) inscrit(s) en vous désignant comme \"parrain\" :"; for (var i in response) { txtGodchilds += response[i].name + " (" + response[i].email + ") "; @@ -1020,7 +1148,7 @@ var initialise = /*#__PURE__*/function () { } } - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchilds, "p", txtGodchilds, "", ["information"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divGodchilds, "p", txtGodchilds, "", ["info"]); } }; @@ -1029,15 +1157,16 @@ var initialise = /*#__PURE__*/function () { } case 12: - _context.next = 17; + _context.next = 18; break; case 14: _context.prev = 14; _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", txt.serverError, "", ["error"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", txt.serverError, "", ["error"]); + console.error(_context.t0); - case 17: + case 18: case "end": return _context.stop(); } @@ -1143,7 +1272,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1314,7 +1443,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1402,13 +1532,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1457,7 +1587,48 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); }; +/***/ }), + +/***/ "./src/tools/webportage.js": +/*!*********************************!*\ + !*** ./src/tools/webportage.js ***! + \*********************************/ +/*! exports provided: unCheckAllOthers, showBtnPayment */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "unCheckAllOthers", function() { return unCheckAllOthers; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "showBtnPayment", function() { return showBtnPayment; }); +var checkBoxes = { + "CGV": document.getElementById("CGVOk"), + "abo12": document.getElementById("abo12"), + "abo24": document.getElementById("abo24"), + "abo60": document.getElementById("abo60"), + "abo120": document.getElementById("abo120") +}; +var divWPBtns = document.getElementById("WPBtns"); // Lorsque l'on sélectionne un montant, les autres options + les CGV sont désélectionnés + +var unCheckAllOthers = function unCheckAllOthers(choice) { + for (var id in checkBoxes) { + if (id !== choice) checkBoxes[id].checked = false; + divWPBtns.style.display = "none"; + } +}; +var btns = { + "btn12": document.getElementById("WPBtn12"), + "btn24": document.getElementById("WPBtn24"), + "btn60": document.getElementById("WPBtn60"), + "btn120": document.getElementById("WPBtn120") +}; // Affiche le bon bouton de paiement et cache les autres + +var showBtnPayment = function showBtnPayment(choice) { + for (var id in btns) { + if (id !== choice) btns[id].style.display = "none";else btns[id].style.display = "block"; + } +}; + /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FjY291bnRVc2VyLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5lZWROdW1iZXJPZkRheXMiLCJuZWVkSW50ZWdlck51bWJlck9mRGF5cyIsIm5lZWRNaW5OdW1iZXJPZkRheXMiLCJuZWVkTm90VG9vTG9uZ0RheXNMaXN0IiwibmVlZFZhbGlkRGF5c0xpc3QiLCJuZWVkVW5pcXVlRGF5c0xpc3QiLCJuZWVkS25vd0lmTm90aWNlT2siLCJ1bnN1YnNjcmlwdGlvbk9rIiwidW5zdWJzY3JpcHRpb25GYWlsIiwiYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVTdWJqZWN0IiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5SFRNTCIsIm5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIiLCJtYWlsRW5kRnJlZVRpbWVTdWJqZWN0IiwibWFpbEVuZEZyZWVUaW1lQm9keVR4dCIsIm1haWxFbmRGcmVlVGltZUJvZHlIVE1MIiwibWFpbEVuZEZyZWVUaW1lTWVzc2FnZSIsIm1haWxFeHBpcmF0aW9uU3ViamVjdCIsIm1haWxFeHBpcmF0aW9uQm9keVR4dCIsIm1haWxFeHBpcmF0aW9uQm9keUhUTUwiLCJtYWlsRXhwaXJhdGlvbk1lc3NhZ2UiLCJpbmZvc05iRGF5cyIsImluZm9zRXhwaXJhdGVkIiwiaW5mb3NOYkRheXNBZG1pbiIsImluZm9zRXhwaXJhdGVkQWRtaW4iLCJpc05vdFZhbGlkZWQiLCJpbmZvc1BheW1lbnRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsInR4dFN1YnNjcmlwdGlvbnMiLCJkaXZNYWluIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1lc3NhZ2UiLCJkaXZSZXNwb25zZSIsImRpdkdvZGNoaWxkcyIsImRpdlN1YnNjcmliZUludHJvIiwiZm9ybUFjY291bnQiLCJzaG93R0ZFbWFpbCIsInNob3dHRkNvZGUiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJnZXRDb25maWciLCJjb25maWciLCJhZGRFbGVtZW50IiwiY2hlY2tTZXNzaW9uIiwibWVzc2FnZSIsImNvbG9yIiwid2luZG93IiwibG9jYXRpb24iLCJpc0Nvbm5lY3RlZCIsInN0eWxlIiwiZGlzcGxheSIsImdldExvY2FseSIsInJlbW92ZUxvY2FseSIsInVzZXIiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImdldEluZm9zIiwieGhyR2V0SW5mb3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiVXNlciIsIlN1YnNjcmlwdGlvbiIsImRhdGEiLCJlbGVtZW50cyIsImNoZWNrZWQiLCJub3RpY2VPayIsImkiLCJyZWNlaXB0RGF5cyIsImlubmVySFRNTCIsImJlZ2luU3ViVFMiLCJjcmVhdGVkQXQiLCJnZXRUaW1lIiwibmJEYXlzT2siLCJudW1iZXJPZkRheXMiLCJyb3VuZCIsIm5vdyIsImFzc2lnbiIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInNlbmQiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJuZXdzbGV0dGVyT2siLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwieGhyVXNlclVwZGF0ZSIsImRlbGV0ZU9rIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwib3V0cHV0Iiwic3RyaW5naWZ5IiwiZGl2Q0dWIiwiZGl2MTgwIiwiZGl2MzY1IiwiZGl2V1AxODAiLCJkaXZXUDM2NSIsImRpdldQTm9uZSIsInhockdldEdvZGNoaWxkcyIsInR4dEdvZGNoaWxkcyIsIm5iR29kY2hpbGRzIiwic2F2ZUxvY2FseSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNvbnNvbGUiLCJsb2ciLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJteUZvcm0iLCJpZElucHV0IiwiaW5wdXRIVE1MIiwiYXR0cmlidXRlIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZXMiLCJlbnRyaWUiLCJlbXB5Rm9ybSIsInR5cGUiLCJlbXB5QW5kSGlkZUZvcm0iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInhociIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidXJsQWNjb3VudCIsImluZGV4T2YiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FB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MEYsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9hY2NvdW50VXNlci5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9hY2NvdW50VXNlci5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwiZGVmYXVsdFwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIndpa2lsZXJuaVwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsICAgIFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIi8vIGlkZW1cbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9zdWJzY3JpcHRpb25cIjogXCIuLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3N1YnNjcmlwdGlvbiRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IHF1J2FsbGV6LXZvdXMgYXBwcmVuZHJlIGF1am91cmQnaHVpID9cIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJDaGFxdWUgam91ciwgdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbmVlZE51bWJlck9mRGF5cyA6IFwiSWwgZmF1dCB1biBub21icmUgZGUgam91cnMgcG91ciBsJ2Fib25uZW1lbnQuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZiAhXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0ICh0cm9wIGxvbmd1ZSkuXCIsXG4gICAgbmVlZFZhbGlkRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdC4gQ2FyYWN0w6hyZSBub24gdmFsaWRlIDogXCIsXG4gICAgbmVlZFVuaXF1ZURheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIERvdWJsb24gOiBcIixcbiAgICBuZWVkS25vd0lmTm90aWNlT2sgOiBcIklsIG1hbnF1ZSBsJ2luZm9ybWF0aW9uIHN1ciBsJ2FjY2VwdGF0aW9uIG91IG5vbiBkZSByZWNldm9pciBkZXMgbm90aWZpY2F0aW9ucy5cIixcbiAgICB1bnN1YnNjcmlwdGlvbk9rIDogXCJWb3RyZSBkZW1hbmRlIGEgYmllbiDDqXTDqSBwcmlzZSBlbiBjb21wdGUuIFZvdXMgbmUgcmVjZXZyZXogcGx1cyBkZSBtZXNzYWdlcyB2ZW5hbnQgZHUgc2l0ZSwgc2F1ZiBwb3VyIHZvdXMgc2lnbmFsZXIgbGEgZmluIGRlIHZvdHJlIGFib25uZW1lbnQuPGJyPk4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy8jVVJMJz7DoCBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZGUgbm91dmVhdSBhdXRvcmlzZXIgY2VydGFpbnMgZW52b2lzLlwiLFxuICAgIHVuc3Vic2NyaXB0aW9uRmFpbCA6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgbGllbiBkZSBkw6lzYWJvbm5lbWVudCBuZSBmb25jdGlvbm5lIHBhcy48YnI+Vm91cyBwb3V2ZXogPGEgaHJlZj0nLyNVUkwnPmFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkw6lzYWN0aXZlciBsZXMgZW52b2lzIG1hbnVlbGxlbWVudC5cIixcbiAgICBhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQgOiBcIlRvdXMgbGVzIGFib25uw6lzIG9udCDDqXTDqSB0cmFpdMOpcyBwb3VyIGxlIG1vbWVudC5cIixcbiAgICBtYWlsTmV3UXVlc3Rpb25uYWlyZVN1YmplY3QgOiBcIlF1J2FsbGV6LXZvdXMgYXBwcmVuZHJlIGF1am91cmQnaHVpID9cIixcbiAgICBtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblVuIG5vdXZlYXUgcXVpeiB2aWVudCBkZSB2b3VzIMOqdHJlIHByb3Bvc8OpIDpcXG5RVUVTVElPTk5BSVJFX1VSTFxcblxcbkJvbm5lIGxlY3R1cmUgIVxcblxcblN0b3BwZXIgbGVzIGVudm9pcyA/XFxuVU5TVUJTQ1JJQkVfVVJMXCIsXG4gICAgbWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+TUFJTF9JTlRST0RVQ1RJT048dWw+PGxpPjxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIiB0aXRsZT1cXFwiTElOS19USVRMRVxcXCI+TGlyZSBsJ2FydGljbGUuPC9hPjwvbGk+PGxpPjxhIGhyZWY9XFxcIlFVRVNUSU9OTkFJUkVfVVJMXFxcIj5BbGxleiBhdSBxdWl6LjwvYT48L2xpPjwvdWw+PHA+PGEgaHJlZj1cXFwiVU5TVUJTQ1JJQkVfVVJMXFxcIj5TdG9wcGVyIGxlcyBlbnZvaXMuPC9hPjwvcD5cIixcbiAgICBub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIDogXCJBdWN1biBub3V2ZWF1IHF1ZXN0aW9ubmFpcmUgdHJvdXbDqSBwb3VyIHVuIGFib25uw6kgOiBcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVTdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCB2YSBleHBpcmVyXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuXFxuUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgZMOocyBhdWpvdXJkJ2h1aSA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVCb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuIFBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IGTDqHMgYXVqb3VyZCdodWkgZW4gPGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPmNsaXF1ZXogaWNpPC9hPiBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTWVzc2FnZTogXCIgcmVsYW5jZXMgZW52b3nDqWVzLlwiLFxuICAgIG1haWxFeHBpcmF0aW9uU3ViamVjdDogXCJWb3RyZSBhYm9ubmVtZW50IHZhIGJpZW50w7R0IGV4cGlyZXJcIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFeHBpcmF0aW9uQm9keUhUTUw6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgYWJvbm5lbWVudCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogbGUgcHJvbG9uZ2VyIGTDqHMgYXVqb3VyZCdodWkgZW4gPGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPmNsaXF1YW50IGljaTwvYT4uPC9wPlwiLFxuICAgIG1haWxFeHBpcmF0aW9uTWVzc2FnZTogXCJGSVJTVCBwcmVtacOocmVzIGV0IFNFQ09ORCBkZXV4acOobWVzIHJlbGFuY2VzIGVudm95w6llcyBwb3VyIGRlcyBhYm9ubmVtZW50cyBleHBpcmFudCBkJ2ljaSBwZXUuXCIsXG4gICAgaW5mb3NOYkRheXM6IFwiVm90cmUgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi48YnI+Vm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgcHJvbG9uZ2VyIHZvdHJlIGFib25uZW1lbnQgZW4gc3VpdmFudCBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NFeHBpcmF0ZWQ6IFwiVm90cmUgYWJvbm5lbWVudCBhIGV4cGlyw6ksIG1haXMgaWwgdm91cyByZXN0ZSBlbmNvcmUgcXVlbHF1ZXMgam91cnMgYXZhbnQgcXVlIHZvdHJlIGNvbXB0ZSBldCB2b3MgZG9ubsOpZXMgbmUgc29pZW50IGNvbXBsw6h0ZW1lbnQgc3VwcHJpbcOpZXMuPGJyPlBvdXIgY2UgZmFpcmUsIHN1aXZleiBzYW5zIHRhcmRlciBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NOYkRheXNBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi5cIixcbiAgICBpbmZvc0V4cGlyYXRlZEFkbWluOiBcIkNldCBhYm9ubmVtZW50IGEgZXhwaXLDqS5cIiwgIFxuICAgIGlzTm90VmFsaWRlZCA6IFwiQ2V0IHV0aWxpc2F0ZXVyIG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS48YnI+Vm91cyBwb3V2ZXogbGUgZmFpcmUgw6Agc2EgcGxhY2UgPGEgaHJlZj0nI3ZhbGlkYXRpb25Payc+ZW4gY29jaGFudCBsYSBjYXNlIGluZGlxdcOpZTwvYT4gZXQgZW5yZWdpc3RyYW50LlwiLFxuICAgIGluZm9zUGF5bWVudHNBZG1pbiA6IFwiREFURV9QQVlNRU5UIDogcGFpZW1lbnQgZGUgQU1PVU5UIOKCrCBhdSBub20gZGUgQ0xJRU5UX05BTUUuXCIsXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5vdEZvdW5kOiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwYXIgdW4gYXV0cmUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllci4gVm91cyBwb3V2ZXogbGUgcmVjb3BpZXIgb8O5IHZvdXMgbGUgc291aGFpdGVyLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJWb3VzIGRldmV6IGFjY2VwdGVyIGxlcyBDR1UgcG91ciBwb3V2b2lyIGNyw6llciB2b3RyZSBjb21wdGUuIFwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHZhbGlkZSB0cm91dsOpIHBvdXIgY2UgY29kZSBwYXJyYWluLlwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIHBhcnJhaW4gYSBiaWVuIMOpdMOpIHRyb3V2w6kgIVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjRIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBjb21wdGVcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvdHJlIGNvbXB0ZSwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGguPC9wPjxwPjxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5WYWxpZGVyLjwvYT48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuVm90cmUgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqShlKSBhdSBzaXRlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6koZSkgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJUcm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiTGUgbW90IGRlIHBhc3NlIG4nZXN0IHBhcyBsZSBib24uXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDogTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuZSBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgPGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPmNsaXF1ZXogaWNpPC9hPiBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBuJ2VzdCBwbHVzIHZhbGFibGUuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWlscyA6IFwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCIuLi5cIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5obXRcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxufTsiLCIvLyAtLSBHRVNUSU9OIERFUyBGT1JNVUxBSVJFUyBQRVJNRVRUQU5UIEFVWCBVVElMSVNBVEVVUlMgREUgTUVUVFJFIMOAIEpPVVIgTEVVUlMgSU5GT1JNQVRJT05TICsgTEVVUiBBQk9OTkVNRU5UXG5cbi8vLyBWw6lyaWZpZXIgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2VyIHZlcnMgbGUgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uIHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMuXG4vLy8gU2kgYydlc3Qgb2ssIG9uIHLDqWN1cMOocmUgbGVzIGluZm9zIGRlIHNvbiBjb21wdGUgZXQgc29uIGFib25uZW1lbnQgZXQgbGVzIGFmZmljaGUgZGFucyBsZSBmb3JtdWxhaXJlLlxuLy8vIFVuZSBpbmZvcm1hdGlvbiBlc3QgYWZmaWNow6llIGNvbmNlcm5hbnQgbGEgcG9zc2liaWxpdMOpIGRlIHBhcnJhaW5hZ2UgZXQgbGVzIGxpc3RlcyBsZXMgZmlsbGV1aWxzIGV4aXN0YW50cy5cbi8vLyBVbiBtZW51IHBlcm1ldCDDoCBsJ3V0aWxpc2F0ZXVyIGQnYWNjw6lkZXIgw6AgbGEgbW9kaWZpY2F0aW9uIGRlIHNlcyBpbmZvcywgZXRjLlxuLy8vIERlcyBib3V0b25zIGRlIHBhaWVtZW50IHNvbnQgYXVzc2kgYWZmaWNow6lzIHN1aXZhbnQgbGUgY2hvaXggZGUgbCd1dGlsaXNhdGV1ciBwb3VyIGx1aSBwZXJtZXR0cmUgZGUgcHJvbG9uZ2VyIHNvbiBhYm9ubmVtZW50LlxuLy8vIFVuIG1lc3NhZ2UgdmVuYW50IGQndW5lIGF1dHJlIHBhZ2UgcGV1dCBhdXNzaSDDqnRyZSDDoCBhZmZpY2hlciBsb3JzIGR1IHByZW1pZXIgY2hhcmdlbWVudC5cblxuLy8vIEFqb3V0IHRlc3QgZW1haWwgZW4gZG91YmxvbiBhdmFudCBlbnZvaSA/XG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6ICEhIHJldm9pciBxdWFuZCBsZSByZXN0IHNlcmEgZmluaSBwb3VyIHbDqXJpZmllciBzaSB0b3V0IGVzdCB1dGlsZVxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiwgdXBkYXRlQWNjb3VudExpbmsgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5LCByZXBsYWNlQWxsIH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5jb25zdCB0eHRTdWJzY3JpcHRpb25zID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9zdWJzY3JpcHRpb25cIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZGl2R29kY2hpbGRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb2RjaGlsZHNcIik7XG5jb25zdCBkaXZTdWJzY3JpYmVJbnRybyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaWJlSW50cm9cIik7XG5jb25zdCBmb3JtQWNjb3VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudFVwZGF0ZVwiKTtcbmNvbnN0IG5ld1Bhc3N3b3JkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXdQYXNzd29yZFwiKTtcbmNvbnN0IHNob3dHRkVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb2RmYXRoZXJFbWFpbFwiKTtcbmNvbnN0IHNob3dHRkNvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvZGZhdGhlckNvZGVcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHsgICAgICAgIFxuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRDb25maWcoKTtcbiAgICAgICAgaWYoIWNvbmZpZylcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIG4nZXN0IHBhcyBjb25uZWN0w6kgYXZlYyBsZSBib24gc3RhdHV0LCBwYXMgbGEgcGVpbmUgZCdhbGxlciArIGxvaW4gOlxuICAgICAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcInVzZXJcIl0sIFwiL1wiK2NvbmZpZ0Zyb250RW5kLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLm5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXZNYWluLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5tZXNzYWdlLCBcIlwiLCBbZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5jb2xvcl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdGcm9udEVuZCk7XG4gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzZSBsZSBmb3JtdWxhaXJlIHBlcm1ldHRhbnQgZGUgbWV0dHJlIMOgIGpvdXIgbGVzIGluZm9zIDpcbiAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnLCBmb3JtQWNjb3VudCk7XG4gICAgICAgICAgICAgICAgLy8gQ2VydGFpbnMgbmF2aWdhdGV1cnMgb250IHRlbmRhbmNlIMOgIHJlbXBsaXIgdG91dCBzZXVsIGxlcyBjaGFtcHMgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICBuZXdQYXNzd29yZC52YWx1ZT1cIlwiO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBjb25udWVzIGF1IHByZW1pZXIgYWZmaWNoYWdlIHB1aXMgYXByw6hzIGVudm9pIG1pc2Ugw6Agam91clxuICAgICAgICAgICAgICAgIGNvbnN0IGdldEluZm9zID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEluZm9zID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5nZXRVc2VySW5mb3MrdXNlci5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5Vc2VyICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS5TdWJzY3JpcHRpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLlVzZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1BY2NvdW50LmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlVzZXJbZGF0YV0hPT10cnVlICYmIHJlc3BvbnNlLlVzZXJbZGF0YV0hPT1mYWxzZSkvLyBib29sw6llbiA9IGNhc2Ugw6AgY29jaGVyICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UuVXNlcltkYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5Vc2VyW2RhdGFdPT10cnVlKSAvLyBzaSBmYWxzZSwgb24gbmUgZmFpdCByaWVuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5lbGVtZW50c1tcIlwiK2RhdGFdLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5mb3MgZGUgbCdhYm9ubmVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5ub3RpY2VPaz09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1BY2NvdW50LmVsZW1lbnRzW1wibm90aWNlT2tcIl0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gam91cnMgZGUgcsOpY2VwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UuU3Vic2NyaXB0aW9uLnJlY2VpcHREYXlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbXCJkXCIrcmVzcG9uc2UuU3Vic2NyaXB0aW9uLnJlY2VpcHREYXlzW2ldXS5jaGVja2VkPVwiY2hlY2tlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93R0ZFbWFpbC5pbm5lckhUTUw9cmVzcG9uc2UuVXNlci5lbWFpbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0dGQ29kZS5pbm5lckhUTUw9Y29uZmlnLmJlZ2luQ29kZUdvZGZhdGhlcityZXNwb25zZS5Vc2VyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWdpblN1YlRTPW5ldyBEYXRlKHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYkRheXNPaz1yZXNwb25zZS5TdWJzY3JpcHRpb24ubnVtYmVyT2ZEYXlzLU1hdGgucm91bmQoKERhdGUubm93KCktYmVnaW5TdWJUUykvMTAwMC8zNjAwLzI0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuYkRheXNPaz4wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgdHh0U3Vic2NyaXB0aW9ucy5pbmZvc05iRGF5cy5yZXBsYWNlKFwiTkJfREFZU1wiLCBuYkRheXNPayksIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgdHh0U3Vic2NyaXB0aW9ucy5pbmZvc0V4cGlyYXRlZC5yZXBsYWNlKFwiTkJfREFZU1wiLCBuYkRheXNPayksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNzdWJzY3JpYmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Muc2VuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBSZW1vbnRlIGxlcyBpbmZvcyBkw6lqw6AgZW5yZWdpc3Ryw6llcyA6XG4gICAgICAgICAgICAgICAgZ2V0SW5mb3MoKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGQndW5lIG1pc2Ugw6Agam91ciBkZXMgaW5mb3NcbiAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1BY2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVjb21wb3NpdGlvbiBkZXMgam91cnMgdmFsYWJsZXMgcG91ciBsJ2Fib25uZW1lbnQgOlxuICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGk9MTsgaTw9NzsgaSsrKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhc1tcImRcIitpXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cys9XCJcIitpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLm5vdGljZU9rPT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMubm90aWNlT2s9XCJmYWxzZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcy5uZXdzbGV0dGVyT2s9PT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5uZXdzbGV0dGVyT2s9XCJmYWxzZVwiO1xuICAgICAgICAgICAgICAgICAgICBkYXRhcy50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZShjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJVc2VyVXBkYXRlID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytcIi9cIit1c2VyLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcudXBkYXRlVXNlckluZm9zK3VzZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhbnMgdG91cyBsZXMgY2FzLCBqZSBtZXRzIMOgIGpvdXIgbGUgY29udGVudSBkdSBmb3JtdWxhaXJlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJbmZvcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5vdXRwdXQ9XCJodG1sXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gb24gcGFzc2Ugw6AgbGEgY2Fpc3NlID9cbiAgICAgICAgICAgICAgICBjb25zdCBkaXZDR1Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDR1ZPa1wiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYxODA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIxODBPa1wiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXYzNjU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIzNjVPa1wiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXZXUDE4MD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuMTgwXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRpdldQMzY1PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG4zNjVcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2V1BOb25lPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BOb25lXCIpO1xuICAgICAgICAgICAgICAgIGRpdkNHVi5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbiBjb21tZW5jZSBwYXIgdG91dCAocmUpY2FjaGVyIDpcbiAgICAgICAgICAgICAgICAgICAgZGl2V1AxODAuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgZGl2V1AzNjUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgZGl2V1BOb25lLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRpdkNHVi5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGl2MTgwLmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdldQMTgwLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihkaXYzNjUuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2V1AzNjUuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2V1BOb25lLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdkNHVi5jaGVja2VkPWZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBMaXN0ZSBkZXMgZmlsbGV1aWxzLCBzaSBpbCB5IGVuIGEgLSByZXZvaXIgYWZmaWNoZXIgdW4gY29kZSBwYXJyYWluYWdlIGVuIHBsdXMgZGUgbCdlbWFpbFxuICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEdvZGNoaWxkcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuZ2V0R29kQ2hpbGRzKTtcbiAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCksIHR4dEdvZGNoaWxkcz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmJHb2RjaGlsZHM9cmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5iR29kY2hpbGRzPT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzPVwiUGFzIGVuY29yZSBkJ3V0aWxpc2F0ZXVyIGFzc29jacOpcyDDoCB2b3RyZSBjb21wdGUuXCI7Ly8gcmV2b2lyIDogdXRpbGlzZXIgbGUgZGljdGlvbm5haXJlIFVzZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHM9bmJHb2RjaGlsZHMrXCIgdXRpbGlzYXRldXIocykgaW5zY3JpdChzKSBncsOiY2Ugw6Agdm91cyA6IFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHMrPXJlc3BvbnNlW2ldLm5hbWUrXCIgKFwiK3Jlc3BvbnNlW2ldLmVtYWlsK1wiKSBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkdvZGNoaWxkcywgXCJwXCIsIHR4dEdvZGNoaWxkcywgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTsgXG4gICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2FjY291bnRVc2VyLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvd2VicG9ydGFnZS5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicmVnZW5lcmF0ZUhUTUwiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJzdGF0c0FkbWluIiwibmVlZE51bWJlck9mRGF5cyIsIm5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIiwibmVlZE1pbk51bWJlck9mRGF5cyIsIm5lZWROb3RUb29Mb25nRGF5c0xpc3QiLCJuZWVkVmFsaWREYXlzTGlzdCIsIm5lZWRVbmlxdWVEYXlzTGlzdCIsIm5lZWRLbm93SWZOb3RpY2VPayIsInVuc3Vic2NyaXB0aW9uT2siLCJ1bnN1YnNjcmlwdGlvbkZhaWwiLCJhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQiLCJtYWlsU3RvcE1haWxMaW5rVHh0IiwibWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0Iiwibm9OZXdRdWVzdGlvbm5haXJlRm9yVXNlciIsIm1haWxFbmRGcmVlVGltZVN1YmplY3QiLCJtYWlsRW5kRnJlZVRpbWVMaW5rVHh0IiwibWFpbEVuZEZyZWVUaW1lQm9keVR4dCIsIm1haWxFbmRGcmVlVGltZUJvZHlIVE1MIiwibWFpbEVuZEZyZWVUaW1lTWVzc2FnZSIsIm1haWxFeHBpcmF0aW9uU3ViamVjdCIsIm1haWxFeHBpcmF0aW9uTGlua1R4dCIsIm1haWxFeHBpcmF0aW9uQm9keVR4dCIsIm1haWxFeHBpcmF0aW9uQm9keUhUTUwiLCJtYWlsRXhwaXJhdGlvbk1lc3NhZ2UiLCJpbmZvc05iRGF5cyIsImluZm9zRXhwaXJhdGVkIiwiaW5mb3NOYkRheXNBZG1pbiIsImluZm9zRXhwaXJhdGVkQWRtaW4iLCJpc05vdFZhbGlkZWQiLCJpbmZvc1BheW1lbnRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJhbHJlYWR5Q29ubmVjdGVkIiwibmVlZEJlQ29ubmVjdGVkIiwiY29ubmVjdGlvbk9rIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwidG9vTWFueUxvZ2luRmFpbHMiLCJiYWRQYXNzd29yZCIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwid2VsY29tZU1lc3NhZ2UiLCJieWVieWVNZXNzYWdlIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJkZWxldGVMaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwiYWJvdXRQYWdlIiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwibmV3c0xpc3RUaXRsZSIsIm1haWxSZWNpcGllbnRUeHQiLCJjb25maWdGcm9udEVuZCIsInR4dCIsInR4dFVzZXJzIiwidHh0U3Vic2NyaXB0aW9ucyIsImRpdkNyYXNoIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1haW4iLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJkaXZHb2RjaGlsZHMiLCJkaXZTdWJzY3JpYmVJbnRybyIsImZvcm1BY2NvdW50Iiwic2hvd0dGRW1haWwiLCJzaG93R0ZDb2RlIiwiaGVsbG9EZXYiLCJpbml0aWFsaXNlIiwiZ2V0Q29uZmlnIiwiY29uZmlnIiwiYWRkRWxlbWVudCIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwiaXNDb25uZWN0ZWQiLCJzdHlsZSIsImRpc3BsYXkiLCJnZXRMb2NhbHkiLCJyZW1vdmVMb2NhbHkiLCJ1c2VyIiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJzZXRBdHRyaWJ1dGVzVG9JbnB1dHMiLCJnZXRJbmZvcyIsInhockdldEluZm9zIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIlVzZXIiLCJTdWJzY3JpcHRpb24iLCJkYXRhIiwiZWxlbWVudHMiLCJjaGVja2VkIiwibm90aWNlT2siLCJpIiwicmVjZWlwdERheXMiLCJpbm5lckhUTUwiLCJiZWdpblN1YlRTIiwiY3JlYXRlZEF0IiwiZ2V0VGltZSIsIm5iRGF5c09rIiwibnVtYmVyT2ZEYXlzIiwicm91bmQiLCJub3ciLCJhc3NpZ24iLCJzZXRSZXF1ZXN0SGVhZGVyIiwidG9rZW4iLCJzZW5kIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImRhdGFzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwibmV3c2xldHRlck9rIiwidGltZURpZmZlcmVuY2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInhoclVzZXJVcGRhdGUiLCJkZWxldGVPayIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsIm91dHB1dCIsInN0cmluZ2lmeSIsIkNHViIsImFibzEyIiwiYWJvMjQiLCJhYm82MCIsImFibzEyMCIsImRpdldQQnRucyIsInVuQ2hlY2tBbGxPdGhlcnMiLCJzaG93QnRuUGF5bWVudCIsInhockdldEdvZGNoaWxkcyIsInR4dEdvZGNoaWxkcyIsIm5iR29kY2hpbGRzIiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsImVtcHlBbmRIaWRlRm9ybSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFBhc3N3b3JkIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsImNoZWNrQm94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dW50VXNlci5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9hY2NvdW50VXNlci5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIsLy8gaWRlbVxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMvLyBsaW1pdGUgbGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmRcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9zdWJzY3JpcHRpb25cIjogXCIuLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3N1YnNjcmlwdGlvbiRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IFdpa2lww6lkaWEgZW4gcXVlc3Rpb25zXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHJlY2V2ZXogY2hhcXVlIGpvdXIgZGUgbm91dmVhdXggcXVpenMgcG91ciB0ZXN0ZXIgdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMuXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkTnVtYmVyT2ZEYXlzIDogXCJJbCBmYXV0IHVuIG5vbWJyZSBkZSBqb3VycyBwb3VyIGwnYWJvbm5lbWVudC5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIuXCIsXG4gICAgbmVlZE1pbk51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmICFcIixcbiAgICBuZWVkTm90VG9vTG9uZ0RheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQgKHRyb3AgbG9uZ3VlKS5cIixcbiAgICBuZWVkVmFsaWREYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBDYXJhY3TDqHJlIG5vbiB2YWxpZGUgOiBcIixcbiAgICBuZWVkVW5pcXVlRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdC4gRG91YmxvbiA6IFwiLFxuICAgIG5lZWRLbm93SWZOb3RpY2VPayA6IFwiSWwgbWFucXVlIGwnaW5mb3JtYXRpb24gc3VyIGwnYWNjZXB0YXRpb24gb3Ugbm9uIGRlIHJlY2V2b2lyIGRlcyBub3RpZmljYXRpb25zLlwiLFxuICAgIHVuc3Vic2NyaXB0aW9uT2sgOiBcIlZvdHJlIGRlbWFuZGUgYSBiaWVuIMOpdMOpIHByaXNlIGVuIGNvbXB0ZS4gVm91cyBuZSByZWNldnJleiBwbHVzIGRlIG1lc3NhZ2VzIHZlbmFudCBkdSBzaXRlLCBzYXVmIHBvdXIgdm91cyBzaWduYWxlciBsYSBmaW4gZGUgdm90cmUgYWJvbm5lbWVudC48YnI+Tidow6lzaXRleiBwYXMgPGEgaHJlZj0nLyNVUkwnPsOgIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkZSBub3V2ZWF1IGF1dG9yaXNlciBjZXJ0YWlucyBlbnZvaXMuXCIsXG4gICAgdW5zdWJzY3JpcHRpb25GYWlsIDogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBsaWVuIGRlIGTDqXNhYm9ubmVtZW50IG5lIGZvbmN0aW9ubmUgcGFzLjxicj5Wb3VzIHBvdXZleiA8YSBocmVmPScvI1VSTCc+YWNjw6lkZXIgw6Agdm90cmUgY29tcHRlPC9hPiBwb3VyIGTDqXNhY3RpdmVyIGxlcyBlbnZvaXMgbWFudWVsbGVtZW50LlwiLFxuICAgIGFsbFN1YnNjcmlwdGlvblByb2Nlc3NlZCA6IFwiVG91cyBsZXMgYWJvbm7DqXMgb250IMOpdMOpIHRyYWl0w6lzIHBvdXIgbGUgbW9tZW50LlwiLFxuICAgIG1haWxTdG9wTWFpbExpbmtUeHQgOiBcIlN0b3BwZXIgbGVzIGVudm9pcy5cIixcbiAgICBtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblVuIG5vdXZlYXUgcXVpeiB2aWVudCBkZSB2b3VzIMOqdHJlIHByb3Bvc8OpIDpcXG5cXG5RVUVTVElPTk5BSVJFX1VSTFxcblxcbkJvbm5lIGxlY3R1cmUgIVxcblxcblN0b3BwZXIgbGVzIGVudm9pcyA/XFxuVU5TVUJTQ1JJQkVfVVJMXCIsXG4gICAgbm9OZXdRdWVzdGlvbm5haXJlRm9yVXNlciA6IFwiQXVjdW4gbm91dmVhdSBxdWVzdGlvbm5haXJlIHRyb3V2w6kgcG91ciB1biBhYm9ubsOpIDogXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lU3ViamVjdDogXCJWb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgdmEgZXhwaXJlclwiLFxuICAgIG1haWxFbmRGcmVlVGltZUxpbmtUeHQgOiBcIk0nYWJvbm5lci5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVCb2R5VHh0OiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBzYW5zIGF0dGVuZHJlIHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy48YnI+PGJyPlBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IHNhbnMgdGFyZGVyIGVuIGNsaXF1YW50IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMuPC9wPlwiLFxuICAgIG1haWxFbmRGcmVlVGltZU1lc3NhZ2U6IFwiIHJlbGFuY2VzIGVudm95w6llcy5cIixcblxuICAgIG1haWxFeHBpcmF0aW9uU3ViamVjdDogXCJWb3RyZSBhYm9ubmVtZW50IHZhIGJpZW50w7R0IGV4cGlyZXJcIixcbiAgICBtYWlsRXhwaXJhdGlvbkxpbmtUeHQgOiBcIlByb2xvbmdlciBtb24gYWJvbm5lbWVudC5cIiwgICAgXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5VHh0OiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdHJlIGFib25uZW1lbnQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuXFxuXFxuUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogbGUgcHJvbG9uZ2VyIGTDqHMgYXVqb3VyZCdodWkgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgU0lURV9OQU1FLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSBlbiBjbGlxdWFudCBzdXIgbGUgbGllbiBjaS1kZXNzb3VzLjwvcD5cIixcblxuICAgIG1haWxFeHBpcmF0aW9uTWVzc2FnZTogXCJGSVJTVCBwcmVtacOocmVzIGV0IFNFQ09ORCBkZXV4acOobWVzIHJlbGFuY2VzIGVudm95w6llcyBwb3VyIGRlcyBhYm9ubmVtZW50cyBleHBpcmFudCBkJ2ljaSBwZXUuXCIsXG4gICAgaW5mb3NOYkRheXM6IFwiVm90cmUgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi48YnI+Vm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgcHJvbG9uZ2VyIHZvdHJlIGFib25uZW1lbnQgZW4gc3VpdmFudCBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NFeHBpcmF0ZWQ6IFwiVm90cmUgYWJvbm5lbWVudCBhIGV4cGlyw6ksIG1haXMgaWwgdm91cyByZXN0ZSBlbmNvcmUgcXVlbHF1ZXMgam91cnMgYXZhbnQgcXVlIHZvdHJlIGNvbXB0ZSBldCB2b3MgZG9ubsOpZXMgbmUgc29pZW50IGNvbXBsw6h0ZW1lbnQgc3VwcHJpbcOpZXMuPGJyPlBvdXIgY2UgZmFpcmUsIHN1aXZleiBzYW5zIHRhcmRlciBsZXMgaW5kaWNhdGlvbnMgY2ktZGVzc291cyA6XCIsXG4gICAgaW5mb3NOYkRheXNBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBlc3QgZW5jb3JlIHZhbGFibGUgPGI+cGVuZGFudCBOQl9EQVlTIGpvdXJzPC9iPi5cIixcbiAgICBpbmZvc0V4cGlyYXRlZEFkbWluOiBcIkNldCBhYm9ubmVtZW50IGEgZXhwaXLDqS5cIiwgIFxuICAgIGlzTm90VmFsaWRlZCA6IFwiQ2V0IHV0aWxpc2F0ZXVyIG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS48YnI+Vm91cyBwb3V2ZXogbGUgZmFpcmUgw6Agc2EgcGxhY2UgPGEgaHJlZj0nI3ZhbGlkYXRpb25Payc+ZW4gY29jaGFudCBsYSBjYXNlIGluZGlxdcOpZTwvYT4gZXQgZW5yZWdpc3RyYW50LlwiLFxuICAgIGluZm9zUGF5bWVudHNBZG1pbiA6IFwiREFURV9QQVlNRU5UIDogcGFpZW1lbnQgZGUgQU1PVU5UIOKCrCBhdSBub20gZGUgQ0xJRU5UX05BTUUuXCIsXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5vdEZvdW5kOiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwYXIgdW4gYXV0cmUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgdm90cmUgcHJlc3NlLXBhcGllci4gVm91cyBwb3V2ZXogbGUgcmVjb3BpZXIgKEN0cmwrVikgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJWb3VzIGRldmV6IGFjY2VwdGVyIGxlcyBDR1UgcG91ciBwb3V2b2lyIGNyw6llciB2b3RyZSBjb21wdGUuIFwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSBwYXJyYWluLlwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIHBhcnJhaW4gYSBiaWVuIMOpdMOpIHRyb3V2w6kgIVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjRIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGR1IHNpdGUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqShlKSBhdSBzaXRlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6koZSkgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJUcm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiTGUgbW90IGRlIHBhc3NlIG4nZXN0IHBhcyBsZSBib24uXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBuJ2VzdCBwbHVzIHZhbGFibGUuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWlscyA6IFwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCIuLi5cIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pZXJzIHF1aXpzXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJCbG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDksXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwibW9uLWNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSA8c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKik8L3NwYW4+LCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L3NwYW4+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgIVwiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6IFwiVGVzdGVyIFdpa2lMZXJuaSBncmF0dWl0ZW1lbnQuXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+U3VpdmFudCBsZXMgcXVlc3Rpb25zLCB1bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlcyBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIDxiPkMnZXN0IHRvdWpvdXJzIGxlIGNvbnRlbnUgZGUgbCdhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pIGNvbmNlcm5hbnQgbGVzIFxcXCJib25uZXNcXFwiIHLDqXBvbnNlczwvYj4uIE1haXMgbGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBuJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMsIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudDwvYj4uPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLiBDZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgPGI+dGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpejwvYj4gcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBHcsOiY2Ugw6AgY2UgY29tcHRlLCB2b3VzIHBvdXJyZXogYXVzc2kgPGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlYXV4IHF1aXpzPC9iPiBwb3VyIGNvbnRpbnVlciDDoCBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIi48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiTGVzIGRlcm5pw6hyZXMgZ3JhaW5lcyBkZSBzYXZvaXJcIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlc1wiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbn07IiwiLy8gLS0gR0VTVElPTiBERVMgRk9STVVMQUlSRVMgUEVSTUVUVEFOVCBBVVggVVRJTElTQVRFVVJTIERFIE1FVFRSRSDDgCBKT1VSIExFVVJTIElORk9STUFUSU9OUyArIExFVVIgQUJPTk5FTUVOVFxuXG4vLy8gVsOpcmlmaWVyIHF1ZSBsJ3V0aWxpc2F0ZXVyIGVzdCBiaWVuIGNvbm5lY3TDqSwgYSBsZSBib24gc3RhdHV0IGV0IGxlIHJlZGlyaWdlciB2ZXJzIGxlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLlxuLy8vIFNpIGMnZXN0IG9rLCBvbiByw6ljdXDDqHJlIGxlcyBpbmZvcyBkZSBzb24gY29tcHRlIGV0IHNvbiBhYm9ubmVtZW50IGV0IGxlcyBhZmZpY2hlIGRhbnMgbGUgZm9ybXVsYWlyZS5cbi8vLyBVbmUgaW5mb3JtYXRpb24gZXN0IGFmZmljaMOpZSBjb25jZXJuYW50IGxhIHBvc3NpYmlsaXTDqSBkZSBwYXJyYWluYWdlIGV0IGxlcyBsaXN0ZXMgbGVzIGZpbGxldWlscyBleGlzdGFudHMuXG4vLy8gVW4gbWVudSBwZXJtZXQgw6AgbCd1dGlsaXNhdGV1ciBkJ2FjY8OpZGVyIMOgIGxhIG1vZGlmaWNhdGlvbiBkZSBzZXMgaW5mb3MsIGV0Yy5cbi8vLyBEZXMgYm91dG9ucyBkZSBwYWllbWVudCBzb250IGF1c3NpIGFmZmljaMOpcyBzdWl2YW50IGxlIGNob2l4IGRlIGwndXRpbGlzYXRldXIgcG91ciBsdWkgcGVybWV0dHJlIGRlIHByb2xvbmdlciBzb24gYWJvbm5lbWVudC5cbi8vLyBVbiBtZXNzYWdlIHZlbmFudCBkJ3VuZSBhdXRyZSBwYWdlIHBldXQgYXVzc2kgw6p0cmUgw6AgYWZmaWNoZXIgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQuXG5cbi8vLyBBam91dCB0ZXN0IGVtYWlsIGVuIGRvdWJsb24gYXZhbnQgZW52b2kgP1xuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gRm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOiAhISByZXZvaXIgcXVhbmQgbGUgcmVzdCBzZXJhIGZpbmkgcG91ciB2w6lyaWZpZXIgc2kgdG91dCBlc3QgdXRpbGVcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIGdldENvbmZpZywgZ2V0VGltZURpZmZlcmVuY2UgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBTcMOpY2lmaXF1ZSBXZWJQb3J0YWdlIHBvdXIgcGFpZW1lbnRzOlxuaW1wb3J0IHsgc2hvd0J0blBheW1lbnQsIHVuQ2hlY2tBbGxPdGhlcnMgfSBmcm9tIFwiLi90b29scy93ZWJwb3J0YWdlLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5jb25zdCB0eHRTdWJzY3JpcHRpb25zID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9zdWJzY3JpcHRpb25cIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBkaXZDcmFzaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY3Jhc2hcIik7XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZGl2R29kY2hpbGRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb2RjaGlsZHNcIik7XG5jb25zdCBkaXZTdWJzY3JpYmVJbnRybyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaWJlSW50cm9cIik7XG5jb25zdCBmb3JtQWNjb3VudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudFVwZGF0ZVwiKTtcbmNvbnN0IG5ld1Bhc3N3b3JkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXdQYXNzd29yZFwiKTtcbmNvbnN0IHNob3dHRkVtYWlsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJnb2RmYXRoZXJFbWFpbFwiKTtcbmNvbnN0IHNob3dHRkNvZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdvZGZhdGhlckNvZGVcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHsgICAgICAgIFxuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRDb25maWcoKTtcbiAgICAgICAgaWYoIWNvbmZpZylcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2Q3Jhc2gsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIG4nZXN0IHBhcyBjb25uZWN0w6kgYXZlYyBsZSBib24gc3RhdHV0LCBwYXMgbGEgcGVpbmUgZCdhbGxlciArIGxvaW4gOlxuICAgICAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcInVzZXJcIl0sIFwiL1wiK2NvbmZpZ0Zyb250RW5kLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLm5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBkaXZNYWluLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5tZXNzYWdlLCBcIlwiLCBbZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5jb2xvcl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdGcm9udEVuZCk7XG4gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzZSBsZSBmb3JtdWxhaXJlIHBlcm1ldHRhbnQgZGUgbWV0dHJlIMOgIGpvdXIgbGVzIGluZm9zIDpcbiAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnLCBmb3JtQWNjb3VudCk7XG4gICAgICAgICAgICAgICAgLy8gQ2VydGFpbnMgbmF2aWdhdGV1cnMgb250IHRlbmRhbmNlIMOgIHJlbXBsaXIgdG91dCBzZXVsIGxlcyBjaGFtcHMgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICBuZXdQYXNzd29yZC52YWx1ZT1cIlwiO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBjb25udWVzIGF1IHByZW1pZXIgYWZmaWNoYWdlIHB1aXMgYXByw6hzIGVudm9pIG1pc2Ugw6Agam91clxuICAgICAgICAgICAgICAgIGNvbnN0IGdldEluZm9zID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEluZm9zID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5nZXRVc2VySW5mb3MrdXNlci5pZCk7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5Vc2VyICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS5TdWJzY3JpcHRpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLlVzZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1BY2NvdW50LmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlVzZXJbZGF0YV0hPT10cnVlICYmIHJlc3BvbnNlLlVzZXJbZGF0YV0hPT1mYWxzZSkvLyBib29sw6llbiA9IGNhc2Ugw6AgY29jaGVyICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UuVXNlcltkYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5Vc2VyW2RhdGFdPT10cnVlKSAvLyBzaSBmYWxzZSwgb24gbmUgZmFpdCByaWVuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5lbGVtZW50c1tcIlwiK2RhdGFdLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5mb3MgZGUgbCdhYm9ubmVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5ub3RpY2VPaz09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1BY2NvdW50LmVsZW1lbnRzW1wibm90aWNlT2tcIl0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gam91cnMgZGUgcsOpY2VwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UuU3Vic2NyaXB0aW9uLnJlY2VpcHREYXlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUFjY291bnQuZWxlbWVudHNbXCJkXCIrcmVzcG9uc2UuU3Vic2NyaXB0aW9uLnJlY2VpcHREYXlzW2ldXS5jaGVja2VkPVwiY2hlY2tlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93R0ZFbWFpbC5pbm5lckhUTUw9cmVzcG9uc2UuVXNlci5lbWFpbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0dGQ29kZS5pbm5lckhUTUw9Y29uZmlnLmJlZ2luQ29kZUdvZGZhdGhlcityZXNwb25zZS5Vc2VyLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWdpblN1YlRTPW5ldyBEYXRlKHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuYkRheXNPaz1yZXNwb25zZS5TdWJzY3JpcHRpb24ubnVtYmVyT2ZEYXlzLU1hdGgucm91bmQoKERhdGUubm93KCktYmVnaW5TdWJUUykvMTAwMC8zNjAwLzI0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuYkRheXNPaz4wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgdHh0U3Vic2NyaXB0aW9ucy5pbmZvc05iRGF5cy5yZXBsYWNlKFwiTkJfREFZU1wiLCBuYkRheXNPayksIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgdHh0U3Vic2NyaXB0aW9ucy5pbmZvc0V4cGlyYXRlZC5yZXBsYWNlKFwiTkJfREFZU1wiLCBuYkRheXNPayksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNzdWJzY3JpYmVcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Muc2VuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBSZW1vbnRlIGxlcyBpbmZvcyBkw6lqw6AgZW5yZWdpc3Ryw6llcyA6XG4gICAgICAgICAgICAgICAgZ2V0SW5mb3MoKTtcbiAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGQndW5lIG1pc2Ugw6Agam91ciBkZXMgaW5mb3NcbiAgICAgICAgICAgICAgICBmb3JtQWNjb3VudC5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1BY2NvdW50KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVjb21wb3NpdGlvbiBkZXMgam91cnMgdmFsYWJsZXMgcG91ciBsJ2Fib25uZW1lbnQgOlxuICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGk9MTsgaTw9NzsgaSsrKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhc1tcImRcIitpXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5yZWNlaXB0RGF5cys9XCJcIitpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLm5vdGljZU9rPT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMubm90aWNlT2s9XCJmYWxzZVwiO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcy5uZXdzbGV0dGVyT2s9PT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5uZXdzbGV0dGVyT2s9XCJmYWxzZVwiO1xuICAgICAgICAgICAgICAgICAgICBkYXRhcy50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZShjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJVc2VyVXBkYXRlID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytcIi9cIit1c2VyLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlclVwZGF0ZS5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcudXBkYXRlVXNlckluZm9zK3VzZXIuaWQpO1xuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGRhbnMgdG91cyBsZXMgY2FzLCBqZSBtZXRzIMOgIGpvdXIgbGUgY29udGVudSBkdSBmb3JtdWxhaXJlIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRJbmZvcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJVcGRhdGUuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5vdXRwdXQ9XCJodG1sXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJVc2VyVXBkYXRlLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gb24gcGFzc2Ugw6AgbGEgY2Fpc3NlID9cbiAgICAgICAgICAgICAgICBjb25zdCBDR1Y9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDR1ZPa1wiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm8xMj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzEyXCIpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFibzI0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvMjRcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgYWJvNjA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm82MFwiKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhYm8xMjA9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8xMjBcIik7XG4gICAgICAgICAgICAgICAgY29uc3QgZGl2V1BCdG5zPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG5zXCIpO1xuICAgICAgICAgICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgIGFibzEyLmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHVuQ2hlY2tBbGxPdGhlcnMoXCJhYm8xMlwiKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBhYm8yNC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvMjRcIik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYWJvNjAuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdW5DaGVja0FsbE90aGVycyhcImFibzYwXCIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGFibzEyMC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB1bkNoZWNrQWxsT3RoZXJzKFwiYWJvMTIwXCIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIENHVi5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZihDR1YuY2hlY2tlZD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpdldQQnRucy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGFibzEyLmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuMTJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzI0LmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuMjRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzYwLmNoZWNrZWQ9PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dCdG5QYXltZW50KFwiYnRuNjBcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKGFibzEyMC5jaGVja2VkPT09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93QnRuUGF5bWVudChcImJ0bjEyMFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDR1YuY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIExpc3RlIGRlcyBmaWxsZXVpbHMsIHNpIGlsIHkgZW4gYVxuICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEdvZGNoaWxkcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuZ2V0R29kQ2hpbGRzKTtcbiAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCksIHR4dEdvZGNoaWxkcz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmJHb2RjaGlsZHM9cmVzcG9uc2UubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG5iR29kY2hpbGRzPT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzPVwiUG91ciBsJ2luc3RhbnQsIGF1Y3VuZSBwZXJzb25uZSBuZSBzJ2VzdCBpbnNjcml0ZSwgZW4gdm91cyBkw6lzaWduYW50IGNvbW1lIFxcXCJwYXJyYWluXFxcIi5cIjsvLyByZXZvaXIgOiB1dGlsaXNlciBsZSBkaWN0aW9ubmFpcmUgVXNlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dEdvZGNoaWxkcz1uYkdvZGNoaWxkcytcIiB1dGlsaXNhdGV1cihzKSBpbnNjcml0KHMpIGVuIHZvdXMgZMOpc2lnbmFudCBjb21tZSBcXFwicGFycmFpblxcXCIgOlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHMrPXJlc3BvbnNlW2ldLm5hbWUrXCIgKFwiK3Jlc3BvbnNlW2ldLmVtYWlsK1wiKSBcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkdvZGNoaWxkcywgXCJwXCIsIHR4dEdvZGNoaWxkcywgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdkNyYXNoLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59IiwiY29uc3QgY2hlY2tCb3hlcz1cbntcbiAgICBcIkNHVlwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJDR1ZPa1wiKSxcbiAgICBcImFibzEyXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFibzEyXCIpLFxuICAgIFwiYWJvMjRcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWJvMjRcIiksXG4gICAgXCJhYm82MFwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm82MFwiKSxcbiAgICBcImFibzEyMFwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhYm8xMjBcIilcbn1cbmNvbnN0IGRpdldQQnRucz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuc1wiKTtcblxuLy8gTG9yc3F1ZSBsJ29uIHPDqWxlY3Rpb25uZSB1biBtb250YW50LCBsZXMgYXV0cmVzIG9wdGlvbnMgKyBsZXMgQ0dWIHNvbnQgZMOpc8OpbGVjdGlvbm7DqXNcbmV4cG9ydCBjb25zdCB1bkNoZWNrQWxsT3RoZXJzID0gKGNob2ljZSkgPT5cbntcbiAgICBmb3IgKGxldCBpZCBpbiBjaGVja0JveGVzKVxuICAgIHtcbiAgICAgICAgaWYoaWQhPT1jaG9pY2UpXG4gICAgICAgICAgICBjaGVja0JveGVzW2lkXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBkaXZXUEJ0bnMuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICB9XG59XG5cblxuY29uc3QgYnRucz1cbntcbiAgICBcImJ0bjEyXCIgOiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIldQQnRuMTJcIiksXG4gICAgXCJidG4yNFwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bjI0XCIpLFxuICAgIFwiYnRuNjBcIiA6IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiV1BCdG42MFwiKSxcbiAgICBcImJ0bjEyMFwiIDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJXUEJ0bjEyMFwiKVxufVxuXG4vLyBBZmZpY2hlIGxlIGJvbiBib3V0b24gZGUgcGFpZW1lbnQgZXQgY2FjaGUgbGVzIGF1dHJlc1xuZXhwb3J0IGNvbnN0IHNob3dCdG5QYXltZW50ID0gKGNob2ljZSkgPT5cbntcbiAgICBmb3IgKGxldCBpZCBpbiBidG5zKVxuICAgIHtcbiAgICAgICAgaWYoaWQhPT1jaG9pY2UpXG4gICAgICAgICAgICBidG5zW2lkXS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBidG5zW2lkXS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICB9XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/connection.app.js b/front/public/JS/connection.app.js index eb54c21..209b696 100644 --- a/front/public/JS/connection.app.js +++ b/front/public/JS/connection.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -387,8 +391,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -411,6 +415,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -433,7 +438,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -444,20 +449,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -470,15 +478,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -486,8 +496,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -601,7 +612,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -642,7 +654,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -705,7 +717,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -793,20 +907,20 @@ var initialise = /*#__PURE__*/function () { if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message"))) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divMessage, "p", Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message", true).message, "", [Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("message", true).color]); - ; Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("message"); } } - _context.next = 10; + _context.next = 11; break; case 7: _context.prev = 7; _context.t0 = _context["catch"](0); Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); + console.error(_context.t0); - case 10: + case 11: case "end": return _context.stop(); } @@ -824,10 +938,10 @@ initialise(); // Traitement de l'envoi des données de connexion : myForm.addEventListener("submit", function (e) { try { e.preventDefault(); - divResponse.innerHTML = ""; // efface d'éventuels messages déj à affichés + divResponse.innerHTML = ""; // efface d'éventuels messages déjà affichés var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_5__["getDatasFromInputs"])(myForm); - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.password) && Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.getLoginLink)) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", txtUsers.needChooseLoginWay, "", ["error"]);else { + if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.password) && Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.getLoginLink)) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "div", txtUsers.needChooseLoginWay, "", ["error"]);else { var xhr = new XMLHttpRequest(); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(datas.getLoginLink)) xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["getLoginLinkRoute"]);else xhr.open("POST", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["userRoutes"] + _config_users_js__WEBPACK_IMPORTED_MODULE_1__["connectionRoute"]); @@ -847,19 +961,16 @@ myForm.addEventListener("submit", function (e) { Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_7__["setSession"])(response.userId, response.token, connexionMaxTime); Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("lastAnswer"); // ! important pour ne pas enregister plusieurs fois le résultat - myForm.style.display = "none"; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", txtUsers.connectionOk, "", ["success"]); // au cas où blocage redirection - // l'utilisateur peut avoir tenté d'accéder à une autre page que sa page d'acceuil : + myForm.style.display = "none"; //addElement(divResponse, "p", txtUsers.connectionOk, "", ["success"]);// au cas où blocage redirection + // l'utilisateur peut avoir tenté d'accéder à une autre page que sa page d'accueil : var url = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["getLocaly"])("url", true); - console.log(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"]); if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_6__["isEmpty"])(url) && url.href.indexOf(_config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"]) !== -1) { url = url.href; Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["removeLocaly"])("url"); } else url = configTemplate[response.status + "HomePage"]; - console.log(url); window.location.assign(url); } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); } else if (response.errors) { @@ -880,6 +991,7 @@ myForm.addEventListener("submit", function (e) { } } catch (e) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); + console.error(e); } }); @@ -974,7 +1086,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1145,7 +1257,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1233,13 +1346,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1291,4 +1404,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwid2VsY29tZU1lc3NhZ2UiLCJieWVieWVNZXNzYWdlIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJjb25maWdUZW1wbGF0ZSIsInR4dCIsInR4dFVzZXJzIiwibXlGb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1lc3NhZ2UiLCJkaXZSZXNwb25zZSIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwic2F2ZUxvY2FseSIsIm1lc3NhZ2UiLCJjb2xvciIsInVzZXIiLCJnZXRMb2NhbHkiLCJob21lUGFnZSIsInN0YXR1cyIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwiYWRkRWxlbWVudCIsInN0eWxlIiwiZGlzcGxheSIsInJlbW92ZUxvY2FseSIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJpbm5lckhUTUwiLCJkYXRhcyIsImdldERhdGFzRnJvbUlucHV0cyIsImdldExvZ2luTGluayIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJ1c2VySWQiLCJjb25uZXhpb25UaW1lIiwidG9rZW4iLCJjb25uZXhpb25NYXhUaW1lIiwibm93IiwiZW5kc1dpdGgiLCJwYXJzZUludCIsInNldFNlc3Npb24iLCJ1cmwiLCJjb25zb2xlIiwibG9nIiwiaW5kZXhPZiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwiY2hlY2tBbnN3ZXJEYXRhcyIsInNlbmQiLCJzdHJpbmdpZnkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsInVwZGF0ZUFjY291bnRMaW5rIiwibGluayIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImlucHV0c0NvbmYiLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsImlzVmFsaWQiLCJsYW5ndWFnZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENBQTlCOztBQUVBRSxNQUFNLENBQUNDLE9BQVA7QUFFSUMsUUFBTSxFQUFFLDJCQUZaO0FBR0lDLFNBQU8sRUFBRSx1QkFIYjtBQUlJQyxXQUFTLEVBQUUsU0FKZjtBQUtJQyxZQUFVLEVBQUUsbUJBTGhCO0FBTUlDLFlBQVUsRUFBRSxXQU5oQjtBQU9JQyxhQUFXLEVBQUUsdUJBUGpCO0FBUUlDLFdBQVMsRUFBRSxJQVJmO0FBU0lDLE9BQUssRUFBRSxTQVRYO0FBU3NCO0FB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LEtBQUQsQ0FBUDtBQUNIO0FBQ0oscUJBbENELE1Bb0NBO0FBQ0k3RSw0RkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBcUcsa0NBQVksQ0FBQ0gsY0FBRCxFQUFpQjlHLE9BQWpCLEVBQTBCK0csU0FBMUIsQ0FBWjtBQUNBdEIsNkJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLG1CQTVDRDs7QUE2Q0FyRSxxQkFBRyxDQUFDd0UsT0FBSixHQUFjO0FBQUEsMkJBQU1GLE1BQU0sQ0FBQ3RFLEdBQUcsQ0FBQ3lFLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBekUscUJBQUcsQ0FBQzZCLElBQUo7QUFDSDtBQUNKO0FBQ0osYUF0RU0sQ0FGaUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBWnBELFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNb0gsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQjlHLE9BQWpCLEVBQTBCK0csU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUNsTCwyREFBTyxDQUFDbUUsT0FBRCxDQUFYLEVBQ0lELG9FQUFVLENBQUMsU0FBRCxFQUFZQyxPQUFaLENBQVY7QUFDSixNQUFHLENBQUNuRSwyREFBTyxDQUFDa0wsU0FBRCxDQUFYLEVBQ0loSCxvRUFBVSxDQUFDLEtBQUQsRUFBUWdILFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ2xMLDJEQUFPLENBQUNpTCxjQUFELENBQVgsRUFDSXhHLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBaEIsQ0FBdUJzRyxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2Nvbm5lY3Rpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvY29ubmVjdGlvbi5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwiZGVmYXVsdFwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIndpa2lsZXJuaVwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsICAgIFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIi8vIGlkZW1cbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgU0UgQ09OTkVDVEVSXG5cbi8vLyBMJ3V0aWxpc2F0ZXVyIHBldXQgYXZvaXIgcsOpcG9uZHUgw6AgdW4gcXVpeiBhdmFudCBkJ2Fycml2ZXIgc3VyIGxhIHBhZ2UgZGUgY29ubmV4aW9uXG4vLy8gRGFucyBjZSBjYXMgaWwgZmF1dCBlbnJlZ2lzdHJlciBzb24gcsOpc3VsdGF0IGVuIG3Dqm1lIHRlbXBzLCB1bmUgZm9pcyBsYSBjb25uZXhpb24gdmFsaWTDqWVcblxuLy8vIExlIGNvbm5leGlvbiBwZXV0IHNlIGZhaXJlIGRpcmVjdGVtZW50IGljaSB2aWEgbGEgc2Fpc2llIGQndW4gbW90IGRlIHBhc3NlXG4vLy8gT3UgdmlhIGwnZW52b2kgZCd1biB0b2tlbiBwYXIgZS1tYWlsXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB0aXLDqXMgZHUgYmFja2VuZCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmltcG9ydCB7IGNvbm5lY3Rpb25Sb3V0ZSwgZ2V0TG9naW5MaW5rUm91dGUsIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGNoZWNrQW5zd2VyRGF0YXMsIGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBnZXRUaW1lRGlmZmVyZW5jZSwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBteUZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvbm5lY3Rpb25cIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG4vLyBUZXN0IGRlIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyICsgYWZmaWNoYWdlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbi5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLmFscmVhZHlDb25uZWN0ZWQsIGNvbG9yOlwiaW5mb3JtYXRpb25cIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGhvbWVQYWdlPXVzZXIuc3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdKTtcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5hbHJlYWR5Q29ubmVjdGVkLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7Ly8gYXUgY2FzIG/DucKgYmxvY2FnZSByZWRpcmVjdGlvblxuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgaWYoIWlzRW1wdHkoZ2V0TG9jYWx5KFwibWVzc2FnZVwiKSkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5tZXNzYWdlLCBcIlwiLCBbZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5jb2xvcl0pOztcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJtZXNzYWdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9ICAgICBcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5cbi8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkZXMgZG9ubsOpZXMgZGUgY29ubmV4aW9uIDpcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiOy8vIGVmZmFjZSBkJ8OpdmVudHVlbHMgbWVzc2FnZXMgZMOpaiDDoCBhZmZpY2jDqXNcbiAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhteUZvcm0pO1xuICAgICAgICBpZihpc0VtcHR5KGRhdGFzLnBhc3N3b3JkKSAmJiBpc0VtcHR5KGRhdGFzLmdldExvZ2luTGluaykpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0VXNlcnMubmVlZENob29zZUxvZ2luV2F5LCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5nZXRMb2dpbkxpbmspKVxuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrdXNlclJvdXRlcytnZXRMb2dpbkxpbmtSb3V0ZSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCt1c2VyUm91dGVzK2Nvbm5lY3Rpb25Sb3V0ZSk7XG4gICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHJlc3BvbnNlLm1lc3NhZ2UpKSBcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgLy8gY2FzIGQndW5lIGRlbWFuZGUgZGUgbGllbiBkZSBjb25uZXhpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCFpc0VtcHR5KHJlc3BvbnNlLnVzZXJJZCkgJiYgIWlzRW1wdHkocmVzcG9uc2UuY29ubmV4aW9uVGltZSkgJiYgIWlzRW1wdHkocmVzcG9uc2UudG9rZW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgeyAgIC8vIGNhcyBkJ3VuZSBjb25uZXhpb24gZGlyZWN0ZSwgb24gY3LDqcOpIHVuZSBzZXNzaW9uIGRlIGNvbm5leGlvbiBldCByZWRpcmlnZSBsJ3V0aWxpc2F0ZXVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbk1heFRpbWU9RGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5jb25uZXhpb25UaW1lLmVuZHNXaXRoKFwiZGF5c1wiKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uTWF4VGltZSs9cGFyc2VJbnQocmVzcG9uc2UuY29ubmV4aW9uVGltZSwxMCkqMjQqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uTWF4VGltZSs9cGFyc2VJbnQocmVzcG9uc2UuY29ubmV4aW9uVGltZSwxMCkqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlc3Npb24ocmVzcG9uc2UudXNlcklkLCByZXNwb25zZS50b2tlbiwgY29ubmV4aW9uTWF4VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibGFzdEFuc3dlclwiKTsvLyAhIGltcG9ydGFudCBwb3VyIG5lIHBhcyBlbnJlZ2lzdGVyIHBsdXNpZXVycyBmb2lzIGxlIHLDqXN1bHRhdCAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5jb25uZWN0aW9uT2ssIFwiXCIsIFtcInN1Y2Nlc3NcIl0pOy8vIGF1IGNhcyBvw7kgYmxvY2FnZSByZWRpcmVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGwndXRpbGlzYXRldXIgcGV1dCBhdm9pciB0ZW50w6kgZCdhY2PDqWRlciDDoCB1bmUgYXV0cmUgcGFnZSBxdWUgc2EgcGFnZSBkJ2FjY2V1aWwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmw9Z2V0TG9jYWx5KFwidXJsXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHNpdGVVcmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KHVybCkgJiYgdXJsLmhyZWYuaW5kZXhPZihzaXRlVXJsKSE9PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPXVybC5ocmVmO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1cmxcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsPWNvbmZpZ1RlbXBsYXRlW3Jlc3BvbnNlLnN0YXR1cytcIkhvbWVQYWdlXCJdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2codXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRhdGFzLnRpbWVEaWZmZXJlbmNlPWdldFRpbWVEaWZmZXJlbmNlKCk7XG4gICAgICAgICAgICAgICAgLy8gc2kgbCd1dGlsaXNhdGV1ciBhIHByw6ljw6lkZW1lbnQgcsOpcG9uZHUgw6AgdW4gcXVpeiwgaidham91dGUgbGVzIGluZm9zIGRlIHNvbiByw6lzdWx0YXQgOlxuICAgICAgICAgICAgICAgIGRhdGFzPWNoZWNrQW5zd2VyRGF0YXMoZGF0YXMpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59KTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IGVzdCBsaXNpYmxlIHN1ciBnaXRsYWIgOiBcXG4gQm9ubmUgbGVjdHVyZSA6LSkgXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gbGUgdG9rZW4gZXQgZGUgdG91dGUgZmHDp29uIHbDqXJpZmllciDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicmVnZW5lcmF0ZUhUTUwiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJzdGF0c0FkbWluIiwibm90Rm91bmQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZExhbmd1YWdlIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0IiwiY29uZmlnVGVtcGxhdGUiLCJ0eHQiLCJ0eHRVc2VycyIsIm15Rm9ybSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJpc0Nvbm5lY3RlZCIsInNhdmVMb2NhbHkiLCJtZXNzYWdlIiwiY29sb3IiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwiaG9tZVBhZ2UiLCJzdGF0dXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImFzc2lnbiIsImFkZEVsZW1lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJyZW1vdmVMb2NhbHkiLCJjb25zb2xlIiwiZXJyb3IiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0IiwiaW5uZXJIVE1MIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJnZXRMb2dpbkxpbmsiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwidXNlcklkIiwiY29ubmV4aW9uVGltZSIsInRva2VuIiwiY29ubmV4aW9uTWF4VGltZSIsIm5vdyIsImVuZHNXaXRoIiwicGFyc2VJbnQiLCJzZXRTZXNzaW9uIiwidXJsIiwiaW5kZXhPZiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwiY2hlY2tBbnN3ZXJEYXRhcyIsInNlbmQiLCJzdHJpbmdpZnkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwibGluayIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImlucHV0c0NvbmYiLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsImlzVmFsaWQiLCJsYW5ndWFnZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENBQTlCOztBQUVBRSxNQUFNLENBQUNDLE9BQVA7QUFFSUMsUUFBTSxFQUFFLDJCQUZaO0FBR0lDLFNBQU8sRUFBRSx1QkFIYjtBQUlJQyxXQUFTLEVBQUUsU0FKZjtBQUtJQyxZQUFVLEVBQUUsbUJBTGhCO0FBTUlDLFlBQVUsRUFBRSxtQkFOaEI7QUFPSUMsYUFBVyxFQUFFLHVCQVBqQjtBQVFJQyxXQUFTLEVBQUUsSUFSZjtBQVNJQyxPQUFLLEVBQUUsV0FUWDtBQVN3QjtBQUNwQkMsZ0JBQWMsRUFBRSxDQUFDLElBQUQsQ0FWcEI7QUFVMkI7QUFDdkJDLFVBQVEsRUFBRSxtQkFYZDtBQVlJQyxvQkFBa0IsRUFBRSxJQVp4QjtBQVk4QjtBQUMxQkMsMEJBQXdCLEVBQUUsR0FiOUI7QUFhbUM7QUFDL0JDLDhCQUE0QixFQUFFLENBZGxDO0FBY3FDO0FBQ2pDQyxrQ0FBZ0MsRUFBRSxLQWZ0QztBQWU2QztBQUN6Q0MsMkJBQXlCLEVBQUUsSUFoQi9CO0FBaUJJQyw4QkFBNEIsRUFBRSxLQWpCbEM7QUFrQklDLDZCQUEyQixFQUFFLFVBbEJqQztBQW1CSUMsK0JBQTZCLEVBQUUsSUFuQm5DO0FBbUJ3QztBQUNwQ0MsNEJBQTBCLEVBQUUsSUFwQmhDO0FBcUJJQyxnQ0FBOEIsRUFBRSxRQXJCcEM7QUFxQjhDO0FBQzFDQyx5QkFBdUIsRUFBRSxFQXRCN0I7QUF1QklDLHlDQUF1QyxFQUFFLENBdkI3QztBQXdCSUMsMENBQXdDLEVBQUUsRUF4QjlDO0FBeUJJQywyQ0FBeUMsRUFBRSxDQXpCL0M7QUEwQklDLG1DQUFpQyxFQUFFLEdBMUJ2QztBQTJCSTtBQUNBQyxnQkFBYyxFQUFFLENBNUJwQjtBQTRCdUI7QUFDbkJDLGdCQUFjLEVBQUUsQ0E3QnBCO0FBNkJ1QjtBQUNuQkMsY0FBWSxFQUFFLEVBOUJsQjtBQStCSUMscUJBQW1CLEVBQUUsRUEvQnpCO0FBK0I0QjtBQUN4QkMsK0JBQTZCLEVBQUMsQ0FoQ2xDO0FBZ0NxQztBQUNqQ0MsNkJBQTJCLEVBQUMsRUFqQ2hDO0FBaUNvQztBQUNoQ0Msa0NBQWdDLEVBQUUsRUFsQ3RDO0FBa0MwQztBQUN0Q0MseUJBQXVCLEVBQUUsQ0FuQzdCO0FBb0NJO0FBQ0FDLG9CQUFrQixFQUFFLENBckN4QjtBQXNDSUMsb0JBQWtCLEVBQUUsQ0F0Q3hCO0FBdUNJQyw0QkFBMEIsRUFBRSxPQXZDaEM7QUF1Q3dDO0FBQ3BDQywwQkFBd0IsRUFBRSxDQUFFLFdBQUYsRUFBZSxZQUFmLEVBQTZCLFdBQTdCLEVBQTBDLFdBQTFDLEVBQXVELFdBQXZELENBeEM5QjtBQXlDSTtBQUNBQywyQkFBeUIsRUFBRSxHQTFDL0I7QUEyQ0lDLHFDQUFtQyxFQUFFLEdBM0N6QztBQTRDSTtBQUNBQyxZQUFVLEVBQUUsQ0E3Q2hCO0FBOENJQyxZQUFVLEVBQUU7QUE5Q2hCLHNEQWdEb0IzQyxjQUFjLENBQUM0QixjQWhEbkMsc0RBaURvQjVCLGNBQWMsQ0FBQzZCLGNBakRuQyxvREFrRGtCN0IsY0FBYyxDQUFDOEIsWUFsRGpDLHlEQW1EdUJoQyxLQUFLLENBQUM4QyxRQUFOLENBQWVDLFNBbkR0QyxxREFvRG1CL0MsS0FBSyxDQUFDZ0QsYUFwRHpCLDREQXFEMEJoRCxLQUFLLENBQUNpRCxvQkFyRGhDLDhEQXNENEIvQyxjQUFjLENBQUNnRCxzQkF0RDNDLHlEQXVEdUJoRCxjQUFjLENBQUNpRCxpQkF2RHRDLG1FQXdEaUNqRCxjQUFjLENBQUNrRCwyQkF4RGhELDREQXlEMEJsRCxjQUFjLENBQUNtRCxvQkF6RHpDLDJEQTBEeUJuRCxjQUFjLENBQUNvRCxtQkExRHhDLG9COzs7Ozs7Ozs7OztBQ0hBbkQsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBbUQscUJBQW1CLEVBQUUsZ0JBRnpCO0FBR0lDLHdCQUFzQixFQUFFLE1BSDVCO0FBSUlDLDRCQUEwQixFQUFFLFVBSmhDO0FBS0lDLDhCQUE0QixFQUFFLFFBTGxDO0FBTUlDLGtCQUFnQixFQUFFLFVBTnRCO0FBT0lDLHdCQUFzQixFQUFHLFNBUDdCO0FBUUlDLDJCQUF5QixFQUFHLFNBUmhDO0FBU0lDLDhCQUE0QixFQUFHLFlBVG5DO0FBVUlDLGdDQUE4QixFQUFHLGNBVnJDO0FBV0lDLDJCQUF5QixFQUFFLDZCQVgvQjtBQVlJQyxnQkFBYyxFQUFFLGtCQVpwQjtBQWFJO0FBQ0FDLGdCQUFjLEVBQUUsWUFkcEI7QUFlSTtBQUNBQyxpQkFBZSxFQUFFLGVBaEJyQjtBQWlCSTtBQUNBQyxnQ0FBOEIsRUFBRSxzQkFsQnBDO0FBbUJJQyxvQkFBa0IsRUFBRSxnQkFuQnhCO0FBb0JJQyxpQkFBZSxFQUFHLHVCQXBCdEI7QUFxQklDLGVBQWEsRUFBRSxpQkFyQm5CO0FBc0JJO0FBQ0FDLGVBQWEsRUFDYjtBQUNJQyxTQUFLLEVBQUU7QUFBRUMsZUFBUyxFQUFFLEdBQWI7QUFBa0JDLGNBQVEsRUFBRTtBQUE1QixLQURYO0FBRUlDLFFBQUksRUFBRTtBQUFFRixlQUFTLEVBQUU7QUFBYixLQUZWO0FBRThCO0FBQzFCRyxnQkFBWSxFQUFFO0FBQUVGLGNBQVEsRUFBRTtBQUFaO0FBSGxCLEdBeEJKO0FBNkJJRyxzQkFBb0IsRUFBRztBQUFFL0IsYUFBUyxFQUFFLENBQWI7QUFBZ0I0QixZQUFRLEVBQUU7QUFBMUIsR0E3QjNCO0FBOEJJSSxVQUFRLEVBQ1I7QUFDSUMsUUFBSSxFQUFFO0FBQUVOLGVBQVMsRUFBRSxHQUFiO0FBQWtCQyxjQUFRLEVBQUU7QUFBNUIsS0FEVjtBQUVJTSxRQUFJLEVBQUU7QUFBRU4sY0FBUSxFQUFFLElBQVo7QUFBa0JPLFNBQUcsRUFBQyxDQUF0QjtBQUF5QkMsa0JBQVksRUFBQztBQUF0QztBQUZWLEdBL0JKO0FBbUNJQyxRQUFNLEVBQ047QUFDSUosUUFBSSxFQUFFO0FBQUVOLGVBQVMsRUFBRSxHQUFiO0FBQWtCQyxjQUFRLEVBQUU7QUFBNUI7QUFEVixHQXBDSjtBQXVDSTdDLGdCQUFjLEVBQUUsQ0F2Q3BCO0FBd0NJQyxnQkFBYyxFQUFFLENBeENwQjtBQXlDSUMsY0FBWSxFQUFFLEVBekNsQjtBQTBDSXFELFdBQVMsRUFBRSxDQTFDZjtBQTJDSUMsV0FBUyxFQUFFLENBM0NmO0FBMkNrQjtBQUNkO0FBQ0FwQyx3QkFBc0IsRUFBRyxzQkE3QzdCO0FBOENJQyxtQkFBaUIsRUFBRyxnQ0E5Q3hCO0FBK0NJQyw2QkFBMkIsRUFBRyw0QkEvQ2xDO0FBZ0RJbUMsY0FBWSxFQUFHLDJCQWhEbkI7QUFpRElsQyxzQkFBb0IsRUFBRyxtQkFqRDNCO0FBa0RJbUMsYUFBVyxFQUFHLG9CQWxEbEI7QUFtRElsQyxxQkFBbUIsRUFBRyxNQW5EMUI7QUFtRGlDO0FBQzdCbUMsWUFBVSxFQUFHLE9BcERqQjtBQW9EeUI7QUFDckJDLGlCQUFlLEVBQUcsQ0FyRHRCLENBcUR1Qjs7QUFyRHZCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQXZGLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k7QUFDQXVGLFlBQVUsRUFBRSxPQUZoQjtBQUdJQyxnQkFBYyxFQUFFLFNBSHBCO0FBSUlDLG1CQUFpQixFQUFFLGlCQUp2QjtBQUtJQyx5QkFBdUIsRUFBRSxjQUw3QjtBQU1JQywwQkFBd0IsRUFBRSxjQU45QjtBQU9JQyxpQkFBZSxFQUFFLGNBUHJCO0FBUUlDLGlCQUFlLEVBQUUsUUFSckI7QUFTSUMsbUJBQWlCLEVBQUUsZUFUdkI7QUFVSUMseUJBQXVCLEVBQUUsaUJBVjdCO0FBV0lDLGNBQVksRUFBRSxPQVhsQjtBQVlJQyxpQkFBZSxFQUFFLFNBWnJCO0FBYUlDLG1CQUFpQixFQUFFLFlBYnZCO0FBY0lDLGlCQUFlLEVBQUUsVUFkckI7QUFlSUMsaUJBQWUsRUFBRSxVQWZyQjtBQWdCSUMsY0FBWSxFQUFFLGdCQWhCbEI7QUFpQklDLHdCQUFzQixFQUFFLG1CQWpCNUI7QUFrQklDLHNCQUFvQixFQUFFLGlCQWxCMUI7QUFtQklDLGFBQVcsRUFBRSx5QkFuQmpCO0FBb0JJQyxrQkFBZ0IsRUFBRSxxQkFwQnRCO0FBcUJJdEMsZUFBYSxFQUFFLGlCQXJCbkI7QUFzQkk7QUFDQXVDLE1BQUksRUFBRTtBQUFFcEMsYUFBUyxFQUFFLEVBQWI7QUFBaUJDLFlBQVEsRUFBRTtBQUEzQixHQXZCVjtBQXdCSW9DLE9BQUssRUFBRTtBQUFFckMsYUFBUyxFQUFFLEdBQWI7QUFBa0JDLFlBQVEsRUFBRTtBQUE1QixHQXhCWDtBQXlCSTdCLFVBQVEsRUFBRTtBQUFFQyxhQUFTLEVBQUUsQ0FBYjtBQUFnQjJCLGFBQVMsRUFBQyxFQUExQjtBQUE4QkMsWUFBUSxFQUFFO0FBQXhDLEdBekJkO0FBeUI4RDtBQUMxRHFDLGFBQVcsRUFBRTtBQUFFakUsYUFBUyxFQUFFLENBQWI7QUFBZ0IyQixhQUFTLEVBQUM7QUFBMUIsR0ExQmpCO0FBMkJJdUMsZUFBYSxFQUFFO0FBQUV2QyxhQUFTLEVBQUU7QUFBYixHQTNCbkI7QUE0Qkl3QyxPQUFLLEVBQUU7QUFBRUMsU0FBSyxFQUFFLE1BQVQ7QUFBaUJ4QyxZQUFRLEVBQUU7QUFBM0IsR0E1Qlg7QUE2Qkl5QyxtQkFBaUIsRUFBRSxDQUFDLEdBN0J4QjtBQThCSUMsbUJBQWlCLEVBQUMsR0E5QnRCO0FBK0JJO0FBQ0FyRSxlQUFhLEVBQUcsYUFoQ3BCO0FBaUNJQyxzQkFBb0IsRUFBRztBQWpDM0IsQ0FEQSxDOzs7Ozs7Ozs7OztBQ0FBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFOzs7Ozs7Ozs7OztBQ3RCQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRDs7Ozs7Ozs7Ozs7QUN0QkE5QyxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJa0gsZUFBYSxFQUFHLG9DQURwQjtBQUVJQyxxQkFBbUIsRUFBRyx1SEFGMUI7QUFHSUMsa0JBQWdCLEVBQUcsdUVBSHZCO0FBSUlDLG1CQUFpQixFQUFHLG1FQUp4QjtBQUtJQyxhQUFXLEVBQUcsNEdBTGxCO0FBTUlDLGtCQUFnQixFQUFHLHdCQU52QjtBQU9JQyxjQUFZLEVBQUcsc0RBUG5CO0FBUUlDLFFBQU0sRUFBRywrQ0FSYjtBQVNJQyxnQkFBYyxFQUFHLG9CQVRyQjtBQVVJQyxZQUFVLEVBQUcsMkRBVmpCO0FBV0lDLGFBQVcsRUFBRyxhQVhsQjtBQVlJQyxjQUFZLEVBQUUsVUFabEI7QUFhSUMsV0FBUyxFQUFFLFNBYmY7QUFjSUMsY0FBWSxFQUFFLFdBZGxCO0FBZUlDLGNBQVksRUFBRyx3Q0FmbkI7QUFnQklDLGlCQUFlLEVBQUcsK0NBaEJ0QjtBQWlCSUMsaUJBQWUsRUFBRyx3Q0FqQnRCO0FBa0JJQyxVQUFRLEVBQUcsNEJBbEJmO0FBbUJJQyxnQkFBYyxFQUFHLGtDQW5CckI7QUFvQklDLGVBQWEsRUFBRywyQ0FwQnBCO0FBcUJJQyxZQUFVLEVBQUcsMkJBckJqQjtBQXNCSUMsY0FBWSxFQUFHLHFEQXRCbkI7QUF1QklDLGNBQVksRUFBRyxpQkF2Qm5CO0FBd0JJQyxVQUFRLEVBQUcsZUF4QmY7QUF5QklDLGdCQUFjLEVBQUUsa0JBekJwQjtBQTBCSUMsd0JBQXNCLEVBQUcsaUJBMUI3QjtBQTJCSUMsWUFBVSxFQUFHO0FBM0JqQixDQURBLEM7Ozs7Ozs7Ozs7O0FDQUE3SSxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJNkksVUFBUSxFQUFFLG1DQURkO0FBRUlDLFVBQVEsRUFBRSx3Q0FGZDtBQUdJQyxvQkFBa0IsRUFBRSw4RUFIeEI7QUFJSUMsV0FBUyxFQUFFLHVDQUpmO0FBS0lDLGlCQUFlLEVBQUUscUtBTHJCO0FBTUlDLHFCQUFtQixFQUFFLDRFQU56QjtBQU9JQyxjQUFZLEVBQUcsbUNBUG5CO0FBUUlDLGtCQUFnQixFQUFHLG9FQVJ2QjtBQVNJQyxnQkFBYyxFQUFFLHFIQVRwQjtBQVVJQyxZQUFVLEVBQUcsc0JBVmpCO0FBV0lDLGNBQVksRUFBRywyQkFYbkI7QUFZSUMsNkJBQTJCLEVBQUcsaURBWmxDO0FBYUlDLFVBQVEsRUFBRyw0QkFiZjtBQWNJQyxrQkFBZ0IsRUFBRyw0QkFkdkI7QUFlSUMsc0JBQW9CLEVBQUcsOEVBZjNCO0FBZ0JJQyxvQkFBa0IsRUFBRyw2REFoQnpCO0FBaUJJQyx1QkFBcUIsRUFBRyxvRkFqQjVCO0FBa0JJQyx1QkFBcUIsRUFBRyxvRkFsQjVCO0FBbUJJQyxXQUFTLEVBQUcsK0RBbkJoQjtBQW9CSUMsbUJBQWlCLEVBQUUsd0RBcEJ2QjtBQXFCSUMsZ0JBQWMsRUFBRSxtQ0FyQnBCO0FBc0JJQyx1QkFBcUIsRUFBRSxpS0F0QjNCO0FBdUJJQywyQkFBeUIsRUFBRyxvQ0F2QmhDO0FBd0JJQyx1QkFBcUIsRUFBRyxxQkF4QjVCO0FBeUJJQyw0QkFBMEIsRUFBRyxxSEF6QmpDO0FBMEJJQyw2QkFBMkIsRUFBRyx5SEExQmxDO0FBMkJJQyxtQkFBaUIsRUFBRSwrSUEzQnZCO0FBNEJJQyx3QkFBc0IsRUFBRSw4QkE1QjVCO0FBNkJJQywwQkFBd0IsRUFBRSxtREE3QjlCO0FBOEJJQywrQkFBNkIsRUFBRSw4QkE5Qm5DO0FBK0JJQyxvQkFBa0IsRUFBRyxhQS9CekI7QUFnQ0lDLG9CQUFrQixFQUFHLDRCQWhDekI7QUFpQ0lDLG9CQUFrQixFQUFHLHNvQkFqQ3pCO0FBa0NJQyxxQkFBbUIsRUFBRyw0cUJBbEMxQjtBQW1DSUMsMkJBQXlCLEVBQUcsU0FuQ2hDO0FBb0NJQywyQkFBeUIsRUFBRyw0QkFwQ2hDO0FBcUNJQywyQkFBeUIsRUFBRyx3SEFyQ2hDO0FBc0NJQyw0QkFBMEIsRUFBRywySUF0Q2pDO0FBdUNJQywwQkFBd0IsRUFBRSw2SUF2QzlCO0FBd0NJQyxlQUFhLEVBQUUscURBeENuQjtBQXlDSUMsa0JBQWdCLEVBQUUsc0NBekN0QjtBQTBDSUMsaUJBQWUsRUFBRSx3REExQ3JCO0FBMkNJQyxjQUFZLEVBQUUsb0JBM0NsQjtBQTRDSUMsb0JBQWtCLEVBQUUsNkhBNUN4QjtBQTZDSUMsdUJBQXFCLEVBQUcsK0hBN0M1QjtBQThDSUMsbUJBQWlCLEVBQUcsdUlBOUN4QjtBQStDSUMsYUFBVyxFQUFFLG1DQS9DakI7QUFnRElDLHNCQUFvQixFQUFHLDBCQWhEM0I7QUFpRElDLGtCQUFnQixFQUFHLGVBakR2QjtBQWtESUMsc0JBQW9CLEVBQUcsK0dBbEQzQjtBQW1ESUMsdUJBQXFCLEVBQUcsaUhBbkQ1QjtBQW9ESUMsc0JBQW9CLEVBQUcsdUlBcEQzQjtBQXFESUMsa0JBQWdCLEVBQUUsNkNBckR0QjtBQXNESUMsc0JBQW9CLEVBQUcsNkZBdEQzQjtBQXVESUMsd0JBQXNCLEVBQUcsOEhBdkQ3QjtBQXdESUMsd0JBQXNCLEVBQUcsNkNBeEQ3QjtBQXlESUMsd0JBQXNCLEVBQUcsVUF6RDdCO0FBMERJQyx3QkFBc0IsRUFBRyxnSUExRDdCO0FBMkRJQyx5QkFBdUIsRUFBRyxvSUEzRDlCO0FBNERJQyw0QkFBMEIsRUFBRSw4U0E1RGhDO0FBNkRJQywwQkFBd0IsRUFBRSxpR0E3RDlCO0FBOERJQywwQkFBd0IsRUFBRywrSEE5RC9CO0FBK0RJQywwQkFBd0IsRUFBRSw0REEvRDlCO0FBZ0VJQyxnQ0FBOEIsRUFBRyx5RUFoRXJDO0FBaUVJQyxtQkFBaUIsRUFBRSw4Q0FqRXZCO0FBa0VJQyxtQkFBaUIsRUFBRywyQ0FsRXhCO0FBbUVJQyxtQkFBaUIsRUFBRyxZQW5FeEI7QUFvRUlDLG1CQUFpQixFQUFHLDBIQXBFeEI7QUFxRUlDLG9CQUFrQixFQUFHLDhIQXJFekI7QUFzRUlDLHVCQUFxQixFQUFFLHdKQXRFM0I7QUF1RUloRixpQkFBZSxFQUFFLG9DQXZFckI7QUF3RUlpRixtQkFBaUIsRUFBRSx5REF4RXZCO0FBeUVJQyx5QkFBdUIsRUFBRSx1RUF6RTdCO0FBMEVJQyw4QkFBNEIsRUFBRSxxRUExRWxDO0FBMkVJQywyQkFBeUIsRUFBRSw0RUEzRS9CO0FBNEVJQyxpQ0FBK0IsRUFBRSxzREE1RXJDO0FBNkVJQyw0QkFBMEIsRUFBRSxtREE3RWhDO0FBOEVJQyxnQkFBYyxFQUFFLG1CQTlFcEI7QUErRUlDLGVBQWEsRUFBRSwyRkEvRW5CO0FBZ0ZJQyxtQkFBaUIsRUFBRSxnTEFoRnZCO0FBaUZJQyxxQkFBbUIsRUFBRSxxQ0FqRnpCO0FBa0ZJQyx1QkFBcUIsRUFBRTtBQWxGM0IsQ0FEQSxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBO0lBRU1DLEk7Ozs7Ozs7NEJBRWFDLEssRUFDZjtBQUNJLFVBQUdBLEtBQUssS0FBR0MsU0FBUixJQUFxQkQsS0FBSyxLQUFHLElBQWhDLEVBQ0ksT0FBTyxJQUFQLENBREosS0FHQTtBQUNJQSxhQUFLLElBQUUsRUFBUCxDQURKLENBQ2M7O0FBQ1ZBLGFBQUssR0FBQ0EsS0FBSyxDQUFDRSxJQUFOLEVBQU47QUFDQSxZQUFHRixLQUFLLEtBQUcsRUFBWCxFQUNJLE9BQU8sSUFBUCxDQURKLEtBR0ksT0FBTyxLQUFQO0FBQ1A7QUFDSjs7O2tDQUVvQkcsUSxFQUNyQjtBQUNJLFVBQUdKLElBQUksQ0FBQ0ssT0FBTCxDQUFhRCxRQUFiLENBQUgsRUFDSUEsUUFBUSxHQUFDLElBQVQsQ0FESixLQUdBO0FBQ0lBLGdCQUFRLElBQUUsRUFBVixDQURKLENBQ2lCOztBQUNiQSxnQkFBUSxHQUFDQSxRQUFRLENBQUNELElBQVQsRUFBVDtBQUNIO0FBQ0QsYUFBT0MsUUFBUDtBQUNIOzs7d0NBRzBCQSxRLEVBQVVFLEcsRUFDckM7QUFDSUYsY0FBUSxJQUFFLEVBQVYsQ0FESixDQUNpQjs7QUFDZCxVQUFHQSxRQUFRLENBQUNHLE1BQVQsR0FBa0JELEdBQXJCLEVBQ0tGLFFBQVEsR0FBQ0EsUUFBUSxDQUFDSSxTQUFULENBQW1CLENBQW5CLEVBQXVCRixHQUFHLEdBQUMsQ0FBM0IsSUFBK0IsS0FBeEM7QUFDSixhQUFPRixRQUFQO0FBQ0gsSyxDQUVEOzs7OytCQUNrQkEsUSxFQUFVSyxNLEVBQzVCO0FBQ0ksVUFBTUMsV0FBVyxHQUFHLElBQUlDLE1BQUosQ0FBV0MsTUFBTSxDQUFDQyxJQUFQLENBQVlKLE1BQVosRUFBb0JLLElBQXBCLENBQXlCLEdBQXpCLENBQVgsRUFBeUMsSUFBekMsQ0FBcEI7QUFDQSxhQUFPVixRQUFRLENBQUNXLE9BQVQsQ0FBaUJMLFdBQWpCLEVBQThCLFVBQUNNLE9BQUQsRUFDckM7QUFDSSxlQUFPUCxNQUFNLENBQUNPLE9BQUQsQ0FBYjtBQUNILE9BSE0sQ0FBUDtBQUlILEssQ0FFRDs7OztpQ0FDb0JoSyxHLEVBQUtzSixHLEVBQ3pCO0FBQ0l0SixTQUFHLEdBQUdpSyxJQUFJLENBQUNDLElBQUwsQ0FBVWxLLEdBQVYsQ0FBTjtBQUNBc0osU0FBRyxHQUFHVyxJQUFJLENBQUNFLEtBQUwsQ0FBV2IsR0FBWCxDQUFOO0FBQ0EsYUFBT1csSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxNQUFpQmQsR0FBRyxHQUFHdEosR0FBdkIsQ0FBWCxJQUEwQ0EsR0FBakQ7QUFDSCxLLENBRUQ7Ozs7K0JBQ2tCcUssVSxFQUNsQjtBQUFBLFVBRDhCQyxJQUM5Qix1RUFEbUMsSUFDbkM7QUFDSSxVQUFHdEIsSUFBSSxDQUFDSyxPQUFMLENBQWFnQixVQUFiLENBQUgsRUFDSSxPQUFPLEVBQVA7QUFDSixVQUFJRSxNQUFNLEdBQUMsSUFBSUMsSUFBSixDQUFTSCxVQUFULENBQVg7QUFDQSxVQUFJSSxLQUFLLEdBQUNGLE1BQU0sQ0FBQ0csT0FBUCxLQUFpQixFQUEzQjtBQUNBLFVBQUdELEtBQUssQ0FBQ2xCLE1BQU4sS0FBZSxDQUFsQixFQUNJa0IsS0FBSyxHQUFDLE1BQUlBLEtBQVY7QUFDSixVQUFJRSxRQUFRLEdBQUVKLE1BQU0sQ0FBQ0ssUUFBUCxLQUFrQixDQUFuQixHQUFzQixFQUFuQztBQUNBLFVBQUdELFFBQVEsQ0FBQ3BCLE1BQVQsS0FBa0IsQ0FBckIsRUFDSW9CLFFBQVEsR0FBQyxNQUFJQSxRQUFiO0FBQ0osVUFBSUUsTUFBTSxHQUFDTixNQUFNLENBQUNPLFdBQVAsRUFBWDtBQUNBLFVBQUdSLElBQUksS0FBRyxJQUFWLEVBQ0ksT0FBT0csS0FBSyxHQUFDLEdBQU4sR0FBVUUsUUFBVixHQUFtQixHQUFuQixHQUF1QkUsTUFBOUIsQ0FESixLQUVLLElBQUlQLElBQUksS0FBRyxNQUFYLEVBQWtCO0FBQ25CLGVBQU9PLE1BQU0sR0FBQyxHQUFQLEdBQVdGLFFBQVgsR0FBb0IsR0FBcEIsR0FBd0JGLEtBQS9CLENBREMsS0FHRCxPQUFPRSxRQUFRLEdBQUMsR0FBVCxHQUFhRixLQUFiLEdBQW1CLEdBQW5CLEdBQXVCSSxNQUE5QjtBQUNQOzs7Ozs7QUFHTDVQLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjhOLElBQWpCLEM7Ozs7Ozs7Ozs7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEQ7Ozs7Ozs7Ozs7O0FDdkJBL04sTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTZQLFdBQVMsRUFDVCxDQUNJO0FBQUVDLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FESixFQUVJO0FBQUVGLFVBQU0sRUFBRSxZQUFWO0FBQXdCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlCQUFQO0FBQTBCQyxRQUFFLEVBQUU7QUFBOUI7QUFBcEMsR0FGSixFQUdJO0FBQUVILFVBQU0sRUFBRSxVQUFWO0FBQXNCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBbEMsR0FISixFQUlJO0FBQUVGLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FKSixDQUZKO0FBUUlFLFdBQVMsRUFDVCxDQUNJO0FBQUVKLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FESixFQUVJO0FBQUVGLFVBQU0sRUFBRSxrQkFBVjtBQUE4QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyx3QkFBUDtBQUFpQ0csU0FBRyxFQUFFO0FBQXRDO0FBQTFDLEdBRkosRUFHSTtBQUFFTCxVQUFNLEVBQUUsc0JBQVY7QUFBa0NDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUE5QyxHQUhKLEVBSUk7QUFBRUYsVUFBTSxFQUFFLFFBQVY7QUFBb0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsV0FBUDtBQUFvQkcsU0FBRyxFQUFFO0FBQXpCO0FBQWhDLEdBSkosRUFLSTtBQUFFTCxVQUFNLEVBQUUsUUFBVjtBQUFvQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxXQUFQO0FBQW9CRyxTQUFHLEVBQUU7QUFBekI7QUFBaEMsR0FMSixDQVRKO0FBZ0JJQyx5QkFBdUIsRUFBRSxFQWhCN0I7QUFpQklDLGNBQVksRUFBRyxjQWpCbkI7QUFrQklDLGVBQWEsRUFBRyxZQWxCcEI7QUFtQklDLGlCQUFlLEVBQUcsY0FuQnRCO0FBb0JJQyxlQUFhLEVBQUcsa0JBcEJwQjtBQXFCSUMsZ0JBQWMsRUFBRyxnQkFyQnJCO0FBc0JJQyxhQUFXLEVBQUUsYUF0QmpCO0FBdUJJQyw4QkFBNEIsRUFBRSxvQkF2QmxDO0FBd0JJQyxxQkFBbUIsRUFBRSwyQkF4QnpCO0FBeUJJQyw4QkFBNEIsRUFBRyxFQXpCbkM7QUEwQklDLGlCQUFlLEVBQUcsYUExQnRCO0FBMkJJQyxZQUFVLEVBQUUsMEJBM0JoQjtBQTRCSUMsWUFBVSxFQUFFLHNCQTVCaEI7QUE2QklDLFFBQU0sRUFBRSxrU0E3Qlo7QUE4QklDLFlBQVUsRUFBRSx1QkE5QmhCO0FBK0JJQyxRQUFNLEVBQUUsK2NBL0JaO0FBZ0NJQyx3QkFBc0IsRUFBRSwwQ0FoQzVCO0FBaUNJQyx3QkFBc0IsRUFBRSxpREFqQzVCO0FBa0NJQyxrQkFBZ0IsRUFBRSw0QkFsQ3RCO0FBbUNJQyxnQkFBYyxFQUFFLDJpQ0FuQ3BCO0FBb0NJQyxrQkFBZ0IsRUFBRSwrRkFwQ3RCO0FBcUNJQyxhQUFXLEVBQUU7QUFyQ2pCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQTFSLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k2UCxXQUFTLEVBQ1QsQ0FDSTtBQUFFQyxVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBakMsR0FESixFQUVJO0FBQUVMLFVBQU0sRUFBRSxXQUFWO0FBQXVCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLFNBQVA7QUFBa0JDLFFBQUUsRUFBQyxlQUFyQjtBQUFzQzVMLFdBQUssRUFBQztBQUE1QztBQUFuQyxHQUZKLEVBR0k7QUFBRXlMLFVBQU0sRUFBRSxZQUFWO0FBQXdCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlCQUFQO0FBQTBCQyxRQUFFLEVBQUU7QUFBOUI7QUFBcEMsR0FISixFQUlJO0FBQUVILFVBQU0sRUFBRSxVQUFWO0FBQXNCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBbEMsR0FKSixDQUZKO0FBUUlFLFdBQVMsRUFDVCxDQUNJO0FBQUVKLFVBQU0sRUFBRSxNQUFWO0FBQWtCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlFQUFQO0FBQTBFM0wsV0FBSyxFQUFDO0FBQWhGO0FBQTlCLEdBREosRUFFSTtBQUFFeUwsVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUFqQyxHQUZKLEVBR0k7QUFBRUYsVUFBTSxFQUFFLGtCQUFWO0FBQThCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLHdCQUFQO0FBQWlDRyxTQUFHLEVBQUU7QUFBdEM7QUFBMUMsR0FISixFQUlJO0FBQUVMLFVBQU0sRUFBRSxzQkFBVjtBQUFrQ0MsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQTlDLEdBSkosRUFLSTtBQUFFRixVQUFNLEVBQUUsV0FBVjtBQUF1QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBbkMsR0FMSixDQVRKO0FBZ0JJdUIsK0JBQTZCLEVBQUUsQ0FoQm5DO0FBaUJJdEIseUJBQXVCLEVBQUUsQ0FqQjdCO0FBa0JJUyw4QkFBNEIsRUFBRyxDQWxCbkM7QUFtQklSLGNBQVksRUFBRyxjQW5CbkI7QUFvQklDLGVBQWEsRUFBRyxZQXBCcEI7QUFxQklDLGlCQUFlLEVBQUcsY0FyQnRCO0FBc0JJQyxlQUFhLEVBQUcsa0JBdEJwQjtBQXVCSUMsZ0JBQWMsRUFBRyxnQkF2QnJCO0FBd0JJa0Isb0JBQWtCLEVBQUcsb0JBeEJ6QjtBQXlCSUMsZUFBYSxFQUFHLGVBekJwQjtBQTBCSUMsa0JBQWdCLEVBQUcsa0JBMUJ2QjtBQTJCSUMsZ0JBQWMsRUFBRyxrQkEzQnJCO0FBNEJJQyxjQUFZLEVBQUcsbUJBNUJuQjtBQTZCSXJCLGFBQVcsRUFBRSxhQTdCakI7QUE4QklzQixtQkFBaUIsRUFBRSxpQkE5QnZCO0FBK0JJckIsOEJBQTRCLEVBQUUsb0JBL0JsQztBQWdDSUMscUJBQW1CLEVBQUUsMkJBaEN6QjtBQWlDSXFCLFdBQVMsRUFBRSxlQWpDZjtBQWtDSW5CLGlCQUFlLEVBQUcsYUFsQ3RCO0FBbUNJQyxZQUFVLEVBQUUsMEJBbkNoQjtBQW9DSW1CLGFBQVcsRUFBRSxnQkFwQ2pCO0FBcUNJbEIsWUFBVSxFQUFFLHNCQXJDaEI7QUFzQ0lDLFFBQU0sRUFBRSxtU0F0Q1o7QUF1Q0lDLFlBQVUsRUFBRSx1QkF2Q2hCO0FBd0NJQyxRQUFNLEVBQUUsMmZBeENaO0FBeUNJZ0IsaUJBQWUsRUFBRSxnQ0F6Q3JCO0FBMENJQyxxQkFBbUIsRUFBRSxnQ0ExQ3pCO0FBMkNJaEIsd0JBQXNCLEVBQUUsMENBM0M1QjtBQTRDSUMsd0JBQXNCLEVBQUUsaURBNUM1QjtBQTZDSUMsa0JBQWdCLEVBQUUsNEJBN0N0QjtBQThDSUMsZ0JBQWMsRUFBRSwwN0NBOUNwQjtBQStDSUMsa0JBQWdCLEVBQUUsK0ZBL0N0QjtBQWdESWEsZUFBYSxFQUFFLGlDQWhEbkI7QUFpRElaLGFBQVcsRUFBRSx5QkFqRGpCO0FBa0RJYSxrQkFBZ0IsRUFBRTtBQWxEdEIsQ0FEQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQSxJQUFNbEQsSUFBSSxHQUFDM08sa0VBQWMsQ0FBQyxDQUFELENBQXpCO0FBRUE7O0FBQ0EsSUFBTThSLGNBQWMsR0FBRzFTLCtEQUFRLElBQWMsR0FBQ1cseURBQWYsR0FBcUIsVUFBckIsR0FBZ0M0TyxJQUFoQyxHQUFxQyxLQUF0QyxDQUE5QixDLENBRUE7OztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Q0FHQTs7QUFDQSxJQUFNb0QsR0FBRyxHQUFHM1MsbUVBQVEsSUFBYSxHQUFDdVAsSUFBZCxHQUFtQixVQUFwQixDQUFuQjs7QUFDQSxJQUFNcUQsUUFBUSxHQUFHNVMsZ0VBQVEsSUFBYSxHQUFDdVAsSUFBZCxHQUFtQixPQUFwQixDQUF4QixDLENBRUE7OztBQUNBLElBQU1zRCxNQUFNLEdBQUdDLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixZQUF4QixDQUFmO0FBQ0EsSUFBTUMsVUFBVSxHQUFHRixRQUFRLENBQUNDLGNBQVQsQ0FBd0IsU0FBeEIsQ0FBbkI7QUFDQSxJQUFNRSxXQUFXLEdBQUdILFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixVQUF4QixDQUFwQjtBQUVBRyxxRUFBUSxHLENBRVI7O0FBQ0EsSUFBTUMsVUFBVTtBQUFBLHFFQUFHO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFJYUMsb0VBQVksRUFKekI7O0FBQUE7QUFJTEMsdUJBSks7O0FBS1gsZ0JBQUdBLFdBQUgsRUFDQTtBQUNJQyx3RkFBVSxDQUFDLFNBQUQsRUFBWTtBQUFFQyx1QkFBTyxFQUFFWCxRQUFRLENBQUNwSCxnQkFBcEI7QUFBc0NnSSxxQkFBSyxFQUFDO0FBQTVDLGVBQVosQ0FBVixDQURKLENBQ3VGOztBQUM3RUMsa0JBRlYsR0FFZUMseUVBQVMsQ0FBQyxNQUFELEVBQVMsSUFBVCxDQUZ4QjtBQUdVQyxzQkFIVixHQUdtQkYsSUFBSSxDQUFDRyxNQUFMLEdBQVksVUFIL0I7QUFJSUMsb0JBQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBaEIsQ0FBdUIsTUFBSXJCLGNBQWMsQ0FBQ2lCLFFBQUQsQ0FBekM7QUFDQUssOEVBQVUsQ0FBQ2YsV0FBRCxFQUFjLEdBQWQsRUFBbUJMLFFBQVEsQ0FBQ3BILGdCQUE1QixFQUE4QyxFQUE5QyxFQUFrRCxDQUFDLGFBQUQsQ0FBbEQsQ0FBVixDQUxKLENBS2lGO0FBQ2hGLGFBUEQsTUFTQTtBQUNJcUgsb0JBQU0sQ0FBQ29CLEtBQVAsQ0FBYUMsT0FBYixHQUFxQixPQUFyQjs7QUFDQSxrQkFBRyxDQUFDNUYsMkRBQU8sQ0FBQ29GLHlFQUFTLENBQUMsU0FBRCxDQUFWLENBQVgsRUFDQTtBQUNJTSxnRkFBVSxDQUFDaEIsVUFBRCxFQUFhLEdBQWIsRUFBa0JVLHlFQUFTLENBQUMsU0FBRCxFQUFZLElBQVosQ0FBVCxDQUEyQkgsT0FBN0MsRUFBc0QsRUFBdEQsRUFBMEQsQ0FBQ0cseUVBQVMsQ0FBQyxTQUFELEVBQVksSUFBWixDQUFULENBQTJCRixLQUE1QixDQUExRCxDQUFWO0FBQ0FXLDRGQUFZLENBQUMsU0FBRCxDQUFaO0FBQ0g7QUFDSjs7QUFyQlU7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUF5QlhILDRFQUFVLENBQUNmLFdBQUQsRUFBYyxHQUFkLEVBQW1CTixHQUFHLENBQUNsTCxXQUF2QixFQUFvQyxFQUFwQyxFQUF3QyxDQUFDLE9BQUQsQ0FBeEMsQ0FBVjtBQUNBMk0sbUJBQU8sQ0FBQ0MsS0FBUjs7QUExQlc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBVmxCLFVBQVU7QUFBQTtBQUFBO0FBQUEsR0FBaEI7O0FBNkJBQSxVQUFVLEcsQ0FFVjs7QUFDQU4sTUFBTSxDQUFDeUIsZ0JBQVAsQ0FBd0IsUUFBeEIsRUFBa0MsVUFBU0MsQ0FBVCxFQUNsQztBQUNJLE1BQ0E7QUFDSUEsS0FBQyxDQUFDQyxjQUFGO0FBQ0F2QixlQUFXLENBQUN3QixTQUFaLEdBQXNCLEVBQXRCLENBRkosQ0FFNkI7O0FBQ3pCLFFBQUlDLEtBQUssR0FBQ0MsMEVBQWtCLENBQUM5QixNQUFELENBQTVCO0FBQ0EsUUFBR3ZFLDJEQUFPLENBQUNvRyxLQUFLLENBQUM3UixRQUFQLENBQVAsSUFBMkJ5TCwyREFBTyxDQUFDb0csS0FBSyxDQUFDRSxZQUFQLENBQXJDLEVBQ0laLGdFQUFVLENBQUNmLFdBQUQsRUFBYyxLQUFkLEVBQXFCTCxRQUFRLENBQUNqSCxrQkFBOUIsRUFBa0QsRUFBbEQsRUFBc0QsQ0FBQyxPQUFELENBQXRELENBQVYsQ0FESixLQUdBO0FBQ0ksVUFBTWtKLEdBQUcsR0FBRyxJQUFJQyxjQUFKLEVBQVo7QUFDQSxVQUFHLENBQUN4RywyREFBTyxDQUFDb0csS0FBSyxDQUFDRSxZQUFQLENBQVgsRUFDSUMsR0FBRyxDQUFDRSxJQUFKLENBQVMsTUFBVCxFQUFpQjNVLDBEQUFNLEdBQUNzRiwyREFBUCxHQUFrQk8sa0VBQW5DLEVBREosS0FHSTRPLEdBQUcsQ0FBQ0UsSUFBSixDQUFTLE1BQVQsRUFBaUIzVSwwREFBTSxHQUFDc0YsMkRBQVAsR0FBa0JNLGdFQUFuQzs7QUFDSjZPLFNBQUcsQ0FBQ0csa0JBQUosR0FBeUIsWUFDekI7QUFDSSxZQUFJLEtBQUtDLFVBQUwsSUFBbUJILGNBQWMsQ0FBQ0ksSUFBdEMsRUFDQTtBQUNJLGNBQUlDLFFBQVEsR0FBQ0MsSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBS0MsWUFBaEIsQ0FBYjs7QUFDQSxjQUFJLEtBQUsxQixNQUFMLEtBQWdCLEdBQXBCLEVBQ0E7QUFDSSxnQkFBRyxDQUFDdEYsMkRBQU8sQ0FBQzZHLFFBQVEsQ0FBQzVCLE9BQVYsQ0FBWCxFQUNBO0FBQUU7QUFDRVYsb0JBQU0sQ0FBQ29CLEtBQVAsQ0FBYUMsT0FBYixHQUFxQixNQUFyQjtBQUNBRiw4RUFBVSxDQUFDZixXQUFELEVBQWMsR0FBZCxFQUFtQmtDLFFBQVEsQ0FBQzVCLE9BQTVCLEVBQXFDLEVBQXJDLEVBQXlDLENBQUMsU0FBRCxDQUF6QyxDQUFWO0FBQ0gsYUFKRCxNQUtLLElBQUcsQ0FBQ2pGLDJEQUFPLENBQUM2RyxRQUFRLENBQUNJLE1BQVYsQ0FBUixJQUE2QixDQUFDakgsMkRBQU8sQ0FBQzZHLFFBQVEsQ0FBQ0ssYUFBVixDQUFyQyxJQUFpRSxDQUFDbEgsMkRBQU8sQ0FBQzZHLFFBQVEsQ0FBQ00sS0FBVixDQUE1RSxFQUNMO0FBQUk7QUFDQSxrQkFBSUMsZ0JBQWdCLEdBQUNqRyxJQUFJLENBQUNrRyxHQUFMLEVBQXJCO0FBQ0Esa0JBQUdSLFFBQVEsQ0FBQ0ssYUFBVCxDQUF1QkksUUFBdkIsQ0FBZ0MsTUFBaEMsQ0FBSCxFQUNJRixnQkFBZ0IsSUFBRUcsUUFBUSxDQUFDVixRQUFRLENBQUNLLGFBQVYsRUFBd0IsRUFBeEIsQ0FBUixHQUFvQyxFQUFwQyxHQUF1QyxJQUF2QyxHQUE0QyxJQUE5RCxDQURKLEtBR0lFLGdCQUFnQixJQUFFRyxRQUFRLENBQUNWLFFBQVEsQ0FBQ0ssYUFBVixFQUF3QixFQUF4QixDQUFSLEdBQW9DLElBQXBDLEdBQXlDLElBQTNEO0FBQ0pNLGdGQUFVLENBQUNYLFFBQVEsQ0FBQ0ksTUFBVixFQUFrQkosUUFBUSxDQUFDTSxLQUEzQixFQUFrQ0MsZ0JBQWxDLENBQVY7QUFDQXZCLDBGQUFZLENBQUMsWUFBRCxDQUFaLENBUEosQ0FPK0I7O0FBQzNCdEIsb0JBQU0sQ0FBQ29CLEtBQVAsQ0FBYUMsT0FBYixHQUFxQixNQUFyQixDQVJKLENBU0k7QUFDQTs7QUFDQSxrQkFBSTZCLEdBQUcsR0FBQ3JDLHlFQUFTLENBQUMsS0FBRCxFQUFRLElBQVIsQ0FBakI7O0FBQ0Esa0JBQUcsQ0FBQ3BGLDJEQUFPLENBQUN5SCxHQUFELENBQVIsSUFBaUJBLEdBQUcsQ0FBQzVGLElBQUosQ0FBUzZGLE9BQVQsQ0FBaUIzViwyREFBakIsTUFBNEIsQ0FBQyxDQUFqRCxFQUNBO0FBQ0kwVixtQkFBRyxHQUFDQSxHQUFHLENBQUM1RixJQUFSO0FBQ0FnRSw0RkFBWSxDQUFDLEtBQUQsQ0FBWjtBQUNILGVBSkQsTUFNSTRCLEdBQUcsR0FBQ3JELGNBQWMsQ0FBQ3lDLFFBQVEsQ0FBQ3ZCLE1BQVQsR0FBZ0IsVUFBakIsQ0FBbEI7O0FBQ0pDLG9CQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCZ0MsR0FBdkI7QUFDSCxhQXJCSSxNQXVCRC9CLGdFQUFVLENBQUNmLFdBQUQsRUFBYyxHQUFkLEVBQW1CTixHQUFHLENBQUNsTCxXQUF2QixFQUFvQyxFQUFwQyxFQUF3QyxDQUFDLE9BQUQsQ0FBeEMsQ0FBVjtBQUNQLFdBL0JELE1BZ0NLLElBQUkwTixRQUFRLENBQUNjLE1BQWIsRUFDTDtBQUNJLGdCQUFHQyxLQUFLLENBQUNDLE9BQU4sQ0FBY2hCLFFBQVEsQ0FBQ2MsTUFBdkIsQ0FBSCxFQUNJZCxRQUFRLENBQUNjLE1BQVQsR0FBa0JkLFFBQVEsQ0FBQ2MsTUFBVCxDQUFnQmxILElBQWhCLENBQXFCLE1BQXJCLENBQWxCLENBREosS0FHSW9HLFFBQVEsQ0FBQ2MsTUFBVCxHQUFrQnRELEdBQUcsQ0FBQ2xMLFdBQXRCO0FBQ0p1TSw0RUFBVSxDQUFDZixXQUFELEVBQWMsR0FBZCxFQUFtQmtDLFFBQVEsQ0FBQ2MsTUFBNUIsRUFBb0MsRUFBcEMsRUFBd0MsQ0FBQyxPQUFELENBQXhDLENBQVY7QUFDSCxXQVBJLE1BU0RqQyxnRUFBVSxDQUFDZixXQUFELEVBQWMsR0FBZCxFQUFtQk4sR0FBRyxDQUFDbEwsV0FBdkIsRUFBb0MsRUFBcEMsRUFBd0MsQ0FBQyxPQUFELENBQXhDLENBQVY7QUFDUDtBQUNKLE9BaEREOztBQWlEQW9OLFNBQUcsQ0FBQ3VCLGdCQUFKLENBQXFCLGNBQXJCLEVBQXFDLGtCQUFyQzs7QUFDQSxVQUFHMUIsS0FBSCxFQUNBO0FBQ0lBLGFBQUssQ0FBQzJCLGNBQU4sR0FBcUJDLHlFQUFpQixFQUF0QyxDQURKLENBRUk7O0FBQ0E1QixhQUFLLEdBQUM2Qix3RUFBZ0IsQ0FBQzdCLEtBQUQsQ0FBdEI7QUFDQUcsV0FBRyxDQUFDMkIsSUFBSixDQUFTcEIsSUFBSSxDQUFDcUIsU0FBTCxDQUFlL0IsS0FBZixDQUFUO0FBQ0g7QUFDSjtBQUNKLEdBeEVELENBeUVBLE9BQU1ILENBQU4sRUFDQTtBQUNJUCxvRUFBVSxDQUFDZixXQUFELEVBQWMsR0FBZCxFQUFtQk4sR0FBRyxDQUFDbEwsV0FBdkIsRUFBb0MsRUFBcEMsRUFBd0MsQ0FBQyxPQUFELENBQXhDLENBQVY7QUFDQTJNLFdBQU8sQ0FBQ0MsS0FBUixDQUFjRSxDQUFkO0FBQ0g7QUFDSixDQWhGRCxFOzs7Ozs7Ozs7Ozs7QUNuRUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRU8sSUFBTWpCLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUN6TSxJQUFELEVBQU82UCxJQUFQLEVBQzFCO0FBQ0lDLGNBQVksQ0FBQ0MsT0FBYixDQUFxQi9QLElBQXJCLEVBQTJCdU8sSUFBSSxDQUFDcUIsU0FBTCxDQUFlQyxJQUFmLENBQTNCO0FBQ0gsQ0FITTtBQUtBLElBQU1oRCxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDN00sSUFBRCxFQUN6QjtBQUFBLE1BRGdDZ1EsSUFDaEMsdUVBRHFDLEtBQ3JDO0FBQ0ksTUFBR0EsSUFBSCxFQUNJLE9BQU96QixJQUFJLENBQUNDLEtBQUwsQ0FBV3NCLFlBQVksQ0FBQ0csT0FBYixDQUFxQmpRLElBQXJCLENBQVgsQ0FBUCxDQURKLEtBR0ksT0FBTzhQLFlBQVksQ0FBQ0csT0FBYixDQUFxQmpRLElBQXJCLENBQVA7QUFDUCxDQU5NO0FBUUEsSUFBTXNOLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUN0TixJQUFELEVBQzVCO0FBQ0k4UCxjQUFZLENBQUNJLFVBQWIsQ0FBd0JsUSxJQUF4QjtBQUNILENBSE0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NDZFA7O0FBQ08sSUFBTW1OLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNnRCxTQUFELEVBQVlDLE9BQVosRUFDMUI7QUFBQSxNQUQrQ0MsVUFDL0MsdUVBRDBELEVBQzFEO0FBQUEsTUFEOERDLEtBQzlELHVFQURvRSxFQUNwRTtBQUFBLE1BRHdFQyxRQUN4RSx1RUFEaUYsRUFDakY7QUFBQSxNQURxRkMsYUFDckYsdUVBRG1HLEVBQ25HO0FBQUEsTUFEdUdySSxPQUN2Ryx1RUFEK0csSUFDL0c7QUFDSSxNQUFHViwyREFBTyxDQUFDMkksT0FBRCxDQUFQLElBQW9CM0ksMkRBQU8sQ0FBQzBJLFNBQUQsQ0FBOUIsRUFDSSxPQUFPLEtBQVAsQ0FESixLQUdBO0FBQ0ksUUFBTU0sVUFBVSxHQUFDeEUsUUFBUSxDQUFDeUUsYUFBVCxDQUF1Qk4sT0FBdkIsQ0FBakI7QUFFQSxRQUFHLENBQUMzSSwyREFBTyxDQUFDNkksS0FBRCxDQUFYLEVBQW1CO0FBQ2ZHLGdCQUFVLENBQUNsSCxFQUFYLEdBQWMrRyxLQUFkOztBQUVKLFFBQUdqQixLQUFLLENBQUNDLE9BQU4sQ0FBY2lCLFFBQWQsS0FBMkJBLFFBQVEsQ0FBQzVJLE1BQVQsSUFBaUIsQ0FBL0MsRUFDQTtBQUNJLFdBQUksSUFBSWdKLENBQVIsSUFBYUosUUFBYjtBQUNJRSxrQkFBVSxDQUFDRyxTQUFYLENBQXFCQyxHQUFyQixDQUF5Qk4sUUFBUSxDQUFDSSxDQUFELENBQWpDO0FBREo7QUFFSDs7QUFFRCxRQUFHLFFBQU9ILGFBQVAsTUFBeUIsUUFBNUIsRUFBc0M7QUFDdEM7QUFDSSxhQUFJLElBQUlNLFlBQVIsSUFBd0JOLGFBQXhCO0FBQ0lDLG9CQUFVLENBQUNNLFlBQVgsQ0FBd0JELFlBQXhCLEVBQXNDTixhQUFhLENBQUNNLFlBQUQsQ0FBbkQ7QUFESjtBQUVIOztBQUVELFFBQUcsQ0FBQ3JKLDJEQUFPLENBQUM0SSxVQUFELENBQVgsRUFDSUksVUFBVSxDQUFDN0MsU0FBWCxHQUFxQnlDLFVBQVUsQ0FBQ2xJLE9BQVgsQ0FBbUIsS0FBbkIsRUFBeUIsTUFBekIsQ0FBckIsQ0FuQlIsQ0FtQjhEOztBQUUxRCxRQUFHQSxPQUFILEVBQ0lnSSxTQUFTLENBQUN2QyxTQUFWLEdBQW9CLEVBQXBCO0FBQ0p1QyxhQUFTLENBQUNhLFdBQVYsQ0FBc0JQLFVBQXRCO0FBQ0g7QUFDSixDQTlCTSxDOzs7Ozs7Ozs7Ozs7QUNIUDtBQUFBO0FBQUE7QUFBQTtBQUVPLElBQU1wRSxRQUFRLEdBQUcsU0FBWEEsUUFBVyxHQUN4QjtBQUNJa0IsU0FBTyxDQUFDMEQsR0FBUixDQUFZLGlMQUFaO0FBQ0EsU0FBTyxJQUFQO0FBQ0gsQ0FKTTtBQU1BLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsQ0FBQ25FLE1BQUQsRUFBU2xCLGNBQVQsRUFDakM7QUFDSSxNQUFNc0YsSUFBSSxHQUFDbEYsUUFBUSxDQUFDQyxjQUFULENBQXdCLGlCQUF4QixDQUFYO0FBQ0EsTUFBTVksUUFBUSxHQUFDQyxNQUFNLEdBQUMsVUFBdEI7QUFDQW9FLE1BQUksQ0FBQzdILElBQUwsR0FBVSxNQUFJdUMsY0FBYyxDQUFDaUIsUUFBRCxDQUE1QjtBQUNILENBTE0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQ05QOztBQUNPLElBQU1zRSxxQkFBcUIsR0FBRyxTQUF4QkEscUJBQXdCLENBQUNDLFVBQUQsRUFBYXJGLE1BQWIsRUFDckM7QUFDSSxPQUFJLElBQUkyRSxDQUFSLElBQWEzRSxNQUFNLENBQUNzRixRQUFwQixFQUNBO0FBQ0ksUUFBRyxDQUFDN0osMkRBQU8sQ0FBQ3VFLE1BQU0sQ0FBQ3NGLFFBQVAsQ0FBZ0JYLENBQWhCLEVBQW1CcEgsRUFBcEIsQ0FBWCxFQUNBO0FBQ0ksVUFBSWdJLE9BQU8sR0FBQ3ZGLE1BQU0sQ0FBQ3NGLFFBQVAsQ0FBZ0JYLENBQWhCLEVBQW1CcEgsRUFBL0I7O0FBQ0EsVUFBRzhILFVBQVUsQ0FBQ0UsT0FBRCxDQUFWLEtBQXNCakssU0FBekIsRUFDQTtBQUNJLFlBQUlrSyxTQUFTLEdBQUN2RixRQUFRLENBQUNDLGNBQVQsQ0FBd0JxRixPQUF4QixDQUFkOztBQUNBLGFBQUssSUFBSUUsU0FBVCxJQUFzQkosVUFBVSxDQUFDRSxPQUFELENBQWhDO0FBQ0lDLG1CQUFTLENBQUNULFlBQVYsQ0FBdUJVLFNBQXZCLEVBQWtDSixVQUFVLENBQUNFLE9BQUQsQ0FBVixDQUFvQkUsU0FBcEIsQ0FBbEM7QUFESjtBQUVIO0FBQ0o7QUFDSjs7QUFDRCxTQUFPLElBQVA7QUFDSCxDQWhCTSxDLENBa0JQOztBQUNPLElBQU0zRCxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQXFCLENBQUM5QixNQUFELEVBQ2xDO0FBQ0ksTUFBTTZCLEtBQUssR0FBQyxFQUFaO0FBQ0EsTUFBTTZELFFBQVEsR0FBRyxJQUFJQyxRQUFKLENBQWEzRixNQUFiLENBQWpCOztBQUZKLDZDQUdzQjBGLFFBQVEsQ0FBQ0UsT0FBVCxFQUh0QjtBQUFBOztBQUFBO0FBR0k7QUFBQSxVQUFRQyxNQUFSO0FBQ0doRSxXQUFLLENBQUNnRSxNQUFNLENBQUMsQ0FBRCxDQUFQLENBQUwsR0FBaUJBLE1BQU0sQ0FBQyxDQUFELENBQXZCO0FBREg7QUFISjtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUtJLFNBQU9oRSxLQUFQO0FBQ0gsQ0FQTSxDLENBU1A7QUFDQTs7QUFDTyxJQUFNaUUsUUFBUSxHQUFHLFNBQVhBLFFBQVcsQ0FBQzlGLE1BQUQsRUFDeEI7QUFDSSxNQUFNMEYsUUFBUSxHQUFHLElBQUlDLFFBQUosQ0FBYTNGLE1BQWIsQ0FBakI7O0FBREosOENBRXNCMEYsUUFBUSxDQUFDRSxPQUFULEVBRnRCO0FBQUE7O0FBQUE7QUFFSSwyREFDQTtBQUFBLFVBRFFDLE1BQ1I7QUFDSSxVQUFHN0YsTUFBTSxDQUFDc0YsUUFBUCxDQUFnQk8sTUFBTSxDQUFDLENBQUQsQ0FBdEIsRUFBMkJFLElBQTNCLElBQWlDLFVBQWpDLElBQStDL0YsTUFBTSxDQUFDc0YsUUFBUCxDQUFnQk8sTUFBTSxDQUFDLENBQUQsQ0FBdEIsRUFBMkJFLElBQTNCLElBQWlDLE9BQW5GLEVBQ0kvRixNQUFNLENBQUNzRixRQUFQLENBQWdCTyxNQUFNLENBQUMsQ0FBRCxDQUF0QixFQUEyQkcsT0FBM0IsR0FBbUMsS0FBbkMsQ0FESixLQUdJaEcsTUFBTSxDQUFDc0YsUUFBUCxDQUFnQk8sTUFBTSxDQUFDLENBQUQsQ0FBdEIsRUFBMkJ4UixLQUEzQixHQUFpQyxFQUFqQztBQUNQO0FBUkw7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFTSSxTQUFPLElBQVA7QUFDSCxDQVhNLEMsQ0FZUDs7QUFDTyxJQUFNNFIsZUFBZSxHQUFHLFNBQWxCQSxlQUFrQixDQUFDakcsTUFBRCxFQUMvQjtBQUNJOEYsVUFBUSxDQUFDOUYsTUFBRCxDQUFSO0FBQ0FBLFFBQU0sQ0FBQ29CLEtBQVAsQ0FBYUMsT0FBYixHQUFxQixNQUFyQjtBQUNILENBSk0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDOUNQO0FBQ0EsSUFBTTNFLElBQUksR0FBQzNPLGtFQUFjLENBQUMsQ0FBRCxDQUF6Qjs7QUFFQSxJQUFNOFIsY0FBYyxHQUFHMVMsK0RBQVEsSUFBaUIsR0FBQ1cseURBQWxCLEdBQXdCLFVBQXhCLEdBQW1DNE8sSUFBbkMsR0FBd0MsS0FBekMsQ0FBOUI7O0FBRUE7QUFFQTtDQUdBO0FBQ0E7O0FBQ08sSUFBTXdKLFNBQVM7QUFBQSxxRUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkNBRWYsSUFBSUMsT0FBSixDQUFZLFVBQUNDLE9BQUQsRUFBVUMsTUFBVixFQUNuQjtBQUNJLGtCQUFNckUsR0FBRyxHQUFHLElBQUlDLGNBQUosRUFBWjtBQUNBRCxpQkFBRyxDQUFDRSxJQUFKLENBQVMsS0FBVCxFQUFnQjNVLDBEQUFNLEdBQUMsaUJBQXZCOztBQUNBeVUsaUJBQUcsQ0FBQ3NFLE1BQUosR0FBYTtBQUFBLHVCQUFNRixPQUFPLENBQUM3RCxJQUFJLENBQUNDLEtBQUwsQ0FBV1IsR0FBRyxDQUFDUyxZQUFmLENBQUQsQ0FBYjtBQUFBLGVBQWI7O0FBQ0FULGlCQUFHLENBQUN1RSxPQUFKLEdBQWM7QUFBQSx1QkFBTUYsTUFBTSxDQUFDckUsR0FBRyxDQUFDd0UsVUFBTCxDQUFaO0FBQUEsZUFBZDs7QUFDQXhFLGlCQUFHLENBQUMyQixJQUFKO0FBQ0gsYUFQTSxDQUZlOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUo7O0FBQUEsa0JBQVR1QyxTQUFTO0FBQUE7QUFBQTtBQUFBLEdBQWY7QUFZQSxJQUFNekMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixHQUNqQztBQUNJO0FBQ0EsTUFBTWdELFNBQVMsR0FBQyxJQUFJN0osSUFBSixHQUFXOEosaUJBQVgsS0FBK0IsQ0FBQyxDQUFoRDtBQUNBLE1BQUdELFNBQVMsR0FBR2xTLGtFQUFaLElBQWlDa1MsU0FBUyxHQUFHblMsa0VBQWhELEVBQ0ksT0FBTyxDQUFQLENBREosS0FFSyxPQUFPbVMsU0FBUDtBQUNSLENBUE0sQyxDQVNQO0FBQ0E7O0FBQ08sSUFBTUUsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsUUFBRCxFQUFXQyxRQUFYLEVBQzNCO0FBQ0ksTUFBTUMsS0FBSyxHQUFDRixRQUFRLEdBQUN2SyxJQUFJLENBQUNFLEtBQUwsQ0FBV0YsSUFBSSxDQUFDRyxNQUFMLE1BQWVxSyxRQUFRLEdBQUNELFFBQXhCLENBQVgsQ0FBckI7QUFDQSxNQUFNRyxPQUFPLEdBQUMsb0RBQWQ7QUFDQSxNQUFNQyxNQUFNLEdBQUMsOEJBQWI7QUFDQSxNQUFJaFgsUUFBUSxHQUFDK1csT0FBTyxDQUFDMUssSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjdUssT0FBTyxDQUFDcEwsTUFBakMsQ0FBRCxDQUFwQjs7QUFDQSxPQUFJLElBQUlnSixDQUFDLEdBQUMsQ0FBVixFQUFZQSxDQUFDLEdBQUVtQyxLQUFLLEdBQUMsQ0FBckIsRUFBd0JuQyxDQUFDLEVBQXpCLEVBQ0E7QUFDSSxRQUFJQSxDQUFDLEdBQUcsQ0FBTCxLQUFXLENBQWQsRUFDSTNVLFFBQVEsSUFBRWdYLE1BQU0sQ0FBQzNLLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY3dLLE1BQU0sQ0FBQ3JMLE1BQWhDLENBQUQsQ0FBaEIsQ0FESixLQUdJM0wsUUFBUSxJQUFFK1csT0FBTyxDQUFDMUssSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjdUssT0FBTyxDQUFDcEwsTUFBakMsQ0FBRCxDQUFqQjtBQUNQOztBQUNEM0wsVUFBUSxJQUFFK1csT0FBTyxDQUFDMUssSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjdUssT0FBTyxDQUFDcEwsTUFBakMsQ0FBRCxDQUFqQjtBQUNBLFNBQU8zTCxRQUFQO0FBQ0gsQ0FmTSxDLENBaUJQO0FBQ0E7O0FBQ08sSUFBTWlULFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNQLE1BQUQsRUFBU0UsS0FBVCxFQUFnQnFFLFVBQWhCLEVBQzFCO0FBQ0ksTUFBTUMsV0FBVyxHQUNqQjtBQUNJM0osTUFBRSxFQUFFbUYsTUFEUjtBQUVJRSxTQUFLLEVBQUVBLEtBRlg7QUFHSXVFLFlBQVEsRUFBRUY7QUFIZCxHQURBO0FBTUF4RyxzRUFBVSxDQUFDLE1BQUQsRUFBU3lHLFdBQVQsQ0FBVjtBQUNILENBVE0sQyxDQVdQO0FBQ0E7O0FBQ08sSUFBTXhELGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQzdCLEtBQUQsRUFDaEM7QUFDSSxNQUFNdUYsVUFBVSxHQUFDdkcsbUVBQVMsQ0FBQyxZQUFELENBQTFCOztBQUNBLE1BQUcsQ0FBQ3BGLDJEQUFPLENBQUMyTCxVQUFELENBQVgsRUFDQTtBQUNJLFFBQU1DLE1BQU0sR0FBQzlFLElBQUksQ0FBQ0MsS0FBTCxDQUFXNEUsVUFBWCxDQUFiOztBQUNBLFFBQUcsQ0FBQzNMLDJEQUFPLENBQUM0TCxNQUFNLENBQUNGLFFBQVIsQ0FBUixJQUE2QixDQUFDMUwsMkRBQU8sQ0FBQzRMLE1BQU0sQ0FBQ0MsZ0JBQVIsQ0FBckMsSUFBa0UsQ0FBQzdMLDJEQUFPLENBQUM0TCxNQUFNLENBQUNFLGVBQVIsQ0FBMUUsSUFBc0csQ0FBQzlMLDJEQUFPLENBQUM0TCxNQUFNLENBQUNHLFdBQVIsQ0FBakgsRUFDQTtBQUNJM0YsV0FBSyxDQUFDc0YsUUFBTixHQUFlRSxNQUFNLENBQUNGLFFBQXRCO0FBQ0F0RixXQUFLLENBQUN5RixnQkFBTixHQUF1QkQsTUFBTSxDQUFDQyxnQkFBOUI7QUFDQXpGLFdBQUssQ0FBQzBGLGVBQU4sR0FBc0JGLE1BQU0sQ0FBQ0UsZUFBN0I7QUFDQTFGLFdBQUssQ0FBQzJGLFdBQU4sR0FBa0JILE1BQU0sQ0FBQ0csV0FBekI7QUFDSDtBQUNKOztBQUNELFNBQU8zRixLQUFQO0FBQ0gsQ0FmTSxDLENBaUJQO0FBQ0E7O0FBQ08sSUFBTXRCLFlBQVk7QUFBQSxzRUFBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFPUSxrQkFBUCw4REFBYyxFQUFkO0FBQWtCMEcsMEJBQWxCO0FBQWtDL0csbUJBQWxDO0FBQTJDZ0gscUJBQTNDO0FBQUEsOENBRWpCLElBQUl2QixPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQ25CO0FBQ0ksa0JBQU1zQixTQUFTLEdBQUM5RyxtRUFBUyxDQUFDLE1BQUQsQ0FBekI7O0FBQ0Esa0JBQUdwRiwyREFBTyxDQUFDa00sU0FBRCxDQUFWLEVBQ0E7QUFDSUMsNEJBQVksQ0FBQ0gsY0FBRCxFQUFpQi9HLE9BQWpCLEVBQTBCZ0gsU0FBMUIsQ0FBWjtBQUNBdEIsdUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCxlQUpELE1BTUE7QUFDSSxvQkFBTXhGLElBQUksR0FBQzJCLElBQUksQ0FBQ0MsS0FBTCxDQUFXbUYsU0FBWCxDQUFYOztBQUNBLG9CQUFHbE0sMkRBQU8sQ0FBQ21GLElBQUksQ0FBQ3JELEVBQU4sQ0FBUCxJQUFvQjlCLDJEQUFPLENBQUNtRixJQUFJLENBQUNnQyxLQUFOLENBQTNCLElBQTJDbkgsMkRBQU8sQ0FBQ21GLElBQUksQ0FBQ3VHLFFBQU4sQ0FBbEQsSUFBcUV2RyxJQUFJLENBQUN1RyxRQUFMLEdBQWdCdkssSUFBSSxDQUFDa0csR0FBTCxFQUF4RixFQUNBO0FBQ0l4Qix3RkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBc0csOEJBQVksQ0FBQ0gsY0FBRCxFQUFpQi9HLE9BQWpCLEVBQTBCZ0gsU0FBMUIsQ0FBWjtBQUNBdEIseUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCxpQkFMRCxNQU9BO0FBQ0ksc0JBQU1wRSxHQUFHLEdBQUcsSUFBSUMsY0FBSixFQUFaO0FBQ0FELHFCQUFHLENBQUNFLElBQUosQ0FBUyxLQUFULEVBQWdCM1UsMERBQU0sR0FBQ3NGLDJEQUFQLEdBQWtCSyxnRUFBbEIsR0FBa0MwTixJQUFJLENBQUNnQyxLQUF2RDs7QUFDQVoscUJBQUcsQ0FBQ3NFLE1BQUosR0FBYSxZQUNiO0FBQ0ksd0JBQUloRSxRQUFRLEdBQUNDLElBQUksQ0FBQ0MsS0FBTCxDQUFXUixHQUFHLENBQUNTLFlBQWYsQ0FBYjs7QUFDQSx3QkFBSVQsR0FBRyxDQUFDakIsTUFBSixLQUFlLEdBQWYsSUFBc0J1QixRQUFRLENBQUN1RixPQUEvQixJQUEwQ3ZGLFFBQVEsQ0FBQy9FLEVBQVQsSUFBZWpDLFNBQTdELEVBQ0E7QUFDSSwwQkFBR2dILFFBQVEsQ0FBQy9FLEVBQVQsS0FBY3FELElBQUksQ0FBQ3JELEVBQXRCLEVBQ0E7QUFDSXFELDRCQUFJLENBQUM1TSxJQUFMLEdBQVVzTyxRQUFRLENBQUN0TyxJQUFuQjtBQUNBNE0sNEJBQUksQ0FBQ2tILFFBQUwsR0FBY3hGLFFBQVEsQ0FBQ3dGLFFBQXZCO0FBQ0FsSCw0QkFBSSxDQUFDNEMsY0FBTCxHQUFvQmxCLFFBQVEsQ0FBQ2tCLGNBQTdCO0FBQ0E1Qyw0QkFBSSxDQUFDRyxNQUFMLEdBQVl1QixRQUFRLENBQUN2QixNQUFyQixDQUpKLENBSWdDOztBQUM1Qk4sNEZBQVUsQ0FBQyxNQUFELEVBQVNHLElBQVQsQ0FBVixDQUxKLENBTUk7O0FBQ0EsNEJBQUcwQixRQUFRLENBQUN2QixNQUFULEtBQWtCLE1BQWxCLElBQTRCdUIsUUFBUSxDQUFDeUYsUUFBVCxJQUFxQixDQUFwRCxFQUNBO0FBQ0ksOEJBQU1DLFVBQVUsR0FBQ3hhLDJEQUFPLEdBQUMsR0FBUixHQUFZcVMsY0FBYyxDQUFDN0IsV0FBNUM7QUFDQSw4QkFBR2dELE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQjNELElBQWhCLENBQXFCNkYsT0FBckIsQ0FBNkI2RSxVQUE3QixNQUEyQyxDQUFDLENBQS9DLEVBQ0loSCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCLE1BQUlyQixjQUFjLENBQUM3QixXQUFuQixHQUErQixZQUF0RCxFQUhSLENBRzRFOztBQUN4RW9JLGlDQUFPLENBQUMsSUFBRCxDQUFQO0FBQ0gseUJBTkQsTUFRQTtBQUNJLDhCQUFHckYsTUFBTSxDQUFDcEYsTUFBUCxLQUFnQixDQUFoQixJQUFxQm9GLE1BQU0sQ0FBQ29DLE9BQVAsQ0FBZWIsUUFBUSxDQUFDdkIsTUFBeEIsTUFBa0MsQ0FBQyxDQUEzRCxFQUNBO0FBQ0k2Ryx3Q0FBWSxDQUFDSCxjQUFELEVBQWlCL0csT0FBakIsRUFBMEJnSCxTQUExQixDQUFaO0FBQ0F0QixtQ0FBTyxDQUFDLEtBQUQsQ0FBUDtBQUNILDJCQUpELE1BTUlBLE9BQU8sQ0FBQyxJQUFELENBQVA7QUFDUDtBQUNKLHVCQXpCRCxNQTJCQTtBQUNJOUUsOEZBQVksQ0FBQyxNQUFELENBQVo7QUFDQXNHLG9DQUFZLENBQUNILGNBQUQsRUFBaUIvRyxPQUFqQixFQUEwQmdILFNBQTFCLENBQVo7QUFDQXRCLCtCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixxQkFsQ0QsTUFvQ0E7QUFDSTlFLDRGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0FzRyxrQ0FBWSxDQUFDSCxjQUFELEVBQWlCL0csT0FBakIsRUFBMEJnSCxTQUExQixDQUFaO0FBQ0F0Qiw2QkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0osbUJBNUNEOztBQTZDQXBFLHFCQUFHLENBQUN1RSxPQUFKLEdBQWM7QUFBQSwyQkFBTUYsTUFBTSxDQUFDckUsR0FBRyxDQUFDd0UsVUFBTCxDQUFaO0FBQUEsbUJBQWQ7O0FBQ0F4RSxxQkFBRyxDQUFDMkIsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFacEQsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU1xSCxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDSCxjQUFELEVBQWlCL0csT0FBakIsRUFBMEJnSCxTQUExQixFQUNyQjtBQUNJLE1BQUcsQ0FBQ2pNLDJEQUFPLENBQUNpRixPQUFELENBQVgsRUFDSUQsb0VBQVUsQ0FBQyxTQUFELEVBQVlDLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ2pGLDJEQUFPLENBQUNpTSxTQUFELENBQVgsRUFDSWpILG9FQUFVLENBQUMsS0FBRCxFQUFRaUgsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDak0sMkRBQU8sQ0FBQ2dNLGNBQUQsQ0FBWCxFQUNJekcsTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxNQUFoQixDQUF1QnVHLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvY29ubmVjdGlvbi5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9jb25uZWN0aW9uLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIiwvLyBpZGVtXG4gICAgbmJSYW5kb21SZXN1bHRzIDogMy8vIGxpbWl0ZSBsZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBXaWtpcMOpZGlhIGVuIHF1ZXN0aW9uc1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCByZWNldmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlYXV4IHF1aXpzIHBvdXIgdGVzdGVyIHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyB2b3RyZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciAoQ3RybCtWKSBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmllcnMgcXVpenNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogOSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJtb24tY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhIDxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKTwvc3Bhbj4sIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvc3Bhbj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSAhXCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogXCJUZXN0ZXIgV2lraUxlcm5pIGdyYXR1aXRlbWVudC5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5TdWl2YW50IGxlcyBxdWVzdGlvbnMsIHVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzIGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gPGI+Qydlc3QgdG91am91cnMgbGUgY29udGVudSBkZSBsJ2FydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2kgY29uY2VybmFudCBsZXMgXFxcImJvbm5lc1xcXCIgcsOpcG9uc2VzPC9iPi4gTWFpcyBsZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlcywgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50PC9iPi48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuIENlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSA8Yj50ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6PC9iPiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEdyw6JjZSDDoCBjZSBjb21wdGUsIHZvdXMgcG91cnJleiBhdXNzaSA8Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenM8L2I+IHBvdXIgY29udGludWVyIMOgIFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCJMZXMgZGVybmnDqHJlcyBncmFpbmVzIGRlIHNhdm9pclwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBERSBTRSBDT05ORUNURVJcblxuLy8vIEwndXRpbGlzYXRldXIgcGV1dCBhdm9pciByw6lwb25kdSDDoCB1biBxdWl6IGF2YW50IGQnYXJyaXZlciBzdXIgbGEgcGFnZSBkZSBjb25uZXhpb25cbi8vLyBEYW5zIGNlIGNhcyBpbCBmYXV0IGVucmVnaXN0cmVyIHNvbiByw6lzdWx0YXQgZW4gbcOqbWUgdGVtcHMsIHVuZSBmb2lzIGxhIGNvbm5leGlvbiB2YWxpZMOpZVxuXG4vLy8gTGUgY29ubmV4aW9uIHBldXQgc2UgZmFpcmUgZGlyZWN0ZW1lbnQgaWNpIHZpYSBsYSBzYWlzaWUgZCd1biBtb3QgZGUgcGFzc2Vcbi8vLyBPdSB2aWEgbCdlbnZvaSBkJ3VuIHRva2VuIHBhciBlLW1haWxcblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuaW1wb3J0IHsgY29ubmVjdGlvblJvdXRlLCBnZXRMb2dpbkxpbmtSb3V0ZSwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi9jb25maWcvdXNlcnMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgY2hlY2tBbnN3ZXJEYXRhcywgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIGdldFRpbWVEaWZmZXJlbmNlLCBzZXRTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB0eHRVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IG15Rm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29ubmVjdGlvblwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbi8vIFRlc3QgZGUgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgKyBhZmZpY2hhZ2UgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uLlxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogdHh0VXNlcnMuYWxyZWFkeUNvbm5lY3RlZCwgY29sb3I6XCJpbmZvcm1hdGlvblwiIH0pOy8vIHBvdXIgbCdhZmZpY2hlciBzdXIgbGEgcGFnZSBzdWl2YW50ZVxuICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgaG9tZVBhZ2U9dXNlci5zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV0pO1xuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFVzZXJzLmFscmVhZHlDb25uZWN0ZWQsIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdKTsvLyBhdSBjYXMgb8O5wqBibG9jYWdlIHJlZGlyZWN0aW9uXG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSAgICAgXG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpO1xuXG4vLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZGVzIGRvbm7DqWVzIGRlIGNvbm5leGlvbiA6XG5teUZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjsvLyBlZmZhY2UgZCfDqXZlbnR1ZWxzIG1lc3NhZ2VzIGTDqWrDoCBhZmZpY2jDqXNcbiAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhteUZvcm0pO1xuICAgICAgICBpZihpc0VtcHR5KGRhdGFzLnBhc3N3b3JkKSAmJiBpc0VtcHR5KGRhdGFzLmdldExvZ2luTGluaykpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcImRpdlwiLCB0eHRVc2Vycy5uZWVkQ2hvb3NlTG9naW5XYXksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmdldExvZ2luTGluaykpXG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCt1c2VyUm91dGVzK2dldExvZ2luTGlua1JvdXRlKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY29ubmVjdGlvblJvdXRlKTtcbiAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzcG9uc2UubWVzc2FnZSkpIFxuICAgICAgICAgICAgICAgICAgICAgICAgeyAvLyBjYXMgZCd1bmUgZGVtYW5kZSBkZSBsaWVuIGRlIGNvbm5leGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkocmVzcG9uc2UudXNlcklkKSAmJiAhaXNFbXB0eShyZXNwb25zZS5jb25uZXhpb25UaW1lKSAmJiAhaXNFbXB0eShyZXNwb25zZS50b2tlbikpXG4gICAgICAgICAgICAgICAgICAgICAgICB7ICAgLy8gY2FzIGQndW5lIGNvbm5leGlvbiBkaXJlY3RlLCBvbiBjcsOpw6kgdW5lIHNlc3Npb24gZGUgY29ubmV4aW9uIGV0IHJlZGlyaWdlIGwndXRpbGlzYXRldXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uTWF4VGltZT1EYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmNvbm5leGlvblRpbWUuZW5kc1dpdGgoXCJkYXlzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb25NYXhUaW1lKz1wYXJzZUludChyZXNwb25zZS5jb25uZXhpb25UaW1lLDEwKSoyNCozNjAwKjEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb25NYXhUaW1lKz1wYXJzZUludChyZXNwb25zZS5jb25uZXhpb25UaW1lLDEwKSozNjAwKjEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2Vzc2lvbihyZXNwb25zZS51c2VySWQsIHJlc3BvbnNlLnRva2VuLCBjb25uZXhpb25NYXhUaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIpOy8vICEgaW1wb3J0YW50IHBvdXIgbmUgcGFzIGVucmVnaXN0ZXIgcGx1c2lldXJzIGZvaXMgbGUgcsOpc3VsdGF0ICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9hZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0VXNlcnMuY29ubmVjdGlvbk9rLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsvLyBhdSBjYXMgb8O5IGJsb2NhZ2UgcmVkaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsJ3V0aWxpc2F0ZXVyIHBldXQgYXZvaXIgdGVudMOpIGQnYWNjw6lkZXIgw6AgdW5lIGF1dHJlIHBhZ2UgcXVlIHNhIHBhZ2UgZCdhY2N1ZWlsIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsPWdldExvY2FseShcInVybFwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eSh1cmwpICYmIHVybC5ocmVmLmluZGV4T2Yoc2l0ZVVybCkhPT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD11cmwuaHJlZjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXJsXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybD1jb25maWdUZW1wbGF0ZVtyZXNwb25zZS5zdGF0dXMrXCJIb21lUGFnZVwiXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHR4dC5zZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGF0YXMudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoKTtcbiAgICAgICAgICAgICAgICAvLyBzaSBsJ3V0aWxpc2F0ZXVyIGEgcHLDqWPDqWRlbWVudCByw6lwb25kdSDDoCB1biBxdWl6LCBqJ2Fqb3V0ZSBsZXMgaW5mb3MgZGUgc29uIHLDqXN1bHRhdCA6XG4gICAgICAgICAgICAgICAgZGF0YXM9Y2hlY2tBbnN3ZXJEYXRhcyhkYXRhcyk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn0pOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/deconnection.app.js b/front/public/JS/deconnection.app.js index f70fdb6..75ae09d 100644 --- a/front/public/JS/deconnection.app.js +++ b/front/public/JS/deconnection.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -387,8 +391,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -411,6 +415,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -433,7 +438,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -444,20 +449,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -470,15 +478,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -486,8 +496,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -601,7 +612,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -642,7 +654,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -705,7 +717,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -883,7 +997,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -964,7 +1078,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1052,13 +1167,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1110,4 +1225,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9kZWNvbm5lY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsImhlbGxvRGV2IiwiZGl2UmVzcG9uc2UiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY29uZmlnIiwiaW5pdGlhbGlzZSIsImdldENvbmZpZyIsImFkZEVsZW1lbnQiLCJyZW1vdmVMb2NhbHkiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJKU09OIiwic3RyaW5naWZ5IiwiZ2V0TG9jYWx5IiwianNvbiIsInBhcnNlIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJjb25zb2xlIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJob21lUGFnZSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25sb2FkIiwicmVzcG9uc2VUZXh0Iiwib25lcnJvciIsInN0YXR1c1RleHQiLCJzZW5kIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFBhc3N3b3JkIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsImNoZWNrU2Vzc2lvbiIsInVybFJlZGlyZWN0aW9uIiwibWVzc2FnZSIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsInVzZXIiLCJub3ciLCJyZXNwb25zZSIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50Iiwid2luZG93IiwibG9jYXRpb24iLCJpbmRleE9mIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFB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QyxTQUFELEVBQVlzRSxPQUFaLENBQVY7QUFDSixNQUFHLENBQUN4SSwyREFBTyxDQUFDeUksU0FBRCxDQUFYLEVBQ0l2RSxvRUFBVSxDQUFDLEtBQUQsRUFBUXVFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3pJLDJEQUFPLENBQUN1SSxjQUFELENBQVgsRUFDSWEsTUFBTSxDQUFDQyxRQUFQLENBQWdCRSxNQUFoQixDQUF1QmhCLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvZGVjb25uZWN0aW9uLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2RlY29ubmVjdGlvbi5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwiZGVmYXVsdFwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIndpa2lsZXJuaVwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsICAgIFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIi8vIGlkZW1cbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIERFIETDiUNPTk5FWElPTlxuXG4vLy8gT24gc2UgY29udGVudGUgaWNpIGRlIHN1cHByaW1lciBsYSBzZXNzaW9uIHN0b2Nrw6llIGPDtHTDqSBjbGllbnRcblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0Q29uZmlnIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB0eHRVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xubGV0IGNvbmZpZztcbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVybFwiKTtcbiAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0VXNlcnMuYnllYnllTWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9kZWNvbm5lY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInJlZ2VuZXJhdGVIVE1MIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJhYm91dFBhZ2UiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJuZXdzTGlzdFRpdGxlIiwibWFpbFJlY2lwaWVudFR4dCIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwidHh0VXNlcnMiLCJoZWxsb0RldiIsImRpdlJlc3BvbnNlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImNvbmZpZyIsImluaXRpYWxpc2UiLCJnZXRDb25maWciLCJhZGRFbGVtZW50IiwicmVtb3ZlTG9jYWx5Iiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldExvY2FseSIsImpzb24iLCJwYXJzZSIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiaSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwiY29uc29sZSIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ubG9hZCIsInJlc3BvbnNlVGV4dCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Iiwic2VuZCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJkYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJjaGVja1Nlc3Npb24iLCJ1cmxSZWRpcmVjdGlvbiIsIm1lc3NhZ2UiLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwibm93IiwicmVzcG9uc2UiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaW5kZXhPZiIsImFzc2lnbiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENBQTlCOztBQUVBRSxNQUFNLENBQUNDLE9BQVA7QUFFSUMsUUFBTSxFQUFFLDJCQUZaO0FBR0lDLFNBQU8sRUFBRSx1QkFIYjtBQUlJQyxXQUFTLEVBQUUsU0FKZjtBQUtJQyxZQUFVLEVBQUUsbUJBTGhCO0FBTUlDLFlBQVUsRUFBRSxtQkFOaEI7QUFPSUMsYUFBVyxFQUFFLHVCQVBqQjtBQVFJQyxXQUFTLEVBQUUsSUFSZjtBQVNJQyxPQUFLLEVBQUUsV0FUWDtBQVN3QjtBQUNwQkMsZ0JBQWMsRUFBRSxDQUFDLElBQUQsQ0FWcEI7QUFVMkI7QUFDdkJDLFVBQVEsRUFBRSxtQkFYZDtBQVlJQyxvQkFBa0IsRUFBRSxJQVp4QjtBQVk4QjtBQUMxQkMsMEJBQXdCLEVBQUUsR0FiOUI7QUFhbUM7QUFDL0JDLDhCQUE0QixFQUFFLENBZGxDO0FBY3FDO0FBQ2pDQyxrQ0FBZ0MsRUFBRSxLQWZ0QztBQWU2QztBQUN6Q0MsMkJBQXlCLEVBQUUsSUFoQi9CO0FBaUJJQyw4QkFBNEIsRUFBRSxLQWpCbEM7QUFrQklDLDZCQUEyQixFQUFFLFVBbEJqQztBQW1CSUMsK0JBQTZCLEVBQUUsSUFuQm5DO0FBbUJ3QztBQUNwQ0MsNEJBQTBCLEVBQUUsSUFwQmhDO0FBcUJJQyxnQ0FBOEIsRUFBRSxRQXJCcEM7QUFxQjhDO0FBQzFDQyx5QkFBdUIsRUFBRSxFQXRCN0I7QUF1QklDLHlDQUF1QyxFQUFFLENBdkI3QztBQXdCSUMsMENBQXdDLEVBQUUsRUF4QjlDO0FBeUJJQywyQ0FBeUMsRUFBRSxDQXpCL0M7QUEwQklDLG1DQUFpQyxFQUFFLEdBMUJ2QztBQTJCSTtBQUNBQyxnQkFBYyxFQUFFLENBNUJwQjtBQTRCdUI7QUFDbkJDLGdCQUFjLEVBQUUsQ0E3QnBCO0FBNkJ1QjtBQUNuQkMsY0FBWSxFQUFFLEVBOUJsQjtBQStCSUMscUJBQW1CLEVBQUUsRUEvQnpCO0FBK0I0QjtBQUN4QkMsK0JBQTZCLEVBQUMsQ0FoQ2xDO0FBZ0NxQztBQUNqQ0MsNkJBQTJCLEVBQUMsRUFqQ2hDO0FBaUNvQztBQUNoQ0Msa0NBQWdDLEVBQUUsRUFsQ3RDO0FBa0MwQztBQUN0Q0MseUJBQXVCLEVBQUUsQ0FuQzdCO0FBb0NJO0FBQ0FDLG9CQUFrQixFQUFFLENBckN4QjtBQXNDSUMsb0JBQWtCLEVBQUUsQ0F0Q3hCO0FBdUNJQyw0QkFBMEIsRUFBRSxPQXZDaEM7QUF1Q3dDO0FBQ3BDQywwQkFBd0IsRUFBRSxDQUFFLFdBQUYsRUFBZSxZQUFmLEVBQTZCLFdBQTdCLEVBQTBDLFdBQTFDLEVBQXVELFdBQXZELENBeEM5QjtBQXlDSTtBQUNBQywyQkFBeUIsRUFBRSxHQTFDL0I7QUEyQ0lDLHFDQUFtQyxFQUFFLEdBM0N6QztBQTRDSTtBQUNBQyxZQUFVLEVBQUUsQ0E3Q2hCO0FBOENJQyxZQUFVLEVBQUU7QUE5Q2hCLHNEQWdEb0IzQyxjQUFjLENBQUM0QixjQWhEbkMsc0RBaURvQjVCLGNBQWMsQ0FBQzZCLGNBakRuQyxvREFrRGtCN0IsY0FBYyxDQUFDOEIsWUFsRGpDLHlEQW1EdUJoQyxLQUFLLENBQUM4QyxRQUFOLENBQWVDLFNBbkR0QyxxREFvRG1CL0MsS0FBSyxDQUFDZ0QsYUFwRHpCLDREQXFEMEJoRCxLQUFLLENBQUNpRCxvQkFyRGhDLDhEQXNENEIvQyxjQUFjLENBQUNnRCxzQkF0RDNDLHlEQXVEdUJoRCxjQUFjLENBQUNpRCxpQkF2RHRDLG1FQXdEaUNqRCxjQUFjLENBQUNrRCwyQkF4RGhELDREQXlEMEJsRCxjQUFjLENBQUNtRCxvQkF6RHpDLDJEQTBEeUJuRCxjQUFjLENBQUNvRCxtQkExRHhDLG9COzs7Ozs7Ozs7OztBQ0hBbkQsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBbUQscUJBQW1CLEVBQUUsZ0JBRnpCO0FBR0lDLHdCQUFzQixFQUFFLE1BSDVCO0FBSUlDLDRCQUEwQixFQUFFLFVBSmhDO0FBS0lDLDhCQUE0QixFQUFFLFFBTGxDO0FBTUlDLGtCQUFnQixFQUFFLFVBTnRCO0FBT0lDLHdCQUFzQixFQUFHLFNBUDdCO0FBUUlDLDJCQUF5QixFQUFHLFNBUmhDO0FBU0lDLDhCQUE0QixFQUFHLFlBVG5DO0FBVUlDLGdDQUE4QixFQUFHLGNBVnJDO0FBV0lDLDJCQUF5QixFQUFFLDZCQVgvQjtBQVlJQyxnQkFBYyxFQUFFLGtCQVpwQjtBQWFJO0FBQ0FDLGdCQUFjLEVBQUUsWUFkcEI7QUFlSTtBQUNBQyxpQkFBZSxFQUFFLGVBaEJyQjtBQWlCSTtBQUNBQyxnQ0FBOEIsRUFBRSxzQkFsQnBDO0FBbUJJQyxvQkFBa0IsRUFBRSxnQkFuQnhCO0FBb0JJQyxpQkFBZSxFQUFHLHVCQXBCdEI7QUFxQklDLGVBQWEsRUFBRSxpQkFyQm5CO0FBc0JJO0FBQ0FDLGVBQWEsRUFDYjtBQUNJQyxTQUFLLEVBQUU7QUFBRUMsZUFBUyxFQUFFLEdBQWI7QUFBa0JDLGNBQVEsRUFBRTtBQUE1QixLQURYO0FBRUlDLFFBQUksRUFBRTtBQUFFRixlQUFTLEVBQUU7QUFBYixLQUZWO0FBRThCO0FBQzFCRyxnQkFBWSxFQUFFO0FBQUVGLGNBQVEsRUFBRTtBQUFaO0FBSGxCLEdBeEJKO0FBNkJJRyxzQkFBb0IsRUFBRztBQUFFL0IsYUFBUyxFQUFFLENBQWI7QUFBZ0I0QixZQUFRLEVBQUU7QUFBMUIsR0E3QjNCO0FBOEJJSSxVQUFRLEVBQ1I7QUFDSUMsUUFBSSxFQUFFO0FBQUVOLGVBQVMsRUFBRSxHQUFiO0FBQWtCQyxjQUFRLEVBQUU7QUFBNUIsS0FEVjtBQUVJTSxRQUFJLEVBQUU7QUFBRU4sY0FBUSxFQUFFLElBQVo7QUFBa0JPLFNBQUcsRUFBQyxDQUF0QjtBQUF5QkMsa0JBQVksRUFBQztBQUF0QztBQUZWLEdBL0JKO0FBbUNJQyxRQUFNLEVBQ047QUFDSUosUUFBSSxFQUFFO0FBQUVOLGVBQVMsRUFBRSxHQUFiO0FBQWtCQyxjQUFRLEVBQUU7QUFBNUI7QUFEVixHQXBDSjtBQXVDSTdDLGdCQUFjLEVBQUUsQ0F2Q3BCO0FBd0NJQyxnQkFBYyxFQUFFLENBeENwQjtBQXlDSUMsY0FBWSxFQUFFLEVBekNsQjtBQTBDSXFELFdBQVMsRUFBRSxDQTFDZjtBQTJDSUMsV0FBUyxFQUFFLENBM0NmO0FBMkNrQjtBQUNkO0FBQ0FwQyx3QkFBc0IsRUFBRyxzQkE3QzdCO0FBOENJQyxtQkFBaUIsRUFBRyxnQ0E5Q3hCO0FBK0NJQyw2QkFBMkIsRUFBRyw0QkEvQ2xDO0FBZ0RJbUMsY0FBWSxFQUFHLDJCQWhEbkI7QUFpRElsQyxzQkFBb0IsRUFBRyxtQkFqRDNCO0FBa0RJbUMsYUFBVyxFQUFHLG9CQWxEbEI7QUFtRElsQyxxQkFBbUIsRUFBRyxNQW5EMUI7QUFtRGlDO0FBQzdCbUMsWUFBVSxFQUFHLE9BcERqQjtBQW9EeUI7QUFDckJDLGlCQUFlLEVBQUcsQ0FyRHRCLENBcUR1Qjs7QUFyRHZCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQXZGLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k7QUFDQXVGLFlBQVUsRUFBRSxPQUZoQjtBQUdJQyxnQkFBYyxFQUFFLFNBSHBCO0FBSUlDLG1CQUFpQixFQUFFLGlCQUp2QjtBQUtJQyx5QkFBdUIsRUFBRSxjQUw3QjtBQU1JQywwQkFBd0IsRUFBRSxjQU45QjtBQU9JQyxpQkFBZSxFQUFFLGNBUHJCO0FBUUlDLGlCQUFlLEVBQUUsUUFSckI7QUFTSUMsbUJBQWlCLEVBQUUsZUFUdkI7QUFVSUMseUJBQXVCLEVBQUUsaUJBVjdCO0FBV0lDLGNBQVksRUFBRSxPQVhsQjtBQVlJQyxpQkFBZSxFQUFFLFNBWnJCO0FBYUlDLG1CQUFpQixFQUFFLFlBYnZCO0FBY0lDLGlCQUFlLEVBQUUsVUFkckI7QUFlSUMsaUJBQWUsRUFBRSxVQWZyQjtBQWdCSUMsY0FBWSxFQUFFLGdCQWhCbEI7QUFpQklDLHdCQUFzQixFQUFFLG1CQWpCNUI7QUFrQklDLHNCQUFvQixFQUFFLGlCQWxCMUI7QUFtQklDLGFBQVcsRUFBRSx5QkFuQmpCO0FBb0JJQyxrQkFBZ0IsRUFBRSxxQkFwQnRCO0FBcUJJdEMsZUFBYSxFQUFFLGlCQXJCbkI7QUFzQkk7QUFDQXVDLE1BQUksRUFBRTtBQUFFcEMsYUFBUyxFQUFFLEVBQWI7QUFBaUJDLFlBQVEsRUFBRTtBQUEzQixHQXZCVjtBQXdCSW9DLE9BQUssRUFBRTtBQUFFckMsYUFBUyxFQUFFLEdBQWI7QUFBa0JDLFlBQVEsRUFBRTtBQUE1QixHQXhCWDtBQXlCSTdCLFVBQVEsRUFBRTtBQUFFQyxhQUFTLEVBQUUsQ0FBYjtBQUFnQjJCLGFBQVMsRUFBQyxFQUExQjtBQUE4QkMsWUFBUSxFQUFFO0FBQXhDLEdBekJkO0FBeUI4RDtBQUMxRHFDLGFBQVcsRUFBRTtBQUFFakUsYUFBUyxFQUFFLENBQWI7QUFBZ0IyQixhQUFTLEVBQUM7QUFBMUIsR0ExQmpCO0FBMkJJdUMsZUFBYSxFQUFFO0FBQUV2QyxhQUFTLEVBQUU7QUFBYixHQTNCbkI7QUE0Qkl3QyxPQUFLLEVBQUU7QUFBRUMsU0FBSyxFQUFFLE1BQVQ7QUFBaUJ4QyxZQUFRLEVBQUU7QUFBM0IsR0E1Qlg7QUE2Qkl5QyxtQkFBaUIsRUFBRSxDQUFDLEdBN0J4QjtBQThCSUMsbUJBQWlCLEVBQUMsR0E5QnRCO0FBK0JJO0FBQ0FyRSxlQUFhLEVBQUcsYUFoQ3BCO0FBaUNJQyxzQkFBb0IsRUFBRztBQWpDM0IsQ0FEQSxDOzs7Ozs7Ozs7OztBQ0FBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFOzs7Ozs7Ozs7OztBQ3RCQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRDs7Ozs7Ozs7Ozs7QUN0QkE5QyxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJa0gsZUFBYSxFQUFHLG9DQURwQjtBQUVJQyxxQkFBbUIsRUFBRyx1SEFGMUI7QUFHSUMsa0JBQWdCLEVBQUcsdUVBSHZCO0FBSUlDLG1CQUFpQixFQUFHLG1FQUp4QjtBQUtJQyxhQUFXLEVBQUcsNEdBTGxCO0FBTUlDLGtCQUFnQixFQUFHLHdCQU52QjtBQU9JQyxjQUFZLEVBQUcsc0RBUG5CO0FBUUlDLFFBQU0sRUFBRywrQ0FSYjtBQVNJQyxnQkFBYyxFQUFHLG9CQVRyQjtBQVVJQyxZQUFVLEVBQUcsMkRBVmpCO0FBV0lDLGFBQVcsRUFBRyxhQVhsQjtBQVlJQyxjQUFZLEVBQUUsVUFabEI7QUFhSUMsV0FBUyxFQUFFLFNBYmY7QUFjSUMsY0FBWSxFQUFFLFdBZGxCO0FBZUlDLGNBQVksRUFBRyx3Q0FmbkI7QUFnQklDLGlCQUFlLEVBQUcsK0NBaEJ0QjtBQWlCSUMsaUJBQWUsRUFBRyx3Q0FqQnRCO0FBa0JJQyxVQUFRLEVBQUcsNEJBbEJmO0FBbUJJQyxnQkFBYyxFQUFHLGtDQW5CckI7QUFvQklDLGVBQWEsRUFBRywyQ0FwQnBCO0FBcUJJQyxZQUFVLEVBQUcsMkJBckJqQjtBQXNCSUMsY0FBWSxFQUFHLHFEQXRCbkI7QUF1QklDLGNBQVksRUFBRyxpQkF2Qm5CO0FBd0JJQyxVQUFRLEVBQUcsZUF4QmY7QUF5QklDLGdCQUFjLEVBQUUsa0JBekJwQjtBQTBCSUMsd0JBQXNCLEVBQUcsaUJBMUI3QjtBQTJCSUMsWUFBVSxFQUFHO0FBM0JqQixDQURBLEM7Ozs7Ozs7Ozs7O0FDQUE3SSxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJNkksVUFBUSxFQUFFLG1DQURkO0FBRUlDLFVBQVEsRUFBRSx3Q0FGZDtBQUdJQyxvQkFBa0IsRUFBRSw4RUFIeEI7QUFJSUMsV0FBUyxFQUFFLHVDQUpmO0FBS0lDLGlCQUFlLEVBQUUscUtBTHJCO0FBTUlDLHFCQUFtQixFQUFFLDRFQU56QjtBQU9JQyxjQUFZLEVBQUcsbUNBUG5CO0FBUUlDLGtCQUFnQixFQUFHLG9FQVJ2QjtBQVNJQyxnQkFBYyxFQUFFLHFIQVRwQjtBQVVJQyxZQUFVLEVBQUcsc0JBVmpCO0FBV0lDLGNBQVksRUFBRywyQkFYbkI7QUFZSUMsNkJBQTJCLEVBQUcsaURBWmxDO0FBYUlDLFVBQVEsRUFBRyw0QkFiZjtBQWNJQyxrQkFBZ0IsRUFBRyw0QkFkdkI7QUFlSUMsc0JBQW9CLEVBQUcsOEVBZjNCO0FBZ0JJQyxvQkFBa0IsRUFBRyw2REFoQnpCO0FBaUJJQyx1QkFBcUIsRUFBRyxvRkFqQjVCO0FBa0JJQyx1QkFBcUIsRUFBRyxvRkFsQjVCO0FBbUJJQyxXQUFTLEVBQUcsK0RBbkJoQjtBQW9CSUMsbUJBQWlCLEVBQUUsd0RBcEJ2QjtBQXFCSUMsZ0JBQWMsRUFBRSxtQ0FyQnBCO0FBc0JJQyx1QkFBcUIsRUFBRSxpS0F0QjNCO0FBdUJJQywyQkFBeUIsRUFBRyxvQ0F2QmhDO0FBd0JJQyx1QkFBcUIsRUFBRyxxQkF4QjVCO0FBeUJJQyw0QkFBMEIsRUFBRyxxSEF6QmpDO0FBMEJJQyw2QkFBMkIsRUFBRyx5SEExQmxDO0FBMkJJQyxtQkFBaUIsRUFBRSwrSUEzQnZCO0FBNEJJQyx3QkFBc0IsRUFBRSw4QkE1QjVCO0FBNkJJQywwQkFBd0IsRUFBRSxtREE3QjlCO0FBOEJJQywrQkFBNkIsRUFBRSw4QkE5Qm5DO0FBK0JJQyxvQkFBa0IsRUFBRyxhQS9CekI7QUFnQ0lDLG9CQUFrQixFQUFHLDRCQWhDekI7QUFpQ0lDLG9CQUFrQixFQUFHLHNvQkFqQ3pCO0FBa0NJQyxxQkFBbUIsRUFBRyw0cUJBbEMxQjtBQW1DSUMsMkJBQXlCLEVBQUcsU0FuQ2hDO0FBb0NJQywyQkFBeUIsRUFBRyw0QkFwQ2hDO0FBcUNJQywyQkFBeUIsRUFBRyx3SEFyQ2hDO0FBc0NJQyw0QkFBMEIsRUFBRywySUF0Q2pDO0FBdUNJQywwQkFBd0IsRUFBRSw2SUF2QzlCO0FBd0NJQyxlQUFhLEVBQUUscURBeENuQjtBQXlDSUMsa0JBQWdCLEVBQUUsc0NBekN0QjtBQTBDSUMsaUJBQWUsRUFBRSx3REExQ3JCO0FBMkNJQyxjQUFZLEVBQUUsb0JBM0NsQjtBQTRDSUMsb0JBQWtCLEVBQUUsNkhBNUN4QjtBQTZDSUMsdUJBQXFCLEVBQUcsK0hBN0M1QjtBQThDSUMsbUJBQWlCLEVBQUcsdUlBOUN4QjtBQStDSUMsYUFBVyxFQUFFLG1DQS9DakI7QUFnRElDLHNCQUFvQixFQUFHLDBCQWhEM0I7QUFpRElDLGtCQUFnQixFQUFHLGVBakR2QjtBQWtESUMsc0JBQW9CLEVBQUcsK0dBbEQzQjtBQW1ESUMsdUJBQXFCLEVBQUcsaUhBbkQ1QjtBQW9ESUMsc0JBQW9CLEVBQUcsdUlBcEQzQjtBQXFESUMsa0JBQWdCLEVBQUUsNkNBckR0QjtBQXNESUMsc0JBQW9CLEVBQUcsNkZBdEQzQjtBQXVESUMsd0JBQXNCLEVBQUcsOEhBdkQ3QjtBQXdESUMsd0JBQXNCLEVBQUcsNkNBeEQ3QjtBQXlESUMsd0JBQXNCLEVBQUcsVUF6RDdCO0FBMERJQyx3QkFBc0IsRUFBRyxnSUExRDdCO0FBMkRJQyx5QkFBdUIsRUFBRyxvSUEzRDlCO0FBNERJQyw0QkFBMEIsRUFBRSw4U0E1RGhDO0FBNkRJQywwQkFBd0IsRUFBRSxpR0E3RDlCO0FBOERJQywwQkFBd0IsRUFBRywrSEE5RC9CO0FBK0RJQywwQkFBd0IsRUFBRSw0REEvRDlCO0FBZ0VJQyxnQ0FBOEIsRUFBRyx5RUFoRXJDO0FBaUVJQyxtQkFBaUIsRUFBRSw4Q0FqRXZCO0FBa0VJQyxtQkFBaUIsRUFBRywyQ0FsRXhCO0FBbUVJQyxtQkFBaUIsRUFBRyxZQW5FeEI7QUFvRUlDLG1CQUFpQixFQUFHLDBIQXBFeEI7QUFxRUlDLG9CQUFrQixFQUFHLDhIQXJFekI7QUFzRUlDLHVCQUFxQixFQUFFLHdKQXRFM0I7QUF1RUloRixpQkFBZSxFQUFFLG9DQXZFckI7QUF3RUlpRixtQkFBaUIsRUFBRSx5REF4RXZCO0FBeUVJQyx5QkFBdUIsRUFBRSx1RUF6RTdCO0FBMEVJQyw4QkFBNEIsRUFBRSxxRUExRWxDO0FBMkVJQywyQkFBeUIsRUFBRSw0RUEzRS9CO0FBNEVJQyxpQ0FBK0IsRUFBRSxzREE1RXJDO0FBNkVJQyw0QkFBMEIsRUFBRSxtREE3RWhDO0FBOEVJQyxnQkFBYyxFQUFFLG1CQTlFcEI7QUErRUlDLGVBQWEsRUFBRSwyRkEvRW5CO0FBZ0ZJQyxtQkFBaUIsRUFBRSxnTEFoRnZCO0FBaUZJQyxxQkFBbUIsRUFBRSxxQ0FqRnpCO0FBa0ZJQyx1QkFBcUIsRUFBRTtBQWxGM0IsQ0FEQSxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBO0lBRU1DLEk7Ozs7Ozs7NEJBRWFDLEssRUFDZjtBQUNJLFVBQUdBLEtBQUssS0FBR0MsU0FBUixJQUFxQkQsS0FBSyxLQUFHLElBQWhDLEVBQ0ksT0FBTyxJQUFQLENBREosS0FHQTtBQUNJQSxhQUFLLElBQUUsRUFBUCxDQURKLENBQ2M7O0FBQ1ZBLGFBQUssR0FBQ0EsS0FBSyxDQUFDRSxJQUFOLEVBQU47QUFDQSxZQUFHRixLQUFLLEtBQUcsRUFBWCxFQUNJLE9BQU8sSUFBUCxDQURKLEtBR0ksT0FBTyxLQUFQO0FBQ1A7QUFDSjs7O2tDQUVvQkcsUSxFQUNyQjtBQUNJLFVBQUdKLElBQUksQ0FBQ0ssT0FBTCxDQUFhRCxRQUFiLENBQUgsRUFDSUEsUUFBUSxHQUFDLElBQVQsQ0FESixLQUdBO0FBQ0lBLGdCQUFRLElBQUUsRUFBVixDQURKLENBQ2lCOztBQUNiQSxnQkFBUSxHQUFDQSxRQUFRLENBQUNELElBQVQsRUFBVDtBQUNIO0FBQ0QsYUFBT0MsUUFBUDtBQUNIOzs7d0NBRzBCQSxRLEVBQVVFLEcsRUFDckM7QUFDSUYsY0FBUSxJQUFFLEVBQVYsQ0FESixDQUNpQjs7QUFDZCxVQUFHQSxRQUFRLENBQUNHLE1BQVQsR0FBa0JELEdBQXJCLEVBQ0tGLFFBQVEsR0FBQ0EsUUFBUSxDQUFDSSxTQUFULENBQW1CLENBQW5CLEVBQXVCRixHQUFHLEdBQUMsQ0FBM0IsSUFBK0IsS0FBeEM7QUFDSixhQUFPRixRQUFQO0FBQ0gsSyxDQUVEOzs7OytCQUNrQkEsUSxFQUFVSyxNLEVBQzVCO0FBQ0ksVUFBTUMsV0FBVyxHQUFHLElBQUlDLE1BQUosQ0FBV0MsTUFBTSxDQUFDQyxJQUFQLENBQVlKLE1BQVosRUFBb0JLLElBQXBCLENBQXlCLEdBQXpCLENBQVgsRUFBeUMsSUFBekMsQ0FBcEI7QUFDQSxhQUFPVixRQUFRLENBQUNXLE9BQVQsQ0FBaUJMLFdBQWpCLEVBQThCLFVBQUNNLE9BQUQsRUFDckM7QUFDSSxlQUFPUCxNQUFNLENBQUNPLE9BQUQsQ0FBYjtBQUNILE9BSE0sQ0FBUDtBQUlILEssQ0FFRDs7OztpQ0FDb0JoSyxHLEVBQUtzSixHLEVBQ3pCO0FBQ0l0SixTQUFHLEdBQUdpSyxJQUFJLENBQUNDLElBQUwsQ0FBVWxLLEdBQVYsQ0FBTjtBQUNBc0osU0FBRyxHQUFHVyxJQUFJLENBQUNFLEtBQUwsQ0FBV2IsR0FBWCxDQUFOO0FBQ0EsYUFBT1csSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxNQUFpQmQsR0FBRyxHQUFHdEosR0FBdkIsQ0FBWCxJQUEwQ0EsR0FBakQ7QUFDSCxLLENBRUQ7Ozs7K0JBQ2tCcUssVSxFQUNsQjtBQUFBLFVBRDhCQyxJQUM5Qix1RUFEbUMsSUFDbkM7QUFDSSxVQUFHdEIsSUFBSSxDQUFDSyxPQUFMLENBQWFnQixVQUFiLENBQUgsRUFDSSxPQUFPLEVBQVA7QUFDSixVQUFJRSxNQUFNLEdBQUMsSUFBSUMsSUFBSixDQUFTSCxVQUFULENBQVg7QUFDQSxVQUFJSSxLQUFLLEdBQUNGLE1BQU0sQ0FBQ0csT0FBUCxLQUFpQixFQUEzQjtBQUNBLFVBQUdELEtBQUssQ0FBQ2xCLE1BQU4sS0FBZSxDQUFsQixFQUNJa0IsS0FBSyxHQUFDLE1BQUlBLEtBQVY7QUFDSixVQUFJRSxRQUFRLEdBQUVKLE1BQU0sQ0FBQ0ssUUFBUCxLQUFrQixDQUFuQixHQUFzQixFQUFuQztBQUNBLFVBQUdELFFBQVEsQ0FBQ3BCLE1BQVQsS0FBa0IsQ0FBckIsRUFDSW9CLFFBQVEsR0FBQyxNQUFJQSxRQUFiO0FBQ0osVUFBSUUsTUFBTSxHQUFDTixNQUFNLENBQUNPLFdBQVAsRUFBWDtBQUNBLFVBQUdSLElBQUksS0FBRyxJQUFWLEVBQ0ksT0FBT0csS0FBSyxHQUFDLEdBQU4sR0FBVUUsUUFBVixHQUFtQixHQUFuQixHQUF1QkUsTUFBOUIsQ0FESixLQUVLLElBQUlQLElBQUksS0FBRyxNQUFYLEVBQWtCO0FBQ25CLGVBQU9PLE1BQU0sR0FBQyxHQUFQLEdBQVdGLFFBQVgsR0FBb0IsR0FBcEIsR0FBd0JGLEtBQS9CLENBREMsS0FHRCxPQUFPRSxRQUFRLEdBQUMsR0FBVCxHQUFhRixLQUFiLEdBQW1CLEdBQW5CLEdBQXVCSSxNQUE5QjtBQUNQOzs7Ozs7QUFHTDVQLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjhOLElBQWpCLEM7Ozs7Ozs7Ozs7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEQ7Ozs7Ozs7Ozs7O0FDdkJBL04sTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTZQLFdBQVMsRUFDVCxDQUNJO0FBQUVDLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FESixFQUVJO0FBQUVGLFVBQU0sRUFBRSxZQUFWO0FBQXdCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlCQUFQO0FBQTBCQyxRQUFFLEVBQUU7QUFBOUI7QUFBcEMsR0FGSixFQUdJO0FBQUVILFVBQU0sRUFBRSxVQUFWO0FBQXNCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBbEMsR0FISixFQUlJO0FBQUVGLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FKSixDQUZKO0FBUUlFLFdBQVMsRUFDVCxDQUNJO0FBQUVKLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FESixFQUVJO0FBQUVGLFVBQU0sRUFBRSxrQkFBVjtBQUE4QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyx3QkFBUDtBQUFpQ0csU0FBRyxFQUFFO0FBQXRDO0FBQTFDLEdBRkosRUFHSTtBQUFFTCxVQUFNLEVBQUUsc0JBQVY7QUFBa0NDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUE5QyxHQUhKLEVBSUk7QUFBRUYsVUFBTSxFQUFFLFFBQVY7QUFBb0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsV0FBUDtBQUFvQkcsU0FBRyxFQUFFO0FBQXpCO0FBQWhDLEdBSkosRUFLSTtBQUFFTCxVQUFNLEVBQUUsUUFBVjtBQUFvQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxXQUFQO0FBQW9CRyxTQUFHLEVBQUU7QUFBekI7QUFBaEMsR0FMSixDQVRKO0FBZ0JJQyx5QkFBdUIsRUFBRSxFQWhCN0I7QUFpQklDLGNBQVksRUFBRyxjQWpCbkI7QUFrQklDLGVBQWEsRUFBRyxZQWxCcEI7QUFtQklDLGlCQUFlLEVBQUcsY0FuQnRCO0FBb0JJQyxlQUFhLEVBQUcsa0JBcEJwQjtBQXFCSUMsZ0JBQWMsRUFBRyxnQkFyQnJCO0FBc0JJQyxhQUFXLEVBQUUsYUF0QmpCO0FBdUJJQyw4QkFBNEIsRUFBRSxvQkF2QmxDO0FBd0JJQyxxQkFBbUIsRUFBRSwyQkF4QnpCO0FBeUJJQyw4QkFBNEIsRUFBRyxFQXpCbkM7QUEwQklDLGlCQUFlLEVBQUcsYUExQnRCO0FBMkJJQyxZQUFVLEVBQUUsMEJBM0JoQjtBQTRCSUMsWUFBVSxFQUFFLHNCQTVCaEI7QUE2QklDLFFBQU0sRUFBRSxrU0E3Qlo7QUE4QklDLFlBQVUsRUFBRSx1QkE5QmhCO0FBK0JJQyxRQUFNLEVBQUUsK2NBL0JaO0FBZ0NJQyx3QkFBc0IsRUFBRSwwQ0FoQzVCO0FBaUNJQyx3QkFBc0IsRUFBRSxpREFqQzVCO0FBa0NJQyxrQkFBZ0IsRUFBRSw0QkFsQ3RCO0FBbUNJQyxnQkFBYyxFQUFFLDJpQ0FuQ3BCO0FBb0NJQyxrQkFBZ0IsRUFBRSwrRkFwQ3RCO0FBcUNJQyxhQUFXLEVBQUU7QUFyQ2pCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQTFSLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k2UCxXQUFTLEVBQ1QsQ0FDSTtBQUFFQyxVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBakMsR0FESixFQUVJO0FBQUVMLFVBQU0sRUFBRSxXQUFWO0FBQXVCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLFNBQVA7QUFBa0JDLFFBQUUsRUFBQyxlQUFyQjtBQUFzQzVMLFdBQUssRUFBQztBQUE1QztBQUFuQyxHQUZKLEVBR0k7QUFBRXlMLFVBQU0sRUFBRSxZQUFWO0FBQXdCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlCQUFQO0FBQTBCQyxRQUFFLEVBQUU7QUFBOUI7QUFBcEMsR0FISixFQUlJO0FBQUVILFVBQU0sRUFBRSxVQUFWO0FBQXNCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBbEMsR0FKSixDQUZKO0FBUUlFLFdBQVMsRUFDVCxDQUNJO0FBQUVKLFVBQU0sRUFBRSxNQUFWO0FBQWtCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlFQUFQO0FBQTBFM0wsV0FBSyxFQUFDO0FBQWhGO0FBQTlCLEdBREosRUFFSTtBQUFFeUwsVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUFqQyxHQUZKLEVBR0k7QUFBRUYsVUFBTSxFQUFFLGtCQUFWO0FBQThCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLHdCQUFQO0FBQWlDRyxTQUFHLEVBQUU7QUFBdEM7QUFBMUMsR0FISixFQUlJO0FBQUVMLFVBQU0sRUFBRSxzQkFBVjtBQUFrQ0MsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQTlDLEdBSkosRUFLSTtBQUFFRixVQUFNLEVBQUUsV0FBVjtBQUF1QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBbkMsR0FMSixDQVRKO0FBZ0JJdUIsK0JBQTZCLEVBQUUsQ0FoQm5DO0FBaUJJdEIseUJBQXVCLEVBQUUsQ0FqQjdCO0FBa0JJUyw4QkFBNEIsRUFBRyxDQWxCbkM7QUFtQklSLGNBQVksRUFBRyxjQW5CbkI7QUFvQklDLGVBQWEsRUFBRyxZQXBCcEI7QUFxQklDLGlCQUFlLEVBQUcsY0FyQnRCO0FBc0JJQyxlQUFhLEVBQUcsa0JBdEJwQjtBQXVCSUMsZ0JBQWMsRUFBRyxnQkF2QnJCO0FBd0JJa0Isb0JBQWtCLEVBQUcsb0JBeEJ6QjtBQXlCSUMsZUFBYSxFQUFHLGVBekJwQjtBQTBCSUMsa0JBQWdCLEVBQUcsa0JBMUJ2QjtBQTJCSUMsZ0JBQWMsRUFBRyxrQkEzQnJCO0FBNEJJQyxjQUFZLEVBQUcsbUJBNUJuQjtBQTZCSXJCLGFBQVcsRUFBRSxhQTdCakI7QUE4QklzQixtQkFBaUIsRUFBRSxpQkE5QnZCO0FBK0JJckIsOEJBQTRCLEVBQUUsb0JBL0JsQztBQWdDSUMscUJBQW1CLEVBQUUsMkJBaEN6QjtBQWlDSXFCLFdBQVMsRUFBRSxlQWpDZjtBQWtDSW5CLGlCQUFlLEVBQUcsYUFsQ3RCO0FBbUNJQyxZQUFVLEVBQUUsMEJBbkNoQjtBQW9DSW1CLGFBQVcsRUFBRSxnQkFwQ2pCO0FBcUNJbEIsWUFBVSxFQUFFLHNCQXJDaEI7QUFzQ0lDLFFBQU0sRUFBRSxtU0F0Q1o7QUF1Q0lDLFlBQVUsRUFBRSx1QkF2Q2hCO0FBd0NJQyxRQUFNLEVBQUUsMmZBeENaO0FBeUNJZ0IsaUJBQWUsRUFBRSxnQ0F6Q3JCO0FBMENJQyxxQkFBbUIsRUFBRSxnQ0ExQ3pCO0FBMkNJaEIsd0JBQXNCLEVBQUUsMENBM0M1QjtBQTRDSUMsd0JBQXNCLEVBQUUsaURBNUM1QjtBQTZDSUMsa0JBQWdCLEVBQUUsNEJBN0N0QjtBQThDSUMsZ0JBQWMsRUFBRSwwN0NBOUNwQjtBQStDSUMsa0JBQWdCLEVBQUUsK0ZBL0N0QjtBQWdESWEsZUFBYSxFQUFFLGlDQWhEbkI7QUFpRElaLGFBQVcsRUFBRSx5QkFqRGpCO0FBa0RJYSxrQkFBZ0IsRUFBRTtBQWxEdEIsQ0FEQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBO0FBRUE7QUFFQTtBQUNBO0FBQ0EsSUFBTWxELElBQUksR0FBQzNPLGtFQUFjLENBQUMsQ0FBRCxDQUF6Qjs7QUFDQSxJQUFNOFIsY0FBYyxHQUFHMVMsK0RBQVEsSUFBYyxHQUFDVyx5REFBZixHQUFxQixVQUFyQixHQUFnQzRPLElBQWhDLEdBQXFDLEtBQXRDLENBQTlCLEMsQ0FFQTs7O0FBQ0E7QUFDQTtBQUNBO0NBR0E7O0FBQ0EsSUFBTW9ELEdBQUcsR0FBRzNTLG1FQUFRLElBQWEsR0FBQ3VQLElBQWQsR0FBbUIsVUFBcEIsQ0FBbkI7O0FBQ0EsSUFBTXFELFFBQVEsR0FBRzVTLGdFQUFRLElBQWEsR0FBQ3VQLElBQWQsR0FBbUIsT0FBcEIsQ0FBeEI7O0FBRUFzRCxxRUFBUTtBQUVSLElBQU1DLFdBQVcsR0FBR0MsUUFBUSxDQUFDQyxjQUFULENBQXdCLFVBQXhCLENBQXBCO0FBQ0EsSUFBSUMsTUFBSjs7QUFDQSxJQUFNQyxVQUFVO0FBQUEscUVBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFJSUMsaUVBQVMsRUFKYjs7QUFBQTtBQUlYRixrQkFKVztBQUtYLGdCQUFHLENBQUNBLE1BQUosRUFDSUcsZ0VBQVUsQ0FBQ04sV0FBRCxFQUFjLEdBQWQsRUFBbUJILEdBQUcsQ0FBQ2xMLFdBQXZCLEVBQW9DLEVBQXBDLEVBQXdDLENBQUMsT0FBRCxDQUF4QyxDQUFWLENBREosS0FHQTtBQUNJNEwsMEZBQVksQ0FBQyxNQUFELENBQVo7QUFDQUEsMEZBQVksQ0FBQyxLQUFELENBQVo7QUFDQUEsMEZBQVksQ0FBQyxTQUFELENBQVo7QUFDQUQsOEVBQVUsQ0FBQ04sV0FBRCxFQUFjLEdBQWQsRUFBbUJGLFFBQVEsQ0FBQy9FLGFBQTVCLEVBQTJDLEVBQTNDLEVBQStDLENBQUMsU0FBRCxDQUEvQyxDQUFWO0FBQ0g7QUFiVTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQWlCWHVGLDRFQUFVLENBQUNOLFdBQUQsRUFBYyxHQUFkLEVBQW1CSCxHQUFHLENBQUNsTCxXQUF2QixFQUFvQyxFQUFwQyxFQUF3QyxDQUFDLE9BQUQsQ0FBeEMsQ0FBVjs7QUFqQlc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBVnlMLFVBQVU7QUFBQTtBQUFBO0FBQUEsR0FBaEI7O0FBb0JBQSxVQUFVLEc7Ozs7Ozs7Ozs7OztBQzNDVjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFTyxJQUFNSSxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDek0sSUFBRCxFQUFPME0sSUFBUCxFQUMxQjtBQUNJQyxjQUFZLENBQUNDLE9BQWIsQ0FBcUI1TSxJQUFyQixFQUEyQjZNLElBQUksQ0FBQ0MsU0FBTCxDQUFlSixJQUFmLENBQTNCO0FBQ0gsQ0FITTtBQUtBLElBQU1LLFNBQVMsR0FBRyxTQUFaQSxTQUFZLENBQUMvTSxJQUFELEVBQ3pCO0FBQUEsTUFEZ0NnTixJQUNoQyx1RUFEcUMsS0FDckM7QUFDSSxNQUFHQSxJQUFILEVBQ0ksT0FBT0gsSUFBSSxDQUFDSSxLQUFMLENBQVdOLFlBQVksQ0FBQ08sT0FBYixDQUFxQmxOLElBQXJCLENBQVgsQ0FBUCxDQURKLEtBR0ksT0FBTzJNLFlBQVksQ0FBQ08sT0FBYixDQUFxQmxOLElBQXJCLENBQVA7QUFDUCxDQU5NO0FBUUEsSUFBTXdNLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUN4TSxJQUFELEVBQzVCO0FBQ0kyTSxjQUFZLENBQUNRLFVBQWIsQ0FBd0JuTixJQUF4QjtBQUNILENBSE0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NDZFA7O0FBQ08sSUFBTXVNLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNhLFNBQUQsRUFBWUMsT0FBWixFQUMxQjtBQUFBLE1BRCtDQyxVQUMvQyx1RUFEMEQsRUFDMUQ7QUFBQSxNQUQ4REMsS0FDOUQsdUVBRG9FLEVBQ3BFO0FBQUEsTUFEd0VDLFFBQ3hFLHVFQURpRixFQUNqRjtBQUFBLE1BRHFGQyxhQUNyRix1RUFEbUcsRUFDbkc7QUFBQSxNQUR1R3RGLE9BQ3ZHLHVFQUQrRyxJQUMvRztBQUNJLE1BQUdWLDJEQUFPLENBQUM0RixPQUFELENBQVAsSUFBb0I1RiwyREFBTyxDQUFDMkYsU0FBRCxDQUE5QixFQUNJLE9BQU8sS0FBUCxDQURKLEtBR0E7QUFDSSxRQUFNTSxVQUFVLEdBQUN4QixRQUFRLENBQUN5QixhQUFULENBQXVCTixPQUF2QixDQUFqQjtBQUVBLFFBQUcsQ0FBQzVGLDJEQUFPLENBQUM4RixLQUFELENBQVgsRUFBbUI7QUFDZkcsZ0JBQVUsQ0FBQ25FLEVBQVgsR0FBY2dFLEtBQWQ7O0FBRUosUUFBR0ssS0FBSyxDQUFDQyxPQUFOLENBQWNMLFFBQWQsS0FBMkJBLFFBQVEsQ0FBQzdGLE1BQVQsSUFBaUIsQ0FBL0MsRUFDQTtBQUNJLFdBQUksSUFBSW1HLENBQVIsSUFBYU4sUUFBYjtBQUNJRSxrQkFBVSxDQUFDSyxTQUFYLENBQXFCQyxHQUFyQixDQUF5QlIsUUFBUSxDQUFDTSxDQUFELENBQWpDO0FBREo7QUFFSDs7QUFFRCxRQUFHLFFBQU9MLGFBQVAsTUFBeUIsUUFBNUIsRUFBc0M7QUFDdEM7QUFDSSxhQUFJLElBQUlRLFlBQVIsSUFBd0JSLGFBQXhCO0FBQ0lDLG9CQUFVLENBQUNRLFlBQVgsQ0FBd0JELFlBQXhCLEVBQXNDUixhQUFhLENBQUNRLFlBQUQsQ0FBbkQ7QUFESjtBQUVIOztBQUVELFFBQUcsQ0FBQ3hHLDJEQUFPLENBQUM2RixVQUFELENBQVgsRUFDSUksVUFBVSxDQUFDUyxTQUFYLEdBQXFCYixVQUFVLENBQUNuRixPQUFYLENBQW1CLEtBQW5CLEVBQXlCLE1BQXpCLENBQXJCLENBbkJSLENBbUI4RDs7QUFFMUQsUUFBR0EsT0FBSCxFQUNJaUYsU0FBUyxDQUFDZSxTQUFWLEdBQW9CLEVBQXBCO0FBQ0pmLGFBQVMsQ0FBQ2dCLFdBQVYsQ0FBc0JWLFVBQXRCO0FBQ0g7QUFDSixDQTlCTSxDOzs7Ozs7Ozs7Ozs7QUNIUDtBQUFBO0FBQUE7QUFBQTtBQUVPLElBQU0xQixRQUFRLEdBQUcsU0FBWEEsUUFBVyxHQUN4QjtBQUNJcUMsU0FBTyxDQUFDQyxHQUFSLENBQVksaUxBQVo7QUFDQSxTQUFPLElBQVA7QUFDSCxDQUpNO0FBTUEsSUFBTUMsaUJBQWlCLEdBQUcsU0FBcEJBLGlCQUFvQixDQUFDQyxNQUFELEVBQVNDLGNBQVQsRUFDakM7QUFDSSxNQUFNQyxJQUFJLEdBQUN4QyxRQUFRLENBQUNDLGNBQVQsQ0FBd0IsaUJBQXhCLENBQVg7QUFDQSxNQUFNd0MsUUFBUSxHQUFDSCxNQUFNLEdBQUMsVUFBdEI7QUFDQUUsTUFBSSxDQUFDcEYsSUFBTCxHQUFVLE1BQUltRixjQUFjLENBQUNFLFFBQUQsQ0FBNUI7QUFDSCxDQUxNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1JQO0FBQ0EsSUFBTWpHLElBQUksR0FBQzNPLGtFQUFjLENBQUMsQ0FBRCxDQUF6Qjs7QUFFQSxJQUFNMFUsY0FBYyxHQUFHdFYsK0RBQVEsSUFBaUIsR0FBQ1cseURBQWxCLEdBQXdCLFVBQXhCLEdBQW1DNE8sSUFBbkMsR0FBd0MsS0FBekMsQ0FBOUI7O0FBRUE7QUFFQTtDQUdBO0FBQ0E7O0FBQ08sSUFBTTRELFNBQVM7QUFBQSxxRUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkNBRWYsSUFBSXNDLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFDbkI7QUFDSSxrQkFBTUMsR0FBRyxHQUFHLElBQUlDLGNBQUosRUFBWjtBQUNBRCxpQkFBRyxDQUFDRSxJQUFKLENBQVMsS0FBVCxFQUFnQjFWLDBEQUFNLEdBQUMsaUJBQXZCOztBQUNBd1YsaUJBQUcsQ0FBQ0csTUFBSixHQUFhO0FBQUEsdUJBQU1MLE9BQU8sQ0FBQ2hDLElBQUksQ0FBQ0ksS0FBTCxDQUFXOEIsR0FBRyxDQUFDSSxZQUFmLENBQUQsQ0FBYjtBQUFBLGVBQWI7O0FBQ0FKLGlCQUFHLENBQUNLLE9BQUosR0FBYztBQUFBLHVCQUFNTixNQUFNLENBQUNDLEdBQUcsQ0FBQ00sVUFBTCxDQUFaO0FBQUEsZUFBZDs7QUFDQU4saUJBQUcsQ0FBQ08sSUFBSjtBQUNILGFBUE0sQ0FGZTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFKOztBQUFBLGtCQUFUaEQsU0FBUztBQUFBO0FBQUE7QUFBQSxHQUFmO0FBWUEsSUFBTWlELGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsR0FDakM7QUFDSTtBQUNBLE1BQU1DLFNBQVMsR0FBQyxJQUFJNUcsSUFBSixHQUFXNkcsaUJBQVgsS0FBK0IsQ0FBQyxDQUFoRDtBQUNBLE1BQUdELFNBQVMsR0FBR2pQLGtFQUFaLElBQWlDaVAsU0FBUyxHQUFHbFAsa0VBQWhELEVBQ0ksT0FBTyxDQUFQLENBREosS0FFSyxPQUFPa1AsU0FBUDtBQUNSLENBUE0sQyxDQVNQO0FBQ0E7O0FBQ08sSUFBTUUsV0FBVyxHQUFHLFNBQWRBLFdBQWMsQ0FBQ0MsUUFBRCxFQUFXQyxRQUFYLEVBQzNCO0FBQ0ksTUFBTUMsS0FBSyxHQUFDRixRQUFRLEdBQUN0SCxJQUFJLENBQUNFLEtBQUwsQ0FBV0YsSUFBSSxDQUFDRyxNQUFMLE1BQWVvSCxRQUFRLEdBQUNELFFBQXhCLENBQVgsQ0FBckI7QUFDQSxNQUFNRyxPQUFPLEdBQUMsb0RBQWQ7QUFDQSxNQUFNQyxNQUFNLEdBQUMsOEJBQWI7QUFDQSxNQUFJL1QsUUFBUSxHQUFDOFQsT0FBTyxDQUFDekgsSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjc0gsT0FBTyxDQUFDbkksTUFBakMsQ0FBRCxDQUFwQjs7QUFDQSxPQUFJLElBQUltRyxDQUFDLEdBQUMsQ0FBVixFQUFZQSxDQUFDLEdBQUUrQixLQUFLLEdBQUMsQ0FBckIsRUFBd0IvQixDQUFDLEVBQXpCLEVBQ0E7QUFDSSxRQUFJQSxDQUFDLEdBQUcsQ0FBTCxLQUFXLENBQWQsRUFDSTlSLFFBQVEsSUFBRStULE1BQU0sQ0FBQzFILElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY3VILE1BQU0sQ0FBQ3BJLE1BQWhDLENBQUQsQ0FBaEIsQ0FESixLQUdJM0wsUUFBUSxJQUFFOFQsT0FBTyxDQUFDekgsSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjc0gsT0FBTyxDQUFDbkksTUFBakMsQ0FBRCxDQUFqQjtBQUNQOztBQUNEM0wsVUFBUSxJQUFFOFQsT0FBTyxDQUFDekgsSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxLQUFjc0gsT0FBTyxDQUFDbkksTUFBakMsQ0FBRCxDQUFqQjtBQUNBLFNBQU8zTCxRQUFQO0FBQ0gsQ0FmTSxDLENBaUJQO0FBQ0E7O0FBQ08sSUFBTWdVLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNDLE1BQUQsRUFBU0MsS0FBVCxFQUFnQkMsVUFBaEIsRUFDMUI7QUFDSSxNQUFNQyxXQUFXLEdBQ2pCO0FBQ0k3RyxNQUFFLEVBQUUwRyxNQURSO0FBRUlDLFNBQUssRUFBRUEsS0FGWDtBQUdJRyxZQUFRLEVBQUVGO0FBSGQsR0FEQTtBQU1BMUQsc0VBQVUsQ0FBQyxNQUFELEVBQVMyRCxXQUFULENBQVY7QUFDSCxDQVRNLEMsQ0FXUDtBQUNBOztBQUNPLElBQU1FLGdCQUFnQixHQUFHLFNBQW5CQSxnQkFBbUIsQ0FBQ0MsS0FBRCxFQUNoQztBQUNJLE1BQU1DLFVBQVUsR0FBQ3pELG1FQUFTLENBQUMsWUFBRCxDQUExQjs7QUFDQSxNQUFHLENBQUN0RiwyREFBTyxDQUFDK0ksVUFBRCxDQUFYLEVBQ0E7QUFDSSxRQUFNQyxNQUFNLEdBQUM1RCxJQUFJLENBQUNJLEtBQUwsQ0FBV3VELFVBQVgsQ0FBYjs7QUFDQSxRQUFHLENBQUMvSSwyREFBTyxDQUFDZ0osTUFBTSxDQUFDSixRQUFSLENBQVIsSUFBNkIsQ0FBQzVJLDJEQUFPLENBQUNnSixNQUFNLENBQUNDLGdCQUFSLENBQXJDLElBQWtFLENBQUNqSiwyREFBTyxDQUFDZ0osTUFBTSxDQUFDRSxlQUFSLENBQTFFLElBQXNHLENBQUNsSiwyREFBTyxDQUFDZ0osTUFBTSxDQUFDRyxXQUFSLENBQWpILEVBQ0E7QUFDSUwsV0FBSyxDQUFDRixRQUFOLEdBQWVJLE1BQU0sQ0FBQ0osUUFBdEI7QUFDQUUsV0FBSyxDQUFDRyxnQkFBTixHQUF1QkQsTUFBTSxDQUFDQyxnQkFBOUI7QUFDQUgsV0FBSyxDQUFDSSxlQUFOLEdBQXNCRixNQUFNLENBQUNFLGVBQTdCO0FBQ0FKLFdBQUssQ0FBQ0ssV0FBTixHQUFrQkgsTUFBTSxDQUFDRyxXQUF6QjtBQUNIO0FBQ0o7O0FBQ0QsU0FBT0wsS0FBUDtBQUNILENBZk0sQyxDQWlCUDtBQUNBOztBQUNPLElBQU1NLFlBQVk7QUFBQSxzRUFBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFPckMsa0JBQVAsOERBQWMsRUFBZDtBQUFrQnNDLDBCQUFsQjtBQUFrQ0MsbUJBQWxDO0FBQTJDQyxxQkFBM0M7QUFBQSw4Q0FFakIsSUFBSXBDLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFDbkI7QUFDSSxrQkFBTW1DLFNBQVMsR0FBQ2xFLG1FQUFTLENBQUMsTUFBRCxDQUF6Qjs7QUFDQSxrQkFBR3RGLDJEQUFPLENBQUN3SixTQUFELENBQVYsRUFDQTtBQUNJQyw0QkFBWSxDQUFDSixjQUFELEVBQWlCQyxPQUFqQixFQUEwQkMsU0FBMUIsQ0FBWjtBQUNBbkMsdUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCxlQUpELE1BTUE7QUFDSSxvQkFBTXNDLElBQUksR0FBQ3RFLElBQUksQ0FBQ0ksS0FBTCxDQUFXZ0UsU0FBWCxDQUFYOztBQUNBLG9CQUFHeEosMkRBQU8sQ0FBQzBKLElBQUksQ0FBQzVILEVBQU4sQ0FBUCxJQUFvQjlCLDJEQUFPLENBQUMwSixJQUFJLENBQUNqQixLQUFOLENBQTNCLElBQTJDekksMkRBQU8sQ0FBQzBKLElBQUksQ0FBQ2QsUUFBTixDQUFsRCxJQUFxRWMsSUFBSSxDQUFDZCxRQUFMLEdBQWdCekgsSUFBSSxDQUFDd0ksR0FBTCxFQUF4RixFQUNBO0FBQ0k1RSx3RkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBMEUsOEJBQVksQ0FBQ0osY0FBRCxFQUFpQkMsT0FBakIsRUFBMEJDLFNBQTFCLENBQVo7QUFDQW5DLHlCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0gsaUJBTEQsTUFPQTtBQUNJLHNCQUFNRSxHQUFHLEdBQUcsSUFBSUMsY0FBSixFQUFaO0FBQ0FELHFCQUFHLENBQUNFLElBQUosQ0FBUyxLQUFULEVBQWdCMVYsMERBQU0sR0FBQ3NGLDJEQUFQLEdBQWtCSyxnRUFBbEIsR0FBa0NpUyxJQUFJLENBQUNqQixLQUF2RDs7QUFDQW5CLHFCQUFHLENBQUNHLE1BQUosR0FBYSxZQUNiO0FBQ0ksd0JBQUltQyxRQUFRLEdBQUN4RSxJQUFJLENBQUNJLEtBQUwsQ0FBVzhCLEdBQUcsQ0FBQ0ksWUFBZixDQUFiOztBQUNBLHdCQUFJSixHQUFHLENBQUNQLE1BQUosS0FBZSxHQUFmLElBQXNCNkMsUUFBUSxDQUFDQyxPQUEvQixJQUEwQ0QsUUFBUSxDQUFDOUgsRUFBVCxJQUFlakMsU0FBN0QsRUFDQTtBQUNJLDBCQUFHK0osUUFBUSxDQUFDOUgsRUFBVCxLQUFjNEgsSUFBSSxDQUFDNUgsRUFBdEIsRUFDQTtBQUNJNEgsNEJBQUksQ0FBQ25SLElBQUwsR0FBVXFSLFFBQVEsQ0FBQ3JSLElBQW5CO0FBQ0FtUiw0QkFBSSxDQUFDSSxRQUFMLEdBQWNGLFFBQVEsQ0FBQ0UsUUFBdkI7QUFDQUosNEJBQUksQ0FBQ0ssY0FBTCxHQUFvQkgsUUFBUSxDQUFDRyxjQUE3QjtBQUNBTCw0QkFBSSxDQUFDM0MsTUFBTCxHQUFZNkMsUUFBUSxDQUFDN0MsTUFBckIsQ0FKSixDQUlnQzs7QUFDNUIvQiw0RkFBVSxDQUFDLE1BQUQsRUFBUzBFLElBQVQsQ0FBVixDQUxKLENBTUk7O0FBQ0EsNEJBQUdFLFFBQVEsQ0FBQzdDLE1BQVQsS0FBa0IsTUFBbEIsSUFBNEI2QyxRQUFRLENBQUNJLFFBQVQsSUFBcUIsQ0FBcEQsRUFDQTtBQUNJLDhCQUFNQyxVQUFVLEdBQUNsWSwyREFBTyxHQUFDLEdBQVIsR0FBWWlWLGNBQWMsQ0FBQ3pFLFdBQTVDO0FBQ0EsOEJBQUcySCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0J0SSxJQUFoQixDQUFxQnVJLE9BQXJCLENBQTZCSCxVQUE3QixNQUEyQyxDQUFDLENBQS9DLEVBQ0lDLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkUsTUFBaEIsQ0FBdUIsTUFBSXJELGNBQWMsQ0FBQ3pFLFdBQW5CLEdBQStCLFlBQXRELEVBSFIsQ0FHNEU7O0FBQ3hFNkUsaUNBQU8sQ0FBQyxJQUFELENBQVA7QUFDSCx5QkFORCxNQVFBO0FBQ0ksOEJBQUdMLE1BQU0sQ0FBQzdHLE1BQVAsS0FBZ0IsQ0FBaEIsSUFBcUI2RyxNQUFNLENBQUNxRCxPQUFQLENBQWVSLFFBQVEsQ0FBQzdDLE1BQXhCLE1BQWtDLENBQUMsQ0FBM0QsRUFDQTtBQUNJMEMsd0NBQVksQ0FBQ0osY0FBRCxFQUFpQkMsT0FBakIsRUFBMEJDLFNBQTFCLENBQVo7QUFDQW5DLG1DQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0gsMkJBSkQsTUFNSUEsT0FBTyxDQUFDLElBQUQsQ0FBUDtBQUNQO0FBQ0osdUJBekJELE1BMkJBO0FBQ0lyQyw4RkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBMEUsb0NBQVksQ0FBQ0osY0FBRCxFQUFpQkMsT0FBakIsRUFBMEJDLFNBQTFCLENBQVo7QUFDQW5DLCtCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixxQkFsQ0QsTUFvQ0E7QUFDSXJDLDRGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0EwRSxrQ0FBWSxDQUFDSixjQUFELEVBQWlCQyxPQUFqQixFQUEwQkMsU0FBMUIsQ0FBWjtBQUNBbkMsNkJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLG1CQTVDRDs7QUE2Q0FFLHFCQUFHLENBQUNLLE9BQUosR0FBYztBQUFBLDJCQUFNTixNQUFNLENBQUNDLEdBQUcsQ0FBQ00sVUFBTCxDQUFaO0FBQUEsbUJBQWQ7O0FBQ0FOLHFCQUFHLENBQUNPLElBQUo7QUFDSDtBQUNKO0FBQ0osYUF0RU0sQ0FGaUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBWnVCLFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNSyxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDSixjQUFELEVBQWlCQyxPQUFqQixFQUEwQkMsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN2SiwyREFBTyxDQUFDc0osT0FBRCxDQUFYLEVBQ0l0RSxvRUFBVSxDQUFDLFNBQUQsRUFBWXNFLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3RKLDJEQUFPLENBQUN1SixTQUFELENBQVgsRUFDSXZFLG9FQUFVLENBQUMsS0FBRCxFQUFRdUUsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDdkosMkRBQU8sQ0FBQ3FKLGNBQUQsQ0FBWCxFQUNJYSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JFLE1BQWhCLENBQXVCaEIsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9kZWNvbm5lY3Rpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZGVjb25uZWN0aW9uLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIiwvLyBpZGVtXG4gICAgbmJSYW5kb21SZXN1bHRzIDogMy8vIGxpbWl0ZSBsZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBXaWtpcMOpZGlhIGVuIHF1ZXN0aW9uc1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCByZWNldmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlYXV4IHF1aXpzIHBvdXIgdGVzdGVyIHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyB2b3RyZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciAoQ3RybCtWKSBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmllcnMgcXVpenNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogOSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJtb24tY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhIDxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKTwvc3Bhbj4sIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvc3Bhbj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSAhXCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogXCJUZXN0ZXIgV2lraUxlcm5pIGdyYXR1aXRlbWVudC5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5TdWl2YW50IGxlcyBxdWVzdGlvbnMsIHVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzIGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gPGI+Qydlc3QgdG91am91cnMgbGUgY29udGVudSBkZSBsJ2FydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2kgY29uY2VybmFudCBsZXMgXFxcImJvbm5lc1xcXCIgcsOpcG9uc2VzPC9iPi4gTWFpcyBsZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlcywgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50PC9iPi48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuIENlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSA8Yj50ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6PC9iPiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEdyw6JjZSDDoCBjZSBjb21wdGUsIHZvdXMgcG91cnJleiBhdXNzaSA8Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenM8L2I+IHBvdXIgY29udGludWVyIMOgIFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCJMZXMgZGVybmnDqHJlcyBncmFpbmVzIGRlIHNhdm9pclwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxufTsiLCIvLyAtLSBHRVNUSU9OIERFIExBIFBBR0UgREUgRMOJQ09OTkVYSU9OXG5cbi8vLyBPbiBzZSBjb250ZW50ZSBpY2kgZGUgc3VwcHJpbWVyIGxhIHNlc3Npb24gc3RvY2vDqWUgY8O0dMOpIGNsaWVudFxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgcmVtb3ZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRDb25maWcgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5sZXQgY29uZmlnO1xuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25maWcgPSBhd2FpdCBnZXRDb25maWcoKTtcbiAgICAgICAgaWYoIWNvbmZpZylcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXJsXCIpO1xuICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5ieWVieWVNZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHNlcmEgYmllbnTDtHQgbGlzaWJsZSBzdXIgR2l0bGFiLlxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/deleteValidation.app.js b/front/public/JS/deleteValidation.app.js index 7b1d026..5bc98bb 100644 --- a/front/public/JS/deleteValidation.app.js +++ b/front/public/JS/deleteValidation.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -387,8 +391,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -411,6 +415,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -433,7 +438,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -444,20 +449,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -470,15 +478,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -486,8 +496,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -601,7 +612,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -642,7 +654,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -705,7 +717,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -907,7 +1021,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1019,7 +1133,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1107,13 +1222,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1165,4 +1280,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9kZWxldGVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsImRpdlJlc3BvbnNlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhlbGxvRGV2IiwiY29uZmlnIiwiaW5pdGlhbGlzZSIsImdldENvbmZpZyIsImFkZEVsZW1lbnQiLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWVzc2FnZSIsInJlbW92ZUxvY2FseSIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInNldFJlcXVlc3RIZWFkZXIiLCJzZW5kIiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiZ2V0TG9jYWx5IiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJob21lUGFnZSIsImxvY2F0aW9uIiwic2VhcmNoIiwicGFyYW1ldGVycyIsInNwbGl0IiwicGFyYW0iLCJkZWNvZGVVUkkiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFBhc3N3b3JkIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJjaGVja1Nlc3Npb24iLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsInVzZXIiLCJub3ciLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsIndpbmRvdyIsImluZGV4T2YiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNB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QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVppRSxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTUksWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQnhFLE9BQWpCLEVBQTBCeUUsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN4SiwyREFBTyxDQUFDK0UsT0FBRCxDQUFYLEVBQ0lTLG9FQUFVLENBQUMsU0FBRCxFQUFZVCxPQUFaLENBQVY7QUFDSixNQUFHLENBQUMvRSwyREFBTyxDQUFDd0osU0FBRCxDQUFYLEVBQ0loRSxvRUFBVSxDQUFDLEtBQUQsRUFBUWdFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3hKLDJEQUFPLENBQUN1SixjQUFELENBQVgsRUFDSVcsTUFBTSxDQUFDN0MsUUFBUCxDQUFnQitDLE1BQWhCLENBQXVCYixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2RlbGV0ZVZhbGlkYXRpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZGVsZXRlVmFsaWRhdGlvbi5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwiZGVmYXVsdFwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIndpa2lsZXJuaVwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsICAgIFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIi8vIGlkZW1cbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIFBFUk1FVFRBTlQgREUgVkFMSURFUiBVTiBDSEFOR0VNRU5UIEQnRU1BSUwgT1UgREUgTU9UIERFIFBBU1NFXG5cbi8vLyBVbiB0b2tlbiBlc3QgdHJhbnNtaXMgZW4gcGFyYW3DqHRyZSBkZSBsJ1VybC4gSWwgYSB1bmUgdmFsaWRpdMOpIGxpbWl0w6kgZGFucyBsZSB0ZW1wcy5cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIHZhbGlkZSBsYSBzdXBwcmVzc2lvbiwgc3VwcHJpbWUgbGEgc2Vzc2lvbiBkZSBsJ3V0aWxpc2F0ZXVyIGV0IGFmZmljaGUgdW4gbWVzc2FnZSBkZSBjb25maXJtYXRpb25cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBzZXRTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB0eHRVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG5sZXQgY29uZmlnO1xuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25maWcgPSBhd2FpdCBnZXRDb25maWcoKTtcbiAgICAgICAgaWYoIWNvbmZpZylcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7ICAgICAgXG4gICAgICAgICAgICBjb25zdCBkYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5jaGVja0RlbGV0ZUxpbmtSb3V0ZStkYXRhcy50KTtcbiAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5iYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnRnJvbnRFbmQuYWNjb3VudFBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK2RhdGFzLnQpOyBcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgZXN0IGxpc2libGUgc3VyIGdpdGxhYiA6IFxcbiBCb25uZSBsZWN0dXJlIDotKSBcXG4gUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBsZSB0b2tlbiBldCBkZSB0b3V0ZSBmYcOnb24gdsOpcmlmaWVyIMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGVbbGFuZ10uYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbbGFuZ10uYWNjb3VudFBhZ2UpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9kZWxldGVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInJlZ2VuZXJhdGVIVE1MIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJhYm91dFBhZ2UiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJuZXdzTGlzdFRpdGxlIiwibWFpbFJlY2lwaWVudFR4dCIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwidHh0VXNlcnMiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJoZWxsb0RldiIsImNvbmZpZyIsImluaXRpYWxpc2UiLCJnZXRDb25maWciLCJhZGRFbGVtZW50IiwiZGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJ0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsInN0YXR1cyIsIm1lc3NhZ2UiLCJyZW1vdmVMb2NhbHkiLCJlcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImdldExvY2FseSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJsb2NhdGlvbiIsInNlYXJjaCIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGVjb2RlVVJJIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwiY2hlY2tTZXNzaW9uIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwibm93IiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJ3aW5kb3ciLCJpbmRleE9mIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxD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QUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTUksWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQnhFLE9BQWpCLEVBQTBCeUUsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN0SywyREFBTyxDQUFDNkYsT0FBRCxDQUFYLEVBQ0lTLG9FQUFVLENBQUMsU0FBRCxFQUFZVCxPQUFaLENBQVY7QUFDSixNQUFHLENBQUM3RiwyREFBTyxDQUFDc0ssU0FBRCxDQUFYLEVBQ0loRSxvRUFBVSxDQUFDLEtBQUQsRUFBUWdFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3RLLDJEQUFPLENBQUNxSyxjQUFELENBQVgsRUFDSVcsTUFBTSxDQUFDN0MsUUFBUCxDQUFnQitDLE1BQWhCLENBQXVCYixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2RlbGV0ZVZhbGlkYXRpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvZGVsZXRlVmFsaWRhdGlvbi5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIsLy8gaWRlbVxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMvLyBsaW1pdGUgbGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmRcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogV2lraXDDqWRpYSBlbiBxdWVzdGlvbnNcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgcmVjZXZleiBjaGFxdWUgam91ciBkZSBub3V2ZWF1eCBxdWl6cyBwb3VyIHRlc3RlciB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3Nlcy5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5vdEZvdW5kOiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwYXIgdW4gYXV0cmUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgdm90cmUgcHJlc3NlLXBhcGllci4gVm91cyBwb3V2ZXogbGUgcmVjb3BpZXIgKEN0cmwrVikgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJWb3VzIGRldmV6IGFjY2VwdGVyIGxlcyBDR1UgcG91ciBwb3V2b2lyIGNyw6llciB2b3RyZSBjb21wdGUuIFwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSBwYXJyYWluLlwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIHBhcnJhaW4gYSBiaWVuIMOpdMOpIHRyb3V2w6kgIVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjRIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGR1IHNpdGUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqShlKSBhdSBzaXRlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6koZSkgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJUcm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiTGUgbW90IGRlIHBhc3NlIG4nZXN0IHBhcyBsZSBib24uXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBuJ2VzdCBwbHVzIHZhbGFibGUuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWlscyA6IFwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCIuLi5cIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pZXJzIHF1aXpzXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJCbG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDksXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwibW9uLWNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSA8c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKik8L3NwYW4+LCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L3NwYW4+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgIVwiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6IFwiVGVzdGVyIFdpa2lMZXJuaSBncmF0dWl0ZW1lbnQuXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+U3VpdmFudCBsZXMgcXVlc3Rpb25zLCB1bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlcyBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIDxiPkMnZXN0IHRvdWpvdXJzIGxlIGNvbnRlbnUgZGUgbCdhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pIGNvbmNlcm5hbnQgbGVzIFxcXCJib25uZXNcXFwiIHLDqXBvbnNlczwvYj4uIE1haXMgbGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBuJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMsIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudDwvYj4uPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLiBDZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgPGI+dGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpejwvYj4gcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBHcsOiY2Ugw6AgY2UgY29tcHRlLCB2b3VzIHBvdXJyZXogYXVzc2kgPGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlYXV4IHF1aXpzPC9iPiBwb3VyIGNvbnRpbnVlciDDoCBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIi48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiTGVzIGRlcm5pw6hyZXMgZ3JhaW5lcyBkZSBzYXZvaXJcIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlc1wiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbn07IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIFBFUk1FVFRBTlQgREUgVkFMSURFUiBVTiBDSEFOR0VNRU5UIEQnRU1BSUwgT1UgREUgTU9UIERFIFBBU1NFXG5cbi8vLyBVbiB0b2tlbiBlc3QgdHJhbnNtaXMgZW4gcGFyYW3DqHRyZSBkZSBsJ1VybC4gSWwgYSB1bmUgdmFsaWRpdMOpIGxpbWl0w6kgZGFucyBsZSB0ZW1wcy5cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIHZhbGlkZSBsYSBzdXBwcmVzc2lvbiwgc3VwcHJpbWUgbGEgc2Vzc2lvbiBkZSBsJ3V0aWxpc2F0ZXVyIGV0IGFmZmljaGUgdW4gbWVzc2FnZSBkZSBjb25maXJtYXRpb25cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBzZXRTZXNzaW9uIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB0eHRVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcblxuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuXG5oZWxsb0RldigpO1xuXG5sZXQgY29uZmlnO1xuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25maWcgPSBhd2FpdCBnZXRDb25maWcoKTtcbiAgICAgICAgaWYoIWNvbmZpZylcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7ICAgICAgXG4gICAgICAgICAgICBjb25zdCBkYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5jaGVja0RlbGV0ZUxpbmtSb3V0ZStkYXRhcy50KTtcbiAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSA0MDAgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5iYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnRnJvbnRFbmQuYWNjb3VudFBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK2RhdGFzLnQpOyBcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/homeManager.app.js b/front/public/JS/homeManager.app.js index 66cca7d..fa7d4d1 100644 --- a/front/public/JS/homeManager.app.js +++ b/front/public/JS/homeManager.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -420,8 +424,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -444,6 +448,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -470,19 +475,30 @@ module.exports = { notFound: "Aucun quiz n'a pas été trouvé.", searchResultTitle: "Résultat pour votre recherche", searchNoResult: "Aucun résultat n'a été trouvé pour votre recherche", - searchWithResult: "#NB quizs correspondent à votre recherche :", - publishedBy: "Publié par", + searchWithResult: "Voici #NB quizs pour votre recherche :", + questionnairesName: "quiz", + publishedBy: "Quiz publié par", publishedAt: ", le", lastUpdated: "Dernière mise à jour, le ", estimatedTime: "Durée de lecture estimée : ", - btnSendResponse: "Envoyez vos réponses", - btnProposeSubscribe: "Ok, je crée mon compte !", - btnProposeConnection: "J'ai déjà un compte, je me connecte.", + estimatedTimeOption: { + short: "courte", + medium: "moyenne", + long: "longue" + }, + explanationBeforeTxt: "Extrait :", + correctAnswerTxt: "Bonne réponse", + wrongAnswerTxt: "Mauvaise réponse", + btnSendResponse: "Testez vos réponses.", + btnProposeSubscribe: "Je crée mon compte.", + btnProposeConnection: "Je me connecte.", btnShowQuestionnaire: "Afficher le quiz !", + btnShareQuizTxt: "Partager ce quiz sur ", nextQuestionnairesList: "Les #NB prochains quizs devant être publiés", needBeCompleted: "Quiz incomplet", nextDateWithoutQuestionnaire: "Prochaine date sans quiz programmé : ", - haveBeenPublished: ":NB nouveaux questionnaires ont été publiés." + haveBeenPublished: ":NB nouveaux questionnaires ont été publiés.", + haveBeenRegenerated: "Les fichiers HTML de #NB1 questionnaires et #NB2 rubriques ont été regénérés." }; /***/ }), @@ -503,7 +519,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -514,20 +530,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -540,15 +559,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -556,8 +577,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -671,7 +693,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -712,7 +735,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -775,7 +798,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -807,6 +932,7 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// On liste ensuite les prochains quizs devant être publiés en faisant ressortir ceux devant être complétés + la prochaine date sans quiz /// Un menu permet à l'utilisateur d'accéder aux formulaires permettant de gérer les quizs et les comptes utilisateurs et abonnements /// Un message venant d'une autre page peut aussi être à afficher lors du premier chargement. +/// C'est ici aussi que l'on peut régénérer tout le HTML -> à terme dans homeAdmin ! // Fichier de configuration côté client : var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; @@ -830,6 +956,7 @@ var txtQuestionnaire = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/q var divMain = document.getElementById("main-content"); var divMessage = document.getElementById("message"); var divQuestionnaires = document.getElementById("questionnaires"); +var btnRegenerate = document.getElementById("wantRegenerate"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); var initialise = /*#__PURE__*/function () { @@ -930,19 +1057,37 @@ var initialise = /*#__PURE__*/function () { }; xhrNextQuestionnaires.setRequestHeader("Authorization", "Bearer " + user.token); - xhrNextQuestionnaires.send(); + xhrNextQuestionnaires.send(); // Traitement demande régénérer HTML + + btnRegenerate.addEventListener("click", function (e) { + e.preventDefault(); + var xhrRegenerate = new XMLHttpRequest(); + xhrRegenerate.open("GET", _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["apiUrl"] + config.questionnaireRoutes + "/htmlregenerated"); + + xhrRegenerate.onreadystatechange = function () { + if (this.readyState == XMLHttpRequest.DONE) { + var response = JSON.parse(this.responseText); + if (this.status === 200 && response.message != undefined) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", response.message, "", ["success"], "", false);else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", txt.serverError, "", ["error"], "", false); + } + }; + + xhrRegenerate.setRequestHeader("Content-Type", "application/json"); + xhrRegenerate.setRequestHeader("Authorization", "Bearer " + user.token); + xhrRegenerate.send(); + }); } case 12: - _context.next = 17; + _context.next = 18; break; case 14: _context.prev = 14; _context.t0 = _context["catch"](0); Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", txt.serverError, "", ["error"]); + console.error(_context.t0); - case 17: + case 18: case "end": return _context.stop(); } @@ -1048,7 +1193,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1129,7 +1274,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1217,13 +1363,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1275,4 +1421,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9tZU1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJuZWVkVGl0bGUiLCJuZWVkTm90VG9vTG9uZ1RpdGxlIiwibmVlZFVybCIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkSW50cm9kdWN0aW9uIiwibmVlZENvcnJlY3RQdWJsaXNoaW5nRGF0ZSIsIm5lZWRLbm93SWZJc1B1Ymxpc2hlZCIsIm5lZWRMYW5ndWFnZSIsIm5lZWRFc3RpbWF0ZWRUaW1lIiwibm90Rm91bmQiLCJzZWFyY2hSZXN1bHRUaXRsZSIsInNlYXJjaE5vUmVzdWx0Iiwic2VhcmNoV2l0aFJlc3VsdCIsInB1Ymxpc2hlZEJ5IiwicHVibGlzaGVkQXQiLCJsYXN0VXBkYXRlZCIsImVzdGltYXRlZFRpbWUiLCJidG5TZW5kUmVzcG9uc2UiLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5TaG93UXVlc3Rpb25uYWlyZSIsIm5leHRRdWVzdGlvbm5haXJlc0xpc3QiLCJuZWVkQmVDb21wbGV0ZWQiLCJuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlIiwiaGF2ZUJlZW5QdWJsaXNoZWQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJhbHJlYWR5Q29ubmVjdGVkIiwibmVlZEJlQ29ubmVjdGVkIiwiY29ubmVjdGlvbk9rIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwidG9vTWFueUxvZ2luRmFpbHMiLCJiYWRQYXNzd29yZCIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwidHh0VXNlcnMiLCJ0eHRRdWVzdGlvbm5haXJlIiwiZGl2TWFpbiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZNZXNzYWdlIiwiZGl2UXVlc3Rpb25uYWlyZXMiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJnZXRDb25maWciLCJjb25maWciLCJhZGRFbGVtZW50IiwiZGl2UmVzcG9uc2UiLCJjaGVja1Nlc3Npb24iLCJtZXNzYWdlIiwiY29sb3IiLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsInN0eWxlIiwiZGlzcGxheSIsInJlbW92ZUxvY2FseSIsInhoclN0YXRzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm1hcFRleHQiLCJOQl9VU0VSU18yNEgiLCJuYk5ld1VzZXJzMjRIIiwiTkJfU1VCU0NSSVBUSU9OU18yNEgiLCJTdWJzY3JpcHRpb25zIiwibmJTdWJzY3JpcHRpb25zMjRIIiwiTkJfVVNFUlNfREVMRVRFRF8yNEgiLCJuYkRlbGV0ZWRVc2VyczI0SCIsIk5CX0FOU1dFUlNfMjRIIiwiQW5zd2VycyIsIm5iQW5zd2VyczI0SCIsIk5CX1VTRVJTX1RPVCIsIm5iTmV3VXNlcnNUb3QiLCJOQl9TVUJTQ1JJUFRJT05TX1RPVCIsIm5iU3Vic2NyaXB0aW9uc1RvdCIsIk5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSIsIm5iU3Vic2NyaXB0aW9uc1ByZW1pdW0iLCJOQl9BTlNXRVJTX1RPVCIsIm5iQW5zd2Vyc1RvdCIsIk5CX1VTRVJTX0RFTEVURURfVE9UIiwibmJEZWxldGVkVXNlcnNUb3QiLCJOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQiLCJuYkRlbGV0ZWRVc2Vyc1dhc1ZhbGlkZWQiLCJOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0iLCJuYkRlbGV0ZWRVc2Vyc1RvdFdhc1ByZW1pdW0iLCJyZXBsYWNlQWxsIiwic2V0UmVxdWVzdEhlYWRlciIsInRva2VuIiwic2VuZCIsInhock5leHRRdWVzdGlvbm5haXJlcyIsIkFycmF5IiwiaXNBcnJheSIsImxpc3RIVE1MIiwiaSIsImRhdGVGb3JtYXQiLCJkYXRlUHVibGlzaGluZyIsImlzUHVibGlzaGFibGUiLCJkYXRlTmVlZGVkIiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJjb25zb2xlIiwibG9nIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInhociIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFBhc3N3b3JkIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJkYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsIm5vdyIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50Iiwid2luZG93IiwibG9jYXRpb24iLCJpbmRleE9mIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxDQUFyQjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMscURBQUQsQ0FBOUI7O0FBRUFFLE1BQU0sQ0FBQ0MsT0FBUDtBQUVJQyxRQUFNLEVBQUUsMkJBRlo7QUFHSUMsU0FBTyxFQUFFLHVCQUhiO0FBSUlDLFdBQVMsRUFBRSxTQUpmO0FBS0lDLFlBQVUsRUFBRSxtQkFMaEI7QUFNSUMsWUFBVSxFQUFFLFdBTmhCO0FBT0lDLGFBQVcsRUFBRSx1QkFQakI7QUFRSUMsV0FBUyxFQUFFLElBUmY7QUFTSUMsT0FBSyxFQUFFLFNBVFg7QUFTc0I7QUFDbEJDLGdCQUFjLEVBQUUsQ0FBQyxJQUFELENB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SDs7QUFBQSxrQkFBWmpELFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNcUgsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQmpILE9BQWpCLEVBQTBCa0gsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN4TCwyREFBTyxDQUFDc0UsT0FBRCxDQUFYLEVBQ0kwRCxvRUFBVSxDQUFDLFNBQUQsRUFBWTFELE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3RFLDJEQUFPLENBQUN3TCxTQUFELENBQVgsRUFDSXhELG9FQUFVLENBQUMsS0FBRCxFQUFRd0QsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDeEwsMkRBQU8sQ0FBQ3VMLGNBQUQsQ0FBWCxFQUNJVSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JFLE1BQWhCLENBQXVCYixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2hvbWVNYW5hZ2VyLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2hvbWVNYW5hZ2VyLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJkZWZhdWx0XCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwid2lraWxlcm5pXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCwgICAgXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLy8gaWRlbVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3F1ZXN0aW9ubmFpcmVcIjogXCIuLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmUuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbm5haXJlJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkVGl0bGU6IFwiTWVyY2kgZGUgZm91cm5pciB1biB0aXRyZSDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWROb3RUb29Mb25nVGl0bGU6IFwiTGUgdGl0cmUgZHUgcXVpeiBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRVcmw6IFwiTWVyY2kgZGUgZm91cm5pciBsJ3VybCDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRVbmlxdWVVcmw6IFwiTCd1cmwgZHUgcXVpeiBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgICBuZWVkSW50cm9kdWN0aW9uOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gdGV4dGUgZCdpbnRyb2R1Y3Rpb24gw6Agdm90cmUgcXVpei5cIixcbiAgICBuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlOiBcIkxhIGRhdGUgZGUgcHVibGljYXRpb24gZm91cm5pZSBuJ2EgcGFzIHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbmVlZEtub3dJZklzUHVibGlzaGVkOiBcIklsIGZhdXQgc2F2b2lyIHNpIGNlIHF1aXogZXN0IHB1Ymxpw6kuXCIsXG4gICAgbmVlZExhbmd1YWdlOiBcIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkRXN0aW1hdGVkVGltZTogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHVuZSBlc3RpbWF0aW9uIGRlIGxhIGR1csOpZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5vdEZvdW5kIDogXCJBdWN1biBxdWl6IG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBzZWFyY2hSZXN1bHRUaXRsZSA6IFwiUsOpc3VsdGF0IHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoTm9SZXN1bHQgOiBcIkF1Y3VuIHLDqXN1bHRhdCBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIHZvdHJlIHJlY2hlcmNoZVwiLFxuICAgIHNlYXJjaFdpdGhSZXN1bHQgOiBcIiNOQiBxdWl6cyBjb3JyZXNwb25kZW50IMOgIHZvdHJlIHJlY2hlcmNoZSA6XCIsXG4gICAgcHVibGlzaGVkQnk6IFwiUHVibGnDqSBwYXJcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgZXN0aW1hdGVkVGltZTogXCJEdXLDqWUgZGUgbGVjdHVyZSBlc3RpbcOpZSA6IFwiLFxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJFbnZveWV6IHZvcyByw6lwb25zZXNcIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIk9rLCBqZSBjcsOpZSBtb24gY29tcHRlICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKJ2FpIGTDqWrDoCB1biBjb21wdGUsIGplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blNob3dRdWVzdGlvbm5haXJlOiBcIkFmZmljaGVyIGxlIHF1aXogIVwiLFxuICAgIG5leHRRdWVzdGlvbm5haXJlc0xpc3Q6IFwiTGVzICNOQiBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzXCIsXG4gICAgbmVlZEJlQ29tcGxldGVkOiBcIlF1aXogaW5jb21wbGV0XCIsXG4gICAgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZTogXCJQcm9jaGFpbmUgZGF0ZSBzYW5zIHF1aXogcHJvZ3JhbW3DqSA6IFwiLFxuICAgIGhhdmVCZWVuUHVibGlzaGVkIDogXCI6TkIgbm91dmVhdXggcXVlc3Rpb25uYWlyZXMgb250IMOpdMOpIHB1Ymxpw6lzLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gUEFHRSBEJ0FDQ1VFSUwgUE9VUiBMRVMgR0VTVElPTk5BSVJFU1xuXG4vLy8gVsOpcmlmaWUgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2UgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgb24gcsOpY3Vww6hyZSBsZXMgc3RhdHMgZ8OpbsOpcmFsZXMgZXQgZGVzIGRlcm5pw6hyZXMgMjRIIGV0IGxlcyBhZmZpY2hlXG4vLy8gT24gbGlzdGUgZW5zdWl0ZSBsZXMgcHJvY2hhaW5zIHF1aXpzIGRldmFudCDDqnRyZSBwdWJsacOpcyBlbiBmYWlzYW50IHJlc3NvcnRpciBjZXV4IGRldmFudCDDqnRyZSBjb21wbMOpdMOpcyArIGxhIHByb2NoYWluZSBkYXRlIHNhbnMgcXVpelxuLy8vIFVuIG1lbnUgcGVybWV0IMOgIGwndXRpbGlzYXRldXIgZCdhY2PDqWRlciBhdXggZm9ybXVsYWlyZXMgcGVybWV0dGFudCBkZSBnw6lyZXIgbGVzIHF1aXpzIGV0IGxlcyBjb21wdGVzIHV0aWxpc2F0ZXVycyBldCBhYm9ubmVtZW50c1xuLy8vIFVuIG1lc3NhZ2UgdmVuYW50IGQndW5lIGF1dHJlIHBhZ2UgcGV1dCBhdXNzaSDDqnRyZSDDoCBhZmZpY2hlciBsb3JzIGR1IHByZW1pZXIgY2hhcmdlbWVudC5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZGF0ZUZvcm1hdCwgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIGdldENvbmZpZyB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5jb25zdCB0eHRRdWVzdGlvbm5haXJlID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9xdWVzdGlvbm5haXJlXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgZGl2TWFpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFpbi1jb250ZW50XCIpO1xuY29uc3QgZGl2TWVzc2FnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWVzc2FnZVwiKTtcbmNvbnN0IGRpdlF1ZXN0aW9ubmFpcmVzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlc1wiKTtcblxuaGVsbG9EZXYoKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAgeyAgICAgICAgXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJtYW5hZ2VyXCIsIFwiYWRtaW5cIl0sIFwiL1wiK2NvbmZpZ0Zyb250RW5kLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IHR4dC5ub3RBbGxvd2VkLCBjb2xvcjpcImVycm9yXCIgfSk7XG4gICAgICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ0Zyb250RW5kKTtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwiaDRcIiwgdHh0VXNlcnMud2VsY29tZU1lc3NhZ2UucmVwbGFjZShcIiNOQU1FXCIsIHVzZXIubmFtZSkpO1xuICAgICAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkoZ2V0TG9jYWx5KFwibWVzc2FnZVwiKSkpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJtZXNzYWdlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBMZXMgc3RhdHMgOiAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHhoclN0YXRzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyU3RhdHMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmdldEFkbWluU3RhdHMpO1xuICAgICAgICAgICAgICAgIHhoclN0YXRzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU18yNEggOiByZXNwb25zZS5uYk5ld1VzZXJzMjRILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9TVUJTQ1JJUFRJT05TXzI0SCA6IHJlc3BvbnNlLlN1YnNjcmlwdGlvbnMubmJTdWJzY3JpcHRpb25zMjRILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU19ERUxFVEVEXzI0SCA6IHJlc3BvbnNlLm5iRGVsZXRlZFVzZXJzMjRILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9BTlNXRVJTXzI0SCA6IHJlc3BvbnNlLkFuc3dlcnMubmJBbnN3ZXJzMjRILFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU19UT1QgOiByZXNwb25zZS5uYk5ld1VzZXJzVG90LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9TVUJTQ1JJUFRJT05TX1RPVCA6IHJlc3BvbnNlLlN1YnNjcmlwdGlvbnMubmJTdWJzY3JpcHRpb25zVG90LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gOiByZXNwb25zZS5TdWJzY3JpcHRpb25zLm5iU3Vic2NyaXB0aW9uc1ByZW1pdW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0FOU1dFUlNfVE9UIDogcmVzcG9uc2UuQW5zd2Vycy5uYkFuc3dlcnNUb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX0RFTEVURURfVE9UIDogcmVzcG9uc2UubmJEZWxldGVkVXNlcnNUb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCA6IHJlc3BvbnNlLm5iRGVsZXRlZFVzZXJzV2FzVmFsaWRlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIDogcmVzcG9uc2UubmJEZWxldGVkVXNlcnNUb3RXYXNQcmVtaXVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCByZXBsYWNlQWxsKHR4dC5zdGF0c0FkbWluLCBtYXBUZXh0KSwgXCJcIiwgXCJcIiwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclN0YXRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICB4aHJTdGF0cy5zZW5kKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gTGVzIHF1ZXN0aW9ubmFpcmVzIGJpZW50w7R0IHB1Ymxpw6lzIDogICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJOZXh0UXVlc3Rpb25uYWlyZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLmdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMpO1xuICAgICAgICAgICAgICAgIHhock5leHRRdWVzdGlvbm5haXJlcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIEFycmF5LmlzQXJyYXkocmVzcG9uc2UucXVlc3Rpb25uYWlyZXMpKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0SFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5xdWVzdGlvbm5haXJlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjxsaT5cIitkYXRlRm9ybWF0KHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmRhdGVQdWJsaXNoaW5nLCBcImZyXCIpK1wiOiA8YSBocmVmPSdcIitjb25maWdGcm9udEVuZC5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkK1wiJz5cIityZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS50aXRsZStcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uaXNQdWJsaXNoYWJsZT09PWZhbHNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiIDxzcGFuIGNsYXNzPSdlcnJvcic+KFwiK3R4dFF1ZXN0aW9ubmFpcmUubmVlZEJlQ29tcGxldGVkK1wiKTwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcImgzXCIsIHR4dFF1ZXN0aW9ubmFpcmUubmV4dFF1ZXN0aW9ubmFpcmVzTGlzdC5yZXBsYWNlKFwiI05CXCIsIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwiaDRcIiwgdHh0UXVlc3Rpb25uYWlyZS5uZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlK2RhdGVGb3JtYXQocmVzcG9uc2UuZGF0ZU5lZWRlZCwgXCJmclwiKSwgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcInVsXCIsIGxpc3RIVE1MLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaG9tZU1hbmFnZXIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInJlZ2VuZXJhdGVIVE1MIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5lZWRUaXRsZSIsIm5lZWROb3RUb29Mb25nVGl0bGUiLCJuZWVkVXJsIiwibmVlZFVuaXF1ZVVybCIsIm5lZWRJbnRyb2R1Y3Rpb24iLCJuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlIiwibmVlZEtub3dJZklzUHVibGlzaGVkIiwibmVlZExhbmd1YWdlIiwibmVlZEVzdGltYXRlZFRpbWUiLCJub3RGb3VuZCIsInNlYXJjaFJlc3VsdFRpdGxlIiwic2VhcmNoTm9SZXN1bHQiLCJzZWFyY2hXaXRoUmVzdWx0IiwicXVlc3Rpb25uYWlyZXNOYW1lIiwicHVibGlzaGVkQnkiLCJwdWJsaXNoZWRBdCIsImxhc3RVcGRhdGVkIiwiZXN0aW1hdGVkVGltZSIsImVzdGltYXRlZFRpbWVPcHRpb24iLCJzaG9ydCIsIm1lZGl1bSIsImxvbmciLCJleHBsYW5hdGlvbkJlZm9yZVR4dCIsImNvcnJlY3RBbnN3ZXJUeHQiLCJ3cm9uZ0Fuc3dlclR4dCIsImJ0blNlbmRSZXNwb25zZSIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blNob3dRdWVzdGlvbm5haXJlIiwiYnRuU2hhcmVRdWl6VHh0IiwibmV4dFF1ZXN0aW9ubmFpcmVzTGlzdCIsIm5lZWRCZUNvbXBsZXRlZCIsIm5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmUiLCJoYXZlQmVlblB1Ymxpc2hlZCIsImhhdmVCZWVuUmVnZW5lcmF0ZWQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0IiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsInR4dFF1ZXN0aW9ubmFpcmUiLCJkaXZNYWluIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1lc3NhZ2UiLCJkaXZRdWVzdGlvbm5haXJlcyIsImJ0blJlZ2VuZXJhdGUiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJnZXRDb25maWciLCJjb25maWciLCJhZGRFbGVtZW50IiwiZGl2UmVzcG9uc2UiLCJjaGVja1Nlc3Npb24iLCJtZXNzYWdlIiwiY29sb3IiLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsInN0eWxlIiwiZGlzcGxheSIsInJlbW92ZUxvY2FseSIsInhoclN0YXRzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm1hcFRleHQiLCJOQl9VU0VSU18yNEgiLCJuYk5ld1VzZXJzMjRIIiwiTkJfU1VCU0NSSVBUSU9OU18yNEgiLCJTdWJzY3JpcHRpb25zIiwibmJTdWJzY3JpcHRpb25zMjRIIiwiTkJfVVNFUlNfREVMRVRFRF8yNEgiLCJuYkRlbGV0ZWRVc2VyczI0SCIsIk5CX0FOU1dFUlNfMjRIIiwiQW5zd2VycyIsIm5iQW5zd2VyczI0SCIsIk5CX1VTRVJTX1RPVCIsIm5iTmV3VXNlcnNUb3QiLCJOQl9TVUJTQ1JJUFRJT05TX1RPVCIsIm5iU3Vic2NyaXB0aW9uc1RvdCIsIk5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSIsIm5iU3Vic2NyaXB0aW9uc1ByZW1pdW0iLCJOQl9BTlNXRVJTX1RPVCIsIm5iQW5zd2Vyc1RvdCIsIk5CX1VTRVJTX0RFTEVURURfVE9UIiwibmJEZWxldGVkVXNlcnNUb3QiLCJOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQiLCJuYkRlbGV0ZWRVc2Vyc1dhc1ZhbGlkZWQiLCJOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0iLCJuYkRlbGV0ZWRVc2Vyc1RvdFdhc1ByZW1pdW0iLCJyZXBsYWNlQWxsIiwic2V0UmVxdWVzdEhlYWRlciIsInRva2VuIiwic2VuZCIsInhock5leHRRdWVzdGlvbm5haXJlcyIsIkFycmF5IiwiaXNBcnJheSIsImxpc3RIVE1MIiwiaSIsImRhdGVGb3JtYXQiLCJkYXRlUHVibGlzaGluZyIsImlzUHVibGlzaGFibGUiLCJkYXRlTmVlZGVkIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInhoclJlZ2VuZXJhdGUiLCJjb25zb2xlIiwiZXJyb3IiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImxvZyIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwiZGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJub3ciLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaW5kZXhPZiIsImFzc2lnbiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7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OiIuL0pTL2hvbWVNYW5hZ2VyLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2hvbWVNYW5hZ2VyLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIiwvLyBpZGVtXG4gICAgbmJSYW5kb21SZXN1bHRzIDogMy8vIGxpbWl0ZSBsZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3F1ZXN0aW9ubmFpcmVcIjogXCIuLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmUuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbm5haXJlJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogV2lraXDDqWRpYSBlbiBxdWVzdGlvbnNcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgcmVjZXZleiBjaGFxdWUgam91ciBkZSBub3V2ZWF1eCBxdWl6cyBwb3VyIHRlc3RlciB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3Nlcy5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWRUaXRsZTogXCJNZXJjaSBkZSBmb3VybmlyIHVuIHRpdHJlIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdUaXRsZTogXCJMZSB0aXRyZSBkdSBxdWl6IG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFVybDogXCJNZXJjaSBkZSBmb3VybmlyIGwndXJsIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZFVuaXF1ZVVybDogXCJMJ3VybCBkdSBxdWl6IGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICAgIG5lZWRJbnRyb2R1Y3Rpb246IFwiTWVyY2kgZGUgZm91cm5pciB1biB0ZXh0ZSBkJ2ludHJvZHVjdGlvbiDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGU6IFwiTGEgZGF0ZSBkZSBwdWJsaWNhdGlvbiBmb3VybmllIG4nYSBwYXMgdW4gZm9ybWF0IHZhbGlkZS5cIixcbiAgICBuZWVkS25vd0lmSXNQdWJsaXNoZWQ6IFwiSWwgZmF1dCBzYXZvaXIgc2kgY2UgcXVpeiBlc3QgcHVibGnDqS5cIixcbiAgICBuZWVkTGFuZ3VhZ2U6IFwiVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5lZWRFc3RpbWF0ZWRUaW1lOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIGVzdGltYXRpb24gZGUgbGEgZHVyw6llIGRlIGNlIHF1aXouXCIsXG4gICAgbm90Rm91bmQgOiBcIkF1Y3VuIHF1aXogbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHNlYXJjaFJlc3VsdFRpdGxlIDogXCJSw6lzdWx0YXQgcG91ciB2b3RyZSByZWNoZXJjaGVcIixcbiAgICBzZWFyY2hOb1Jlc3VsdCA6IFwiQXVjdW4gcsOpc3VsdGF0IG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoV2l0aFJlc3VsdCA6IFwiVm9pY2kgI05CIHF1aXpzIHBvdXIgdm90cmUgcmVjaGVyY2hlIDpcIixcbiAgICBxdWVzdGlvbm5haXJlc05hbWU6IFwicXVpelwiLFxuICAgIHB1Ymxpc2hlZEJ5OiBcIlF1aXogcHVibGnDqSBwYXJcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgZXN0aW1hdGVkVGltZTogXCJEdXLDqWUgZGUgbGVjdHVyZSBlc3RpbcOpZSA6IFwiLFxuICAgIGVzdGltYXRlZFRpbWVPcHRpb24gOlxuICAgIHtcbiAgICAgICAgc2hvcnQ6IFwiY291cnRlXCIsXG4gICAgICAgIG1lZGl1bTogXCJtb3llbm5lXCIsXG4gICAgICAgIGxvbmc6IFwibG9uZ3VlXCJcbiAgICB9LFxuICAgIGV4cGxhbmF0aW9uQmVmb3JlVHh0OiBcIkV4dHJhaXQgOlwiLFxuICAgIGNvcnJlY3RBbnN3ZXJUeHQ6IFwiQm9ubmUgcsOpcG9uc2VcIixcbiAgICB3cm9uZ0Fuc3dlclR4dDogXCJNYXV2YWlzZSByw6lwb25zZVwiLFxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJUZXN0ZXogdm9zIHLDqXBvbnNlcy5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuU2hvd1F1ZXN0aW9ubmFpcmU6IFwiQWZmaWNoZXIgbGUgcXVpeiAhXCIsXG4gICAgYnRuU2hhcmVRdWl6VHh0OiBcIlBhcnRhZ2VyIGNlIHF1aXogc3VyIFwiLFxuICAgIG5leHRRdWVzdGlvbm5haXJlc0xpc3Q6IFwiTGVzICNOQiBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzXCIsXG4gICAgbmVlZEJlQ29tcGxldGVkOiBcIlF1aXogaW5jb21wbGV0XCIsXG4gICAgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZTogXCJQcm9jaGFpbmUgZGF0ZSBzYW5zIHF1aXogcHJvZ3JhbW3DqSA6IFwiLFxuICAgIGhhdmVCZWVuUHVibGlzaGVkIDogXCI6TkIgbm91dmVhdXggcXVlc3Rpb25uYWlyZXMgb250IMOpdMOpIHB1Ymxpw6lzLlwiLFxuICAgIGhhdmVCZWVuUmVnZW5lcmF0ZWQgOiBcIkxlcyBmaWNoaWVycyBIVE1MIGRlICNOQjEgcXVlc3Rpb25uYWlyZXMgZXQgI05CMiBydWJyaXF1ZXMgb250IMOpdMOpIHJlZ8OpbsOpcsOpcy5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyB2b3RyZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciAoQ3RybCtWKSBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmllcnMgcXVpenNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogOSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJtb24tY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhIDxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKTwvc3Bhbj4sIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvc3Bhbj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSAhXCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogXCJUZXN0ZXIgV2lraUxlcm5pIGdyYXR1aXRlbWVudC5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5TdWl2YW50IGxlcyBxdWVzdGlvbnMsIHVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzIGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gPGI+Qydlc3QgdG91am91cnMgbGUgY29udGVudSBkZSBsJ2FydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2kgY29uY2VybmFudCBsZXMgXFxcImJvbm5lc1xcXCIgcsOpcG9uc2VzPC9iPi4gTWFpcyBsZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlcywgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50PC9iPi48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuIENlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSA8Yj50ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6PC9iPiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEdyw6JjZSDDoCBjZSBjb21wdGUsIHZvdXMgcG91cnJleiBhdXNzaSA8Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenM8L2I+IHBvdXIgY29udGludWVyIMOgIFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCJMZXMgZGVybmnDqHJlcyBncmFpbmVzIGRlIHNhdm9pclwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxufTsiLCIvLyAtLSBQQUdFIEQnQUNDVUVJTCBQT1VSIExFUyBHRVNUSU9OTkFJUkVTXG5cbi8vLyBWw6lyaWZpZSBxdWUgbCd1dGlsaXNhdGV1ciBlc3QgYmllbiBjb25uZWN0w6ksIGEgbGUgYm9uIHN0YXR1dCBldCBsZSByZWRpcmlnZSB2ZXJzIGxlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLlxuLy8vIFNpIGMnZXN0IG9rLCBvbiByw6ljdXDDqHJlIGxlcyBzdGF0cyBnw6luw6lyYWxlcyBldCBkZXMgZGVybmnDqHJlcyAyNEggZXQgbGVzIGFmZmljaGVcbi8vLyBPbiBsaXN0ZSBlbnN1aXRlIGxlcyBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzIGVuIGZhaXNhbnQgcmVzc29ydGlyIGNldXggZGV2YW50IMOqdHJlIGNvbXBsw6l0w6lzICsgbGEgcHJvY2hhaW5lIGRhdGUgc2FucyBxdWl6XG4vLy8gVW4gbWVudSBwZXJtZXQgw6AgbCd1dGlsaXNhdGV1ciBkJ2FjY8OpZGVyIGF1eCBmb3JtdWxhaXJlcyBwZXJtZXR0YW50IGRlIGfDqXJlciBsZXMgcXVpenMgZXQgbGVzIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGV0IGFib25uZW1lbnRzXG4vLy8gVW4gbWVzc2FnZSB2ZW5hbnQgZCd1bmUgYXV0cmUgcGFnZSBwZXV0IGF1c3NpIMOqdHJlIMOgIGFmZmljaGVyIGxvcnMgZHUgcHJlbWllciBjaGFyZ2VtZW50LlxuXG4vLy8gQydlc3QgaWNpIGF1c3NpIHF1ZSBsJ29uIHBldXQgcsOpZ8OpbsOpcmVyIHRvdXQgbGUgSFRNTCAtPiDDoCB0ZXJtZSBkYW5zIGhvbWVBZG1pbiAhXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuY29uc3QgdHh0UXVlc3Rpb25uYWlyZSA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvcXVlc3Rpb25uYWlyZVwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGRpdk1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZRdWVzdGlvbm5haXJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZXNcIik7XG5cbmNvbnN0IGJ0blJlZ2VuZXJhdGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndhbnRSZWdlbmVyYXRlXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7ICAgICAgICBcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcIm1hbmFnZXJcIiwgXCJhZG1pblwiXSwgXCIvXCIrY29uZmlnRnJvbnRFbmQuY29ubmVjdGlvblBhZ2UsIHsgbWVzc2FnZTogdHh0Lm5vdEFsbG93ZWQsIGNvbG9yOlwiZXJyb3JcIiB9KTtcbiAgICAgICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnRnJvbnRFbmQpO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJoNFwiLCB0eHRVc2Vycy53ZWxjb21lTWVzc2FnZS5yZXBsYWNlKFwiI05BTUVcIiwgdXNlci5uYW1lKSk7XG4gICAgICAgICAgICAgICAgZGl2TWFpbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIExlcyBzdGF0cyA6ICAgICAgXG4gICAgICAgICAgICAgICAgY29uc3QgeGhyU3RhdHMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJTdGF0cy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuZ2V0QWRtaW5TdGF0cyk7XG4gICAgICAgICAgICAgICAgeGhyU3RhdHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTXzI0SCA6IHJlc3BvbnNlLm5iTmV3VXNlcnMyNEgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1NVQlNDUklQVElPTlNfMjRIIDogcmVzcG9uc2UuU3Vic2NyaXB0aW9ucy5uYlN1YnNjcmlwdGlvbnMyNEgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX0RFTEVURURfMjRIIDogcmVzcG9uc2UubmJEZWxldGVkVXNlcnMyNEgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX0FOU1dFUlNfMjRIIDogcmVzcG9uc2UuQW5zd2Vycy5uYkFuc3dlcnMyNEgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1VTRVJTX1RPVCA6IHJlc3BvbnNlLm5iTmV3VXNlcnNUb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1NVQlNDUklQVElPTlNfVE9UIDogcmVzcG9uc2UuU3Vic2NyaXB0aW9ucy5uYlN1YnNjcmlwdGlvbnNUb3QsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSA6IHJlc3BvbnNlLlN1YnNjcmlwdGlvbnMubmJTdWJzY3JpcHRpb25zUHJlbWl1bSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfQU5TV0VSU19UT1QgOiByZXNwb25zZS5BbnN3ZXJzLm5iQW5zd2Vyc1RvdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfVVNFUlNfREVMRVRFRF9UT1QgOiByZXNwb25zZS5uYkRlbGV0ZWRVc2Vyc1RvdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIDogcmVzcG9uc2UubmJEZWxldGVkVXNlcnNXYXNWYWxpZGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gOiByZXNwb25zZS5uYkRlbGV0ZWRVc2Vyc1RvdFdhc1ByZW1pdW1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHJlcGxhY2VBbGwodHh0LnN0YXRzQWRtaW4sIG1hcFRleHQpLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyU3RhdHMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7IFxuICAgICAgICAgICAgICAgIHhoclN0YXRzLnNlbmQoKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBMZXMgcXVlc3Rpb25uYWlyZXMgYmllbnTDtHQgcHVibGnDqXMgOiAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHhock5leHRRdWVzdGlvbm5haXJlcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhock5leHRRdWVzdGlvbm5haXJlcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWcuZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyk7XG4gICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZS5xdWVzdGlvbm5haXJlcykpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiPGxpPlwiK2RhdGVGb3JtYXQocmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uZGF0ZVB1Ymxpc2hpbmcsIFwiZnJcIikrXCI6IDxhIGhyZWY9J1wiK2NvbmZpZ0Zyb250RW5kLnF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UrXCI/aWQ9XCIrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0uaWQrXCInPlwiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLnRpdGxlK1wiPC9hPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pc1B1Ymxpc2hhYmxlPT09ZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCs9XCIgPHNwYW4gY2xhc3M9J2Vycm9yJz4oXCIrdHh0UXVlc3Rpb25uYWlyZS5uZWVkQmVDb21wbGV0ZWQrXCIpPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UucXVlc3Rpb25uYWlyZXMubGVuZ3RoIT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwiaDNcIiwgdHh0UXVlc3Rpb25uYWlyZS5uZXh0UXVlc3Rpb25uYWlyZXNMaXN0LnJlcGxhY2UoXCIjTkJcIiwgcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMubGVuZ3RoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbm5haXJlcywgXCJoNFwiLCB0eHRRdWVzdGlvbm5haXJlLm5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmUrZGF0ZUZvcm1hdChyZXNwb25zZS5kYXRlTmVlZGVkLCBcImZyXCIpLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25uYWlyZXMsIFwidWxcIiwgbGlzdEhUTUwsIFwiXCIsIFwiXCIsIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJOZXh0UXVlc3Rpb25uYWlyZXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7IFxuICAgICAgICAgICAgICAgIHhock5leHRRdWVzdGlvbm5haXJlcy5zZW5kKCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGVtZW50IGRlbWFuZGUgcsOpZ8OpbsOpcmVyIEhUTUxcbiAgICAgICAgICAgICAgICBidG5SZWdlbmVyYXRlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJSZWdlbmVyYXRlID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclJlZ2VuZXJhdGUub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrXCIvaHRtbHJlZ2VuZXJhdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB4aHJSZWdlbmVyYXRlLnNlbmQoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/homeUser.app.js b/front/public/JS/homeUser.app.js index 5d63566..e95a8c3 100644 --- a/front/public/JS/homeUser.app.js +++ b/front/public/JS/homeUser.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -466,7 +470,7 @@ module.exports = { checkResponsesOuputFail: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. C'est certain, vous ferez mieux la prochaine fois !", checkResponsesOuputMedium: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. C'est pas mal du tout !", checkResponsesOuputSuccess: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. Bravo ! Rien ne vous échappe !", - wantToSaveResponses: "Si vous le souhaitez, vous pouvez sauvegarder votre résultat en créant votre compte.\nCela vous permettra de tester de nouveau ce quiz dans l'avenir pour voir si vous avez mémoriser les bonnes réponses. Vous pourrez ainsi aussi recevoir régulièrement de nouveaux quizs.", + wantToSaveResponses: "Si vous le souhaitez, vous pouvez sauvegarder votre résultat en vous connectant à votre compte.", responseSavedMessage: "Votre résultat a été enregistré. Accèder à tous vos quizs.", responseSavedError: "Cependant une erreur a été rencontrée durant l'enregistrement de votre résultat. Accèder à tous vos quizs.", noQuestionnaireWithoudAnswer: "Bravo ! Vous avez répondu à tous les quizs qui vous on été proposés !
Il y en a des nouveaux publiés régulièrement et qui vous seront proposés.
En attendant vous pouvez peut-être essayer de répondre de nouveau à certain quiz pour voir si vous vous souvenez des bonnes réponses ?", @@ -488,8 +492,8 @@ module.exports = { /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -512,6 +516,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -538,19 +543,30 @@ module.exports = { notFound: "Aucun quiz n'a pas été trouvé.", searchResultTitle: "Résultat pour votre recherche", searchNoResult: "Aucun résultat n'a été trouvé pour votre recherche", - searchWithResult: "#NB quizs correspondent à votre recherche :", - publishedBy: "Publié par", + searchWithResult: "Voici #NB quizs pour votre recherche :", + questionnairesName: "quiz", + publishedBy: "Quiz publié par", publishedAt: ", le", lastUpdated: "Dernière mise à jour, le ", estimatedTime: "Durée de lecture estimée : ", - btnSendResponse: "Envoyez vos réponses", - btnProposeSubscribe: "Ok, je crée mon compte !", - btnProposeConnection: "J'ai déjà un compte, je me connecte.", + estimatedTimeOption: { + short: "courte", + medium: "moyenne", + long: "longue" + }, + explanationBeforeTxt: "Extrait :", + correctAnswerTxt: "Bonne réponse", + wrongAnswerTxt: "Mauvaise réponse", + btnSendResponse: "Testez vos réponses.", + btnProposeSubscribe: "Je crée mon compte.", + btnProposeConnection: "Je me connecte.", btnShowQuestionnaire: "Afficher le quiz !", + btnShareQuizTxt: "Partager ce quiz sur ", nextQuestionnairesList: "Les #NB prochains quizs devant être publiés", needBeCompleted: "Quiz incomplet", nextDateWithoutQuestionnaire: "Prochaine date sans quiz programmé : ", - haveBeenPublished: ":NB nouveaux questionnaires ont été publiés." + haveBeenPublished: ":NB nouveaux questionnaires ont été publiés.", + haveBeenRegenerated: "Les fichiers HTML de #NB1 questionnaires et #NB2 rubriques ont été regénérés." }; /***/ }), @@ -571,7 +587,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -582,20 +598,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -608,15 +627,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -624,8 +645,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -739,7 +761,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -780,7 +803,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -843,7 +866,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -877,8 +1002,6 @@ function _asyncToGenerator(fn) { return function () { var self = this, args = ar /// Pour l'affichage des listings de quiz, l'API retourne directement du html. /// Un menu permet à l'utilisateur d'accéder à la modification de ses infos, de son abonnement, etc. /// Un message venant d'une autre page peut aussi être à afficher lors du premier chargement. -/// Ajouter affichage anciens quizs à retentés si pas de quizs en attente ? -/// Un quiz au hasard ? // Fichier de configuration côté client : var lang = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["availableLangs"][0]; @@ -903,13 +1026,16 @@ var txtQuestionnaire = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/q var divMain = document.getElementById("main-content"); +var divCrash = document.getElementById("crash"); var divMessage = document.getElementById("message"); var quizTitle = document.getElementById("quizsTitle"); var quizIntro = document.getElementById("quizsIntro"); var quizListing = document.getElementById("quizsList"); -var quizPagination = document.getElementById("quizsPagination"); +var quizPaginationPrevious = document.getElementById("previous"); +var quizPaginationNext = document.getElementById("next"); var formSearch = document.getElementById("search"); var inputBegin = document.getElementById("begin"); +var btnRandom = document.getElementById("random"); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["helloDev"])(); var initialise = /*#__PURE__*/function () { @@ -931,7 +1057,7 @@ var initialise = /*#__PURE__*/function () { break; } - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", txt.serverError, "", ["error"]); _context.next = 12; break; @@ -948,7 +1074,7 @@ var initialise = /*#__PURE__*/function () { if (isConnected) { user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_3__["updateAccountLink"])(user.status, configFrontEnd); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "h4", txtUsers.welcomeMessage.replace("#NAME", user.name)); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "h1", txtUsers.welcomeMessage.replace("#NAME", user.name)); divMain.style.display = "block"; if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("message"))) { @@ -992,10 +1118,14 @@ var initialise = /*#__PURE__*/function () { if (this.status === 200) { if (response.nbTot === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtAnwers.noQuestionnaireWithoudAnswer, "", ["success"]);else if (response.html) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtAnwers.nbQuestionnaireWithoudAnswer.replace("#NB", response.questionnaires.length), "", ["information"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtAnwers.nbQuestionnaireWithoudAnswer.replace("#NB", response.questionnaires.length), "", ["info"]); quizListing.innerHTML = response.html; - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", txt.serverError, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", txt.serverError, "", ["error"]); + window.location.hash = ""; // sinon les hash s'enchaînent... + + window.location.assign("#quizsTitle"); + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", txt.serverError, "", ["error"]); // revoir si intérêt d'afficher quelque chose + } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", txt.serverError, "", ["error"]); // idem + } }; @@ -1004,28 +1134,39 @@ var initialise = /*#__PURE__*/function () { // La recherche peut être lancée via la bouton submit ou un lien de pagination sendSearch = function sendSearch() { + var type = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : "search"; quizTitle.innerHTML = txtQuestionnaire.searchResultTitle; - quizListing.innerHTML = ""; + quizListing.innerHTML = "" + ""; var datas = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(formSearch); var xhrSearch = new XMLHttpRequest(); - xhrSearch.open("POST", config.apiUrl + config.questionnaireRoutes + config.searchQuestionnairesRoute); + if (type == "search") xhrSearch.open("POST", config.apiUrl + config.questionnaireRoutes + config.searchQuestionnairesRoute);else if (type == "random") xhrSearch.open("POST", config.apiUrl + config.questionnaireRoutes + "/getrandom"); // revoir : changer par la variable getRandomQuestionnairesRoute du fichier de config xhrSearch.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { var response = JSON.parse(this.responseText); if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["isEmpty"])(response.nbTot)) { - if (response.nbTot === 0) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtQuestionnaire.notFound, "", ["information"]);else if (response.html) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtQuestionnaire.searchWithResult.replace("#NB", response.nbTot), "", ["success"]); - quizListing.innerHTML = response.html; // Pagination nécessaire ? + if (response.nbTot === 0) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtQuestionnaire.notFound, "", ["info"]); + window.location.hash = ""; // sinon les hash s'enchaînent... - quizPagination.innerHTML = ""; // on commence par vider... + window.location.assign("#quizsTitle"); + } else if (response.html) { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizIntro, "p", txtQuestionnaire.searchWithResult.replace("#NB", response.nbTot), "", ["success"]); + quizListing.innerHTML = response.html; + window.location.hash = ""; + window.location.assign("#quizsTitle"); // Pagination nécessaire ? + // on commence par vider... + + quizPaginationPrevious.innerHTML = ""; + quizPaginationNext.innerHTML = ""; if (response.begin != 0) // peut retourner "0" et non 0 ! { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPagination, "a", txt.previousPage, "previousRes", "", { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPaginationPrevious, "a", "<< " + txt.previousPage, "previousRes", ["button"], { href: "#search" - }); + }); // revoir, les "<<" pourraient être gérées par le CSS + var previousPage = document.getElementById("previousRes"); // le retour à la page précédente peut se faire en cliquant sur le bouton ou via l'historique du navigateur var goBackRes = function goBackRes() { @@ -1034,23 +1175,25 @@ var initialise = /*#__PURE__*/function () { newBegin = 0; document.getElementById("begin").value = newBegin; sendSearch(); - window.location.assign("#search"); + window.location.hash = ""; + window.location.assign("#quizsTitle"); // pour remonter }; previousPage.addEventListener("click", function (e) { e.preventDefault(); goBackRes(); }); - - window.onpopstate = function (e) { - e.preventDefault(); - goBackRes(); - }; + /* semble provoqué bug ??? + window.onpopstate = function(e) + { + e.preventDefault(); + goBackRes(); + };*/ } if (response.end < response.nbTot - 1) // -1, car tableau commence à 0 ! { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPagination, "a", txt.nextPage, "nextRes", "", { + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizPaginationNext, "a", txt.nextPage + " >>", "nextRes", ["button"], { href: "#search" }, false); var nextPage = document.getElementById("nextRes"); @@ -1058,7 +1201,9 @@ var initialise = /*#__PURE__*/function () { e.preventDefault(); document.getElementById("begin").value = response.end + 1; sendSearch(); - window.location.assign("#search"); + window.location.hash = ""; // sinon les hash s'enchaînent... + + window.location.assign("#quizsTitle"); // pour remonter }); } } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(quizs, "p", txt.serverError, "", ["error"]); @@ -1075,6 +1220,11 @@ var initialise = /*#__PURE__*/function () { } }; + btnRandom.addEventListener("click", function (e) { + e.preventDefault(); + document.getElementById("begin").value = 0; + sendSearch("random"); + }); formSearch.addEventListener("submit", function (e) { e.preventDefault(); document.getElementById("begin").value = 0; @@ -1090,7 +1240,7 @@ var initialise = /*#__PURE__*/function () { _context.prev = 14; _context.t0 = _context["catch"](0); console.error(_context.t0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divMessage, "p", txt.serverError, "", ["error"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divCrash, "p", txt.serverError, "", ["error"]); case 18: case "end": @@ -1198,7 +1348,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1369,7 +1519,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1457,13 +1608,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1515,4 +1666,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9xdWVzdGlvbm5haXJlJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2Fuc3dlci5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmUuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9ob21lVXNlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvY2xpZW50c3RvcmFnZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZG9tLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9ldmVyeXdoZXJlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9mb3Jtcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwibmVlZE51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZEludGVnZXJOdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIiwibmVlZE1pbk51bWJlclNlY29uZGVzUmVzcG9uc2UiLCJjaGVja1Jlc3BvbnNlc091cHV0RmFpbCIsImNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0iLCJjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyIsIndhbnRUb1NhdmVSZXNwb25zZXMiLCJyZXNwb25zZVNhdmVkTWVzc2FnZSIsInJlc3BvbnNlU2F2ZWRFcnJvciIsIm5vUXVlc3Rpb25uYWlyZVdpdGhvdWRBbnN3ZXIiLCJuYlF1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyIiwic3RhdHNVc2VyIiwicHJldmlvdXNBbnN3ZXJzVGl0bGUiLCJwcmV2aW91c0Fuc3dlcnNTdGF0cyIsInByZXZpb3VzQW5zd2Vyc0xpbmUiLCJub1ByZXZpb3VzQW5zd2VyIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJuZWVkVGl0bGUiLCJuZWVkTm90VG9vTG9uZ1RpdGxlIiwibmVlZFVybCIsIm5lZWRVbmlxdWVVcmwiLCJuZWVkSW50cm9kdWN0aW9uIiwibmVlZENvcnJlY3RQdWJsaXNoaW5nRGF0ZSIsIm5lZWRLbm93SWZJc1B1Ymxpc2hlZCIsIm5lZWRMYW5ndWFnZSIsIm5lZWRFc3RpbWF0ZWRUaW1lIiwibm90Rm91bmQiLCJzZWFyY2hSZXN1bHRUaXRsZSIsInNlYXJjaE5vUmVzdWx0Iiwic2VhcmNoV2l0aFJlc3VsdCIsInB1Ymxpc2hlZEJ5IiwicHVibGlzaGVkQXQiLCJsYXN0VXBkYXRlZCIsImVzdGltYXRlZFRpbWUiLCJidG5TZW5kUmVzcG9uc2UiLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5TaG93UXVlc3Rpb25uYWlyZSIsIm5leHRRdWVzdGlvbm5haXJlc0xpc3QiLCJuZWVkQmVDb21wbGV0ZWQiLCJuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlIiwiaGF2ZUJlZW5QdWJsaXNoZWQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJhbHJlYWR5Q29ubmVjdGVkIiwibmVlZEJlQ29ubmVjdGVkIiwiY29ubmVjdGlvbk9rIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwidG9vTWFueUxvZ2luRmFpbHMiLCJiYWRQYXNzd29yZCIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwidHh0VXNlcnMiLCJ0eHRBbndlcnMiLCJ0eHRRdWVzdGlvbm5haXJlIiwiZGl2TWFpbiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZNZXNzYWdlIiwicXVpelRpdGxlIiwicXVpekludHJvIiwicXVpekxpc3RpbmciLCJxdWl6UGFnaW5hdGlvbiIsImZvcm1TZWFyY2giLCJpbnB1dEJlZ2luIiwiaGVsbG9EZXYiLCJpbml0aWFsaXNlIiwiZ2V0Q29uZmlnIiwiY29uZmlnIiwiYWRkRWxlbWVudCIsImRpdlJlc3BvbnNlIiwiY2hlY2tTZXNzaW9uIiwibWVzc2FnZSIsImNvbG9yIiwid2luZG93IiwibG9jYXRpb24iLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsInN0eWxlIiwiZGlzcGxheSIsInJlbW92ZUxvY2FseSIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsInhoclN0YXRzIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsIm5iQW5zd2VycyIsIm1hcFRleHQiLCJOQkFOU1dFUlMiLCJOQlFVRVNUSU9OTkFJUkVTIiwibmJRdWVzdGlvbm5haXJlcyIsIk5CVE9UUVVFU1RJT05OQUlSRVMiLCJnZW5lcmFsIiwibmJQdWJsaXNoZWQiLCJBVkdEVVJBVElPTiIsImF2Z0R1cmF0aW9uIiwiQVZHQ09SUkVDVEFOU1dFUlMiLCJhdmdDb3JyZWN0QW5zd2VycyIsInJlcGxhY2VBbGwiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidG9rZW4iLCJzZW5kIiwieGhyTGFzdFF1aXpzIiwibmJUb3QiLCJodG1sIiwiaW5uZXJIVE1MIiwicXVpenMiLCJzZW5kU2VhcmNoIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJTZWFyY2giLCJiZWdpbiIsImdvQmFja1JlcyIsIm5ld0JlZ2luIiwiYXNzaWduIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsIm9ucG9wc3RhdGUiLCJlbmQiLCJvdXRwdXQiLCJzdHJpbmdpZnkiLCJjb25zb2xlIiwiZXJyb3IiLCJzYXZlTG9jYWx5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJteUZvcm0iLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInhociIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFBhc3N3b3JkIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJub3ciLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsImluZGV4T2YiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtR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LFNBQUQsRUFBWTdELE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQzVFLDJEQUFPLENBQUM4TSxTQUFELENBQVgsRUFDSXJFLG9FQUFVLENBQUMsS0FBRCxFQUFRcUUsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDOU0sMkRBQU8sQ0FBQzZNLGNBQUQsQ0FBWCxFQUNJL0gsTUFBTSxDQUFDQyxRQUFQLENBQWdCZ0QsTUFBaEIsQ0FBdUI4RSxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2hvbWVVc2VyLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2hvbWVVc2VyLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJkZWZhdWx0XCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwid2lraWxlcm5pXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCwgICAgXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLy8gaWRlbVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvYW5zd2VyXCI6IFwiLi4vbGFuZy9mci9hbnN3ZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9hbnN3ZXIkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9xdWVzdGlvbm5haXJlXCI6IFwiLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvcXVlc3Rpb25uYWlyZSRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIuXCIsXG4gICAgbmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgbmUgcGV1dCDDqnRyZSBpbmbDqXJpZXVyIMOgIDEuXCIsXG4gICAgbmVlZE1heE51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgbmUgcGV1dCDDqnRyZSBhdXNzaSDDqWxldsOpLlwiLFxuICAgIG5lZWROdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBkb2l0IMOqdHJlIGZvdXJuaS5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZi5cIixcbiAgICBuZWVkTWF4TnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgbmUgcGV1dCDDqnRyZSBzdXDDqXJpZXVyIGF1IG5vbWJyZSBkZSBxdWVzdGlvbnMuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIDogXCJMYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyIGRlIHNlY29uZGVzLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIDogXCJMYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UgbmUgcGV1dCDDqnRyZSBuw6lnYXRpdmUuXCIsXG4gICAgY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwgOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IE5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TLiBDJ2VzdCBjZXJ0YWluLCB2b3VzIGZlcmV6IG1pZXV4IGxhIHByb2NoYWluZSBmb2lzICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiBOQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUy4gQydlc3QgcGFzIG1hbCBkdSB0b3V0ICFcIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogTkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMuIEJyYXZvICEgUmllbiBuZSB2b3VzIMOpY2hhcHBlICFcIixcbiAgICB3YW50VG9TYXZlUmVzcG9uc2VzOiBcIlNpIHZvdXMgbGUgc291aGFpdGV6LCB2b3VzIHBvdXZleiBzYXV2ZWdhcmRlciB2b3RyZSByw6lzdWx0YXQgZW4gY3LDqWFudCB2b3RyZSBjb21wdGUuXFxuQ2VsYSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IGRhbnMgbCdhdmVuaXIgcG91ciB2b2lyIHNpIHZvdXMgYXZleiBtw6ltb3Jpc2VyIGxlcyBib25uZXMgcsOpcG9uc2VzLiBWb3VzIHBvdXJyZXogYWluc2kgYXVzc2kgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlYXV4IHF1aXpzLlwiLFxuICAgIHJlc3BvbnNlU2F2ZWRNZXNzYWdlIDogXCJWb3RyZSByw6lzdWx0YXQgYSDDqXTDqSBlbnJlZ2lzdHLDqS4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICByZXNwb25zZVNhdmVkRXJyb3IgOiBcIkNlcGVuZGFudCB1bmUgZXJyZXVyIGEgw6l0w6kgcmVuY29udHLDqWUgZHVyYW50IGwnZW5yZWdpc3RyZW1lbnQgZGUgdm90cmUgcsOpc3VsdGF0LiA8YSBocmVmPScvI1VSTCc+QWNjw6hkZXIgw6AgdG91cyB2b3MgcXVpenM8L2E+LlwiLFxuICAgIG5vUXVlc3Rpb25uYWlyZVdpdGhvdWRBbnN3ZXI6IFwiQnJhdm8gISBWb3VzIGF2ZXogcsOpcG9uZHUgw6AgdG91cyBsZXMgcXVpenMgcXVpIHZvdXMgb24gw6l0w6kgcHJvcG9zw6lzICE8YnI+SWwgeSBlbiBhIGRlcyBub3V2ZWF1eCBwdWJsacOpcyByw6lndWxpw6hyZW1lbnQgZXQgcXVpIHZvdXMgc2Vyb250IHByb3Bvc8Opcy48YnI+RW4gYXR0ZW5kYW50IHZvdXMgcG91dmV6IHBldXQtw6p0cmUgZXNzYXllciBkZSByw6lwb25kcmUgZGUgbm91dmVhdSDDoCBjZXJ0YWluIHF1aXogcG91ciB2b2lyIHNpIHZvdXMgdm91cyBzb3V2ZW5leiBkZXMgYm9ubmVzIHLDqXBvbnNlcyA/XCIsXG4gICAgbmJRdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlcjogXCJJbCB5IGEgI05CIHF1aXpzIHF1aSB2b3VzIG9udCDDqXTDqSBwcm9wb3PDqXMgZXQgYXV4cXVlbHMgdm91cyBuJ2F2ZXogcGFzIHLDqXBvbmR1LiBWb2ljaSBsZXMgZGVybmllcnMgOiFcIixcbiAgICBzdGF0c1VzZXI6IFwiVm91cyBhdmV6IGVucmVnaXN0csOpIE5CQU5TV0VSUyByw6lwb25zZXMgw6AgPGI+TkJRVUVTVElPTk5BSVJFUyBxdWVzdGlvbm5haXJlcyBkaWZmw6lyZW50czwvYj4gc3VyIGxlcyBOQlRPVFFVRVNUSU9OTkFJUkVTIHByb3Bvc8OpcyBwYXIgbGUgc2l0ZS48YnI+RW4gbW95ZW5uZSwgdm91cyBhdmV6IG1pcyBBVkdEVVJBVElPTiBzZWNvbmRlcyDDoCByw6lwb25kcmUgZXQgYXZleiA8Yj5jb3JyZWN0ZW1lbnQgcsOpcG9uZHUgw6AgQVZHQ09SUkVDVEFOU1dFUlMgJSBkZXMgcXVlc3Rpb25zPC9iPi5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNUaXRsZTogXCJCb25qb3VyICNOT00sIHZvaWNpIHZvcyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyDDoCBjZSBxdWl6XCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzU3RhdHM6IFwiRW4gbW95ZW5uZSwgdm91cyBhdmV6IHLDqXBvbmR1IMOgIGNlIHF1aXogZW4gQVZHRFVSQVRJT04gc2Vjb25kZXMsIGVuIGF5YW50IDxiPkFWR0NPUlJFQ1RBTlNXRVJTICUgZGUgYm9ubmVzIHLDqXBvbnNlczwvYj4uXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzTGluZTogXCJMZSBEQVRFQU5TV0VSLCB2b3VzIGF2ZXogcsOpcG9uZHUgY29ycmVjdGVtZW50IMOgIE5CQ09SUkVDVEFOU1dFUlMgcXVlc3Rpb25zIGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLlwiLFxuICAgIG5vUHJldmlvdXNBbnN3ZXI6IFwiQm9uam91ciAjTk9NLCBjJ2VzdCBsYSBwcmVtacOocmUgZm9pcyBxdWUgdm91cyByw6lwb25kZXogw6AgY2UgcXVpei4gQm9ubmUgbGVjdHVyZSAhXCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkVGl0bGU6IFwiTWVyY2kgZGUgZm91cm5pciB1biB0aXRyZSDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWROb3RUb29Mb25nVGl0bGU6IFwiTGUgdGl0cmUgZHUgcXVpeiBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRVcmw6IFwiTWVyY2kgZGUgZm91cm5pciBsJ3VybCDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRVbmlxdWVVcmw6IFwiTCd1cmwgZHUgcXVpeiBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgICBuZWVkSW50cm9kdWN0aW9uOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gdGV4dGUgZCdpbnRyb2R1Y3Rpb24gw6Agdm90cmUgcXVpei5cIixcbiAgICBuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlOiBcIkxhIGRhdGUgZGUgcHVibGljYXRpb24gZm91cm5pZSBuJ2EgcGFzIHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbmVlZEtub3dJZklzUHVibGlzaGVkOiBcIklsIGZhdXQgc2F2b2lyIHNpIGNlIHF1aXogZXN0IHB1Ymxpw6kuXCIsXG4gICAgbmVlZExhbmd1YWdlOiBcIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkRXN0aW1hdGVkVGltZTogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHVuZSBlc3RpbWF0aW9uIGRlIGxhIGR1csOpZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5vdEZvdW5kIDogXCJBdWN1biBxdWl6IG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBzZWFyY2hSZXN1bHRUaXRsZSA6IFwiUsOpc3VsdGF0IHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoTm9SZXN1bHQgOiBcIkF1Y3VuIHLDqXN1bHRhdCBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIHZvdHJlIHJlY2hlcmNoZVwiLFxuICAgIHNlYXJjaFdpdGhSZXN1bHQgOiBcIiNOQiBxdWl6cyBjb3JyZXNwb25kZW50IMOgIHZvdHJlIHJlY2hlcmNoZSA6XCIsXG4gICAgcHVibGlzaGVkQnk6IFwiUHVibGnDqSBwYXJcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgZXN0aW1hdGVkVGltZTogXCJEdXLDqWUgZGUgbGVjdHVyZSBlc3RpbcOpZSA6IFwiLFxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJFbnZveWV6IHZvcyByw6lwb25zZXNcIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIk9rLCBqZSBjcsOpZSBtb24gY29tcHRlICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKJ2FpIGTDqWrDoCB1biBjb21wdGUsIGplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blNob3dRdWVzdGlvbm5haXJlOiBcIkFmZmljaGVyIGxlIHF1aXogIVwiLFxuICAgIG5leHRRdWVzdGlvbm5haXJlc0xpc3Q6IFwiTGVzICNOQiBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzXCIsXG4gICAgbmVlZEJlQ29tcGxldGVkOiBcIlF1aXogaW5jb21wbGV0XCIsXG4gICAgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZTogXCJQcm9jaGFpbmUgZGF0ZSBzYW5zIHF1aXogcHJvZ3JhbW3DqSA6IFwiLFxuICAgIGhhdmVCZWVuUHVibGlzaGVkIDogXCI6TkIgbm91dmVhdXggcXVlc3Rpb25uYWlyZXMgb250IMOpdMOpIHB1Ymxpw6lzLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gUEFHRSBEJ0FDQ1VFSUwgREUgTCdVVElMSVNBVEVVUlxuXG4vLy8gVsOpcmlmaWVyIHF1ZSBsJ3V0aWxpc2F0ZXVyIGVzdCBiaWVuIGNvbm5lY3TDqSwgYSBsZSBib24gc3RhdHV0IGV0IGxlIHJlZGlyaWdlciB2ZXJzIGxlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLlxuLy8vIFNpIGMnZXN0IG9rLCBvbiByw6ljdXDDqHJlIHNlcyBpbmZvcyBldCBzdGF0cyArIGxlcyBkZXJuaWVycyBxdWl6cyBhdXhxdWVscyBpbCBhIGFjY8OocywgbWFpcyBuJ2EgcGFzIHLDqXBvbmR1LlxuLy8vIFVuIG1vdGV1ciBkZSByZWNoZXJjaGUgcGVybWV0IGQnb2J0ZW5pciBkJ2F1dHJlcyBxdWl6cyBwYXJtaSBjZXV4IHB1Ymxpw6lzLlxuLy8vIFBvdXIgbCdhZmZpY2hhZ2UgZGVzIGxpc3RpbmdzIGRlIHF1aXosIGwnQVBJIHJldG91cm5lIGRpcmVjdGVtZW50IGR1IGh0bWwuXG4vLy8gVW4gbWVudSBwZXJtZXQgw6AgbCd1dGlsaXNhdGV1ciBkJ2FjY8OpZGVyIMOgIGxhIG1vZGlmaWNhdGlvbiBkZSBzZXMgaW5mb3MsIGRlIHNvbiBhYm9ubmVtZW50LCBldGMuXG4vLy8gVW4gbWVzc2FnZSB2ZW5hbnQgZCd1bmUgYXV0cmUgcGFnZSBwZXV0IGF1c3NpIMOqdHJlIMOgIGFmZmljaGVyIGxvcnMgZHUgcHJlbWllciBjaGFyZ2VtZW50LlxuXG4vLy8gQWpvdXRlciBhZmZpY2hhZ2UgYW5jaWVucyBxdWl6cyDDoCByZXRlbnTDqXMgc2kgcGFzIGRlIHF1aXpzIGVuIGF0dGVudGUgP1xuLy8vIFVuIHF1aXogYXUgaGFzYXJkID9cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIGdldENvbmZpZyB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5jb25zdCB0eHRBbndlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2Fuc3dlclwiKTtcbmNvbnN0IHR4dFF1ZXN0aW9ubmFpcmUgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3F1ZXN0aW9ubmFpcmVcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBkaXZNYWluPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBxdWl6VGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1aXpzVGl0bGVcIik7XG5jb25zdCBxdWl6SW50cm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1aXpzSW50cm9cIik7XG5jb25zdCBxdWl6TGlzdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVpenNMaXN0XCIpO1xuY29uc3QgcXVpelBhZ2luYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1aXpzUGFnaW5hdGlvblwiKTtcbmNvbnN0IGZvcm1TZWFyY2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlYXJjaFwiKTtcbmNvbnN0IGlucHV0QmVnaW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7ICAgICAgICBcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBuJ2VzdCBwYXMgY29ubmVjdMOpLCBwYXMgbGEgcGVpbmUgZCdhbGxlciArIGxvaW4gOlxuICAgICAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcInVzZXJcIl0sIFwiL1wiK2NvbmZpZ0Zyb250RW5kLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLm5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ0Zyb250RW5kKTtcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwiaDRcIiwgdHh0VXNlcnMud2VsY29tZU1lc3NhZ2UucmVwbGFjZShcIiNOQU1FXCIsIHVzZXIubmFtZSkpO1xuICAgICAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkoZ2V0TG9jYWx5KFwibWVzc2FnZVwiKSkpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJtZXNzYWdlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkdSBmb3JtdWxhaXJlIGRlIHJlY2hlcmNoZSA6XG4gICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZywgZm9ybVNlYXJjaCk7ICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBMZXMgc3RhdHMgOiAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGNvbnN0IHhoclN0YXRzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyU3RhdHMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLmdldFN0YXRzQW5zd2Vycyt1c2VyLmlkKTtcbiAgICAgICAgICAgICAgICB4aHJTdGF0cy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmICFpc0VtcHR5KHJlc3BvbnNlLm5iQW5zd2VycykgJiYgcmVzcG9uc2UubmJBbnN3ZXJzIT09MCkvLyBwYXMgZGUgc3RhdHMgc2kgYXVjdW5lIHLDqXBvbnNlICFcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkJBTlNXRVJTIDogcmVzcG9uc2UubmJBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CUVVFU1RJT05OQUlSRVMgOiByZXNwb25zZS5uYlF1ZXN0aW9ubmFpcmVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CVE9UUVVFU1RJT05OQUlSRVMgOiByZXNwb25zZS5nZW5lcmFsLm5iUHVibGlzaGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWR0RVUkFUSU9OIDogcmVzcG9uc2UuYXZnRHVyYXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZHQ09SUkVDVEFOU1dFUlMgOiByZXNwb25zZS5hdmdDb3JyZWN0QW5zd2Vyc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgcmVwbGFjZUFsbCh0eHRBbndlcnMuc3RhdHNVc2VyLCBtYXBUZXh0KSwgXCJcIiwgXCJcIiwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoclN0YXRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICB4aHJTdGF0cy5zZW5kKCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gUGFyIGTDqWZhdXQsIG9uIGFmZmljaGUgZGVzIGRlcm5pZXJzIHF1aXpzIHByb3Bvc8OpcyBzYW5zIHLDqXBvbnNlIDpcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJMYXN0UXVpenMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHJMYXN0UXVpenMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLmdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcitcIlwiK3VzZXIuaWQrXCIvXCIrMCtcIi9cIitjb25maWdGcm9udEVuZC5uYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlK1wiL2h0bWxcIik7XG4gICAgICAgICAgICAgICAgeGhyTGFzdFF1aXpzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UubmJUb3Q9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpJbnRybywgXCJwXCIsIHR4dEFud2Vycy5ub1F1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHJlc3BvbnNlLmh0bWwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpJbnRybywgXCJwXCIsIHR4dEFud2Vycy5uYlF1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyLnJlcGxhY2UoXCIjTkJcIiwgcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMubGVuZ3RoKSwgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl6TGlzdGluZy5pbm5lckhUTUw9cmVzcG9uc2UuaHRtbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6cywgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhockxhc3RRdWl6cy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHJMYXN0UXVpenMuc2VuZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVHJhaXRlbWVudCBkdSBsYW5jZW1lbnQgZCd1bmUgcmVjaGVyY2hlXG4gICAgICAgICAgICAgICAgLy8gTGEgcmVjaGVyY2hlIHBldXQgw6p0cmUgbGFuY8OpZSB2aWEgbGEgYm91dG9uIHN1Ym1pdCBvdSB1biBsaWVuIGRlIHBhZ2luYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBzZW5kU2VhcmNoID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHF1aXpUaXRsZS5pbm5lckhUTUw9dHh0UXVlc3Rpb25uYWlyZS5zZWFyY2hSZXN1bHRUaXRsZTtcbiAgICAgICAgICAgICAgICAgICAgcXVpekxpc3RpbmcuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2gub3BlbihcIlBPU1RcIiwgY29uZmlnLmFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWcuc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgIWlzRW1wdHkocmVzcG9uc2UubmJUb3QpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UubmJUb3Q9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCB0eHRRdWVzdGlvbm5haXJlLm5vdEZvdW5kLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYocmVzcG9uc2UuaHRtbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCB0eHRRdWVzdGlvbm5haXJlLnNlYXJjaFdpdGhSZXN1bHQucmVwbGFjZShcIiNOQlwiLCByZXNwb25zZS5uYlRvdCkgLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aXpMaXN0aW5nLmlubmVySFRNTD1yZXNwb25zZS5odG1sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFnaW5hdGlvbiBuw6ljZXNzYWlyZSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl6UGFnaW5hdGlvbi5pbm5lckhUTUw9XCJcIjsvLyBvbiBjb21tZW5jZSBwYXIgdmlkZXIuLi5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmJlZ2luICE9IDApLy8gcGV1dCByZXRvdXJuZXIgXCIwXCIgZXQgbm9uIDAgIVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQocXVpelBhZ2luYXRpb24sIFwiYVwiLCB0eHQucHJldmlvdXNQYWdlICwgXCJwcmV2aW91c1Jlc1wiLCBcIlwiLCB7IGhyZWY6IFwiI3NlYXJjaFwiIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzUGFnZT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByZXZpb3VzUmVzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxlIHJldG91ciDDoCBsYSBwYWdlIHByw6ljw6lkZW50ZSBwZXV0IHNlIGZhaXJlIGVuIGNsaXF1YW50IHN1ciBsZSBib3V0b24gb3UgdmlhIGwnaGlzdG9yaXF1ZSBkdSBuYXZpZ2F0ZXVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZ29CYWNrUmVzID0gKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdCZWdpbj1yZXNwb25zZS5iZWdpbi1jb25maWdGcm9udEVuZC5uYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuZXdCZWdpbjwwKSAvLyBuZSBkZXZyYWl0IHBhcyDDqnRyZSBwb3NzaWJsZS4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdCZWdpbj0wO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpLnZhbHVlPW5ld0JlZ2luO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjc2VhcmNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvQmFja1JlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29CYWNrUmVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmVuZCA8IChyZXNwb25zZS5uYlRvdC0xKSkvLyAtMSwgY2FyIHRhYmxlYXUgY29tbWVuY2Ugw6AgMCAhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6UGFnaW5hdGlvbiwgXCJhXCIsIHR4dC5uZXh0UGFnZSwgXCJuZXh0UmVzXCIsIFwiXCIsIHsgaHJlZjogXCIjc2VhcmNoXCIgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5leHRQYWdlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibmV4dFJlc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0UGFnZS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKS52YWx1ZT1yZXNwb25zZS5lbmQrMTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFNlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3NlYXJjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6cywgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMub3V0cHV0PVwiaHRtbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKS52YWx1ZT0wO1xuICAgICAgICAgICAgICAgICAgICBzZW5kU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgfSk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9xdWVzdGlvbm5haXJlJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2Fuc3dlci5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmUuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9ob21lVXNlci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvY2xpZW50c3RvcmFnZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZG9tLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9ldmVyeXdoZXJlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9mb3Jtcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInJlZ2VuZXJhdGVIVE1MIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4IiwibmVlZE51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZEludGVnZXJOdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIiwibmVlZE1pbk51bWJlclNlY29uZGVzUmVzcG9uc2UiLCJjaGVja1Jlc3BvbnNlc091cHV0RmFpbCIsImNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0iLCJjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyIsIndhbnRUb1NhdmVSZXNwb25zZXMiLCJyZXNwb25zZVNhdmVkTWVzc2FnZSIsInJlc3BvbnNlU2F2ZWRFcnJvciIsIm5vUXVlc3Rpb25uYWlyZVdpdGhvdWRBbnN3ZXIiLCJuYlF1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyIiwic3RhdHNVc2VyIiwicHJldmlvdXNBbnN3ZXJzVGl0bGUiLCJwcmV2aW91c0Fuc3dlcnNTdGF0cyIsInByZXZpb3VzQW5zd2Vyc0xpbmUiLCJub1ByZXZpb3VzQW5zd2VyIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5lZWRUaXRsZSIsIm5lZWROb3RUb29Mb25nVGl0bGUiLCJuZWVkVXJsIiwibmVlZFVuaXF1ZVVybCIsIm5lZWRJbnRyb2R1Y3Rpb24iLCJuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlIiwibmVlZEtub3dJZklzUHVibGlzaGVkIiwibmVlZExhbmd1YWdlIiwibmVlZEVzdGltYXRlZFRpbWUiLCJub3RGb3VuZCIsInNlYXJjaFJlc3VsdFRpdGxlIiwic2VhcmNoTm9SZXN1bHQiLCJzZWFyY2hXaXRoUmVzdWx0IiwicXVlc3Rpb25uYWlyZXNOYW1lIiwicHVibGlzaGVkQnkiLCJwdWJsaXNoZWRBdCIsImxhc3RVcGRhdGVkIiwiZXN0aW1hdGVkVGltZSIsImVzdGltYXRlZFRpbWVPcHRpb24iLCJzaG9ydCIsIm1lZGl1bSIsImxvbmciLCJleHBsYW5hdGlvbkJlZm9yZVR4dCIsImNvcnJlY3RBbnN3ZXJUeHQiLCJ3cm9uZ0Fuc3dlclR4dCIsImJ0blNlbmRSZXNwb25zZSIsImJ0blByb3Bvc2VTdWJzY3JpYmUiLCJidG5Qcm9wb3NlQ29ubmVjdGlvbiIsImJ0blNob3dRdWVzdGlvbm5haXJlIiwiYnRuU2hhcmVRdWl6VHh0IiwibmV4dFF1ZXN0aW9ubmFpcmVzTGlzdCIsIm5lZWRCZUNvbXBsZXRlZCIsIm5leHREYXRlV2l0aG91dFF1ZXN0aW9ubmFpcmUiLCJoYXZlQmVlblB1Ymxpc2hlZCIsImhhdmVCZWVuUmVnZW5lcmF0ZWQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0IiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsInR4dEFud2VycyIsInR4dFF1ZXN0aW9ubmFpcmUiLCJkaXZNYWluIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdkNyYXNoIiwiZGl2TWVzc2FnZSIsInF1aXpUaXRsZSIsInF1aXpJbnRybyIsInF1aXpMaXN0aW5nIiwicXVpelBhZ2luYXRpb25QcmV2aW91cyIsInF1aXpQYWdpbmF0aW9uTmV4dCIsImZvcm1TZWFyY2giLCJpbnB1dEJlZ2luIiwiYnRuUmFuZG9tIiwiaGVsbG9EZXYiLCJpbml0aWFsaXNlIiwiZ2V0Q29uZmlnIiwiY29uZmlnIiwiYWRkRWxlbWVudCIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwiaXNDb25uZWN0ZWQiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJzdHlsZSIsImRpc3BsYXkiLCJyZW1vdmVMb2NhbHkiLCJzZXRBdHRyaWJ1dGVzVG9JbnB1dHMiLCJ4aHJTdGF0cyIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJuYkFuc3dlcnMiLCJtYXBUZXh0IiwiTkJBTlNXRVJTIiwiTkJRVUVTVElPTk5BSVJFUyIsIm5iUXVlc3Rpb25uYWlyZXMiLCJOQlRPVFFVRVNUSU9OTkFJUkVTIiwiZ2VuZXJhbCIsIm5iUHVibGlzaGVkIiwiQVZHRFVSQVRJT04iLCJhdmdEdXJhdGlvbiIsIkFWR0NPUlJFQ1RBTlNXRVJTIiwiYXZnQ29ycmVjdEFuc3dlcnMiLCJyZXBsYWNlQWxsIiwic2V0UmVxdWVzdEhlYWRlciIsInRva2VuIiwic2VuZCIsInhockxhc3RRdWl6cyIsIm5iVG90IiwiaHRtbCIsImlubmVySFRNTCIsImhhc2giLCJhc3NpZ24iLCJxdWl6cyIsInNlbmRTZWFyY2giLCJ0eXBlIiwiZGF0YXMiLCJnZXREYXRhc0Zyb21JbnB1dHMiLCJ4aHJTZWFyY2giLCJiZWdpbiIsImdvQmFja1JlcyIsIm5ld0JlZ2luIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImVuZCIsIm91dHB1dCIsInN0cmluZ2lmeSIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwiZW1weUZvcm0iLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFp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MUIsQ0FBWjtBQUNBM0IsK0JBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLHFCQWxDRCxNQW9DQTtBQUNJNUYsNEZBQVksQ0FBQyxNQUFELENBQVo7QUFDQXlILGtDQUFZLENBQUNILGNBQUQsRUFBaUJqSSxPQUFqQixFQUEwQmtJLFNBQTFCLENBQVo7QUFDQTNCLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBRSxxQkFBRyxDQUFDRSxPQUFKLEdBQWM7QUFBQSwyQkFBTUgsTUFBTSxDQUFDQyxHQUFHLENBQUNHLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBSCxxQkFBRyxDQUFDbkUsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFadkMsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU1xSSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDSCxjQUFELEVBQWlCakksT0FBakIsRUFBMEJrSSxTQUExQixFQUNyQjtBQUNJLE1BQUcsQ0FBQzlOLDJEQUFPLENBQUM0RixPQUFELENBQVgsRUFDSThELG9FQUFVLENBQUMsU0FBRCxFQUFZOUQsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDNUYsMkRBQU8sQ0FBQzhOLFNBQUQsQ0FBWCxFQUNJcEUsb0VBQVUsQ0FBQyxLQUFELEVBQVFvRSxTQUFSLENBQVY7QUFDSixNQUFHLENBQUM5TiwyREFBTyxDQUFDNk4sY0FBRCxDQUFYLEVBQ0kvSCxNQUFNLENBQUNDLFFBQVAsQ0FBZ0J5QyxNQUFoQixDQUF1QnFGLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvaG9tZVVzZXIuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaG9tZVVzZXIuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLC8vIGlkZW1cbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLy8gbGltaXRlIGxlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9hbnN3ZXJcIjogXCIuLi9sYW5nL2ZyL2Fuc3dlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2Fuc3dlciRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3F1ZXN0aW9ubmFpcmVcIjogXCIuLi9sYW5nL2ZyL3F1ZXN0aW9ubmFpcmUuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbm5haXJlJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbmVlZE51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGluZsOpcmlldXIgw6AgMS5cIixcbiAgICBuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGF1c3NpIMOpbGV2w6kuXCIsXG4gICAgbmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIHN1cMOpcmlldXIgYXUgbm9tYnJlIGRlIHF1ZXN0aW9ucy5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIgZGUgc2Vjb25kZXMuXCIsXG4gICAgbmVlZE1pbk51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBuZSBwZXV0IMOqdHJlIG7DqWdhdGl2ZS5cIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0RmFpbCA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogTkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMuIEMnZXN0IGNlcnRhaW4sIHZvdXMgZmVyZXogbWlldXggbGEgcHJvY2hhaW5lIGZvaXMgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0gOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IE5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TLiBDJ2VzdCBwYXMgbWFsIGR1IHRvdXQgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiBOQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUy4gQnJhdm8gISBSaWVuIG5lIHZvdXMgw6ljaGFwcGUgIVwiLFxuICAgIHdhbnRUb1NhdmVSZXNwb25zZXM6IFwiU2kgdm91cyBsZSBzb3VoYWl0ZXosIHZvdXMgcG91dmV6IHNhdXZlZ2FyZGVyIHZvdHJlIHLDqXN1bHRhdCBlbiB2b3VzIGNvbm5lY3RhbnQgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHJlc3BvbnNlU2F2ZWRNZXNzYWdlIDogXCJWb3RyZSByw6lzdWx0YXQgYSDDqXTDqSBlbnJlZ2lzdHLDqS4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICByZXNwb25zZVNhdmVkRXJyb3IgOiBcIkNlcGVuZGFudCB1bmUgZXJyZXVyIGEgw6l0w6kgcmVuY29udHLDqWUgZHVyYW50IGwnZW5yZWdpc3RyZW1lbnQgZGUgdm90cmUgcsOpc3VsdGF0LiA8YSBocmVmPScvI1VSTCc+QWNjw6hkZXIgw6AgdG91cyB2b3MgcXVpenM8L2E+LlwiLFxuICAgIG5vUXVlc3Rpb25uYWlyZVdpdGhvdWRBbnN3ZXI6IFwiQnJhdm8gISBWb3VzIGF2ZXogcsOpcG9uZHUgw6AgdG91cyBsZXMgcXVpenMgcXVpIHZvdXMgb24gw6l0w6kgcHJvcG9zw6lzICE8YnI+SWwgeSBlbiBhIGRlcyBub3V2ZWF1eCBwdWJsacOpcyByw6lndWxpw6hyZW1lbnQgZXQgcXVpIHZvdXMgc2Vyb250IHByb3Bvc8Opcy48YnI+RW4gYXR0ZW5kYW50IHZvdXMgcG91dmV6IHBldXQtw6p0cmUgZXNzYXllciBkZSByw6lwb25kcmUgZGUgbm91dmVhdSDDoCBjZXJ0YWluIHF1aXogcG91ciB2b2lyIHNpIHZvdXMgdm91cyBzb3V2ZW5leiBkZXMgYm9ubmVzIHLDqXBvbnNlcyA/XCIsXG4gICAgbmJRdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlcjogXCJJbCB5IGEgI05CIHF1aXpzIHF1aSB2b3VzIG9udCDDqXTDqSBwcm9wb3PDqXMgZXQgYXV4cXVlbHMgdm91cyBuJ2F2ZXogcGFzIHLDqXBvbmR1LiBWb2ljaSBsZXMgZGVybmllcnMgOiFcIixcbiAgICBzdGF0c1VzZXI6IFwiVm91cyBhdmV6IGVucmVnaXN0csOpIE5CQU5TV0VSUyByw6lwb25zZXMgw6AgPGI+TkJRVUVTVElPTk5BSVJFUyBxdWVzdGlvbm5haXJlcyBkaWZmw6lyZW50czwvYj4gc3VyIGxlcyBOQlRPVFFVRVNUSU9OTkFJUkVTIHByb3Bvc8OpcyBwYXIgbGUgc2l0ZS48YnI+RW4gbW95ZW5uZSwgdm91cyBhdmV6IG1pcyBBVkdEVVJBVElPTiBzZWNvbmRlcyDDoCByw6lwb25kcmUgZXQgYXZleiA8Yj5jb3JyZWN0ZW1lbnQgcsOpcG9uZHUgw6AgQVZHQ09SUkVDVEFOU1dFUlMgJSBkZXMgcXVlc3Rpb25zPC9iPi5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNUaXRsZTogXCJCb25qb3VyICNOT00sIHZvaWNpIHZvcyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyDDoCBjZSBxdWl6XCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzU3RhdHM6IFwiRW4gbW95ZW5uZSwgdm91cyBhdmV6IHLDqXBvbmR1IMOgIGNlIHF1aXogZW4gQVZHRFVSQVRJT04gc2Vjb25kZXMsIGVuIGF5YW50IDxiPkFWR0NPUlJFQ1RBTlNXRVJTICUgZGUgYm9ubmVzIHLDqXBvbnNlczwvYj4uXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzTGluZTogXCJMZSBEQVRFQU5TV0VSLCB2b3VzIGF2ZXogcsOpcG9uZHUgY29ycmVjdGVtZW50IMOgIE5CQ09SUkVDVEFOU1dFUlMgcXVlc3Rpb25zIGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLlwiLFxuICAgIG5vUHJldmlvdXNBbnN3ZXI6IFwiQm9uam91ciAjTk9NLCBjJ2VzdCBsYSBwcmVtacOocmUgZm9pcyBxdWUgdm91cyByw6lwb25kZXogw6AgY2UgcXVpei4gQm9ubmUgbGVjdHVyZSAhXCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogV2lraXDDqWRpYSBlbiBxdWVzdGlvbnNcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgcmVjZXZleiBjaGFxdWUgam91ciBkZSBub3V2ZWF1eCBxdWl6cyBwb3VyIHRlc3RlciB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3Nlcy5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWRUaXRsZTogXCJNZXJjaSBkZSBmb3VybmlyIHVuIHRpdHJlIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdUaXRsZTogXCJMZSB0aXRyZSBkdSBxdWl6IG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFVybDogXCJNZXJjaSBkZSBmb3VybmlyIGwndXJsIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZFVuaXF1ZVVybDogXCJMJ3VybCBkdSBxdWl6IGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICAgIG5lZWRJbnRyb2R1Y3Rpb246IFwiTWVyY2kgZGUgZm91cm5pciB1biB0ZXh0ZSBkJ2ludHJvZHVjdGlvbiDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGU6IFwiTGEgZGF0ZSBkZSBwdWJsaWNhdGlvbiBmb3VybmllIG4nYSBwYXMgdW4gZm9ybWF0IHZhbGlkZS5cIixcbiAgICBuZWVkS25vd0lmSXNQdWJsaXNoZWQ6IFwiSWwgZmF1dCBzYXZvaXIgc2kgY2UgcXVpeiBlc3QgcHVibGnDqS5cIixcbiAgICBuZWVkTGFuZ3VhZ2U6IFwiVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5lZWRFc3RpbWF0ZWRUaW1lOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIGVzdGltYXRpb24gZGUgbGEgZHVyw6llIGRlIGNlIHF1aXouXCIsXG4gICAgbm90Rm91bmQgOiBcIkF1Y3VuIHF1aXogbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHNlYXJjaFJlc3VsdFRpdGxlIDogXCJSw6lzdWx0YXQgcG91ciB2b3RyZSByZWNoZXJjaGVcIixcbiAgICBzZWFyY2hOb1Jlc3VsdCA6IFwiQXVjdW4gcsOpc3VsdGF0IG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoV2l0aFJlc3VsdCA6IFwiVm9pY2kgI05CIHF1aXpzIHBvdXIgdm90cmUgcmVjaGVyY2hlIDpcIixcbiAgICBxdWVzdGlvbm5haXJlc05hbWU6IFwicXVpelwiLFxuICAgIHB1Ymxpc2hlZEJ5OiBcIlF1aXogcHVibGnDqSBwYXJcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgZXN0aW1hdGVkVGltZTogXCJEdXLDqWUgZGUgbGVjdHVyZSBlc3RpbcOpZSA6IFwiLFxuICAgIGVzdGltYXRlZFRpbWVPcHRpb24gOlxuICAgIHtcbiAgICAgICAgc2hvcnQ6IFwiY291cnRlXCIsXG4gICAgICAgIG1lZGl1bTogXCJtb3llbm5lXCIsXG4gICAgICAgIGxvbmc6IFwibG9uZ3VlXCJcbiAgICB9LFxuICAgIGV4cGxhbmF0aW9uQmVmb3JlVHh0OiBcIkV4dHJhaXQgOlwiLFxuICAgIGNvcnJlY3RBbnN3ZXJUeHQ6IFwiQm9ubmUgcsOpcG9uc2VcIixcbiAgICB3cm9uZ0Fuc3dlclR4dDogXCJNYXV2YWlzZSByw6lwb25zZVwiLFxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJUZXN0ZXogdm9zIHLDqXBvbnNlcy5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuU2hvd1F1ZXN0aW9ubmFpcmU6IFwiQWZmaWNoZXIgbGUgcXVpeiAhXCIsXG4gICAgYnRuU2hhcmVRdWl6VHh0OiBcIlBhcnRhZ2VyIGNlIHF1aXogc3VyIFwiLFxuICAgIG5leHRRdWVzdGlvbm5haXJlc0xpc3Q6IFwiTGVzICNOQiBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzXCIsXG4gICAgbmVlZEJlQ29tcGxldGVkOiBcIlF1aXogaW5jb21wbGV0XCIsXG4gICAgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZTogXCJQcm9jaGFpbmUgZGF0ZSBzYW5zIHF1aXogcHJvZ3JhbW3DqSA6IFwiLFxuICAgIGhhdmVCZWVuUHVibGlzaGVkIDogXCI6TkIgbm91dmVhdXggcXVlc3Rpb25uYWlyZXMgb250IMOpdMOpIHB1Ymxpw6lzLlwiLFxuICAgIGhhdmVCZWVuUmVnZW5lcmF0ZWQgOiBcIkxlcyBmaWNoaWVycyBIVE1MIGRlICNOQjEgcXVlc3Rpb25uYWlyZXMgZXQgI05CMiBydWJyaXF1ZXMgb250IMOpdMOpIHJlZ8OpbsOpcsOpcy5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyB2b3RyZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciAoQ3RybCtWKSBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmllcnMgcXVpenNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogOSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJtb24tY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhIDxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKTwvc3Bhbj4sIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvc3Bhbj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSAhXCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogXCJUZXN0ZXIgV2lraUxlcm5pIGdyYXR1aXRlbWVudC5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5TdWl2YW50IGxlcyBxdWVzdGlvbnMsIHVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzIGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gPGI+Qydlc3QgdG91am91cnMgbGUgY29udGVudSBkZSBsJ2FydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2kgY29uY2VybmFudCBsZXMgXFxcImJvbm5lc1xcXCIgcsOpcG9uc2VzPC9iPi4gTWFpcyBsZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlcywgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50PC9iPi48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuIENlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSA8Yj50ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6PC9iPiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEdyw6JjZSDDoCBjZSBjb21wdGUsIHZvdXMgcG91cnJleiBhdXNzaSA8Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenM8L2I+IHBvdXIgY29udGludWVyIMOgIFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCJMZXMgZGVybmnDqHJlcyBncmFpbmVzIGRlIHNhdm9pclwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxufTsiLCIvLyAtLSBQQUdFIEQnQUNDVUVJTCBERSBMJ1VUSUxJU0FURVVSXG5cbi8vLyBWw6lyaWZpZXIgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2VyIHZlcnMgbGUgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uIHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMuXG4vLy8gU2kgYydlc3Qgb2ssIG9uIHLDqWN1cMOocmUgc2VzIGluZm9zIGV0IHN0YXRzICsgbGVzIGRlcm5pZXJzIHF1aXpzIGF1eHF1ZWxzIGlsIGEgYWNjw6hzLCBtYWlzIG4nYSBwYXMgcsOpcG9uZHUuXG4vLy8gVW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBwZXJtZXQgZCdvYnRlbmlyIGQnYXV0cmVzIHF1aXpzIHBhcm1pIGNldXggcHVibGnDqXMuXG4vLy8gUG91ciBsJ2FmZmljaGFnZSBkZXMgbGlzdGluZ3MgZGUgcXVpeiwgbCdBUEkgcmV0b3VybmUgZGlyZWN0ZW1lbnQgZHUgaHRtbC5cbi8vLyBVbiBtZW51IHBlcm1ldCDDoCBsJ3V0aWxpc2F0ZXVyIGQnYWNjw6lkZXIgw6AgbGEgbW9kaWZpY2F0aW9uIGRlIHNlcyBpbmZvcywgZGUgc29uIGFib25uZW1lbnQsIGV0Yy5cbi8vLyBVbiBtZXNzYWdlIHZlbmFudCBkJ3VuZSBhdXRyZSBwYWdlIHBldXQgYXVzc2kgw6p0cmUgw6AgYWZmaWNoZXIgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuY29uc3QgdHh0QW53ZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9hbnN3ZXJcIik7XG5jb25zdCB0eHRRdWVzdGlvbm5haXJlID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9xdWVzdGlvbm5haXJlXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgZGl2TWFpbj0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZDcmFzaD0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjcmFzaFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBxdWl6VGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1aXpzVGl0bGVcIik7XG5jb25zdCBxdWl6SW50cm8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1aXpzSW50cm9cIik7XG5jb25zdCBxdWl6TGlzdGluZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVpenNMaXN0XCIpO1xuY29uc3QgcXVpelBhZ2luYXRpb25QcmV2aW91cyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicHJldmlvdXNcIik7XG5jb25zdCBxdWl6UGFnaW5hdGlvbk5leHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5leHRcIik7XG5jb25zdCBmb3JtU2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hcIik7XG5jb25zdCBpbnB1dEJlZ2luID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKTtcbmNvbnN0IGJ0blJhbmRvbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmFuZG9tXCIpO1xuXG5oZWxsb0RldigpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZDcmFzaCwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgbidlc3QgcGFzIGNvbm5lY3TDqSwgcGFzIGxhIHBlaW5lIGQnYWxsZXIgKyBsb2luIDpcbiAgICAgICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJ1c2VyXCJdLCBcIi9cIitjb25maWdGcm9udEVuZC5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiB0eHRVc2Vycy5uZWVkQmVDb25uZWN0ZWQsIGNvbG9yOlwiZXJyb3JcIiB9LCB3aW5kb3cubG9jYXRpb24pO1xuICAgICAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdGcm9udEVuZCk7XG4gICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcImgxXCIsIHR4dFVzZXJzLndlbGNvbWVNZXNzYWdlLnJlcGxhY2UoXCIjTkFNRVwiLCB1c2VyLm5hbWUpKTtcbiAgICAgICAgICAgICAgICBkaXZNYWluLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5tZXNzYWdlLCBcIlwiLCBbZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5jb2xvcl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzYXRpb24gZHUgZm9ybXVsYWlyZSBkZSByZWNoZXJjaGUgOlxuICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWcsIGZvcm1TZWFyY2gpOyAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gTGVzIHN0YXRzIDogICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBjb25zdCB4aHJTdGF0cyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoclN0YXRzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZy5nZXRTdGF0c0Fuc3dlcnMrdXNlci5pZCk7XG4gICAgICAgICAgICAgICAgeGhyU3RhdHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiAhaXNFbXB0eShyZXNwb25zZS5uYkFuc3dlcnMpICYmIHJlc3BvbnNlLm5iQW5zd2VycyE9PTApLy8gcGFzIGRlIHN0YXRzIHNpIGF1Y3VuZSByw6lwb25zZSAhXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CQU5TV0VSUyA6IHJlc3BvbnNlLm5iQW5zd2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQlFVRVNUSU9OTkFJUkVTIDogcmVzcG9uc2UubmJRdWVzdGlvbm5haXJlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQlRPVFFVRVNUSU9OTkFJUkVTIDogcmVzcG9uc2UuZ2VuZXJhbC5uYlB1Ymxpc2hlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IHJlc3BvbnNlLmF2Z0R1cmF0aW9uLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWR0NPUlJFQ1RBTlNXRVJTIDogcmVzcG9uc2UuYXZnQ29ycmVjdEFuc3dlcnNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHJlcGxhY2VBbGwodHh0QW53ZXJzLnN0YXRzVXNlciwgbWFwVGV4dCksIFwiXCIsIFwiXCIsIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJTdGF0cy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTsgXG4gICAgICAgICAgICAgICAgeGhyU3RhdHMuc2VuZCgpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIFBhciBkw6lmYXV0LCBvbiBhZmZpY2hlIGRlcyBkZXJuaWVycyBxdWl6cyBwcm9wb3PDqXMgc2FucyByw6lwb25zZSA6XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyTGFzdFF1aXpzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyTGFzdFF1aXpzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZy5nZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIrXCJcIit1c2VyLmlkK1wiL1wiKzArXCIvXCIrY29uZmlnRnJvbnRFbmQubmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZStcIi9odG1sXCIpO1xuICAgICAgICAgICAgICAgIHhockxhc3RRdWl6cy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLm5iVG90PT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCB0eHRBbndlcnMubm9RdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlciwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZihyZXNwb25zZS5odG1sKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCB0eHRBbndlcnMubmJRdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlci5yZXBsYWNlKFwiI05CXCIsIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCksIFwiXCIsIFtcImluZm9cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl6TGlzdGluZy5pbm5lckhUTUw9cmVzcG9uc2UuaHRtbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjsvLyBzaW5vbiBsZXMgaGFzaCBzJ2VuY2hhw65uZW50Li4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVpenNUaXRsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7Ly8gcmV2b2lyIHNpIGludMOpcsOqdCBkJ2FmZmljaGVyIHF1ZWxxdWUgY2hvc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7IC8vIGlkZW1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHJMYXN0UXVpenMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyTGFzdFF1aXpzLnNlbmQoKTtcblxuICAgICAgICAgICAgICAgIC8vIFRyYWl0ZW1lbnQgZHUgbGFuY2VtZW50IGQndW5lIHJlY2hlcmNoZVxuICAgICAgICAgICAgICAgIC8vIExhIHJlY2hlcmNoZSBwZXV0IMOqdHJlIGxhbmPDqWUgdmlhIGxhIGJvdXRvbiBzdWJtaXQgb3UgdW4gbGllbiBkZSBwYWdpbmF0aW9uXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VuZFNlYXJjaCA9ICh0eXBlPVwic2VhcmNoXCIpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBxdWl6VGl0bGUuaW5uZXJIVE1MPXR4dFF1ZXN0aW9ubmFpcmUuc2VhcmNoUmVzdWx0VGl0bGU7XG4gICAgICAgICAgICAgICAgICAgIHF1aXpMaXN0aW5nLmlubmVySFRNTD1cIlwiK1wiXCI7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZih0eXBlPT1cInNlYXJjaFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9wZW4oXCJQT1NUXCIsIGNvbmZpZy5hcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLnNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKHR5cGU9PVwicmFuZG9tXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2gub3BlbihcIlBPU1RcIiwgY29uZmlnLmFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytcIi9nZXRyYW5kb21cIik7Ly8gcmV2b2lyIDogY2hhbmdlciBwYXIgbGEgdmFyaWFibGUgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSBkdSBmaWNoaWVyIGRlIGNvbmZpZ1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2gub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmICFpc0VtcHR5KHJlc3BvbnNlLm5iVG90KSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLm5iVG90PT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCB0eHRRdWVzdGlvbm5haXJlLm5vdEZvdW5kLCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoPVwiXCI7Ly8gc2lub24gbGVzIGhhc2ggcydlbmNoYcOubmVudC4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNxdWl6c1RpdGxlXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYocmVzcG9uc2UuaHRtbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6SW50cm8sIFwicFwiLCB0eHRRdWVzdGlvbm5haXJlLnNlYXJjaFdpdGhSZXN1bHQucmVwbGFjZShcIiNOQlwiLCByZXNwb25zZS5uYlRvdCkgLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1aXpMaXN0aW5nLmlubmVySFRNTD1yZXNwb25zZS5odG1sO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVpenNUaXRsZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFBhZ2luYXRpb24gbsOpY2Vzc2FpcmUgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb24gY29tbWVuY2UgcGFyIHZpZGVyLi4uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWl6UGFnaW5hdGlvblByZXZpb3VzLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpelBhZ2luYXRpb25OZXh0LmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuYmVnaW4gIT0gMCkvLyBwZXV0IHJldG91cm5lciBcIjBcIiBldCBub24gMCAhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6UGFnaW5hdGlvblByZXZpb3VzLCBcImFcIiwgXCI8PCBcIit0eHQucHJldmlvdXNQYWdlICwgXCJwcmV2aW91c1Jlc1wiLCBbXCJidXR0b25cIl0sIHsgaHJlZjogXCIjc2VhcmNoXCIgfSk7IC8vIHJldm9pciwgbGVzIFwiPDxcIiBwb3VycmFpZW50IMOqdHJlIGfDqXLDqWVzIHBhciBsZSBDU1NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmV2aW91c1BhZ2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcmV2aW91c1Jlc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZSByZXRvdXIgw6AgbGEgcGFnZSBwcsOpY8OpZGVudGUgcGV1dCBzZSBmYWlyZSBlbiBjbGlxdWFudCBzdXIgbGUgYm91dG9uIG91IHZpYSBsJ2hpc3RvcmlxdWUgZHUgbmF2aWdhdGV1clxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdvQmFja1JlcyA9ICgpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3QmVnaW49cmVzcG9uc2UuYmVnaW4tY29uZmlnRnJvbnRFbmQubmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3QmVnaW48MCkgLy8gbmUgZGV2cmFpdCBwYXMgw6p0cmUgcG9zc2libGUuLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QmVnaW49MDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKS52YWx1ZT1uZXdCZWdpbjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFNlYXJjaCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1aXpzVGl0bGVcIik7Ly8gcG91ciByZW1vbnRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2UuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvQmFja1JlcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlbWJsZSBwcm92b3F1w6kgYnVnID8/P1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5vbnBvcHN0YXRlID0gZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29CYWNrUmVzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTsqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuZW5kIDwgKHJlc3BvbnNlLm5iVG90LTEpKS8vIC0xLCBjYXIgdGFibGVhdSBjb21tZW5jZSDDoCAwICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpQYWdpbmF0aW9uTmV4dCwgXCJhXCIsIHR4dC5uZXh0UGFnZSsgXCIgPj5cIiwgXCJuZXh0UmVzXCIsIFtcImJ1dHRvblwiXSwgeyBocmVmOiBcIiNzZWFyY2hcIiB9LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFBhZ2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXh0UmVzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRQYWdlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpLnZhbHVlPXJlc3BvbnNlLmVuZCsxO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kU2VhcmNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5oYXNoPVwiXCI7Ly8gc2lub24gbGVzIGhhc2ggcydlbmNoYcOubmVudC4uLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1aXpzVGl0bGVcIik7IC8vIHBvdXIgcmVtb250ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KHF1aXpzLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChxdWl6cywgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMub3V0cHV0PVwiaHRtbFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGJ0blJhbmRvbS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZWdpblwiKS52YWx1ZT0wO1xuICAgICAgICAgICAgICAgICAgICBzZW5kU2VhcmNoKFwicmFuZG9tXCIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGZvcm1TZWFyY2guYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJlZ2luXCIpLnZhbHVlPTA7XG4gICAgICAgICAgICAgICAgICAgIHNlbmRTZWFyY2goKTtcbiAgICAgICAgICAgICAgICB9KTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2Q3Jhc2gsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBzZXJhIGJpZW50w7R0IGxpc2libGUgc3VyIEdpdGxhYi5cXG4gUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgPSAoaW5wdXRzQ29uZiwgbXlGb3JtKSA9Plxue1xuICAgIGZvcihsZXQgaSBpbiBteUZvcm0uZWxlbWVudHMpXG4gICAge1xuICAgICAgICBpZighaXNFbXB0eShteUZvcm0uZWxlbWVudHNbaV0uaWQpKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgaWRJbnB1dD1teUZvcm0uZWxlbWVudHNbaV0uaWQ7XG4gICAgICAgICAgICBpZihpbnB1dHNDb25mW2lkSW5wdXRdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBpbnB1dEhUTUw9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRJbnB1dCk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgYXR0cmlidXRlIGluIGlucHV0c0NvbmZbaWRJbnB1dF0pXG4gICAgICAgICAgICAgICAgICAgIGlucHV0SFRNTC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCBpbnB1dHNDb25mW2lkSW5wdXRdW2F0dHJpYnV0ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG4vLyBSw6ljdXDDqHJlIHRvdXRlcyBsZXMgdmFsZXVycyBkZSBjaGFtcHMgZW4gb21ldHRhbnQgbGVzIGNoZWNrYm94IG5vbiBjb2Now6llcywgZXRjLlxuZXhwb3J0IGNvbnN0IGdldERhdGFzRnJvbUlucHV0cyA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZGF0YXM9e307XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAgICAgZGF0YXNbZW50cmllWzBdXT1lbnRyaWVbMV07XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBWaWRlIHRvdXMgbGVzIGNoYW1wcyBkJ3VuIGZvcm11bGFpcmUsIHkgY29tcHJpcyBoaWRkZW4sIGNoZWNrYm94LCBldGMuXG4vLyBSZXZvaXIgcG91ciBsZXMgc2VsZWN0XG5leHBvcnQgY29uc3QgZW1weUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgIHtcbiAgICAgICAgaWYobXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJjaGVja2JveFwiIHx8IG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwicmFkaW9cIilcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLmNoZWNrZWQ9ZmFsc2U7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnZhbHVlPVwiXCI7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuLy8gVmlkZSBldCBjYWNoZSBsZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgZW1weUFuZEhpZGVGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBlbXB5Rm9ybShteUZvcm0pO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/public/JS/index.app.js b/front/public/JS/index.app.js index a12ee9a..3bff517 100644 --- a/front/public/JS/index.app.js +++ b/front/public/JS/index.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -409,7 +413,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -450,7 +455,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -513,7 +518,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -550,7 +657,8 @@ Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["helloDev"])(); // Test var initialise = /*#__PURE__*/function () { var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user; + var isConnected, user, _paq; + return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { @@ -566,7 +674,47 @@ var initialise = /*#__PURE__*/function () { // on change le lien du compte en haut user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_1__["getLocaly"])("user", true); Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["updateAccountLink"])(user.status, configTemplate); - } else {// ici on pourra éventuellement charger matomo, etc. + } else { + // chargement de matomo + _paq = window._paq = window._paq || []; //ajout cnil : + + _paq.push([function () { + var self = this; + + function getOriginalVisitorCookieTimeout() { + var now = new Date(), + nowTs = Math.round(now.getTime() / 1000), + visitorInfo = self.getVisitorInfo(); + var createTs = parseInt(visitorInfo[2]); + var cookieTimeout = 33696000; // 13 mois en secondes + + var originalTimeout = createTs + cookieTimeout - nowTs; + return originalTimeout; + } + + this.setVisitorCookieTimeout(getOriginalVisitorCookieTimeout()); + }]); //--fin ajout cnil + + + _paq.push(['trackPageView']); + + _paq.push(['enableLinkTracking']); + + (function () { + var u = "https://stats.le-fab-lab.com/"; + + _paq.push(['setTrackerUrl', u + 'matomo.php']); + + _paq.push(['setSiteId', '5']); + + var d = document, + g = d.createElement('script'), + s = d.getElementsByTagName('script')[0]; + g.type = 'text/javascript'; + g.async = true; + g.src = u + 'matomo.js'; + s.parentNode.insertBefore(g, s); + })(); } _context.next = 10; @@ -634,7 +782,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -715,7 +863,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -803,13 +952,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -861,4 +1010,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwiY29uZmlnVGVtcGxhdGUiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29uIiwicGFyc2UiLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImxvZyIsImxpbmsiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiaG9tZVBhZ2UiLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ubG9hZCIsInJlc3BvbnNlVGV4dCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Iiwic2VuZCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJpIiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwiZGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwidXJsUmVkaXJlY3Rpb24iLCJtZXNzYWdlIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwicmVzcG9uc2UiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsIndpbmRvdyIsImxvY2F0aW9uIiwiaW5kZXhPZiIsImFzc2lnbiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFD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SjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFabkMsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU0rRCxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDSixjQUFELEVBQWlCQyxPQUFqQixFQUEwQkMsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN0SCwyREFBTyxDQUFDcUgsT0FBRCxDQUFYLEVBQ0lwRCxvRUFBVSxDQUFDLFNBQUQsRUFBWW9ELE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3JILDJEQUFPLENBQUNzSCxTQUFELENBQVgsRUFDSXJELG9FQUFVLENBQUMsS0FBRCxFQUFRcUQsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDdEgsMkRBQU8sQ0FBQ29ILGNBQUQsQ0FBWCxFQUNJWSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JFLE1BQWhCLENBQXVCZixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2luZGV4LmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL2luZGV4LmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJkZWZhdWx0XCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwid2lraWxlcm5pXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCwgICAgXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLy8gaWRlbVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gU0NSSVBUIERFIEJBU0UgQVBQRUzDiSBEQU5TIExFUyBQQUdFUyBUWVBFIEFDQ1VFSUwgRFUgU0lURVxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7IGdldExvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbmhlbGxvRGV2KCk7XG5cbi8vIFRlc3QgZGUgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgcG91ciBhZGFwdGVyIGxlIGxpZW4gZHUgbWVudS4uLlxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG9uIGNoYW5nZSBsZSBsaWVuIGR1IGNvbXB0ZSBlbiBoYXV0XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gaWNpIG9uIHBvdXJyYSDDqXZlbnR1ZWxsZW1lbnQgY2hhcmdlciBtYXRvbW8sIGV0Yy5cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgZXN0IGxpc2libGUgc3VyIGdpdGxhYiA6IFxcbiBCb25uZSBsZWN0dXJlIDotKSBcXG4gUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBsZSB0b2tlbiBldCBkZSB0b3V0ZSBmYcOnb24gdsOpcmlmaWVyIMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGVbbGFuZ10uYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbbGFuZ10uYWNjb3VudFBhZ2UpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJyZWdlbmVyYXRlSFRNTCIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0IiwiY29uZmlnVGVtcGxhdGUiLCJoZWxsb0RldiIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsIl9wYXEiLCJ3aW5kb3ciLCJwdXNoIiwic2VsZiIsImdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQiLCJub3ciLCJub3dUcyIsInJvdW5kIiwiZ2V0VGltZSIsInZpc2l0b3JJbmZvIiwiZ2V0VmlzaXRvckluZm8iLCJjcmVhdGVUcyIsInBhcnNlSW50IiwiY29va2llVGltZW91dCIsIm9yaWdpbmFsVGltZW91dCIsInNldFZpc2l0b3JDb29raWVUaW1lb3V0IiwidSIsImQiLCJkb2N1bWVudCIsImciLCJjcmVhdGVFbGVtZW50IiwicyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwidHlwZSIsImFzeW5jIiwic3JjIiwicGFyZW50Tm9kZSIsImluc2VydEJlZm9yZSIsImNvbnNvbGUiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJqc29uIiwicGFyc2UiLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImxvZyIsImxpbmsiLCJnZXRFbGVtZW50QnlJZCIsImhvbWVQYWdlIiwiZ2V0Q29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbmxvYWQiLCJyZXNwb25zZVRleHQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInNlbmQiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiaSIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsInVybFJlZGlyZWN0aW9uIiwibWVzc2FnZSIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsInJlc3BvbnNlIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJsb2NhdGlvbiIsImluZGV4T2YiLCJhc3NpZ24iXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJB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QUNKLGNBQUQsRUFBaUJDLE9BQWpCLEVBQTBCQyxTQUExQixDQUFaO0FBQ0FuQyw2QkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0osbUJBNUNEOztBQTZDQUUscUJBQUcsQ0FBQ0ssT0FBSixHQUFjO0FBQUEsMkJBQU1OLE1BQU0sQ0FBQ0MsR0FBRyxDQUFDTSxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQU4scUJBQUcsQ0FBQ08sSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFaOUQsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU0wRixZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDSixjQUFELEVBQWlCQyxPQUFqQixFQUEwQkMsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUMvSiwyREFBTyxDQUFDOEosT0FBRCxDQUFYLEVBQ0luRCxvRUFBVSxDQUFDLFNBQUQsRUFBWW1ELE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQzlKLDJEQUFPLENBQUMrSixTQUFELENBQVgsRUFDSXBELG9FQUFVLENBQUMsS0FBRCxFQUFRb0QsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDL0osMkRBQU8sQ0FBQzZKLGNBQUQsQ0FBWCxFQUNJL0UsTUFBTSxDQUFDMEYsUUFBUCxDQUFnQkUsTUFBaEIsQ0FBdUJiLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvaW5kZXguYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvaW5kZXguanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLC8vIGlkZW1cbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLy8gbGltaXRlIGxlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCIuLi5cIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pZXJzIHF1aXpzXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJCbG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDksXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwibW9uLWNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSA8c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKik8L3NwYW4+LCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L3NwYW4+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgIVwiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6IFwiVGVzdGVyIFdpa2lMZXJuaSBncmF0dWl0ZW1lbnQuXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+U3VpdmFudCBsZXMgcXVlc3Rpb25zLCB1bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlcyBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIDxiPkMnZXN0IHRvdWpvdXJzIGxlIGNvbnRlbnUgZGUgbCdhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pIGNvbmNlcm5hbnQgbGVzIFxcXCJib25uZXNcXFwiIHLDqXBvbnNlczwvYj4uIE1haXMgbGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBuJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMsIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudDwvYj4uPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLiBDZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgPGI+dGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpejwvYj4gcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBHcsOiY2Ugw6AgY2UgY29tcHRlLCB2b3VzIHBvdXJyZXogYXVzc2kgPGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlYXV4IHF1aXpzPC9iPiBwb3VyIGNvbnRpbnVlciDDoCBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIi48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiTGVzIGRlcm5pw6hyZXMgZ3JhaW5lcyBkZSBzYXZvaXJcIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlc1wiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbn07IiwiLy8gLS0gU0NSSVBUIERFIEJBU0UgQVBQRUzDiSBEQU5TIExFUyBQQUdFUyBUWVBFIEFDQ1VFSUwgRFUgU0lURVxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7IGdldExvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbmhlbGxvRGV2KCk7XG5cbi8vIFRlc3QgZGUgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgcG91ciBhZGFwdGVyIGxlIGxpZW4gZHUgbWVudS4uLlxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIG9uIGNoYW5nZSBsZSBsaWVuIGR1IGNvbXB0ZSBlbiBoYXV0XG4gICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gY2hhcmdlbWVudCBkZSBtYXRvbW9cbiAgICAgICAgICAgIHZhciBfcGFxID0gd2luZG93Ll9wYXEgPSB3aW5kb3cuX3BhcSB8fCBbXTtcbiAgICAgICAgICAgIC8vYWpvdXQgY25pbCAgOlxuICAgICAgICAgICAgX3BhcS5wdXNoKFtmdW5jdGlvbigpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGdldE9yaWdpbmFsVmlzaXRvckNvb2tpZVRpbWVvdXQoKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG5vdyA9IG5ldyBEYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIG5vd1RzID0gTWF0aC5yb3VuZChub3cuZ2V0VGltZSgpIC8gMTAwMCksXG4gICAgICAgICAgICAgICAgICAgIHZpc2l0b3JJbmZvID0gc2VsZi5nZXRWaXNpdG9ySW5mbygpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgY3JlYXRlVHMgPSBwYXJzZUludCh2aXNpdG9ySW5mb1syXSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb29raWVUaW1lb3V0ID0gMzM2OTYwMDA7IC8vIDEzIG1vaXMgZW4gc2Vjb25kZXNcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9yaWdpbmFsVGltZW91dCA9IGNyZWF0ZVRzICsgY29va2llVGltZW91dCAtIG5vd1RzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3JpZ2luYWxUaW1lb3V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnNldFZpc2l0b3JDb29raWVUaW1lb3V0KCBnZXRPcmlnaW5hbFZpc2l0b3JDb29raWVUaW1lb3V0KCkgKTtcbiAgICAgICAgICAgIH1dKTtcbiAgICAgICAgICAgIC8vLS1maW4gYWpvdXQgY25pbFxuICAgICAgICAgICAgX3BhcS5wdXNoKFsndHJhY2tQYWdlVmlldyddKTtcbiAgICAgICAgICAgIF9wYXEucHVzaChbJ2VuYWJsZUxpbmtUcmFja2luZyddKTtcbiAgICAgICAgICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgdT1cImh0dHBzOi8vc3RhdHMubGUtZmFiLWxhYi5jb20vXCI7XG4gICAgICAgICAgICAgICAgX3BhcS5wdXNoKFsnc2V0VHJhY2tlclVybCcsIHUrJ21hdG9tby5waHAnXSk7XG4gICAgICAgICAgICAgICAgX3BhcS5wdXNoKFsnc2V0U2l0ZUlkJywgJzUnXSk7XG4gICAgICAgICAgICAgICAgdmFyIGQ9ZG9jdW1lbnQsIGc9ZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSwgcz1kLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKVswXTtcbiAgICAgICAgICAgICAgICBnLnR5cGU9J3RleHQvamF2YXNjcmlwdCc7IGcuYXN5bmM9dHJ1ZTsgZy5zcmM9dSsnbWF0b21vLmpzJzsgcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZShnLHMpO1xuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/loginLink.app.js b/front/public/JS/loginLink.app.js index 4dff161..7be0b27 100644 --- a/front/public/JS/loginLink.app.js +++ b/front/public/JS/loginLink.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -387,8 +391,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -411,6 +415,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -433,7 +438,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -444,20 +449,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -470,15 +478,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -486,8 +496,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -601,7 +612,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -642,7 +654,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -705,7 +717,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -949,7 +1063,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1061,7 +1175,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1149,13 +1264,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1207,4 +1322,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9sb2dpbkxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwid2VsY29tZU1lc3NhZ2UiLCJieWVieWVNZXNzYWdlIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJjb25maWdGcm9udEVuZCIsInR4dCIsInR4dFVzZXJzIiwiZGl2UmVzcG9uc2UiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiaGVsbG9EZXYiLCJjb25maWciLCJpbml0aWFsaXNlIiwiZ2V0Q29uZmlnIiwiYWRkRWxlbWVudCIsImNoZWNrU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwic2F2ZUxvY2FseSIsIm1lc3NhZ2UiLCJjb2xvciIsInVzZXIiLCJnZXRMb2NhbHkiLCJob21lUGFnZSIsInN0YXR1cyIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwiZGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJ0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsInVzZXJJZCIsImNvbm5leGlvblRpbWUiLCJ0b2tlbiIsImNvbm5leGlvbk1heFRpbWUiLCJub3ciLCJlbmRzV2l0aCIsInBhcnNlSW50Iiwic2V0U2Vzc2lvbiIsInJlbW92ZUxvY2FseSIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJjaGVja0Fuc3dlckRhdGFzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJzdHJpbmdpZnkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImNvbnNvbGUiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsInNlYXJjaCIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGVjb2RlVVJJIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7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QUNJMUMsNEZBQVksQ0FBQyxNQUFELENBQVo7QUFDQWtFLGtDQUFZLENBQUNILGNBQUQsRUFBaUI3RixPQUFqQixFQUEwQjhGLFNBQTFCLENBQVo7QUFDQXRCLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBNUQscUJBQUcsQ0FBQytELE9BQUosR0FBYztBQUFBLDJCQUFNRixNQUFNLENBQUM3RCxHQUFHLENBQUNnRSxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQWhFLHFCQUFHLENBQUMwQixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVp6QyxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTW1HLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNILGNBQUQsRUFBaUI3RixPQUFqQixFQUEwQjhGLFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDbEssMkRBQU8sQ0FBQ29FLE9BQUQsQ0FBWCxFQUNJRCxvRUFBVSxDQUFDLFNBQUQsRUFBWUMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDcEUsMkRBQU8sQ0FBQ2tLLFNBQUQsQ0FBWCxFQUNJL0Ysb0VBQVUsQ0FBQyxLQUFELEVBQVErRixTQUFSLENBQVY7QUFDSixNQUFHLENBQUNsSywyREFBTyxDQUFDaUssY0FBRCxDQUFYLEVBQ0l2RixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCcUYsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9sb2dpbkxpbmsuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbG9naW5MaW5rLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJkZWZhdWx0XCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwid2lraWxlcm5pXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCwgICAgXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLy8gaWRlbVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBxdSdhbGxlei12b3VzIGFwcHJlbmRyZSBhdWpvdXJkJ2h1aSA/XCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQ2hhcXVlIGpvdXIsIHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5vdEZvdW5kOiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwYXIgdW4gYXV0cmUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgbGUgcHJlc3NlLXBhcGllci4gVm91cyBwb3V2ZXogbGUgcmVjb3BpZXIgb8O5IHZvdXMgbGUgc291aGFpdGVyLlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJWb3VzIGRldmV6IGFjY2VwdGVyIGxlcyBDR1UgcG91ciBwb3V2b2lyIGNyw6llciB2b3RyZSBjb21wdGUuIFwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHZhbGlkZSB0cm91dsOpIHBvdXIgY2UgY29kZSBwYXJyYWluLlwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIHBhcnJhaW4gYSBiaWVuIMOpdMOpIHRyb3V2w6kgIVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjRIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBjb21wdGVcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvdHJlIGNvbXB0ZSwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGguPC9wPjxwPjxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5WYWxpZGVyLjwvYT48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuVm90cmUgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqShlKSBhdSBzaXRlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6koZSkgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJUcm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiTGUgbW90IGRlIHBhc3NlIG4nZXN0IHBhcyBsZSBib24uXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDogTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuZSBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgPGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPmNsaXF1ZXogaWNpPC9hPiBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBuJ2VzdCBwbHVzIHZhbGFibGUuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWlscyA6IFwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCIuLi5cIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5obXRcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxufTsiLCIvLyAtLSBQQUdFIFBFUk1FVFRBTlQgREUgVEVTVEVSIFVOIExJRU4gREUgQ09OTkVYSU9OIFJFw4dVIFBBUiBFLU1BSUxcblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLlxuLy8vIERhbnMgY2UgY2FzLCBvbiBwZXV0IHJlZGlyaWdlciBsJ3V0aWxpc2F0ZXVyIHZlcnMgbGEgcGFnZSBkZSBjb25uZXhpb24gcG91ciBvYnRlbmlyIHVuIG5vdXZlYXUgbGllbiBkZSB2YWxpZGF0aW9uXG4vLy8gU2kgbGUgdG9rZW4gZXN0IG9rLCBvbiBjcsOpZSB1bmUgc2Vzc2lvbiBzdWl2YW50IGxhIGR1csOpZSByZXRvdXJuw6llIHBhciBsJ0FQSSBldCByZWRpcmlnZSBsJ3V0aWxpc2F0ZXVyIHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWxcbi8vLyBVbiByw6lzdWx0YXQgZGUgcXVpeiBwZXV0IGF1c3NpIGF2b2lyIMOpdMOpIGVucmVnaXN0csOpIGPDtHTDqSBjbGllbnQgZXQgZXN0IGFsb3JzIMOgIHRyYW5zbWV0dHJlIMOgIGwnQVBJLlxuLy8vIFNpIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgdW5lIHNlc3Npb24gYWN0aXZlIHZhbGlkZSwgYydlc3QgcXUnaWwgYSBkw6lqw6AgY2xpcXXDqSBzdXIgbGUgbGllbi4gT24gbGUgcmVkaXJpZ2Ugw6lnYWxlbWVudCB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja0Fuc3dlckRhdGFzLCBjaGVja1Nlc3Npb24sIGdldENvbmZpZywgZ2V0VGltZURpZmZlcmVuY2UsIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmxldCBjb25maWc7XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIC8vIHNpIGwndXRpbGlzYXRldXIgZXN0IGTDqWrDoCBjb25uZWN0w6ksIHBhcyBsYSBwZWluZSBkJ2FsbGVyICsgbG9pbiA6XG4gICAgICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogdHh0VXNlcnMuYWxyZWFkeUNvbm5lY3RlZCwgY29sb3I6XCJpbmZvcm1hdGlvblwiIH0pOy8vIHBvdXIgbCdhZmZpY2hlciBzdXIgbGEgcGFnZSBzdWl2YW50ZVxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBjb25zdCBob21lUGFnZT11c2VyLnN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdGcm9udEVuZFtob21lUGFnZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICBpZihkYXRhcyAmJiBkYXRhcy50IT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmNvbm5lY3Rpb25XaXRoTGlua1JvdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiAhaXNFbXB0eShyZXNwb25zZS51c2VySWQpICYmICFpc0VtcHR5KHJlc3BvbnNlLmNvbm5leGlvblRpbWUpICYmICFpc0VtcHR5KHJlc3BvbnNlLnRva2VuKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb25uZXhpb25NYXhUaW1lPURhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmNvbm5leGlvblRpbWUuZW5kc1dpdGgoXCJkYXlzXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ubmV4aW9uTWF4VGltZSs9cGFyc2VJbnQocmVzcG9uc2UuY29ubmV4aW9uVGltZSwxMCkqMjQqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb25NYXhUaW1lKz1wYXJzZUludChyZXNwb25zZS5jb25uZXhpb25UaW1lLDEwKSozNjAwKjEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFNlc3Npb24ocmVzcG9uc2UudXNlcklkLCByZXNwb25zZS50b2tlbiwgY29ubmV4aW9uTWF4VGltZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcImxhc3RBbnN3ZXJcIik7Ly8gISBpbXBvcnRhbnQgcG91ciBuZSBwYXMgZW5yZWdpc3RlciBwbHVzaWV1cnMgZm9pcyBsZSByw6lzdWx0YXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy52YWxpZGF0aW9uTWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7Ly8gYXUgY2FzIG/DuSBibG9jYWdlIHJlZGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnRnJvbnRFbmQudXNlckhvbWVQYWdlKTsvLyBjb25uZXhpb24gcGFyIGxpZW4gbmUgY29uY2VybmUgcXVlIGxlcyBzaW1wbGVzIFwidXNlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh0aGlzLnN0YXR1cyA9PT0gNDAxIHx8IHRoaXMuc3RhdHVzID09PSA0MDMpICYmIHJlc3BvbnNlLmVycm9ycyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0VXNlcnMuYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ0Zyb250RW5kLmNvbm5lY3Rpb25QYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzLnRpbWVEaWZmZXJlbmNlPWdldFRpbWVEaWZmZXJlbmNlKGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNpIGwndXRpbGlzYXRldXIgYSBwcsOpY8OpZGVtZW50IHLDqXBvbmR1IMOgIHVuIHF1aXosIGonYWpvdXRlIGxlcyBpbmZvcyBkZSBzb24gcsOpc3VsdGF0IDpcbiAgICAgICAgICAgICAgICAgICAgZGF0YXM9Y2hlY2tBbnN3ZXJEYXRhcyhkYXRhcyk7XG4gICAgICAgICAgICAgICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9sb2dpbkxpbmsuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicmVnZW5lcmF0ZUhUTUwiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJzdGF0c0FkbWluIiwibm90Rm91bmQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZExhbmd1YWdlIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0IiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsImRpdlJlc3BvbnNlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhlbGxvRGV2IiwiY29uZmlnIiwiaW5pdGlhbGlzZSIsImdldENvbmZpZyIsImFkZEVsZW1lbnQiLCJjaGVja1Nlc3Npb24iLCJpc0Nvbm5lY3RlZCIsInNhdmVMb2NhbHkiLCJtZXNzYWdlIiwiY29sb3IiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwiaG9tZVBhZ2UiLCJzdGF0dXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImFzc2lnbiIsImRhdGFzIiwiZ2V0VXJsUGFyYW1zIiwidCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJ1c2VySWQiLCJjb25uZXhpb25UaW1lIiwidG9rZW4iLCJjb25uZXhpb25NYXhUaW1lIiwibm93IiwiZW5kc1dpdGgiLCJwYXJzZUludCIsInNldFNlc3Npb24iLCJyZW1vdmVMb2NhbHkiLCJlcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwiY2hlY2tBbnN3ZXJEYXRhcyIsInNldFJlcXVlc3RIZWFkZXIiLCJzZW5kIiwic3RyaW5naWZ5IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpIiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJjb25zb2xlIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJzZWFyY2giLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFBhc3N3b3JkIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FBYyxHQUFHRCxtQkFBTyxDQUFDLHFEQUFELENBQTlCOztBQUVBRSxNQUFNLENBQUNDLE9BQVA7QUFFSUMsUUFBTSxFQUFFLDJCQUZaO0FBR0lDLFNBQU8sRUFBRSx1QkFIYjtBQUlJQyxXQUFTLEVBQUUsU0FKZjtBQUtJQyxZQUFVLEVBQUUsbUJBTGhCO0FBTUlDLFlBQVUsRUFBRSxtQkFOaEI7QUFPSUMsYUFBVyxFQUFFLHVCQVBqQjtBQVFJQyxXQUFTLEVBQUUsSUFSZjtBQVNJQyxPQUFLLEVBQUUsV0FUWDtBQVN3QjtBQUNwQkMsZ0JBQWMsRUFBRSxDQUFDLElBQUQsQ0FWcEI7QUFVMkI7QUFDdkJDLFVBQVEsRUFBRSxtQkFYZDtBQVlJQyxvQkFBa0IsRUFBRSxJQVp4QjtBQVk4QjtBQUMxQkMsMEJBQXdCLEVBQUUsR0FiOUI7QUFhbUM7QUFDL0JDLDhCQUE0QixFQUFFLENBZGxDO0FBY3FDO0FBQ2pDQyxrQ0FBZ0MsRUFBRSxLQWZ0QztBQWU2QztBQUN6Q0MsMkJBQXlCLEVBQUUsSUFoQi9CO0FBaUJJQyw4QkFBNEIsRUFBRSxLQWpCbEM7QUFrQklDLDZCQUEyQixFQUFFLFVBbEJqQztBQW1CSUMsK0JBQTZCLEVBQUUsSUFuQm5DO0FBbUJ3QztBQUNwQ0MsNEJBQTBCLEVBQUUsSUFwQmhDO0FBcUJJQyxnQ0FBOEIsRUFBRSxRQXJCcEM7QUFxQjhDO0FBQzFDQyx5QkFBdUIsRUFBRSxFQXRCN0I7QUF1QklDLHlDQUF1QyxFQUFFLENBdkI3QztBQXdCSUMsMENBQXdDLEVBQUUsRUF4QjlDO0FBeUJJQywyQ0FBeUMsRUFBRSxDQXpCL0M7QUEwQklDLG1DQUFpQyxFQUFFLEdBMUJ2QztBQTJCSTtBQUNBQyxnQkFBYyxFQUFFLENBNUJwQjtBQTRCdUI7QUFDbkJDLGdCQUFjLEVBQUUsQ0E3QnBCO0FBNkJ1QjtBQUNuQkMsY0FBWSxFQUFFLEVBOUJsQjtBQStCSUMscUJBQW1CLEVBQUUsRUEvQnpCO0FBK0I0QjtBQUN4QkMsK0JBQTZCLEVBQUMsQ0FoQ2xDO0FBZ0NxQztBQUNqQ0MsNkJBQTJCLEVBQUMsRUFqQ2hDO0FBaUNvQztBQUNoQ0Msa0NBQWdDLEVBQUUsRUFsQ3RDO0FBa0MwQztBQUN0Q0MseUJBQXVCLEVBQUUsQ0FuQzdCO0FBb0NJO0FBQ0FDLG9CQUFrQixFQUFFLENBckN4QjtBQXNDSUMsb0JBQWtCLEVBQUUsQ0F0Q3hCO0FBdUNJQyw0QkFBMEIsRUFBRSxPQXZDaEM7QUF1Q3dDO0FBQ3BDQywwQkFBd0IsRUFBRSxDQUFFLFdBQUYsRUFBZSxZQUFmLEVBQTZCLFdBQTdCLEVBQTBDLFdBQTFDLEVBQXVELFdBQXZELENBeEM5QjtBQXlDSTtBQUNBQywyQkFBeUIsRUFBRSxHQTFDL0I7QUEyQ0lDLHFDQUFtQyxFQUFFLEdBM0N6QztBQTRDSTtBQUNBQyxZQUFVLEVBQUUsQ0E3Q2hCO0FBOENJQyxZQUFVLEVBQUU7QUE5Q2hCLHNEQWdEb0IzQyxjQUFjLENBQUM0QixjQWhEbkMsc0RBaURvQjVCLGNBQWMsQ0FBQzZCLGNBakRuQyxvREFrRGtCN0IsY0FBYyxDQUFDOEIsWUFsRGpDLHlEQW1EdUJoQyxLQUFLLENBQUM4QyxRQUFOLENBQWVDLFNBbkR0QyxxREFvRG1CL0MsS0FBSyxDQUFDZ0QsYUFwRHpCLDREQXFEMEJoRCxLQUFLLENBQUNpRCxvQkFyRGhDLDhEQXNENEIvQyxjQUFjLENBQUNnRCxzQkF0RDNDLHlEQXVEdUJoRCxjQUFjLENBQUNpRCxpQkF2RHRDLG1FQXdEaUNqRCxjQUFjLENBQUNrRCwyQkF4RGhELDREQXlEMEJsRCxjQUFjLENBQUNtRCxvQkF6RHpDLDJEQTBEeUJuRCxjQUFjLENBQUNvRCxtQkExRHhDLG9COzs7Ozs7Ozs7OztBQ0hBbkQsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTtBQUNBbUQscUJBQW1CLEVBQUUsZ0JBRnpCO0FBR0lDLHdCQUFzQixFQUFFLE1BSDVCO0FBSUlDLDRCQUEwQixFQUFFLFVBSmhDO0FBS0lDLDhCQUE0QixFQUFFLFFBTGxDO0FBTUlDLGtCQUFnQixFQUFFLFVBTnRCO0FBT0lDLHdCQUFzQixFQUFHLFNBUDdCO0FBUUlDLDJCQUF5QixFQUFHLFNBUmhDO0FBU0lDLDhCQUE0QixFQUFHLFlBVG5DO0FBVUlDLGdDQUE4QixFQUFHLGNBVnJDO0FBV0lDLDJCQUF5QixFQUFFLDZCQVgvQjtBQVlJQyxnQkFBYyxFQUFFLGtCQVpwQjtBQWFJO0FBQ0FDLGdCQUFjLEVBQUUsWUFkcEI7QUFlSTtBQUNBQyxpQkFBZSxFQUFFLGVBaEJyQjtBQWlCSTtBQUNBQyxnQ0FBOEIsRUFBRSxzQkFsQnBDO0FBbUJJQyxvQkFBa0IsRUFBRSxnQkFuQnhCO0FBb0JJQyxpQkFBZSxFQUFHLHVCQXBCdEI7QUFxQklDLGVBQWEsRUFBRSxpQkFyQm5CO0FBc0JJO0FBQ0FDLGVBQWEsRUFDYjtBQUNJQyxTQUFLLEVBQUU7QUFBRUMsZUFBUyxFQUFFLEdBQWI7QUFBa0JDLGNBQVEsRUFBRTtBQUE1QixLQURYO0FBRUlDLFFBQUksRUFBRTtBQUFFRixlQUFTLEVBQUU7QUFBYixLQUZWO0FBRThCO0FBQzFCRyxnQkFBWSxFQUFFO0FBQUVGLGNBQVEsRUFBRTtBQUFaO0FBSGxCLEdBeEJKO0FBNkJJRyxzQkFBb0IsRUFBRztBQUFFL0IsYUFBUyxFQUFFLENBQWI7QUFBZ0I0QixZQUFRLEVBQUU7QUFBMUIsR0E3QjNCO0FBOEJJSSxVQUFRLEVBQ1I7QUFDSUMsUUFBSSxFQUFFO0FBQUVOLGVBQVMsRUFBRSxHQUFiO0FBQWtCQyxjQUFRLEVBQUU7QUFBNUIsS0FEVjtBQUVJTSxRQUFJLEVBQUU7QUFBRU4sY0FBUSxFQUFFLElBQVo7QUFBa0JPLFNBQUcsRUFBQyxDQUF0QjtBQUF5QkMsa0JBQVksRUFBQztBQUF0QztBQUZWLEdBL0JKO0FBbUNJQyxRQUFNLEVBQ047QUFDSUosUUFBSSxFQUFFO0FBQUVOLGVBQVMsRUFBRSxHQUFiO0FBQWtCQyxjQUFRLEVBQUU7QUFBNUI7QUFEVixHQXBDSjtBQXVDSTdDLGdCQUFjLEVBQUUsQ0F2Q3BCO0FBd0NJQyxnQkFBYyxFQUFFLENBeENwQjtBQXlDSUMsY0FBWSxFQUFFLEVBekNsQjtBQTBDSXFELFdBQVMsRUFBRSxDQTFDZjtBQTJDSUMsV0FBUyxFQUFFLENBM0NmO0FBMkNrQjtBQUNkO0FBQ0FwQyx3QkFBc0IsRUFBRyxzQkE3QzdCO0FBOENJQyxtQkFBaUIsRUFBRyxnQ0E5Q3hCO0FBK0NJQyw2QkFBMkIsRUFBRyw0QkEvQ2xDO0FBZ0RJbUMsY0FBWSxFQUFHLDJCQWhEbkI7QUFpRElsQyxzQkFBb0IsRUFBRyxtQkFqRDNCO0FBa0RJbUMsYUFBVyxFQUFHLG9CQWxEbEI7QUFtRElsQyxxQkFBbUIsRUFBRyxNQW5EMUI7QUFtRGlDO0FBQzdCbUMsWUFBVSxFQUFHLE9BcERqQjtBQW9EeUI7QUFDckJDLGlCQUFlLEVBQUcsQ0FyRHRCLENBcUR1Qjs7QUFyRHZCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQXZGLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k7QUFDQXVGLFlBQVUsRUFBRSxPQUZoQjtBQUdJQyxnQkFBYyxFQUFFLFNBSHBCO0FBSUlDLG1CQUFpQixFQUFFLGlCQUp2QjtBQUtJQyx5QkFBdUIsRUFBRSxjQUw3QjtBQU1JQywwQkFBd0IsRUFBRSxjQU45QjtBQU9JQyxpQkFBZSxFQUFFLGNBUHJCO0FBUUlDLGlCQUFlLEVBQUUsUUFSckI7QUFTSUMsbUJBQWlCLEVBQUUsZUFUdkI7QUFVSUMseUJBQXVCLEVBQUUsaUJBVjdCO0FBV0lDLGNBQVksRUFBRSxPQVhsQjtBQVlJQyxpQkFBZSxFQUFFLFNBWnJCO0FBYUlDLG1CQUFpQixFQUFFLFlBYnZCO0FBY0lDLGlCQUFlLEVBQUUsVUFkckI7QUFlSUMsaUJBQWUsRUFBRSxVQWZyQjtBQWdCSUMsY0FBWSxFQUFFLGdCQWhCbEI7QUFpQklDLHdCQUFzQixFQUFFLG1CQWpCNUI7QUFrQklDLHNCQUFvQixFQUFFLGlCQWxCMUI7QUFtQklDLGFBQVcsRUFBRSx5QkFuQmpCO0FBb0JJQyxrQkFBZ0IsRUFBRSxxQkFwQnRCO0FBcUJJdEMsZUFBYSxFQUFFLGlCQXJCbkI7QUFzQkk7QUFDQXVDLE1BQUksRUFBRTtBQUFFcEMsYUFBUyxFQUFFLEVBQWI7QUFBaUJDLFlBQVEsRUFBRTtBQUEzQixHQXZCVjtBQXdCSW9DLE9BQUssRUFBRTtBQUFFckMsYUFBUyxFQUFFLEdBQWI7QUFBa0JDLFlBQVEsRUFBRTtBQUE1QixHQXhCWDtBQXlCSTdCLFVBQVEsRUFBRTtBQUFFQyxhQUFTLEVBQUUsQ0FBYjtBQUFnQjJCLGFBQVMsRUFBQyxFQUExQjtBQUE4QkMsWUFBUSxFQUFFO0FBQXhDLEdBekJkO0FBeUI4RDtBQUMxRHFDLGFBQVcsRUFBRTtBQUFFakUsYUFBUyxFQUFFLENBQWI7QUFBZ0IyQixhQUFTLEVBQUM7QUFBMUIsR0ExQmpCO0FBMkJJdUMsZUFBYSxFQUFFO0FBQUV2QyxhQUFTLEVBQUU7QUFBYixHQTNCbkI7QUE0Qkl3QyxPQUFLLEVBQUU7QUFBRUMsU0FBSyxFQUFFLE1BQVQ7QUFBaUJ4QyxZQUFRLEVBQUU7QUFBM0IsR0E1Qlg7QUE2Qkl5QyxtQkFBaUIsRUFBRSxDQUFDLEdBN0J4QjtBQThCSUMsbUJBQWlCLEVBQUMsR0E5QnRCO0FBK0JJO0FBQ0FyRSxlQUFhLEVBQUcsYUFoQ3BCO0FBaUNJQyxzQkFBb0IsRUFBRztBQWpDM0IsQ0FEQSxDOzs7Ozs7Ozs7OztBQ0FBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGtFOzs7Ozs7Ozs7OztBQ3RCQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSwrRDs7Ozs7Ozs7Ozs7QUN0QkE5QyxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJa0gsZUFBYSxFQUFHLG9DQURwQjtBQUVJQyxxQkFBbUIsRUFBRyx1SEFGMUI7QUFHSUMsa0JBQWdCLEVBQUcsdUVBSHZCO0FBSUlDLG1CQUFpQixFQUFHLG1FQUp4QjtBQUtJQyxhQUFXLEVBQUcsNEdBTGxCO0FBTUlDLGtCQUFnQixFQUFHLHdCQU52QjtBQU9JQyxjQUFZLEVBQUcsc0RBUG5CO0FBUUlDLFFBQU0sRUFBRywrQ0FSYjtBQVNJQyxnQkFBYyxFQUFHLG9CQVRyQjtBQVVJQyxZQUFVLEVBQUcsMkRBVmpCO0FBV0lDLGFBQVcsRUFBRyxhQVhsQjtBQVlJQyxjQUFZLEVBQUUsVUFabEI7QUFhSUMsV0FBUyxFQUFFLFNBYmY7QUFjSUMsY0FBWSxFQUFFLFdBZGxCO0FBZUlDLGNBQVksRUFBRyx3Q0FmbkI7QUFnQklDLGlCQUFlLEVBQUcsK0NBaEJ0QjtBQWlCSUMsaUJBQWUsRUFBRyx3Q0FqQnRCO0FBa0JJQyxVQUFRLEVBQUcsNEJBbEJmO0FBbUJJQyxnQkFBYyxFQUFHLGtDQW5CckI7QUFvQklDLGVBQWEsRUFBRywyQ0FwQnBCO0FBcUJJQyxZQUFVLEVBQUcsMkJBckJqQjtBQXNCSUMsY0FBWSxFQUFHLHFEQXRCbkI7QUF1QklDLGNBQVksRUFBRyxpQkF2Qm5CO0FBd0JJQyxVQUFRLEVBQUcsZUF4QmY7QUF5QklDLGdCQUFjLEVBQUUsa0JBekJwQjtBQTBCSUMsd0JBQXNCLEVBQUcsaUJBMUI3QjtBQTJCSUMsWUFBVSxFQUFHO0FBM0JqQixDQURBLEM7Ozs7Ozs7Ozs7O0FDQUE3SSxNQUFNLENBQUNDLE9BQVAsR0FDQTtBQUNJNkksVUFBUSxFQUFFLG1DQURkO0FBRUlDLFVBQVEsRUFBRSx3Q0FGZDtBQUdJQyxvQkFBa0IsRUFBRSw4RUFIeEI7QUFJSUMsV0FBUyxFQUFFLHVDQUpmO0FBS0lDLGlCQUFlLEVBQUUscUtBTHJCO0FBTUlDLHFCQUFtQixFQUFFLDRFQU56QjtBQU9JQyxjQUFZLEVBQUcsbUNBUG5CO0FBUUlDLGtCQUFnQixFQUFHLG9FQVJ2QjtBQVNJQyxnQkFBYyxFQUFFLHFIQVRwQjtBQVVJQyxZQUFVLEVBQUcsc0JBVmpCO0FBV0lDLGNBQVksRUFBRywyQkFYbkI7QUFZSUMsNkJBQTJCLEVBQUcsaURBWmxDO0FBYUlDLFVBQVEsRUFBRyw0QkFiZjtBQWNJQyxrQkFBZ0IsRUFBRyw0QkFkdkI7QUFlSUMsc0JBQW9CLEVBQUcsOEVBZjNCO0FBZ0JJQyxvQkFBa0IsRUFBRyw2REFoQnpCO0FBaUJJQyx1QkFBcUIsRUFBRyxvRkFqQjVCO0FBa0JJQyx1QkFBcUIsRUFBRyxvRkFsQjVCO0FBbUJJQyxXQUFTLEVBQUcsK0RBbkJoQjtBQW9CSUMsbUJBQWlCLEVBQUUsd0RBcEJ2QjtBQXFCSUMsZ0JBQWMsRUFBRSxtQ0FyQnBCO0FBc0JJQyx1QkFBcUIsRUFBRSxpS0F0QjNCO0FBdUJJQywyQkFBeUIsRUFBRyxvQ0F2QmhDO0FBd0JJQyx1QkFBcUIsRUFBRyxxQkF4QjVCO0FBeUJJQyw0QkFBMEIsRUFBRyxxSEF6QmpDO0FBMEJJQyw2QkFBMkIsRUFBRyx5SEExQmxDO0FBMkJJQyxtQkFBaUIsRUFBRSwrSUEzQnZCO0FBNEJJQyx3QkFBc0IsRUFBRSw4QkE1QjVCO0FBNkJJQywwQkFBd0IsRUFBRSxtREE3QjlCO0FBOEJJQywrQkFBNkIsRUFBRSw4QkE5Qm5DO0FBK0JJQyxvQkFBa0IsRUFBRyxhQS9CekI7QUFnQ0lDLG9CQUFrQixFQUFHLDRCQWhDekI7QUFpQ0lDLG9CQUFrQixFQUFHLHNvQkFqQ3pCO0FBa0NJQyxxQkFBbUIsRUFBRyw0cUJBbEMxQjtBQW1DSUMsMkJBQXlCLEVBQUcsU0FuQ2hDO0FBb0NJQywyQkFBeUIsRUFBRyw0QkFwQ2hDO0FBcUNJQywyQkFBeUIsRUFBRyx3SEFyQ2hDO0FBc0NJQyw0QkFBMEIsRUFBRywySUF0Q2pDO0FBdUNJQywwQkFBd0IsRUFBRSw2SUF2QzlCO0FBd0NJQyxlQUFhLEVBQUUscURBeENuQjtBQXlDSUMsa0JBQWdCLEVBQUUsc0NBekN0QjtBQTBDSUMsaUJBQWUsRUFBRSx3REExQ3JCO0FBMkNJQyxjQUFZLEVBQUUsb0JBM0NsQjtBQTRDSUMsb0JBQWtCLEVBQUUsNkhBNUN4QjtBQTZDSUMsdUJBQXFCLEVBQUcsK0hBN0M1QjtBQThDSUMsbUJBQWlCLEVBQUcsdUlBOUN4QjtBQStDSUMsYUFBVyxFQUFFLG1DQS9DakI7QUFnRElDLHNCQUFvQixFQUFHLDBCQWhEM0I7QUFpRElDLGtCQUFnQixFQUFHLGVBakR2QjtBQWtESUMsc0JBQW9CLEVBQUcsK0dBbEQzQjtBQW1ESUMsdUJBQXFCLEVBQUcsaUhBbkQ1QjtBQW9ESUMsc0JBQW9CLEVBQUcsdUlBcEQzQjtBQXFESUMsa0JBQWdCLEVBQUUsNkNBckR0QjtBQXNESUMsc0JBQW9CLEVBQUcsNkZBdEQzQjtBQXVESUMsd0JBQXNCLEVBQUcsOEhBdkQ3QjtBQXdESUMsd0JBQXNCLEVBQUcsNkNBeEQ3QjtBQXlESUMsd0JBQXNCLEVBQUcsVUF6RDdCO0FBMERJQyx3QkFBc0IsRUFBRyxnSUExRDdCO0FBMkRJQyx5QkFBdUIsRUFBRyxvSUEzRDlCO0FBNERJQyw0QkFBMEIsRUFBRSw4U0E1RGhDO0FBNkRJQywwQkFBd0IsRUFBRSxpR0E3RDlCO0FBOERJQywwQkFBd0IsRUFBRywrSEE5RC9CO0FBK0RJQywwQkFBd0IsRUFBRSw0REEvRDlCO0FBZ0VJQyxnQ0FBOEIsRUFBRyx5RUFoRXJDO0FBaUVJQyxtQkFBaUIsRUFBRSw4Q0FqRXZCO0FBa0VJQyxtQkFBaUIsRUFBRywyQ0FsRXhCO0FBbUVJQyxtQkFBaUIsRUFBRyxZQW5FeEI7QUFvRUlDLG1CQUFpQixFQUFHLDBIQXBFeEI7QUFxRUlDLG9CQUFrQixFQUFHLDhIQXJFekI7QUFzRUlDLHVCQUFxQixFQUFFLHdKQXRFM0I7QUF1RUloRixpQkFBZSxFQUFFLG9DQXZFckI7QUF3RUlpRixtQkFBaUIsRUFBRSx5REF4RXZCO0FBeUVJQyx5QkFBdUIsRUFBRSx1RUF6RTdCO0FBMEVJQyw4QkFBNEIsRUFBRSxxRUExRWxDO0FBMkVJQywyQkFBeUIsRUFBRSw0RUEzRS9CO0FBNEVJQyxpQ0FBK0IsRUFBRSxzREE1RXJDO0FBNkVJQyw0QkFBMEIsRUFBRSxtREE3RWhDO0FBOEVJQyxnQkFBYyxFQUFFLG1CQTlFcEI7QUErRUlDLGVBQWEsRUFBRSwyRkEvRW5CO0FBZ0ZJQyxtQkFBaUIsRUFBRSxnTEFoRnZCO0FBaUZJQyxxQkFBbUIsRUFBRSxxQ0FqRnpCO0FBa0ZJQyx1QkFBcUIsRUFBRTtBQWxGM0IsQ0FEQSxDOzs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBO0lBRU1DLEk7Ozs7Ozs7NEJBRWFDLEssRUFDZjtBQUNJLFVBQUdBLEtBQUssS0FBR0MsU0FBUixJQUFxQkQsS0FBSyxLQUFHLElBQWhDLEVBQ0ksT0FBTyxJQUFQLENBREosS0FHQTtBQUNJQSxhQUFLLElBQUUsRUFBUCxDQURKLENBQ2M7O0FBQ1ZBLGFBQUssR0FBQ0EsS0FBSyxDQUFDRSxJQUFOLEVBQU47QUFDQSxZQUFHRixLQUFLLEtBQUcsRUFBWCxFQUNJLE9BQU8sSUFBUCxDQURKLEtBR0ksT0FBTyxLQUFQO0FBQ1A7QUFDSjs7O2tDQUVvQkcsUSxFQUNyQjtBQUNJLFVBQUdKLElBQUksQ0FBQ0ssT0FBTCxDQUFhRCxRQUFiLENBQUgsRUFDSUEsUUFBUSxHQUFDLElBQVQsQ0FESixLQUdBO0FBQ0lBLGdCQUFRLElBQUUsRUFBVixDQURKLENBQ2lCOztBQUNiQSxnQkFBUSxHQUFDQSxRQUFRLENBQUNELElBQVQsRUFBVDtBQUNIO0FBQ0QsYUFBT0MsUUFBUDtBQUNIOzs7d0NBRzBCQSxRLEVBQVVFLEcsRUFDckM7QUFDSUYsY0FBUSxJQUFFLEVBQVYsQ0FESixDQUNpQjs7QUFDZCxVQUFHQSxRQUFRLENBQUNHLE1BQVQsR0FBa0JELEdBQXJCLEVBQ0tGLFFBQVEsR0FBQ0EsUUFBUSxDQUFDSSxTQUFULENBQW1CLENBQW5CLEVBQXVCRixHQUFHLEdBQUMsQ0FBM0IsSUFBK0IsS0FBeEM7QUFDSixhQUFPRixRQUFQO0FBQ0gsSyxDQUVEOzs7OytCQUNrQkEsUSxFQUFVSyxNLEVBQzVCO0FBQ0ksVUFBTUMsV0FBVyxHQUFHLElBQUlDLE1BQUosQ0FBV0MsTUFBTSxDQUFDQyxJQUFQLENBQVlKLE1BQVosRUFBb0JLLElBQXBCLENBQXlCLEdBQXpCLENBQVgsRUFBeUMsSUFBekMsQ0FBcEI7QUFDQSxhQUFPVixRQUFRLENBQUNXLE9BQVQsQ0FBaUJMLFdBQWpCLEVBQThCLFVBQUNNLE9BQUQsRUFDckM7QUFDSSxlQUFPUCxNQUFNLENBQUNPLE9BQUQsQ0FBYjtBQUNILE9BSE0sQ0FBUDtBQUlILEssQ0FFRDs7OztpQ0FDb0JoSyxHLEVBQUtzSixHLEVBQ3pCO0FBQ0l0SixTQUFHLEdBQUdpSyxJQUFJLENBQUNDLElBQUwsQ0FBVWxLLEdBQVYsQ0FBTjtBQUNBc0osU0FBRyxHQUFHVyxJQUFJLENBQUNFLEtBQUwsQ0FBV2IsR0FBWCxDQUFOO0FBQ0EsYUFBT1csSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxNQUFpQmQsR0FBRyxHQUFHdEosR0FBdkIsQ0FBWCxJQUEwQ0EsR0FBakQ7QUFDSCxLLENBRUQ7Ozs7K0JBQ2tCcUssVSxFQUNsQjtBQUFBLFVBRDhCQyxJQUM5Qix1RUFEbUMsSUFDbkM7QUFDSSxVQUFHdEIsSUFBSSxDQUFDSyxPQUFMLENBQWFnQixVQUFiLENBQUgsRUFDSSxPQUFPLEVBQVA7QUFDSixVQUFJRSxNQUFNLEdBQUMsSUFBSUMsSUFBSixDQUFTSCxVQUFULENBQVg7QUFDQSxVQUFJSSxLQUFLLEdBQUNGLE1BQU0sQ0FBQ0csT0FBUCxLQUFpQixFQUEzQjtBQUNBLFVBQUdELEtBQUssQ0FBQ2xCLE1BQU4sS0FBZSxDQUFsQixFQUNJa0IsS0FBSyxHQUFDLE1BQUlBLEtBQVY7QUFDSixVQUFJRSxRQUFRLEdBQUVKLE1BQU0sQ0FBQ0ssUUFBUCxLQUFrQixDQUFuQixHQUFzQixFQUFuQztBQUNBLFVBQUdELFFBQVEsQ0FBQ3BCLE1BQVQsS0FBa0IsQ0FBckIsRUFDSW9CLFFBQVEsR0FBQyxNQUFJQSxRQUFiO0FBQ0osVUFBSUUsTUFBTSxHQUFDTixNQUFNLENBQUNPLFdBQVAsRUFBWDtBQUNBLFVBQUdSLElBQUksS0FBRyxJQUFWLEVBQ0ksT0FBT0csS0FBSyxHQUFDLEdBQU4sR0FBVUUsUUFBVixHQUFtQixHQUFuQixHQUF1QkUsTUFBOUIsQ0FESixLQUVLLElBQUlQLElBQUksS0FBRyxNQUFYLEVBQWtCO0FBQ25CLGVBQU9PLE1BQU0sR0FBQyxHQUFQLEdBQVdGLFFBQVgsR0FBb0IsR0FBcEIsR0FBd0JGLEtBQS9CLENBREMsS0FHRCxPQUFPRSxRQUFRLEdBQUMsR0FBVCxHQUFhRixLQUFiLEdBQW1CLEdBQW5CLEdBQXVCSSxNQUE5QjtBQUNQOzs7Ozs7QUFHTDVQLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjhOLElBQWpCLEM7Ozs7Ozs7Ozs7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsOEQ7Ozs7Ozs7Ozs7O0FDdkJBL04sTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSTZQLFdBQVMsRUFDVCxDQUNJO0FBQUVDLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FESixFQUVJO0FBQUVGLFVBQU0sRUFBRSxZQUFWO0FBQXdCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlCQUFQO0FBQTBCQyxRQUFFLEVBQUU7QUFBOUI7QUFBcEMsR0FGSixFQUdJO0FBQUVILFVBQU0sRUFBRSxVQUFWO0FBQXNCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBbEMsR0FISixFQUlJO0FBQUVGLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FKSixDQUZKO0FBUUlFLFdBQVMsRUFDVCxDQUNJO0FBQUVKLFVBQU0sRUFBRSxTQUFWO0FBQXFCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBakMsR0FESixFQUVJO0FBQUVGLFVBQU0sRUFBRSxrQkFBVjtBQUE4QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyx3QkFBUDtBQUFpQ0csU0FBRyxFQUFFO0FBQXRDO0FBQTFDLEdBRkosRUFHSTtBQUFFTCxVQUFNLEVBQUUsc0JBQVY7QUFBa0NDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUE5QyxHQUhKLEVBSUk7QUFBRUYsVUFBTSxFQUFFLFFBQVY7QUFBb0JDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUMsV0FBUDtBQUFvQkcsU0FBRyxFQUFFO0FBQXpCO0FBQWhDLEdBSkosRUFLSTtBQUFFTCxVQUFNLEVBQUUsUUFBVjtBQUFvQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxXQUFQO0FBQW9CRyxTQUFHLEVBQUU7QUFBekI7QUFBaEMsR0FMSixDQVRKO0FBZ0JJQyx5QkFBdUIsRUFBRSxFQWhCN0I7QUFpQklDLGNBQVksRUFBRyxjQWpCbkI7QUFrQklDLGVBQWEsRUFBRyxZQWxCcEI7QUFtQklDLGlCQUFlLEVBQUcsY0FuQnRCO0FBb0JJQyxlQUFhLEVBQUcsa0JBcEJwQjtBQXFCSUMsZ0JBQWMsRUFBRyxnQkFyQnJCO0FBc0JJQyxhQUFXLEVBQUUsYUF0QmpCO0FBdUJJQyw4QkFBNEIsRUFBRSxvQkF2QmxDO0FBd0JJQyxxQkFBbUIsRUFBRSwyQkF4QnpCO0FBeUJJQyw4QkFBNEIsRUFBRyxFQXpCbkM7QUEwQklDLGlCQUFlLEVBQUcsYUExQnRCO0FBMkJJQyxZQUFVLEVBQUUsMEJBM0JoQjtBQTRCSUMsWUFBVSxFQUFFLHNCQTVCaEI7QUE2QklDLFFBQU0sRUFBRSxrU0E3Qlo7QUE4QklDLFlBQVUsRUFBRSx1QkE5QmhCO0FBK0JJQyxRQUFNLEVBQUUsK2NBL0JaO0FBZ0NJQyx3QkFBc0IsRUFBRSwwQ0FoQzVCO0FBaUNJQyx3QkFBc0IsRUFBRSxpREFqQzVCO0FBa0NJQyxrQkFBZ0IsRUFBRSw0QkFsQ3RCO0FBbUNJQyxnQkFBYyxFQUFFLDJpQ0FuQ3BCO0FBb0NJQyxrQkFBZ0IsRUFBRSwrRkFwQ3RCO0FBcUNJQyxhQUFXLEVBQUU7QUFyQ2pCLENBREEsQzs7Ozs7Ozs7Ozs7QUNBQTFSLE1BQU0sQ0FBQ0MsT0FBUCxHQUNBO0FBQ0k2UCxXQUFTLEVBQ1QsQ0FDSTtBQUFFQyxVQUFNLEVBQUUsU0FBVjtBQUFxQkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBakMsR0FESixFQUVJO0FBQUVMLFVBQU0sRUFBRSxXQUFWO0FBQXVCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLFNBQVA7QUFBa0JDLFFBQUUsRUFBQyxlQUFyQjtBQUFzQzVMLFdBQUssRUFBQztBQUE1QztBQUFuQyxHQUZKLEVBR0k7QUFBRXlMLFVBQU0sRUFBRSxZQUFWO0FBQXdCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlCQUFQO0FBQTBCQyxRQUFFLEVBQUU7QUFBOUI7QUFBcEMsR0FISixFQUlJO0FBQUVILFVBQU0sRUFBRSxVQUFWO0FBQXNCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDO0FBQVA7QUFBbEMsR0FKSixDQUZKO0FBUUlFLFdBQVMsRUFDVCxDQUNJO0FBQUVKLFVBQU0sRUFBRSxNQUFWO0FBQWtCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLGlFQUFQO0FBQTBFM0wsV0FBSyxFQUFDO0FBQWhGO0FBQTlCLEdBREosRUFFSTtBQUFFeUwsVUFBTSxFQUFFLFNBQVY7QUFBcUJDLGNBQVUsRUFBRTtBQUFFQyxVQUFJLEVBQUM7QUFBUDtBQUFqQyxHQUZKLEVBR0k7QUFBRUYsVUFBTSxFQUFFLGtCQUFWO0FBQThCQyxjQUFVLEVBQUU7QUFBRUMsVUFBSSxFQUFDLHdCQUFQO0FBQWlDRyxTQUFHLEVBQUU7QUFBdEM7QUFBMUMsR0FISixFQUlJO0FBQUVMLFVBQU0sRUFBRSxzQkFBVjtBQUFrQ0MsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQztBQUFQO0FBQTlDLEdBSkosRUFLSTtBQUFFRixVQUFNLEVBQUUsV0FBVjtBQUF1QkMsY0FBVSxFQUFFO0FBQUVDLFVBQUksRUFBQyxlQUFQO0FBQXdCRyxTQUFHLEVBQUU7QUFBN0I7QUFBbkMsR0FMSixDQVRKO0FBZ0JJdUIsK0JBQTZCLEVBQUUsQ0FoQm5DO0FBaUJJdEIseUJBQXVCLEVBQUUsQ0FqQjdCO0FBa0JJUyw4QkFBNEIsRUFBRyxDQWxCbkM7QUFtQklSLGNBQVksRUFBRyxjQW5CbkI7QUFvQklDLGVBQWEsRUFBRyxZQXBCcEI7QUFxQklDLGlCQUFlLEVBQUcsY0FyQnRCO0FBc0JJQyxlQUFhLEVBQUcsa0JBdEJwQjtBQXVCSUMsZ0JBQWMsRUFBRyxnQkF2QnJCO0FBd0JJa0Isb0JBQWtCLEVBQUcsb0JBeEJ6QjtBQXlCSUMsZUFBYSxFQUFHLGVBekJwQjtBQTBCSUMsa0JBQWdCLEVBQUcsa0JBMUJ2QjtBQTJCSUMsZ0JBQWMsRUFBRyxrQkEzQnJCO0FBNEJJQyxjQUFZLEVBQUcsbUJBNUJuQjtBQTZCSXJCLGFBQVcsRUFBRSxhQTdCakI7QUE4QklzQixtQkFBaUIsRUFBRSxpQkE5QnZCO0FBK0JJckIsOEJBQTRCLEVBQUUsb0JBL0JsQztBQWdDSUMscUJBQW1CLEVBQUUsMkJBaEN6QjtBQWlDSXFCLFdBQVMsRUFBRSxlQWpDZjtBQWtDSW5CLGlCQUFlLEVBQUcsYUFsQ3RCO0FBbUNJQyxZQUFVLEVBQUUsMEJBbkNoQjtBQW9DSW1CLGFBQVcsRUFBRSxnQkFwQ2pCO0FBcUNJbEIsWUFBVSxFQUFFLHNCQXJDaEI7QUFzQ0lDLFFBQU0sRUFBRSxtU0F0Q1o7QUF1Q0lDLFlBQVUsRUFBRSx1QkF2Q2hCO0FBd0NJQyxRQUFNLEVBQUUsMmZBeENaO0FBeUNJZ0IsaUJBQWUsRUFBRSxnQ0F6Q3JCO0FBMENJQyxxQkFBbUIsRUFBRSxnQ0ExQ3pCO0FBMkNJaEIsd0JBQXNCLEVBQUUsMENBM0M1QjtBQTRDSUMsd0JBQXNCLEVBQUUsaURBNUM1QjtBQTZDSUMsa0JBQWdCLEVBQUUsNEJBN0N0QjtBQThDSUMsZ0JBQWMsRUFBRSwwN0NBOUNwQjtBQStDSUMsa0JBQWdCLEVBQUUsK0ZBL0N0QjtBQWdESWEsZUFBYSxFQUFFLGlDQWhEbkI7QUFpRElaLGFBQVcsRUFBRSx5QkFqRGpCO0FBa0RJYSxrQkFBZ0IsRUFBRTtBQWxEdEIsQ0FEQSxDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0FBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQSxJQUFNbEQsSUFBSSxHQUFDM08sa0VBQWMsQ0FBQyxDQUFELENBQXpCOztBQUNBLElBQU04UixjQUFjLEdBQUcxUywrREFBUSxJQUFjLEdBQUNXLHlEQUFmLEdBQXFCLFVBQXJCLEdBQWdDNE8sSUFBaEMsR0FBcUMsS0FBdEMsQ0FBOUIsQyxDQUVBOzs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBR0E7O0FBQ0EsSUFBTW9ELEdBQUcsR0FBRzNTLG1FQUFRLElBQWEsR0FBQ3VQLElBQWQsR0FBbUIsVUFBcEIsQ0FBbkI7O0FBQ0EsSUFBTXFELFFBQVEsR0FBRzVTLGdFQUFRLElBQWEsR0FBQ3VQLElBQWQsR0FBbUIsT0FBcEIsQ0FBeEI7O0FBRUEsSUFBTXNELFdBQVcsR0FBR0MsUUFBUSxDQUFDQyxjQUFULENBQXdCLFVBQXhCLENBQXBCO0FBRUFDLHFFQUFRO0FBRVIsSUFBSUMsTUFBSjs7QUFDQSxJQUFNQyxVQUFVO0FBQUEscUVBQUc7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUlJQyxpRUFBUyxFQUpiOztBQUFBO0FBSVhGLGtCQUpXOztBQUFBLGdCQUtQQSxNQUxPO0FBQUE7QUFBQTtBQUFBOztBQU1QRyw0RUFBVSxDQUFDUCxXQUFELEVBQWMsR0FBZCxFQUFtQkYsR0FBRyxDQUFDbEwsV0FBdkIsRUFBb0MsRUFBcEMsRUFBd0MsQ0FBQyxPQUFELENBQXhDLENBQVY7QUFOTztBQUFBOztBQUFBO0FBQUE7QUFBQSxtQkFVaUI0TCxvRUFBWSxFQVY3Qjs7QUFBQTtBQVVEQyx1QkFWQzs7QUFXUCxnQkFBR0EsV0FBSCxFQUNBO0FBQ0lDLHdGQUFVLENBQUMsU0FBRCxFQUFZO0FBQUVDLHVCQUFPLEVBQUVaLFFBQVEsQ0FBQ3BILGdCQUFwQjtBQUFzQ2lJLHFCQUFLLEVBQUM7QUFBNUMsZUFBWixDQUFWLENBREosQ0FDdUY7O0FBQzdFQyxrQkFGVixHQUVlQyx5RUFBUyxDQUFDLE1BQUQsRUFBUyxJQUFULENBRnhCO0FBR1VDLHNCQUhWLEdBR21CRixJQUFJLENBQUNHLE1BQUwsR0FBWSxVQUgvQjtBQUlJQyxvQkFBTSxDQUFDQyxRQUFQLENBQWdCQyxNQUFoQixDQUF1QixNQUFJdEIsY0FBYyxDQUFDa0IsUUFBRCxDQUF6QztBQUNILGFBTkQsTUFRQTtBQUNRSyxtQkFEUixHQUNjQyxrRUFBWSxFQUQxQjs7QUFFSSxrQkFBR0QsS0FBSyxJQUFJQSxLQUFLLENBQUNFLENBQU4sS0FBVWhHLFNBQXRCLEVBQ0E7QUFDVWlHLG1CQURWLEdBQ2dCLElBQUlDLGNBQUosRUFEaEI7QUFFSUQsbUJBQUcsQ0FBQ0UsSUFBSixDQUFTLE1BQVQsRUFBaUJsVSwwREFBTSxHQUFDNlMsTUFBTSxDQUFDdk4sVUFBZCxHQUF5QnVOLE1BQU0sQ0FBQy9NLHVCQUFqRDs7QUFDQWtPLG1CQUFHLENBQUNHLGtCQUFKLEdBQXlCLFlBQ3pCO0FBQ0ksc0JBQUksS0FBS0MsVUFBTCxJQUFtQkgsY0FBYyxDQUFDSSxJQUF0QyxFQUNBO0FBQ0ksd0JBQUlDLFFBQVEsR0FBQ0MsSUFBSSxDQUFDQyxLQUFMLENBQVcsS0FBS0MsWUFBaEIsQ0FBYjs7QUFDQSx3QkFBSSxLQUFLaEIsTUFBTCxLQUFnQixHQUFoQixJQUF1QixDQUFDdkYsMkRBQU8sQ0FBQ29HLFFBQVEsQ0FBQ0ksTUFBVixDQUEvQixJQUFvRCxDQUFDeEcsMkRBQU8sQ0FBQ29HLFFBQVEsQ0FBQ0ssYUFBVixDQUE1RCxJQUF3RixDQUFDekcsMkRBQU8sQ0FBQ29HLFFBQVEsQ0FBQ00sS0FBVixDQUFwRyxFQUNBO0FBQ0ksMEJBQUlDLGdCQUFnQixHQUFDeEYsSUFBSSxDQUFDeUYsR0FBTCxFQUFyQjtBQUNBLDBCQUFHUixRQUFRLENBQUNLLGFBQVQsQ0FBdUJJLFFBQXZCLENBQWdDLE1BQWhDLENBQUgsRUFDSUYsZ0JBQWdCLElBQUVHLFFBQVEsQ0FBQ1YsUUFBUSxDQUFDSyxhQUFWLEVBQXdCLEVBQXhCLENBQVIsR0FBb0MsRUFBcEMsR0FBdUMsSUFBdkMsR0FBNEMsSUFBOUQsQ0FESixLQUdJRSxnQkFBZ0IsSUFBRUcsUUFBUSxDQUFDVixRQUFRLENBQUNLLGFBQVYsRUFBd0IsRUFBeEIsQ0FBUixHQUFvQyxJQUFwQyxHQUF5QyxJQUEzRDtBQUNKTSx3RkFBVSxDQUFDWCxRQUFRLENBQUNJLE1BQVYsRUFBa0JKLFFBQVEsQ0FBQ00sS0FBM0IsRUFBa0NDLGdCQUFsQyxDQUFWO0FBQ0FLLGtHQUFZLENBQUMsWUFBRCxDQUFaLENBUEosQ0FPK0I7O0FBQzNCbEMsc0ZBQVUsQ0FBQ1AsV0FBRCxFQUFjLEdBQWQsRUFBbUJELFFBQVEsQ0FBQ2xJLGlCQUE1QixFQUErQyxFQUEvQyxFQUFtRCxDQUFDLFNBQUQsQ0FBbkQsQ0FBVixDQVJKLENBUThFOztBQUMxRW9KLDRCQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCLE1BQUl0QixjQUFjLENBQUNsQyxZQUExQyxFQVRKLENBUzREO0FBQzNELHFCQVhELE1BWUssSUFBSSxDQUFDLEtBQUtxRCxNQUFMLEtBQWdCLEdBQWhCLElBQXVCLEtBQUtBLE1BQUwsS0FBZ0IsR0FBeEMsS0FBZ0RhLFFBQVEsQ0FBQ2EsTUFBVCxJQUFtQnBILFNBQXZFLEVBQ0w7QUFDSywwQkFBR3FILEtBQUssQ0FBQ0MsT0FBTixDQUFjZixRQUFRLENBQUNhLE1BQXZCLENBQUgsRUFDR2IsUUFBUSxDQUFDYSxNQUFULEdBQWtCYixRQUFRLENBQUNhLE1BQVQsQ0FBZ0J4RyxJQUFoQixDQUFxQixNQUFyQixDQUFsQixDQURILEtBR0cyRixRQUFRLENBQUNhLE1BQVQsR0FBa0I1QyxHQUFHLENBQUNsTCxXQUF0QjtBQUNKMkwsc0ZBQVUsQ0FBQ1AsV0FBRCxFQUFjLEdBQWQsRUFBbUI2QixRQUFRLENBQUNhLE1BQTVCLEVBQW9DLEVBQXBDLEVBQXdDLENBQUMsT0FBRCxDQUF4QyxDQUFWO0FBQ0gscUJBUEksTUFTRG5DLGdFQUFVLENBQUNQLFdBQUQsRUFBYyxHQUFkLEVBQW1CRCxRQUFRLENBQUN0SCx3QkFBVCxDQUFrQzBELE9BQWxDLENBQTBDLE1BQTFDLEVBQWtEMEQsY0FBYyxDQUFDOUIsY0FBakUsQ0FBbkIsRUFBcUcsRUFBckcsRUFBeUcsQ0FBQyxPQUFELENBQXpHLENBQVY7QUFDUDtBQUNKLGlCQTVCRDs7QUE2QkFxRCxxQkFBSyxDQUFDeUIsY0FBTixHQUFxQkMseUVBQWlCLENBQUMxQyxNQUFELENBQXRDLENBaENKLENBaUNJOztBQUNBZ0IscUJBQUssR0FBQzJCLHdFQUFnQixDQUFDM0IsS0FBRCxDQUF0QjtBQUNBRyxtQkFBRyxDQUFDeUIsZ0JBQUosQ0FBcUIsY0FBckIsRUFBcUMsa0JBQXJDO0FBQ0F6QixtQkFBRyxDQUFDMEIsSUFBSixDQUFTbkIsSUFBSSxDQUFDb0IsU0FBTCxDQUFlOUIsS0FBZixDQUFUO0FBQ0g7QUFDSjs7QUE1RE07QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQWlFWGIsNEVBQVUsQ0FBQ1AsV0FBRCxFQUFjLEdBQWQsRUFBbUJGLEdBQUcsQ0FBQ2xMLFdBQXZCLEVBQW9DLEVBQXBDLEVBQXdDLENBQUMsT0FBRCxDQUF4QyxDQUFWOztBQWpFVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFWeUwsVUFBVTtBQUFBO0FBQUE7QUFBQSxHQUFoQjs7QUFvRUFBLFVBQVUsRzs7Ozs7Ozs7Ozs7O0FDbEdWO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVPLElBQU1LLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUMxTSxJQUFELEVBQU9tUCxJQUFQLEVBQzFCO0FBQ0lDLGNBQVksQ0FBQ0MsT0FBYixDQUFxQnJQLElBQXJCLEVBQTJCOE4sSUFBSSxDQUFDb0IsU0FBTCxDQUFlQyxJQUFmLENBQTNCO0FBQ0gsQ0FITTtBQUtBLElBQU1yQyxTQUFTLEdBQUcsU0FBWkEsU0FBWSxDQUFDOU0sSUFBRCxFQUN6QjtBQUFBLE1BRGdDc1AsSUFDaEMsdUVBRHFDLEtBQ3JDO0FBQ0ksTUFBR0EsSUFBSCxFQUNJLE9BQU94QixJQUFJLENBQUNDLEtBQUwsQ0FBV3FCLFlBQVksQ0FBQ0csT0FBYixDQUFxQnZQLElBQXJCLENBQVgsQ0FBUCxDQURKLEtBR0ksT0FBT29QLFlBQVksQ0FBQ0csT0FBYixDQUFxQnZQLElBQXJCLENBQVA7QUFDUCxDQU5NO0FBUUEsSUFBTXlPLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUN6TyxJQUFELEVBQzVCO0FBQ0lvUCxjQUFZLENBQUNJLFVBQWIsQ0FBd0J4UCxJQUF4QjtBQUNILENBSE0sQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NDZFA7O0FBQ08sSUFBTXVNLFVBQVUsR0FBRyxTQUFiQSxVQUFhLENBQUNrRCxTQUFELEVBQVlDLE9BQVosRUFDMUI7QUFBQSxNQUQrQ0MsVUFDL0MsdUVBRDBELEVBQzFEO0FBQUEsTUFEOERDLEtBQzlELHVFQURvRSxFQUNwRTtBQUFBLE1BRHdFQyxRQUN4RSx1RUFEaUYsRUFDakY7QUFBQSxNQURxRkMsYUFDckYsdUVBRG1HLEVBQ25HO0FBQUEsTUFEdUczSCxPQUN2Ryx1RUFEK0csSUFDL0c7QUFDSSxNQUFHViwyREFBTyxDQUFDaUksT0FBRCxDQUFQLElBQW9CakksMkRBQU8sQ0FBQ2dJLFNBQUQsQ0FBOUIsRUFDSSxPQUFPLEtBQVAsQ0FESixLQUdBO0FBQ0ksUUFBTU0sVUFBVSxHQUFDOUQsUUFBUSxDQUFDK0QsYUFBVCxDQUF1Qk4sT0FBdkIsQ0FBakI7QUFFQSxRQUFHLENBQUNqSSwyREFBTyxDQUFDbUksS0FBRCxDQUFYLEVBQW1CO0FBQ2ZHLGdCQUFVLENBQUN4RyxFQUFYLEdBQWNxRyxLQUFkOztBQUVKLFFBQUdqQixLQUFLLENBQUNDLE9BQU4sQ0FBY2lCLFFBQWQsS0FBMkJBLFFBQVEsQ0FBQ2xJLE1BQVQsSUFBaUIsQ0FBL0MsRUFDQTtBQUNJLFdBQUksSUFBSXNJLENBQVIsSUFBYUosUUFBYjtBQUNJRSxrQkFBVSxDQUFDRyxTQUFYLENBQXFCQyxHQUFyQixDQUF5Qk4sUUFBUSxDQUFDSSxDQUFELENBQWpDO0FBREo7QUFFSDs7QUFFRCxRQUFHLFFBQU9ILGFBQVAsTUFBeUIsUUFBNUIsRUFBc0M7QUFDdEM7QUFDSSxhQUFJLElBQUlNLFlBQVIsSUFBd0JOLGFBQXhCO0FBQ0lDLG9CQUFVLENBQUNNLFlBQVgsQ0FBd0JELFlBQXhCLEVBQXNDTixhQUFhLENBQUNNLFlBQUQsQ0FBbkQ7QUFESjtBQUVIOztBQUVELFFBQUcsQ0FBQzNJLDJEQUFPLENBQUNrSSxVQUFELENBQVgsRUFDSUksVUFBVSxDQUFDTyxTQUFYLEdBQXFCWCxVQUFVLENBQUN4SCxPQUFYLENBQW1CLEtBQW5CLEVBQXlCLE1BQXpCLENBQXJCLENBbkJSLENBbUI4RDs7QUFFMUQsUUFBR0EsT0FBSCxFQUNJc0gsU0FBUyxDQUFDYSxTQUFWLEdBQW9CLEVBQXBCO0FBQ0piLGFBQVMsQ0FBQ2MsV0FBVixDQUFzQlIsVUFBdEI7QUFDSDtBQUNKLENBOUJNLEM7Ozs7Ozs7Ozs7OztBQ0hQO0FBQUE7QUFBQTtBQUFBO0FBRU8sSUFBTTVELFFBQVEsR0FBRyxTQUFYQSxRQUFXLEdBQ3hCO0FBQ0lxRSxTQUFPLENBQUNDLEdBQVIsQ0FBWSxpTEFBWjtBQUNBLFNBQU8sSUFBUDtBQUNILENBSk07QUFNQSxJQUFNQyxpQkFBaUIsR0FBRyxTQUFwQkEsaUJBQW9CLENBQUMxRCxNQUFELEVBQVMyRCxjQUFULEVBQ2pDO0FBQ0ksTUFBTUMsSUFBSSxHQUFDM0UsUUFBUSxDQUFDQyxjQUFULENBQXdCLGlCQUF4QixDQUFYO0FBQ0EsTUFBTWEsUUFBUSxHQUFDQyxNQUFNLEdBQUMsVUFBdEI7QUFDQTRELE1BQUksQ0FBQ3RILElBQUwsR0FBVSxNQUFJcUgsY0FBYyxDQUFDNUQsUUFBRCxDQUE1QjtBQUNILENBTE0sQzs7Ozs7Ozs7Ozs7O0FDUlA7QUFBQTtBQUFBO0FBQUE7Q0FFQTs7QUFDTyxJQUFNTSxZQUFZLEdBQUcsU0FBZkEsWUFBZSxHQUM1QjtBQUNJLE1BQUc1RiwyREFBTyxDQUFDeUYsUUFBUSxDQUFDMkQsTUFBVixDQUFWLEVBQ0ksT0FBTyxLQUFQO0FBRUosTUFBTUMsVUFBVSxHQUFHNUQsUUFBUSxDQUFDMkQsTUFBVCxDQUFnQmpKLFNBQWhCLENBQTBCLENBQTFCLEVBQTZCbUosS0FBN0IsQ0FBbUMsR0FBbkMsQ0FBbkI7QUFDQSxNQUFHLENBQUNwQyxLQUFLLENBQUNDLE9BQU4sQ0FBY2tDLFVBQWQsQ0FBRCxJQUE4QkEsVUFBVSxDQUFDbkosTUFBWCxLQUFvQixDQUFyRCxFQUNJLE9BQU8sS0FBUDtBQUVKLE1BQUlxSixLQUFKO0FBQUEsTUFBVzVELEtBQUssR0FBQyxFQUFqQjs7QUFDQSxPQUFJLElBQUk2QyxDQUFSLElBQWFhLFVBQWIsRUFDQTtBQUNJRSxTQUFLLEdBQUdGLFVBQVUsQ0FBQ2IsQ0FBRCxDQUFWLENBQWNjLEtBQWQsQ0FBb0IsR0FBcEIsQ0FBUjtBQUNBLFFBQUdDLEtBQUssQ0FBQ3JKLE1BQU4sS0FBZSxDQUFsQixFQUNJeUYsS0FBSyxDQUFDNEQsS0FBSyxDQUFDLENBQUQsQ0FBTixDQUFMLEdBQWdCQyxTQUFTLENBQUNELEtBQUssQ0FBQyxDQUFELENBQU4sQ0FBekI7QUFDUDs7QUFDRCxTQUFPNUQsS0FBUDtBQUNILENBakJNLEM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0hQO0FBQ0EsSUFBTTFFLElBQUksR0FBQzNPLGtFQUFjLENBQUMsQ0FBRCxDQUF6Qjs7QUFFQSxJQUFNNFcsY0FBYyxHQUFHeFgsK0RBQVEsSUFBaUIsR0FBQ1cseURBQWxCLEdBQXdCLFVBQXhCLEdBQW1DNE8sSUFBbkMsR0FBd0MsS0FBekMsQ0FBOUI7O0FBRUE7QUFFQTtDQUdBO0FBQ0E7O0FBQ08sSUFBTTRELFNBQVM7QUFBQSxxRUFBSTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsNkNBRWYsSUFBSTRFLE9BQUosQ0FBWSxVQUFDQyxPQUFELEVBQVVDLE1BQVYsRUFDbkI7QUFDSSxrQkFBTTdELEdBQUcsR0FBRyxJQUFJQyxjQUFKLEVBQVo7QUFDQUQsaUJBQUcsQ0FBQ0UsSUFBSixDQUFTLEtBQVQsRUFBZ0JsVSwwREFBTSxHQUFDLGlCQUF2Qjs7QUFDQWdVLGlCQUFHLENBQUM4RCxNQUFKLEdBQWE7QUFBQSx1QkFBTUYsT0FBTyxDQUFDckQsSUFBSSxDQUFDQyxLQUFMLENBQVdSLEdBQUcsQ0FBQ1MsWUFBZixDQUFELENBQWI7QUFBQSxlQUFiOztBQUNBVCxpQkFBRyxDQUFDK0QsT0FBSixHQUFjO0FBQUEsdUJBQU1GLE1BQU0sQ0FBQzdELEdBQUcsQ0FBQ2dFLFVBQUwsQ0FBWjtBQUFBLGVBQWQ7O0FBQ0FoRSxpQkFBRyxDQUFDMEIsSUFBSjtBQUNILGFBUE0sQ0FGZTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFKOztBQUFBLGtCQUFUM0MsU0FBUztBQUFBO0FBQUE7QUFBQSxHQUFmO0FBWUEsSUFBTXdDLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBb0IsR0FDakM7QUFDSTtBQUNBLE1BQU0wQyxTQUFTLEdBQUMsSUFBSTVJLElBQUosR0FBVzZJLGlCQUFYLEtBQStCLENBQUMsQ0FBaEQ7QUFDQSxNQUFHRCxTQUFTLEdBQUdqUixrRUFBWixJQUFpQ2lSLFNBQVMsR0FBR2xSLGtFQUFoRCxFQUNJLE9BQU8sQ0FBUCxDQURKLEtBRUssT0FBT2tSLFNBQVA7QUFDUixDQVBNLEMsQ0FTUDtBQUNBOztBQUNPLElBQU1FLFdBQVcsR0FBRyxTQUFkQSxXQUFjLENBQUNDLFFBQUQsRUFBV0MsUUFBWCxFQUMzQjtBQUNJLE1BQU1DLEtBQUssR0FBQ0YsUUFBUSxHQUFDdEosSUFBSSxDQUFDRSxLQUFMLENBQVdGLElBQUksQ0FBQ0csTUFBTCxNQUFlb0osUUFBUSxHQUFDRCxRQUF4QixDQUFYLENBQXJCO0FBQ0EsTUFBTUcsT0FBTyxHQUFDLG9EQUFkO0FBQ0EsTUFBTUMsTUFBTSxHQUFDLDhCQUFiO0FBQ0EsTUFBSS9WLFFBQVEsR0FBQzhWLE9BQU8sQ0FBQ3pKLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY3NKLE9BQU8sQ0FBQ25LLE1BQWpDLENBQUQsQ0FBcEI7O0FBQ0EsT0FBSSxJQUFJc0ksQ0FBQyxHQUFDLENBQVYsRUFBWUEsQ0FBQyxHQUFFNEIsS0FBSyxHQUFDLENBQXJCLEVBQXdCNUIsQ0FBQyxFQUF6QixFQUNBO0FBQ0ksUUFBSUEsQ0FBQyxHQUFHLENBQUwsS0FBVyxDQUFkLEVBQ0lqVSxRQUFRLElBQUUrVixNQUFNLENBQUMxSixJQUFJLENBQUNFLEtBQUwsQ0FBV0YsSUFBSSxDQUFDRyxNQUFMLEtBQWN1SixNQUFNLENBQUNwSyxNQUFoQyxDQUFELENBQWhCLENBREosS0FHSTNMLFFBQVEsSUFBRThWLE9BQU8sQ0FBQ3pKLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY3NKLE9BQU8sQ0FBQ25LLE1BQWpDLENBQUQsQ0FBakI7QUFDUDs7QUFDRDNMLFVBQVEsSUFBRThWLE9BQU8sQ0FBQ3pKLElBQUksQ0FBQ0UsS0FBTCxDQUFXRixJQUFJLENBQUNHLE1BQUwsS0FBY3NKLE9BQU8sQ0FBQ25LLE1BQWpDLENBQUQsQ0FBakI7QUFDQSxTQUFPM0wsUUFBUDtBQUNILENBZk0sQyxDQWlCUDtBQUNBOztBQUNPLElBQU13UyxVQUFVLEdBQUcsU0FBYkEsVUFBYSxDQUFDUCxNQUFELEVBQVNFLEtBQVQsRUFBZ0I2RCxVQUFoQixFQUMxQjtBQUNJLE1BQU1DLFdBQVcsR0FDakI7QUFDSTFJLE1BQUUsRUFBRTBFLE1BRFI7QUFFSUUsU0FBSyxFQUFFQSxLQUZYO0FBR0krRCxZQUFRLEVBQUVGO0FBSGQsR0FEQTtBQU1BdEYsc0VBQVUsQ0FBQyxNQUFELEVBQVN1RixXQUFULENBQVY7QUFDSCxDQVRNLEMsQ0FXUDtBQUNBOztBQUNPLElBQU1sRCxnQkFBZ0IsR0FBRyxTQUFuQkEsZ0JBQW1CLENBQUMzQixLQUFELEVBQ2hDO0FBQ0ksTUFBTStFLFVBQVUsR0FBQ3JGLG1FQUFTLENBQUMsWUFBRCxDQUExQjs7QUFDQSxNQUFHLENBQUNyRiwyREFBTyxDQUFDMEssVUFBRCxDQUFYLEVBQ0E7QUFDSSxRQUFNQyxNQUFNLEdBQUN0RSxJQUFJLENBQUNDLEtBQUwsQ0FBV29FLFVBQVgsQ0FBYjs7QUFDQSxRQUFHLENBQUMxSywyREFBTyxDQUFDMkssTUFBTSxDQUFDRixRQUFSLENBQVIsSUFBNkIsQ0FBQ3pLLDJEQUFPLENBQUMySyxNQUFNLENBQUNDLGdCQUFSLENBQXJDLElBQWtFLENBQUM1SywyREFBTyxDQUFDMkssTUFBTSxDQUFDRSxlQUFSLENBQTFFLElBQXNHLENBQUM3SywyREFBTyxDQUFDMkssTUFBTSxDQUFDRyxXQUFSLENBQWpILEVBQ0E7QUFDSW5GLFdBQUssQ0FBQzhFLFFBQU4sR0FBZUUsTUFBTSxDQUFDRixRQUF0QjtBQUNBOUUsV0FBSyxDQUFDaUYsZ0JBQU4sR0FBdUJELE1BQU0sQ0FBQ0MsZ0JBQTlCO0FBQ0FqRixXQUFLLENBQUNrRixlQUFOLEdBQXNCRixNQUFNLENBQUNFLGVBQTdCO0FBQ0FsRixXQUFLLENBQUNtRixXQUFOLEdBQWtCSCxNQUFNLENBQUNHLFdBQXpCO0FBQ0g7QUFDSjs7QUFDRCxTQUFPbkYsS0FBUDtBQUNILENBZk0sQyxDQWlCUDtBQUNBOztBQUNPLElBQU1aLFlBQVk7QUFBQSxzRUFBRztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFPUSxrQkFBUCw4REFBYyxFQUFkO0FBQWtCd0YsMEJBQWxCO0FBQWtDN0YsbUJBQWxDO0FBQTJDOEYscUJBQTNDO0FBQUEsOENBRWpCLElBQUl2QixPQUFKLENBQVksVUFBQ0MsT0FBRCxFQUFVQyxNQUFWLEVBQ25CO0FBQ0ksa0JBQU1zQixTQUFTLEdBQUM1RixtRUFBUyxDQUFDLE1BQUQsQ0FBekI7O0FBQ0Esa0JBQUdyRiwyREFBTyxDQUFDaUwsU0FBRCxDQUFWLEVBQ0E7QUFDSUMsNEJBQVksQ0FBQ0gsY0FBRCxFQUFpQjdGLE9BQWpCLEVBQTBCOEYsU0FBMUIsQ0FBWjtBQUNBdEIsdUJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCxlQUpELE1BTUE7QUFDSSxvQkFBTXRFLElBQUksR0FBQ2lCLElBQUksQ0FBQ0MsS0FBTCxDQUFXMkUsU0FBWCxDQUFYOztBQUNBLG9CQUFHakwsMkRBQU8sQ0FBQ29GLElBQUksQ0FBQ3RELEVBQU4sQ0FBUCxJQUFvQjlCLDJEQUFPLENBQUNvRixJQUFJLENBQUNzQixLQUFOLENBQTNCLElBQTJDMUcsMkRBQU8sQ0FBQ29GLElBQUksQ0FBQ3FGLFFBQU4sQ0FBbEQsSUFBcUVyRixJQUFJLENBQUNxRixRQUFMLEdBQWdCdEosSUFBSSxDQUFDeUYsR0FBTCxFQUF4RixFQUNBO0FBQ0lJLHdGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0FrRSw4QkFBWSxDQUFDSCxjQUFELEVBQWlCN0YsT0FBakIsRUFBMEI4RixTQUExQixDQUFaO0FBQ0F0Qix5QkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNILGlCQUxELE1BT0E7QUFDSSxzQkFBTTVELEdBQUcsR0FBRyxJQUFJQyxjQUFKLEVBQVo7QUFDQUQscUJBQUcsQ0FBQ0UsSUFBSixDQUFTLEtBQVQsRUFBZ0JsVSwwREFBTSxHQUFDc0YsMkRBQVAsR0FBa0JLLGdFQUFsQixHQUFrQzJOLElBQUksQ0FBQ3NCLEtBQXZEOztBQUNBWixxQkFBRyxDQUFDOEQsTUFBSixHQUFhLFlBQ2I7QUFDSSx3QkFBSXhELFFBQVEsR0FBQ0MsSUFBSSxDQUFDQyxLQUFMLENBQVdSLEdBQUcsQ0FBQ1MsWUFBZixDQUFiOztBQUNBLHdCQUFJVCxHQUFHLENBQUNQLE1BQUosS0FBZSxHQUFmLElBQXNCYSxRQUFRLENBQUMrRSxPQUEvQixJQUEwQy9FLFFBQVEsQ0FBQ3RFLEVBQVQsSUFBZWpDLFNBQTdELEVBQ0E7QUFDSSwwQkFBR3VHLFFBQVEsQ0FBQ3RFLEVBQVQsS0FBY3NELElBQUksQ0FBQ3RELEVBQXRCLEVBQ0E7QUFDSXNELDRCQUFJLENBQUM3TSxJQUFMLEdBQVU2TixRQUFRLENBQUM3TixJQUFuQjtBQUNBNk0sNEJBQUksQ0FBQ2dHLFFBQUwsR0FBY2hGLFFBQVEsQ0FBQ2dGLFFBQXZCO0FBQ0FoRyw0QkFBSSxDQUFDZ0MsY0FBTCxHQUFvQmhCLFFBQVEsQ0FBQ2dCLGNBQTdCO0FBQ0FoQyw0QkFBSSxDQUFDRyxNQUFMLEdBQVlhLFFBQVEsQ0FBQ2IsTUFBckIsQ0FKSixDQUlnQzs7QUFDNUJOLDRGQUFVLENBQUMsTUFBRCxFQUFTRyxJQUFULENBQVYsQ0FMSixDQU1JOztBQUNBLDRCQUFHZ0IsUUFBUSxDQUFDYixNQUFULEtBQWtCLE1BQWxCLElBQTRCYSxRQUFRLENBQUNpRixRQUFULElBQXFCLENBQXBELEVBQ0E7QUFDSSw4QkFBTUMsVUFBVSxHQUFDdlosMkRBQU8sR0FBQyxHQUFSLEdBQVltWCxjQUFjLENBQUMzRyxXQUE1QztBQUNBLDhCQUFHaUQsTUFBTSxDQUFDQyxRQUFQLENBQWdCNUQsSUFBaEIsQ0FBcUIwSixPQUFyQixDQUE2QkQsVUFBN0IsTUFBMkMsQ0FBQyxDQUEvQyxFQUNJOUYsTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxNQUFoQixDQUF1QixNQUFJd0QsY0FBYyxDQUFDM0csV0FBbkIsR0FBK0IsWUFBdEQsRUFIUixDQUc0RTs7QUFDeEVtSCxpQ0FBTyxDQUFDLElBQUQsQ0FBUDtBQUNILHlCQU5ELE1BUUE7QUFDSSw4QkFBR25FLE1BQU0sQ0FBQ3JGLE1BQVAsS0FBZ0IsQ0FBaEIsSUFBcUJxRixNQUFNLENBQUNnRyxPQUFQLENBQWVuRixRQUFRLENBQUNiLE1BQXhCLE1BQWtDLENBQUMsQ0FBM0QsRUFDQTtBQUNJMkYsd0NBQVksQ0FBQ0gsY0FBRCxFQUFpQjdGLE9BQWpCLEVBQTBCOEYsU0FBMUIsQ0FBWjtBQUNBdEIsbUNBQU8sQ0FBQyxLQUFELENBQVA7QUFDSCwyQkFKRCxNQU1JQSxPQUFPLENBQUMsSUFBRCxDQUFQO0FBQ1A7QUFDSix1QkF6QkQsTUEyQkE7QUFDSTFDLDhGQUFZLENBQUMsTUFBRCxDQUFaO0FBQ0FrRSxvQ0FBWSxDQUFDSCxjQUFELEVBQWlCN0YsT0FBakIsRUFBMEI4RixTQUExQixDQUFaO0FBQ0F0QiwrQkFBTyxDQUFDLEtBQUQsQ0FBUDtBQUNIO0FBQ0oscUJBbENELE1Bb0NBO0FBQ0kxQyw0RkFBWSxDQUFDLE1BQUQsQ0FBWjtBQUNBa0Usa0NBQVksQ0FBQ0gsY0FBRCxFQUFpQjdGLE9BQWpCLEVBQTBCOEYsU0FBMUIsQ0FBWjtBQUNBdEIsNkJBQU8sQ0FBQyxLQUFELENBQVA7QUFDSDtBQUNKLG1CQTVDRDs7QUE2Q0E1RCxxQkFBRyxDQUFDK0QsT0FBSixHQUFjO0FBQUEsMkJBQU1GLE1BQU0sQ0FBQzdELEdBQUcsQ0FBQ2dFLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBaEUscUJBQUcsQ0FBQzBCLElBQUo7QUFDSDtBQUNKO0FBQ0osYUF0RU0sQ0FGaUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBWnpDLFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNbUcsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQjdGLE9BQWpCLEVBQTBCOEYsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUNoTCwyREFBTyxDQUFDa0YsT0FBRCxDQUFYLEVBQ0lELG9FQUFVLENBQUMsU0FBRCxFQUFZQyxPQUFaLENBQVY7QUFDSixNQUFHLENBQUNsRiwyREFBTyxDQUFDZ0wsU0FBRCxDQUFYLEVBQ0kvRixvRUFBVSxDQUFDLEtBQUQsRUFBUStGLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ2hMLDJEQUFPLENBQUMrSyxjQUFELENBQVgsRUFDSXZGLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBaEIsQ0FBdUJxRixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL2xvZ2luTGluay5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9sb2dpbkxpbmsuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLC8vIGlkZW1cbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLy8gbGltaXRlIGxlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IFdpa2lww6lkaWEgZW4gcXVlc3Rpb25zXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHJlY2V2ZXogY2hhcXVlIGpvdXIgZGUgbm91dmVhdXggcXVpenMgcG91ciB0ZXN0ZXIgdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMuXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIHZvdHJlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIChDdHJsK1YpIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IHNhbnMgdGFyZGVyIHZvdXMgY29ubmVjdGVyIGNpLWRlc3NvdXMgcG91ciBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlcyBxdWl6cyBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGR1IHNpdGUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlcyBxdWl6cyBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCBcIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+LiBFbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdMOpIG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuaWVycyBxdWl6c1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiQmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiA5LFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcIm1vbi1jb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgPHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopPC9zcGFuPiwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9zcGFuPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pICFcIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiBcIlRlc3RlciBXaWtpTGVybmkgZ3JhdHVpdGVtZW50LlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgdW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXMgZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiA8Yj5DJ2VzdCB0b3Vqb3VycyBsZSBjb250ZW51IGRlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaSBjb25jZXJuYW50IGxlcyBcXFwiYm9ubmVzXFxcIiByw6lwb25zZXM8L2I+LiBNYWlzIGxlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbidow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzLCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQ8L2I+Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci4gQ2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIDxiPnRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXo8L2I+IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gR3LDomNlIMOgIGNlIGNvbXB0ZSwgdm91cyBwb3VycmV6IGF1c3NpIDxiPnJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWF1eCBxdWl6czwvYj4gcG91ciBjb250aW51ZXIgw6AgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIkxlcyBkZXJuacOocmVzIGdyYWluZXMgZGUgc2F2b2lyXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXNcIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG59OyIsIi8vIC0tIFBBR0UgUEVSTUVUVEFOVCBERSBURVNURVIgVU4gTElFTiBERSBDT05ORVhJT04gUkXDh1UgUEFSIEUtTUFJTFxuXG4vLy8gVW4gdG9rZW4gZXN0IHRyYW5zbWlzIGVuIHBhcmFtw6h0cmUgZGUgbCdVcmwuIElsIGEgdW5lIHZhbGlkaXTDqSBsaW1pdMOpIGRhbnMgbGUgdGVtcHMuXG4vLy8gRGFucyBjZSBjYXMsIG9uIHBldXQgcmVkaXJpZ2VyIGwndXRpbGlzYXRldXIgdmVycyBsYSBwYWdlIGRlIGNvbm5leGlvbiBwb3VyIG9idGVuaXIgdW4gbm91dmVhdSBsaWVuIGRlIHZhbGlkYXRpb25cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIGNyw6llIHVuZSBzZXNzaW9uIHN1aXZhbnQgbGEgZHVyw6llIHJldG91cm7DqWUgcGFyIGwnQVBJIGV0IHJlZGlyaWdlIGwndXRpbGlzYXRldXIgdmVycyBzYSBwYWdlIGQnYWNjdWVpbFxuLy8vIFVuIHLDqXN1bHRhdCBkZSBxdWl6IHBldXQgYXVzc2kgYXZvaXIgw6l0w6kgZW5yZWdpc3Ryw6kgY8O0dMOpIGNsaWVudCBldCBlc3QgYWxvcnMgw6AgdHJhbnNtZXR0cmUgw6AgbCdBUEkuXG4vLy8gU2kgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCB1bmUgc2Vzc2lvbiBhY3RpdmUgdmFsaWRlLCBjJ2VzdCBxdSdpbCBhIGTDqWrDoCBjbGlxdcOpIHN1ciBsZSBsaWVuLiBPbiBsZSByZWRpcmlnZSDDqWdhbGVtZW50IHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWwuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrQW5zd2VyRGF0YXMsIGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBnZXRUaW1lRGlmZmVyZW5jZSwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcblxuaGVsbG9EZXYoKTtcblxubGV0IGNvbmZpZztcbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gc2kgbCd1dGlsaXNhdGV1ciBlc3QgZMOpasOgIGNvbm5lY3TDqSwgcGFzIGxhIHBlaW5lIGQnYWxsZXIgKyBsb2luIDpcbiAgICAgICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbigpO1xuICAgICAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgeyBtZXNzYWdlOiB0eHRVc2Vycy5hbHJlYWR5Q29ubmVjdGVkLCBjb2xvcjpcImluZm9ybWF0aW9uXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvbWVQYWdlPXVzZXIuc3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ0Zyb250RW5kW2hvbWVQYWdlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuY29ubmVjdGlvbldpdGhMaW5rUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmICFpc0VtcHR5KHJlc3BvbnNlLnVzZXJJZCkgJiYgIWlzRW1wdHkocmVzcG9uc2UuY29ubmV4aW9uVGltZSkgJiYgIWlzRW1wdHkocmVzcG9uc2UudG9rZW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbk1heFRpbWU9RGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuY29ubmV4aW9uVGltZS5lbmRzV2l0aChcImRheXNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb25NYXhUaW1lKz1wYXJzZUludChyZXNwb25zZS5jb25uZXhpb25UaW1lLDEwKSoyNCozNjAwKjEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbk1heFRpbWUrPXBhcnNlSW50KHJlc3BvbnNlLmNvbm5leGlvblRpbWUsMTApKjM2MDAqMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2Vzc2lvbihyZXNwb25zZS51c2VySWQsIHJlc3BvbnNlLnRva2VuLCBjb25uZXhpb25NYXhUaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibGFzdEFuc3dlclwiKTsvLyAhIGltcG9ydGFudCBwb3VyIG5lIHBhcyBlbnJlZ2lzdGVyIHBsdXNpZXVycyBmb2lzIGxlIHLDqXN1bHRhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFVzZXJzLnZhbGlkYXRpb25NZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsvLyBhdSBjYXMgb8O5IGJsb2NhZ2UgcmVkaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdGcm9udEVuZC51c2VySG9tZVBhZ2UpOy8vIGNvbm5leGlvbiBwYXIgbGllbiBuZSBjb25jZXJuZSBxdWUgbGVzIHNpbXBsZXMgXCJ1c2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHRoaXMuc3RhdHVzID09PSA0MDEgfHwgdGhpcy5zdGF0dXMgPT09IDQwMykgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHR4dC5zZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5iYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnRnJvbnRFbmQuY29ubmVjdGlvblBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YXMudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2kgbCd1dGlsaXNhdGV1ciBhIHByw6ljw6lkZW1lbnQgcsOpcG9uZHUgw6AgdW4gcXVpeiwgaidham91dGUgbGVzIGluZm9zIGRlIHNvbiByw6lzdWx0YXQgOlxuICAgICAgICAgICAgICAgICAgICBkYXRhcz1jaGVja0Fuc3dlckRhdGFzKGRhdGFzKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHNlcmEgYmllbnTDtHQgbGlzaWJsZSBzdXIgR2l0bGFiLlxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/loginlink.app.js b/front/public/JS/loginlink.app.js deleted file mode 100644 index 071c378..0000000 --- a/front/public/JS/loginlink.app.js +++ /dev/null @@ -1,872 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/loginlink.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "../lang sync recursive ^\\.\\/.*\\/general$": -/*!**************************************!*\ - !*** ../lang sync ^\.\/.*\/general$ ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./fr/general": "../lang/fr/general.js" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/general$"; - -/***/ }), - -/***/ "../lang sync recursive ^\\.\\/.*\\/user$": -/*!***********************************!*\ - !*** ../lang sync ^\.\/.*\/user$ ***! - \***********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./fr/user": "../lang/fr/user.js" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; - -/***/ }), - -/***/ "../lang/fr/general.js": -/*!*****************************!*\ - !*** ../lang/fr/general.js ***! - \*****************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", - scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", - scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", - serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", - serverErrorAdmin: "Bug de l'application :", - neededParams: "Des paramètres nécessaires manquants sont manquants.", - badUrl: "Tentative d'accès à une page n'existant pas :", - notValidFormat: "Format non valide.", - notAllowed: "Vous n'avez pas les droits nécessaires pour cette action.", - notRequired: "Facultatif.", - updateBtnTxt: "Modifier", - addBtnTxt: "Ajouter", - deleteBtnTxt: "Supprimer", - addOkMessage: "Les données ont bien été enregistrées.", - updateOkMessage: "La mise à jour à jour a bien été enregistrée.", - deleteOkMessage: "La suppression a bien été enregistrée.", - failAuth: "Erreur d'authentification.", - failAuthHeader: "Absence de header Authorization.", - failAuthToken: "Token invalide ou utilisateur non trouvé.", - failAuthId: "Identifiant non valide : ", - failAuthCron: "Tentative de lancement d'un cron sans le bon token.", - previousPage: "Page précédente", - nextPage: "Page suivante", - btnLinkToQuestionnaire: "Aller au quiz !", - statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." -}; - -/***/ }), - -/***/ "../lang/fr/user.js": -/*!**************************!*\ - !*** ../lang/fr/user.js ***! - \**************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - notFound: "L'utilisateur n'a pas été trouvé.", - needName: "Merci de choisir un nom d'utilisateur.", - needNotTooLongName: "Merci de choisir un nom d'utilisateur ne comptant pas plus de 70 caractères.", - needEmail: "Merci de saisir votre adresse e-mail.", - needUniqueEmail: "L'adresse e-mail que vous avez saisie est déjà utilisée par un autre utilisateur. Si vous avez déjà un compte, cliquez-ici pour vous connecter.", - needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", - needPassWord: "Merci de fournir un mot de passe.", - needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", - needStatus: "Il manque le statut.", - needLanguage: "Il manque le code langue.", - needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", - needSMTP: "Il manque le serveur SMTP.", - needSMTPNotFound: "Il manque le serveur SMTP.", - needKnowNewsletterOk: "Il faut savoir si l'utilisateur accepte ou refuse de recevoir la newsletter.", - needTimeDifference: "Il faut connaître le nombre de minutes du décalage horaire.", - needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", - needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", - needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", - godfatherFound: "Votre parrain a bien été trouvé !", - mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", - validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !", - validationMessageAdmin: "Le compte a bien été validé.", - validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", - validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", - mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", - mailThankGodfatherSubject: "Merci !", - mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", - mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", - badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", - emailNotFound: "Aucun utilisateur trouvé pour cette adresse e-mail.", - alreadyConnected: "Vous êtes déjà connecté(e) au site !", - needBeConnected: "Vous devez être connecté(e) pour accéder à cette page.", - connectionOk: "Connexion réussie.", - needChooseLoginWay: "Vous devez soit saisir votre mot de passe, soit cocher la case vous permettant de recevoir un lien de connexion par e-mail.", - needValidationToLogin: "Vous devez d'abord valider votre compte avant de vous connecter. Pour ce faire, un lien vient de vous être envoyé par e-mail.", - tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", - badPassword: "Le mot de passe n'est pas le bon.", - mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", - mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", - updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", - updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", - mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", - mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", - updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", - updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", - mailUpdateLoginOkMessage: "La mise à jour de vos identifiants a bien été enregistrée.", - updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", - creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", - mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", - mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", - deleteOkMessage: "L'utilisateur a bien été supprimé.", - deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", - mailDeleteLinkOkMessage: "Votre compte a bien été supprimé. Merci d'avoir utilisé nos services.", - mailDeleteLinkAlreadyMessage: "Il semble que vous ayez déjà validé la suppression de votre compte.", - mailDeleteLinkFailMessage: "Votre lien de suppression n'est pas valide ou alors il n'est plus valable.", - cronDeleteUnvalidedUsersMessage: " comptes utilisateurs non validés ont été supprimés.", - deleteInactiveUsersMessage: " comptes utilisateurs inactifs ont été supprimés.", - welcomeMessage: "Bienvenue #NAME !", - byebyeMessage: "Si vous voyez ce message, c'est que votre déconnexion s'est bien déroulée.
À bientôt !", - infosUserForAdmin: "Cet utilisateur (id: ID_USER) a créé son compte le DATE_CREA, la dernière mise à jour datant du DATE_UPDATE.
Date de sa dernière connexion : DATE_CONNECTION.", - infosAdminGodfather: "Cet utilisateur a été parrainé par ", - infosAdminNbGodChilds: "Ses #NB filleuils : " -}; - -/***/ }), - -/***/ "../tools/main.js": -/*!************************!*\ - !*** ../tools/main.js ***! - \************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// Quelques fonctions utiles pour les chaînes -var Tool = /*#__PURE__*/function () { - function Tool() { - _classCallCheck(this, Tool); - } - - _createClass(Tool, null, [{ - key: "isEmpty", - value: function isEmpty(myVar) { - if (myVar === undefined || myVar === null) return true;else { - myVar += ""; // si autre chose qu'une chaîne envoyé... - - myVar = myVar.trim(); - if (myVar === "") return true;else return false; - } - } - }, { - key: "trimIfNotNull", - value: function trimIfNotNull(myString) { - if (Tool.isEmpty(myString)) myString = null;else { - myString += ""; // si autre chose qu'une chaîne envoyé... - - myString = myString.trim(); - } - return myString; - } - }, { - key: "shortenIfLongerThan", - value: function shortenIfLongerThan(myString, max) { - myString += ""; // au cas où cela ne serait pas une chaîne... - - if (myString.length > max) myString = myString.substring(0, max - 3) + "..."; - return myString; - } // source : https://stackoverflow.com/questions/15604140/replace-multiple-strings-with-multiple-other-strings - - }, { - key: "replaceAll", - value: function replaceAll(myString, mapObj) { - var replaceElts = new RegExp(Object.keys(mapObj).join("|"), "gi"); - return myString.replace(replaceElts, function (matched) { - return mapObj[matched]; - }); - } // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random - - }, { - key: "getRandomInt", - value: function getRandomInt(min, max) { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min)) + min; - } // à compléter : https://en.wikipedia.org/wiki/Date_format_by_country - - }, { - key: "dateFormat", - value: function dateFormat(dateString) { - var lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "fr"; - if (Tool.isEmpty(dateString)) return ""; - var myDate = new Date(dateString); - var myDay = myDate.getDate() + ""; - if (myDay.length === 1) myDay = "0" + myDay; - var myMounth = myDate.getMonth() + 1 + ""; - if (myMounth.length === 1) myMounth = "0" + myMounth; - var myYear = myDate.getFullYear(); - if (lang === "fr") return myDay + "/" + myMounth + "/" + myYear;else if (lang === "form") // 2014-02-09 - return myYear + "-" + myMounth + "-" + myDay;else return myMounth + "/" + myDay + "/" + myYear; - } - }]); - - return Tool; -}(); - -module.exports = Tool; - -/***/ }), - -/***/ "./src/config/general.js": -/*!*******************************!*\ - !*** ./src/config/general.js ***! - \*******************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - apiUrl: "http://localhost:3000/api", - usersGetConfigUrl: "/user/getconfig", - lang: "fr", - userHomePage: "accueil.html", - adminHomePage: "admin.html", - managerHomePage: "gestion.html", - subscribePage: "inscription.html", - connectionPage: "connexion.html", - accountPage: "compte.html", - questionnairesManagementPage: "gestion-quizs.html", - usersManagementPage: "gestion-utilisateurs.html", - nbQuestionnairesUserHomePage: 10, - illustrationDir: "/img/quizs/" -}; // à terme fusionner avec les déclarations backend concernant le front, tout étant saisi dans l'admin - -/***/ }), - -/***/ "./src/loginlink.js": -/*!**************************!*\ - !*** ./src/loginlink.js ***! - \**************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/clientstorage.js */ "./src/tools/clientstorage.js"); -/* harmony import */ var _tools_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/dom.js */ "./src/tools/dom.js"); -/* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); -/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -// -- GESTION DE LA PAGE PERMETTANT DE TESTER UN LIEN DE CONNEXION REÇU PAR E-MAIL -/// Un token est transmis en paramètre de l'Url. Il a une validité limité dans le temps. -/// Dans ce cas, on peut rediriger l'utilisateur vers la page de connexion pour obtenir un nouveau lien de validation -/// Si le token est ok, on crée une session suivant la durée retournée par l'API et redirige l'utilisateur vers sa page d'accueil -/// Un résultat de quiz peut aussi avoir été enregistré côté client et est alors à transmettre à l'API -/// Si l'utilisateur a déjà une session active valide, c'est qu'il a déjà cliqué sur le lien. On le redirige également vers sa page d'accueil. -// Fichier de configuration côté client : -var configFrontEnd = __webpack_require__(/*! ./config/general */ "./src/config/general.js"); // Importation des fonctions utile au script : - - - - - - - - // Dictionnaires : - -var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + configFrontEnd.lang + "/general"); - -var txtUsers = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + configFrontEnd.lang + "/user"); - -var divResponse = document.getElementById("response"); -Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["helloDev"])(); -var config; - -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, homePage, datas, xhr; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_5__["getConfig"])(); - - case 3: - config = _context.sent; - - if (config) { - _context.next = 8; - break; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - _context.next = 12; - break; - - case 8: - _context.next = 10; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_5__["checkSession"])(config); - - case 10: - isConnected = _context.sent; - - if (isConnected) { - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", { - message: txtUsers.alreadyConnected, - color: "information" - }); // pour l'afficher sur la page suivante - - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("user", true); - homePage = user.status + "HomePage"; - window.location.assign("/" + configFrontEnd[homePage]); - } else { - datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_4__["getUrlParams"])(); - - if (datas && datas.t !== undefined) { - xhr = new XMLHttpRequest(); - xhr.open("POST", configFrontEnd.apiUrl + config.userRoutes + config.connectionWithLinkRoute); - - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(response.userId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(response.connexionTime) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_3__["isEmpty"])(response.token)) { - var connexionMaxTime = Date.now(); - if (response.connexionTime.endsWith("days")) connexionMaxTime += parseInt(response.connexionTime, 10) * 24 * 3600 * 1000;else connexionMaxTime += parseInt(response.connexionTime, 10) * 3600 * 1000; - Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_5__["setSession"])(response.userId, response.token, connexionMaxTime); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("lastAnswer"); // ! important pour ne pas enregister plusieurs fois le résultat - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.validationMessage, "", ["success"]); // au cas où blocage redirection - - window.location.assign("/" + configFrontEnd.userHomePage); // connexion par lien ne concerne que les simples "user" - } else if ((this.status === 401 || this.status === 403) && response.errors != undefined) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
");else response.errors = txt.serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.badLinkValidationMessage.replace("#URL", configFrontEnd.connectionPage), "", ["error"]); - } - }; - - datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_5__["getTimeDifference"])(config); // si l'utilisateur a précédement répondu à un quiz, j'ajoute les infos de son résultat : - - datas = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_5__["checkAnswerDatas"])(datas); - xhr.setRequestHeader("Content-Type", "application/json"); - xhr.send(JSON.stringify(datas)); - } - } - - case 12: - _context.next = 17; - break; - - case 14: - _context.prev = 14; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - - case 17: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 14]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); - -initialise(); - -/***/ }), - -/***/ "./src/tools/clientstorage.js": -/*!************************************!*\ - !*** ./src/tools/clientstorage.js ***! - \************************************/ -/*! exports provided: saveLocaly, getLocaly, removeLocaly */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveLocaly", function() { return saveLocaly; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaly", function() { return getLocaly; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); -// FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) -// Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { - localStorage.setItem(name, JSON.stringify(data)); -}; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); -}; -var removeLocaly = function removeLocaly(name) { - localStorage.removeItem(name); -}; - -/***/ }), - -/***/ "./src/tools/dom.js": -/*!**************************!*\ - !*** ./src/tools/dom.js ***! - \**************************/ -/*! exports provided: addElement */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - // Fonction associant les attributs fournis à un champ de formulaire - -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? - newElement.id = eltId; - - if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } - } - - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok - { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } - } - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
"); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. - - if (replace) eltParent.innerHTML = ""; - eltParent.appendChild(newElement); - } -}; - -/***/ }), - -/***/ "./src/tools/everywhere.js": -/*!*********************************!*\ - !*** ./src/tools/everywhere.js ***! - \*********************************/ -/*! exports provided: helloDev */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); -// Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); - return true; -}; - -/***/ }), - -/***/ "./src/tools/url.js": -/*!**************************!*\ - !*** ./src/tools/url.js ***! - \**************************/ -/*! exports provided: getUrlParams */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUrlParams", function() { return getUrlParams; }); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); - // Fonction récupérant les paramètres passés par l'url - -var getUrlParams = function getUrlParams() { - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); - if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, - datas = {}; - - for (var i in parameters) { - param = parameters[i].split("="); - if (param.length === 2) datas[param[0]] = decodeURI(param[1]); - } - - return datas; -}; - -/***/ }), - -/***/ "./src/tools/users.js": -/*!****************************!*\ - !*** ./src/tools/users.js ***! - \****************************/ -/*! exports provided: getConfig, getTimeDifference, getPassword, setSession, checkAnswerDatas, checkSession */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfig", function() { return getConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimeDifference", function() { return getTimeDifference; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPassword", function() { return getPassword; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSession", function() { return setSession; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAnswerDatas", function() { return checkAnswerDatas; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkSession", function() { return checkSession; }); -/* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_1__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -var configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); - - - // Récupère les données de configuration des utilisateurs -// À terme, un fichier statique importable comme module devrait éviter une requête ajax - -var getConfig = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + configFrontEnd.usersGetConfigUrl); - - xhr.onload = function () { - return resolve(JSON.parse(xhr.responseText)); - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - })); - - case 1: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - - return function getConfig() { - return _ref.apply(this, arguments); - }; -}(); -var getTimeDifference = function getTimeDifference(config) { - var timeLocal = new Date().getTimezoneOffset(); - if (timeLocal > config.timeDifferenceMax || timeLocal < config.timeDifferenceMin) return 0;else return timeLocal; -}; // On enlève volontairement les 0/O pour éviter les confusions ! -// Et mieux vaut aussi débuter et finir par une lettre simple. - -var getPassword = function getPassword(nbCarMin, nbCarMax) { - var nbCar = nbCarMin + Math.floor(Math.random() * (nbCarMax - nbCarMin)); - var letters = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz"; - var others = "123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ"; - var password = letters[Math.floor(Math.random() * letters.length)]; - - for (var i = 1; i < nbCar - 1; i++) { - if (i % 2 === 1) password += others[Math.floor(Math.random() * others.length)];else password += letters[Math.floor(Math.random() * letters.length)]; - } - - password += letters[Math.floor(Math.random() * letters.length)]; - return password; -}; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite -// Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. - -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { - id: userId, - token: token, - duration: durationTS - }; - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", storageUser); -}; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz -// Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas - -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("lastAnswer"); - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.QuestionnaireId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions)) { - datas.duration = answer.duration; - datas.nbCorrectAnswers = answer.nbCorrectAnswers; - datas.QuestionnaireId = answer.QuestionnaireId; - datas.nbQuestions = answer.nbQuestions; - } - } - - return datas; -}; // Cette fonction teste la connexion de l'utilisateur d'une page -// On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté - -var checkSession = /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(config) { - var status, - urlRedirection, - message, - urlWanted, - _args2 = arguments; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - status = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : []; - urlRedirection = _args2.length > 2 ? _args2[2] : undefined; - message = _args2.length > 3 ? _args2[3] : undefined; - urlWanted = _args2.length > 4 ? _args2[4] : undefined; - return _context2.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("user"); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + config.userRoutes + config.checkLoginRoute + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = config.siteUrl + "/" + configFrontEnd.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configFrontEnd.accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } - } - })); - - case 5: - case "end": - return _context2.stop(); - } - } - }, _callee2); - })); - - return function checkSession(_x) { - return _ref2.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", message); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("url", urlWanted); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); -}; - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2xvZ2lubGluay5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvY2xpZW50c3RvcmFnZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZG9tLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9ldmVyeXdoZXJlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwid2VsY29tZU1lc3NhZ2UiLCJieWVieWVNZXNzYWdlIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIm1pbiIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJhcGlVcmwiLCJ1c2Vyc0dldENvbmZpZ1VybCIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsImNvbmZpZ0Zyb250RW5kIiwicmVxdWlyZSIsInR4dCIsInR4dFVzZXJzIiwiZGl2UmVzcG9uc2UiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiaGVsbG9EZXYiLCJjb25maWciLCJpbml0aWFsaXNlIiwiZ2V0Q29uZmlnIiwiYWRkRWxlbWVudCIsImNoZWNrU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwic2F2ZUxvY2FseSIsIm1lc3NhZ2UiLCJjb2xvciIsInVzZXIiLCJnZXRMb2NhbHkiLCJob21lUGFnZSIsInN0YXR1cyIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwiZGF0YXMiLCJnZXRVcmxQYXJhbXMiLCJ0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwidXNlclJvdXRlcyIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsIkRPTkUiLCJyZXNwb25zZSIsIkpTT04iLCJwYXJzZSIsInJlc3BvbnNlVGV4dCIsInVzZXJJZCIsImNvbm5leGlvblRpbWUiLCJ0b2tlbiIsImNvbm5leGlvbk1heFRpbWUiLCJub3ciLCJlbmRzV2l0aCIsInBhcnNlSW50Iiwic2V0U2Vzc2lvbiIsInJlbW92ZUxvY2FseSIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJjaGVja0Fuc3dlckRhdGFzIiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJzdHJpbmdpZnkiLCJuYW1lIiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpZCIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImNvbnNvbGUiLCJsb2ciLCJzZWFyY2giLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInRpbWVEaWZmZXJlbmNlTWF4IiwidGltZURpZmZlcmVuY2VNaW4iLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJwYXNzd29yZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwiY2hlY2tMb2dpblJvdXRlIiwiaXNWYWxpZCIsImxhbmd1YWdlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50Iiwic2l0ZVVybCIsImhyZWYiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7QUNsRkE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esa0U7Ozs7Ozs7Ozs7O0FDdEJBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLCtEOzs7Ozs7Ozs7OztBQ3RCQUEsTUFBTSxDQUFDQyxPQUFQLEdBQ0E7QUFDSUMsZUFBYSxFQUFHLG1EQURwQjtBQUVJQyxxQkFBbUIsRUFBRyx1RkFGMUI7QUFHSUMsa0JB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NEZBQVksQ0FBQyxNQUFELENBQVo7QUFDQW9FLGtDQUFZLENBQUNILGNBQUQsRUFBaUJqRyxPQUFqQixFQUEwQmtHLFNBQTFCLENBQVo7QUFDQXpCLDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBN0QscUJBQUcsQ0FBQ2dFLE9BQUosR0FBYztBQUFBLDJCQUFNRixNQUFNLENBQUM5RCxHQUFHLENBQUNpRSxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQWpFLHFCQUFHLENBQUM0QixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVozQyxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTXVHLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNILGNBQUQsRUFBaUJqRyxPQUFqQixFQUEwQmtHLFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDeEosMkRBQU8sQ0FBQ3NELE9BQUQsQ0FBWCxFQUNJRCxvRUFBVSxDQUFDLFNBQUQsRUFBWUMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDdEQsMkRBQU8sQ0FBQ3dKLFNBQUQsQ0FBWCxFQUNJbkcsb0VBQVUsQ0FBQyxLQUFELEVBQVFtRyxTQUFSLENBQVY7QUFDSixNQUFHLENBQUN4SiwyREFBTyxDQUFDdUosY0FBRCxDQUFYLEVBQ0kzRixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCeUYsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9sb2dpbmxpbmsuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbG9naW5saW5rLmpzXCIpO1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICFcIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsIDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgdXNlcnNHZXRDb25maWdVcmwgOiBcIi91c2VyL2dldGNvbmZpZ1wiLFxuICAgIGxhbmcgOiBcImZyXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCJcbn07XG4vLyDDoCB0ZXJtZSBmdXNpb25uZXIgYXZlYyBsZXMgZMOpY2xhcmF0aW9ucyBiYWNrZW5kIGNvbmNlcm5hbnQgbGUgZnJvbnQsIHRvdXQgw6l0YW50IHNhaXNpIGRhbnMgbCdhZG1pbiIsIi8vIC0tIEdFU1RJT04gREUgTEEgUEFHRSBQRVJNRVRUQU5UIERFIFRFU1RFUiBVTiBMSUVOIERFIENPTk5FWElPTiBSRcOHVSBQQVIgRS1NQUlMXG5cbi8vLyBVbiB0b2tlbiBlc3QgdHJhbnNtaXMgZW4gcGFyYW3DqHRyZSBkZSBsJ1VybC4gSWwgYSB1bmUgdmFsaWRpdMOpIGxpbWl0w6kgZGFucyBsZSB0ZW1wcy5cbi8vLyBEYW5zIGNlIGNhcywgb24gcGV1dCByZWRpcmlnZXIgbCd1dGlsaXNhdGV1ciB2ZXJzIGxhIHBhZ2UgZGUgY29ubmV4aW9uIHBvdXIgb2J0ZW5pciB1biBub3V2ZWF1IGxpZW4gZGUgdmFsaWRhdGlvblxuLy8vIFNpIGxlIHRva2VuIGVzdCBvaywgb24gY3LDqWUgdW5lIHNlc3Npb24gc3VpdmFudCBsYSBkdXLDqWUgcmV0b3VybsOpZSBwYXIgbCdBUEkgZXQgcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ciB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsXG4vLy8gVW4gcsOpc3VsdGF0IGRlIHF1aXogcGV1dCBhdXNzaSBhdm9pciDDqXTDqSBlbnJlZ2lzdHLDqSBjw7R0w6kgY2xpZW50IGV0IGVzdCBhbG9ycyDDoCB0cmFuc21ldHRyZSDDoCBsJ0FQSVxuLy8vIFNpIGwndXRpbGlzYXRldXIgYSBkw6lqw6AgdW5lIHNlc3Npb24gYWN0aXZlIHZhbGlkZSwgYydlc3QgcXUnaWwgYSBkw6lqw6AgY2xpcXXDqSBzdXIgbGUgbGllbi4gT24gbGUgcmVkaXJpZ2Ugw6lnYWxlbWVudCB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuL2NvbmZpZy9nZW5lcmFsXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlIGF1IHNjcmlwdCA6XG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrQW5zd2VyRGF0YXMsIGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBnZXRUaW1lRGlmZmVyZW5jZSwgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrY29uZmlnRnJvbnRFbmQubGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitjb25maWdGcm9udEVuZC5sYW5nK1wiL3VzZXJcIik7XG5cbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcblxuaGVsbG9EZXYoKTtcblxubGV0IGNvbmZpZztcbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gc2kgbCd1dGlsaXNhdGV1ciBlc3QgZMOpasOgIGNvbm5lY3TDqSwgcGFzIGxhIHBlaW5lIGQnYWxsZXIgKyBsb2luIDpcbiAgICAgICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihjb25maWcpO1xuICAgICAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgeyBtZXNzYWdlOiB0eHRVc2Vycy5hbHJlYWR5Q29ubmVjdGVkLCBjb2xvcjpcImluZm9ybWF0aW9uXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvbWVQYWdlPXVzZXIuc3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ0Zyb250RW5kW2hvbWVQYWdlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGNvbmZpZ0Zyb250RW5kLmFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuY29ubmVjdGlvbldpdGhMaW5rUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmICFpc0VtcHR5KHJlc3BvbnNlLnVzZXJJZCkgJiYgIWlzRW1wdHkocmVzcG9uc2UuY29ubmV4aW9uVGltZSkgJiYgIWlzRW1wdHkocmVzcG9uc2UudG9rZW4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbm5leGlvbk1heFRpbWU9RGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuY29ubmV4aW9uVGltZS5lbmRzV2l0aChcImRheXNcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZXhpb25NYXhUaW1lKz1wYXJzZUludChyZXNwb25zZS5jb25uZXhpb25UaW1lLDEwKSoyNCozNjAwKjEwMDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5leGlvbk1heFRpbWUrPXBhcnNlSW50KHJlc3BvbnNlLmNvbm5leGlvblRpbWUsMTApKjM2MDAqMTAwMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0U2Vzc2lvbihyZXNwb25zZS51c2VySWQsIHJlc3BvbnNlLnRva2VuLCBjb25uZXhpb25NYXhUaW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibGFzdEFuc3dlclwiKTsvLyAhIGltcG9ydGFudCBwb3VyIG5lIHBhcyBlbnJlZ2lzdGVyIHBsdXNpZXVycyBmb2lzIGxlIHLDqXN1bHRhdCAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFVzZXJzLnZhbGlkYXRpb25NZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsvLyBhdSBjYXMgb8O5IGJsb2NhZ2UgcmVkaXJlY3Rpb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdGcm9udEVuZC51c2VySG9tZVBhZ2UpOy8vIGNvbm5leGlvbiBwYXIgbGllbiBuZSBjb25jZXJuZSBxdWUgbGVzIHNpbXBsZXMgXCJ1c2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKHRoaXMuc3RhdHVzID09PSA0MDEgfHwgdGhpcy5zdGF0dXMgPT09IDQwMykgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHR4dC5zZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5iYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnRnJvbnRFbmQuY29ubmVjdGlvblBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZGF0YXMudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2kgbCd1dGlsaXNhdGV1ciBhIHByw6ljw6lkZW1lbnQgcsOpcG9uZHUgw6AgdW4gcXVpeiwgaidham91dGUgbGVzIGluZm9zIGRlIHNvbiByw6lzdWx0YXQgOlxuICAgICAgICAgICAgICAgICAgICBkYXRhcz1jaGVja0Fuc3dlckRhdGFzKGRhdGFzKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IGVzdCBsaXNpYmxlIHN1ciBnaXRsYWIgOiBcXG4gQm9ubmUgbGVjdHVyZSA6LSkgXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uL2NvbmZpZy9nZW5lcmFsXCIpO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGNvbmZpZ0Zyb250RW5kLmFwaVVybCtjb25maWdGcm9udEVuZC51c2Vyc0dldENvbmZpZ1VybCk7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9IChjb25maWcpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiBjb25maWcudGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgY29uZmlnLnRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb24gOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKGNvbmZpZywgc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBjb25maWdGcm9udEVuZC5hcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmNoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBsZSB0b2tlbiBldCBkZSB0b3V0ZSBmYcOnb24gdsOpcmlmaWVyIMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PWNvbmZpZy5zaXRlVXJsK1wiL1wiK2NvbmZpZ0Zyb250RW5kLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ0Zyb250RW5kLmFjY291bnRQYWdlKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/manageQuestionnaires.app.js b/front/public/JS/manageQuestionnaires.app.js index e448352..cbfeba1 100644 --- a/front/public/JS/manageQuestionnaires.app.js +++ b/front/public/JS/manageQuestionnaires.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -519,8 +523,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -543,6 +547,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -646,19 +651,30 @@ module.exports = { notFound: "Aucun quiz n'a pas été trouvé.", searchResultTitle: "Résultat pour votre recherche", searchNoResult: "Aucun résultat n'a été trouvé pour votre recherche", - searchWithResult: "#NB quizs correspondent à votre recherche :", - publishedBy: "Publié par", + searchWithResult: "Voici #NB quizs pour votre recherche :", + questionnairesName: "quiz", + publishedBy: "Quiz publié par", publishedAt: ", le", lastUpdated: "Dernière mise à jour, le ", estimatedTime: "Durée de lecture estimée : ", - btnSendResponse: "Envoyez vos réponses", - btnProposeSubscribe: "Ok, je crée mon compte !", - btnProposeConnection: "J'ai déjà un compte, je me connecte.", + estimatedTimeOption: { + short: "courte", + medium: "moyenne", + long: "longue" + }, + explanationBeforeTxt: "Extrait :", + correctAnswerTxt: "Bonne réponse", + wrongAnswerTxt: "Mauvaise réponse", + btnSendResponse: "Testez vos réponses.", + btnProposeSubscribe: "Je crée mon compte.", + btnProposeConnection: "Je me connecte.", btnShowQuestionnaire: "Afficher le quiz !", + btnShareQuizTxt: "Partager ce quiz sur ", nextQuestionnairesList: "Les #NB prochains quizs devant être publiés", needBeCompleted: "Quiz incomplet", nextDateWithoutQuestionnaire: "Prochaine date sans quiz programmé : ", - haveBeenPublished: ":NB nouveaux questionnaires ont été publiés." + haveBeenPublished: ":NB nouveaux questionnaires ont été publiés.", + haveBeenRegenerated: "Les fichiers HTML de #NB1 questionnaires et #NB2 rubriques ont été regénérés." }; /***/ }), @@ -679,7 +695,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -690,20 +706,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -716,15 +735,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -732,8 +753,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -847,7 +869,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -888,7 +911,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -951,7 +974,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -1219,6 +1344,9 @@ var initialise = /*#__PURE__*/function () { _loop3(_i3); } + console.log(config.nbQuestionsMax); + console.log(Questions.length); + if (config.nbQuestionsMax > Questions.length || config.nbQuestionsMax === 0) { if (Questions.length < config.nbQuestionsMin) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(divQuestions, "a", txt.addBtnTxt, "#newQuestion", ["error"], { href: "#newQuestion" @@ -1719,7 +1847,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1921,7 +2049,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -2009,13 +2138,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -2067,4 +2196,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL2lsbHVzdHJhdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9saW5rJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9uJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9pbGx1c3RyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvbGluay5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJuZWVkVXJsIiwibmVlZFVuaXF1ZVVybCIsIm5lZWRHb29kTG9uZ1VybCIsIm5lZWRHb29kTG9uZ0FsdCIsIm5lZWRHb29kTG9uZ1RpdGxlIiwibmVlZEdvb2RMb25nQ2FwdGlvbiIsIm5lZWRHb29kRmlsZSIsIm5lZWRRdWVzdGlvbm5haXJlRm9ySWxsdXN0cmF0aW9uIiwibmVlZE1heElsbHVzdHJhdGlvbnNGb3JRdWVzdGlvbm5haXJlIiwibm90Rm91bmQiLCJhZGRlZE9rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJkZWxldGVkT2tNZXNzYWdlIiwiZGVmYXVsdEFsdCIsImludHJvVGl0bGUiLCJpbnRyb05vSWxsdXN0cmF0aW9uIiwibmVlZFZhbGlkVXJsIiwibmVlZE5vdFRvb0xvbmdVcmwiLCJuZWVkQW5jaG9yIiwibmVlZEdvb2RMb25nQW5jaG9yIiwibmVlZFF1ZXN0aW9ubmFpcmUiLCJuZWVkTWF4TGlua3NGb3JRdWVzdGlvbm5haXJlIiwiaW50cm9Ob0xpbmsiLCJuZWVkVGV4dCIsIm5lZWROb3RUb29Mb25nVGV4dCIsIm5lZWRNYXhRdWVzdGlvbnMiLCJpbnRyb05vUXVlc3Rpb24iLCJuZWVkTnVtYmVyRm9yUmFuayIsIm5lZWRUaXRsZSIsIm5lZWROb3RUb29Mb25nVGl0bGUiLCJuZWVkSW50cm9kdWN0aW9uIiwibmVlZENvcnJlY3RQdWJsaXNoaW5nRGF0ZSIsIm5lZWRLbm93SWZJc1B1Ymxpc2hlZCIsIm5lZWRMYW5ndWFnZSIsIm5lZWRFc3RpbWF0ZWRUaW1lIiwic2VhcmNoUmVzdWx0VGl0bGUiLCJzZWFyY2hOb1Jlc3VsdCIsInNlYXJjaFdpdGhSZXN1bHQiLCJwdWJsaXNoZWRCeSIsInB1Ymxpc2hlZEF0IiwibGFzdFVwZGF0ZWQiLCJlc3RpbWF0ZWRUaW1lIiwiYnRuU2VuZFJlc3BvbnNlIiwiYnRuUHJvcG9zZVN1YnNjcmliZSIsImJ0blByb3Bvc2VDb25uZWN0aW9uIiwiYnRuU2hvd1F1ZXN0aW9ubmFpcmUiLCJuZXh0UXVlc3Rpb25uYWlyZXNMaXN0IiwibmVlZEJlQ29tcGxldGVkIiwibmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZSIsImhhdmVCZWVuUHVibGlzaGVkIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwidHh0VXNlcnMiLCJ0eHRRdWVzdGlvbm5haXJlIiwidHh0UXVlc3Rpb24iLCJ0eHRMaW5rIiwidHh0SWxsdXN0cmF0aW9uIiwiaGVsbG9EZXYiLCJkaXZNYWluIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1lc3NhZ2UiLCJkaXZSZXNwb25zZSIsImZvcm1RdWVzdGlvbm5haXJlIiwiaW5wdXRDbGFzc2lmaWNhdGlvbiIsImhlbHBDbGFzc2lmaWNhdGlvbiIsImhlbHBQdWJsaXNoaW5nQXQiLCJkZWxldGVDaGVja0JveCIsImJ0bk5ld1F1ZXN0aW9ubmFpcmUiLCJidG5QcmV2aWV3UXVlc3Rpb25uYWlyZSIsImRpdlF1ZXN0aW9ubmFpcmVzIiwiZm9ybVNlYXJjaCIsImRpdlNlYXJjaFJlc3VsdCIsImZvcm1MaW5rIiwiZm9ybUlsbHVzdHJhdGlvbiIsImZvcm1RdWVzdGlvbiIsImRpdkxpbmtzIiwiZGl2SWxsdXN0cmF0aW9ucyIsImRpdlF1ZXN0aW9ucyIsImluaXRpYWxpc2UiLCJnZXRDb25maWciLCJjb25maWciLCJhZGRFbGVtZW50IiwiY2hlY2tTZXNzaW9uIiwibWVzc2FnZSIsImNvbG9yIiwid2luZG93IiwibG9jYXRpb24iLCJpc0Nvbm5lY3RlZCIsInN0eWxlIiwiZGlzcGxheSIsImdldExvY2FseSIsInJlbW92ZUxvY2FseSIsInVzZXIiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImhpZGVBbGxGb3JtcyIsImVtcHlBbmRIaWRlRm9ybSIsInNob3dMaW5rSW5mb3MiLCJMaW5rcyIsImxpc3RMaW5rcyIsImkiLCJ1cmwiLCJhZGRFdmVudExpc3RlbmVyIiwiZSIsInByZXZlbnREZWZhdWx0Iiwic2hvd0Zvcm1MaW5rSW5mb3MiLCJhc3NpZ24iLCJlbGVtZW50cyIsInNlbmRMaW5rRm9ybSIsIkxpbmsiLCJzaG93SWxsdXN0cmF0aW9uSW5mb3MiLCJJbGx1c3RyYXRpb25zIiwibGlzdElsbHVzdHJhdGlvbnMiLCJzaG93Rm9ybUlsbHVzdHJhdGlvbkluZm9zIiwic2VuZElsbHVzdHJhdGlvbkZvcm0iLCJJbGx1c3RyYXRpb24iLCJzaG93UXVlc3Rpb25JbmZvcyIsIlF1ZXN0aW9ucyIsImxpc3RRdWVzdGlvbnMiLCJzaG93Rm9ybVF1ZXN0aW9uSW5mb3MiLCJzZW5kUXVlc3Rpb25Gb3JtIiwiZGF0YSIsInJlbW92ZUF0dHJpYnV0ZSIsIkNob2ljZXMiLCJpc0NvcnJlY3QiLCJjaGVja2VkIiwic2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MiLCJ4aHJHZXRJbmZvcyIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJyZXNldCIsImRhdGVGb3JtYXQiLCJUYWdzIiwiY2xhc3NpZmljYXRpb24iLCJzZXRBdHRyaWJ1dGUiLCJ0b2tlbiIsInNlbmQiLCJ1cmxEYXRhcyIsImdldFVybFBhcmFtcyIsImRhdGFzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwieGhyU2VhcmNoIiwiQXJyYXkiLCJpc0FycmF5Iiwic2VsZWN0SFRNTCIsInNlYXJjaFNlbGVjdCIsInNldFJlcXVlc3RIZWFkZXIiLCJzdHJpbmdpZnkiLCJzaG93TmV4dFF1ZXN0aW9ubmFpcmVzIiwieGhyTmV4dFF1ZXN0aW9ubmFpcmVzIiwibGlzdEhUTUwiLCJkYXRlUHVibGlzaGluZyIsImlzUHVibGlzaGFibGUiLCJkYXRlTmVlZGVkIiwidGFyZ2V0Iiwic3BsaXQiLCJpbm5lckhUTUwiLCJ0YWdzIiwicmV2ZXJzZSIsImxhc3RUYWciLCJ4aHJTZWFyY2hUYWdzIiwic2VhcmNoIiwieGhyUXVlc3Rpb25uYWlyZURhdGFzIiwiZGVsZXRlT2siLCJlcnJvcnMiLCJkaXZSZXNwb25zZUxpbmsiLCJ4aHJMaW5rRGF0YXMiLCJsaW5rc1JvdXRlIiwicXVlc3Rpb25uYWlyZSIsImRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uIiwiZGF0YXNXaXRoRmlsZXMiLCJGb3JtRGF0YSIsInhocklsbHVzdHJhdGlvbkRhdGFzIiwiaWxsdXN0cmF0aW9uc1JvdXRlIiwiZGl2UmVzcG9uc2VRdWVzdGlvbiIsInhoclF1ZXN0aW9uRGF0YXMiLCJjb25zb2xlIiwiZXJyb3IiLCJzYXZlTG9jYWx5IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwibG9nIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJpbnB1dHNDb25mIiwibXlGb3JtIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsInBhcmFtZXRlcnMiLCJwYXJhbSIsImRlY29kZVVSSSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsIm5vdyIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFF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Q0FBZ0JxQixNQUFoQixDQUF1QjZJLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcImRlZmF1bHRcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJ3aWtpbGVybmlcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LCAgICBcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIvLyBpZGVtXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvaWxsdXN0cmF0aW9uXCI6IFwiLi4vbGFuZy9mci9pbGx1c3RyYXRpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9pbGx1c3RyYXRpb24kXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2xpbmtcIjogXCIuLi9sYW5nL2ZyL2xpbmsuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9saW5rJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9xdWVzdGlvblwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbiRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvcXVlc3Rpb25uYWlyZVwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZS5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3F1ZXN0aW9ubmFpcmUkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBxdSdhbGxlei12b3VzIGFwcHJlbmRyZSBhdWpvdXJkJ2h1aSA/XCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQ2hhcXVlIGpvdXIsIHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWRVcmwgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW5lIHVybCBwb3VyIGwnaW1hZ2UuXCIsXG4gICAgbmVlZFVuaXF1ZVVybCA6IFwiTCd1cmwgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuZSBhdXRyZSBpbWFnZS5cIixcbiAgICBuZWVkR29vZExvbmdVcmwgOiBcIkwndXJsIGRlIGwnaW1hZ2UgZG9pdCBjb250ZW5pciBlbnRyZSA1IGV0IDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkR29vZExvbmdBbHQgOiBcIkxlIHRleHRlIGRlIGxhIHByb3ByacOpdMOpICdhbHQnIG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEdvb2RMb25nVGl0bGUgOiBcIkxlIHRleHRlIGRlIGxhIHByb3ByacOpdMOpICd0aXRsZScgbmUgZG9pdCBwYXMgY29tcHRlciBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkR29vZExvbmdDYXB0aW9uIDogXCJMZSB0ZXh0ZSBkZSBsYSBsw6lnZW5kZSBkZSBsJ2ltYWdlIG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEdvb2RGaWxlIDogXCJWb3RyZSBmaWNoaWVyIG4nYSBwYXMgw6l0w6kgYWNjZXB0w6kuXCIsXG4gICAgbmVlZFF1ZXN0aW9ubmFpcmVGb3JJbGx1c3RyYXRpb24gOiBcIlRlbnRhdGl2ZSBkJ2Fqb3V0L21pc2Ugw6Agam91ci9zdXBwcmVlc3Npb24gZCd1bmUgaWxsdXN0cmF0aW9uIHBvdXIgdW4gcXVlc3Rpb25uYWlyZSBuJ2F5YW50IHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWRNYXhJbGx1c3RyYXRpb25zRm9yUXVlc3Rpb25uYWlyZSA6IFwiVm91cyBhdmV6IGTDqWrDoCBhdHRlaW50IGxlIG5vbWJyZSBtYXhpbWFsIGQnaWxsdXN0cmF0aW9ucyBwb3VyIGNlIHF1ZXN0aW9ubmFpcmUuXCIsXG4gICAgbm90Rm91bmQ6IFwiTCdlbnJlZ2lzdHJlbWVudCBkZSBsJ2lsbHVzdHJhdGlvbiBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kgOiBcIixcbiAgICBhZGRlZE9rTWVzc2FnZTogXCJMJ2lsbHVzdHJhdGlvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiTCdpbGx1c3RyYXRpb24gYSBiaWVuIMOpdMOpIG1vZGlmacOpZS5cIixcbiAgICBkZWxldGVkT2tNZXNzYWdlOiBcIkwnaWxsdXN0cmF0aW9uIGEgYmllbiDDqXTDqSBzdXBwcmltw6llLlwiLFxuICAgIGRlZmF1bHRBbHQgOiBcIklsbHVzdHJhdGlvbiBkdSBxdWl6XCIsXG4gICAgaW50cm9UaXRsZSA6IFwiSWxsdXN0cmF0aW9ucyBkdSBxdWl6XCIsXG4gICAgaW50cm9Ob0lsbHVzdHJhdGlvbiA6IFwiQXVjdW5lIGlsbHVzdHJhdGlvbiBwb3VyIGwnaW5zdGFudC5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbmVlZFVybCA6IFwiTWVyY2kgZGUgIHNhaXNpciBsJ3VybCBkdSBsaWVuLlwiLFxuICAgIG5lZWRWYWxpZFVybCA6IFwiTWVyY2kgZGUgIHNhaXNpciB1biB1cmwgYXlhbnQgdW4gZm9ybWF0IHZhbGlkZS5cIixcbiAgICBuZWVkTm90VG9vTG9uZ1VybCA6IFwiTWVyY2kgZGUgIHNhaXNpciB1biB1cmwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRBbmNob3IgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW5lIGFuY3JlIHBvdXIgY2UgbGllbi5cIixcbiAgICBuZWVkR29vZExvbmdBbmNob3IgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW5lIGFuY3JlIHBvdXIgY2UgbGllbiBjb21wdGFudCBlbnRyZSA1IGV0IDE1MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUXVlc3Rpb25uYWlyZSA6IFwiTGUgcXVlc3Rpb25uYWlyZSBkdSBsaWVuIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTWF4TGlua3NGb3JRdWVzdGlvbm5haXJlIDogXCJWb3VzIGF2ZXogZMOpasOgIGF0dGVpbnQgbGUgbm9tYnJlIG1heGltYWwgZGUgbGllbnMgcG91ciBjZSBxdWVzdGlvbm5haXJlLlwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiTGUgbGllbiBhIGJpZW4gw6l0w6kgbW9kaWZpw6kuXCIsXG4gICAgYWRkZWRPa01lc3NhZ2U6IFwiTGUgbGllbiBhIGJpZW4gw6l0w6kgYWpvdXTDqS5cIixcbiAgICBkZWxldGVkT2tNZXNzYWdlOiBcIkxlIGxpZW4gYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBub3RGb3VuZCA6IFwiTCdlbnJlZ2lzdHJlbWVudCBkdSBsaWVuIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBpbnRyb1RpdGxlIDogXCJMZWN0dXJlcyBwcm9wb3PDqWVzXCIsXG4gICAgaW50cm9Ob0xpbmsgOiBcIkF1Y3VuIGxpZW4gcG91ciBsJ2luc3RhbnQuXCIsXG4gICAgZGVmYXVsdFZhbHVlOiBcIkxpcmUgbCdhcnRpY2xlIHN1ciBXaWtpcMOpZGlhLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkVGV4dDogXCJNZXJjaSBkZSBzYWlzaXIgbGUgdGV4dGUgZGUgbGEgcXVlc3Rpb24gIVwiLFxuICAgIG5lZWROb3RUb29Mb25nVGV4dDogXCJMYSBxdWVzdGlvbiBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRRdWVzdGlvbm5haXJlOiBcIkxlIHF1ZXN0aW9ubmFpcmUgY29uY2VybsOpIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTWF4UXVlc3Rpb25zOiBcIlZvdXMgYXZleiBkw6lqw6AgYXR0ZWludCBsZSBub21icmUgbWF4aW1hbCBkZSBxdWVzdGlvbnMgcG91ciBjZSBxdWVzdGlvbm5haXJlIDogXCIsXG4gICAgbm90Rm91bmQ6IFwiTCdlbnJlZ2lzdHJlbWVudCBkZSBsYSBxdWVzdGlvbiBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgYWRkT2tNZXNzYWdlOiBcIkxhIHF1ZXN0aW9uIGEgYmllbiDDqXTDqSBham91dMOpZS5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2U6IFwiTGEgcXVlc3Rpb24gYSBiaWVuIMOpdMOpIG1vZGlmacOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTGEgcXVlc3Rpb24gYSBiaWVuIMOpdMOpIHN1cHByaW3DqWUuXCIsXG4gICAgaW50cm9UaXRsZTogXCJMZXMgcXVlc3Rpb25zIGVucmVnaXN0csOpZXNcIixcbiAgICBpbnRyb05vUXVlc3Rpb246IFwiQXVjdW5lIHF1ZXN0aW9uIG4nYSDDqXTDqSBzYWlzaWUgcG91ciBsJ2luc3RhbnRcIixcbiAgICBuZWVkTnVtYmVyRm9yUmFuayA6IFwiVm91cyBkZXZleiBmb3VybmlyIHVuIG5vbWJyZSBzdXDDqXJpZXVyIG91IMOpZ2FsIMOgIDEgcG91ciBsZSByYW5nIGRlIGNldHRlIHF1ZXN0aW9uLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkVGl0bGU6IFwiTWVyY2kgZGUgZm91cm5pciB1biB0aXRyZSDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWROb3RUb29Mb25nVGl0bGU6IFwiTGUgdGl0cmUgZHUgcXVpeiBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRVcmw6IFwiTWVyY2kgZGUgZm91cm5pciBsJ3VybCDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRVbmlxdWVVcmw6IFwiTCd1cmwgZHUgcXVpeiBkb2l0IMOqdHJlIHVuaXF1ZS5cIixcbiAgICBuZWVkSW50cm9kdWN0aW9uOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gdGV4dGUgZCdpbnRyb2R1Y3Rpb24gw6Agdm90cmUgcXVpei5cIixcbiAgICBuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlOiBcIkxhIGRhdGUgZGUgcHVibGljYXRpb24gZm91cm5pZSBuJ2EgcGFzIHVuIGZvcm1hdCB2YWxpZGUuXCIsXG4gICAgbmVlZEtub3dJZklzUHVibGlzaGVkOiBcIklsIGZhdXQgc2F2b2lyIHNpIGNlIHF1aXogZXN0IHB1Ymxpw6kuXCIsXG4gICAgbmVlZExhbmd1YWdlOiBcIlZvdXMgZGV2ZXogc8OpbGVjdGlvbm5lciBsYSBsYW5ndWUgZGUgY2UgcXVpei5cIixcbiAgICBuZWVkRXN0aW1hdGVkVGltZTogXCJNZXJjaSBkZSBzw6lsZWN0aW9ubmVyIHVuZSBlc3RpbWF0aW9uIGRlIGxhIGR1csOpZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5vdEZvdW5kIDogXCJBdWN1biBxdWl6IG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBzZWFyY2hSZXN1bHRUaXRsZSA6IFwiUsOpc3VsdGF0IHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoTm9SZXN1bHQgOiBcIkF1Y3VuIHLDqXN1bHRhdCBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIHZvdHJlIHJlY2hlcmNoZVwiLFxuICAgIHNlYXJjaFdpdGhSZXN1bHQgOiBcIiNOQiBxdWl6cyBjb3JyZXNwb25kZW50IMOgIHZvdHJlIHJlY2hlcmNoZSA6XCIsXG4gICAgcHVibGlzaGVkQnk6IFwiUHVibGnDqSBwYXJcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgZXN0aW1hdGVkVGltZTogXCJEdXLDqWUgZGUgbGVjdHVyZSBlc3RpbcOpZSA6IFwiLFxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJFbnZveWV6IHZvcyByw6lwb25zZXNcIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIk9rLCBqZSBjcsOpZSBtb24gY29tcHRlICFcIixcbiAgICBidG5Qcm9wb3NlQ29ubmVjdGlvbjogXCJKJ2FpIGTDqWrDoCB1biBjb21wdGUsIGplIG1lIGNvbm5lY3RlLlwiLFxuICAgIGJ0blNob3dRdWVzdGlvbm5haXJlOiBcIkFmZmljaGVyIGxlIHF1aXogIVwiLFxuICAgIG5leHRRdWVzdGlvbm5haXJlc0xpc3Q6IFwiTGVzICNOQiBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzXCIsXG4gICAgbmVlZEJlQ29tcGxldGVkOiBcIlF1aXogaW5jb21wbGV0XCIsXG4gICAgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZTogXCJQcm9jaGFpbmUgZGF0ZSBzYW5zIHF1aXogcHJvZ3JhbW3DqSA6IFwiLFxuICAgIGhhdmVCZWVuUHVibGlzaGVkIDogXCI6TkIgbm91dmVhdXggcXVlc3Rpb25uYWlyZXMgb250IMOpdMOpIHB1Ymxpw6lzLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgU0FJU0lSIC8gw4lESVRFUiBMRVMgUVVJWlMgRVQgTEVVUlMgRMOJUEVOREFOQ0VTIChMSUVOUywgSU1BR0VTLCBUQUdTLCBFVEMuKVxuXG4vLy8gVsOpcmlmaWUgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2UgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgcHJvcG9zZSB1biBtb3RldXIgZGUgcmVjaGVyY2hlIHBlcm1ldHRhbnQgZGUgY2hlcmNoZXIgdW4gcXVpelxuLy8vIFNpIHVuIGlkIGVzdCBwYXNzw6kgcGFyIGwndXJsIG9uIGFmZmljaGUgbGVzIGluZm9ybWF0aW9ucyBkdSBxdWl6IGRhbnMgdW4gZm9ybXVsYWlyZSBwZXJtZXR0YW50IGRlIGwnw6lkaXRlci9zdXBwcmltZXIgYXZlYyB1bmUgbGlzdGUgZGVzIMOpbMOpbWVudHMgbGnDqXMgKGxpZW5zLCBpbGx1c3RyYXRpb25zLCBxdWVzdGlvbnMuLi4pIHBvdXZhbnQgZXV4LW3Dqm1lcyDDqnRyZSDDqWRpdMOpcy9zdXBwcmltw6lzLlxuLy8vIFNpIGxlIG5vbWJyZSBtYXggY29uZmlndXLDqSBwb3VyIGNoYWN1biBkZSBzZXMgw6lsw6ltZW50cyBuJ2VzdCBwYXMgYXR0ZWludCwgaWwgZXN0IGF1c3NpIHByb3Bvc8OpIGQnYWpvdXRlciB1biBub3V2ZWwgw6lsw6ltZW50LlxuLy8vIFNpbm9uIHBhcyBkJ2lkIHBhc3PDqSBwYXIgbCd1cmwsIG9uIGFmZmljaGUgdW4gZm9ybXVsYWlyZSB2aWRlIHBlcm1ldHRhbnQgZCdlbiBzYWlzaXIgdW4gbm91dmVhdSBhdmVjIHNlcyB0YWdzLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gRm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOiAhISByZXZvaXIgcXVhbmQgbGUgcmVzdGUgc2VyYSBmaW5pIHBvdXIgdsOpcmlmaWVyIHNpIHRvdXQgZXN0IHV0aWxlXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGVtcHlBbmRIaWRlRm9ybSwgZW1weUZvcm0sIGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIGdldENvbmZpZyB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5jb25zdCB0eHRRdWVzdGlvbm5haXJlID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9xdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgdHh0UXVlc3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3F1ZXN0aW9uXCIpO1xuY29uc3QgdHh0TGluayA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvbGlua1wiKTtcbmNvbnN0IHR4dElsbHVzdHJhdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvaWxsdXN0cmF0aW9uXCIpO1xuXG5oZWxsb0RldigpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgZGl2TWFpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFpbi1jb250ZW50XCIpO1xuY29uc3QgZGl2TWVzc2FnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWVzc2FnZVwiKTtcbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGZvcm1RdWVzdGlvbm5haXJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlc1wiKTtcbmNvbnN0IGlucHV0Q2xhc3NpZmljYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNsYXNzaWZpY2F0aW9uXCIpO1xuY29uc3QgaGVscENsYXNzaWZpY2F0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoZWxwQ2xhc3NpZmljYXRpb25cIik7XG5jb25zdCBoZWxwUHVibGlzaGluZ0F0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJoZWxwUHVibGlzaGluZ0F0XCIpO1xuY29uc3QgZGVsZXRlQ2hlY2tCb3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImRlbGV0ZU9rTGFiZWxcIik7XG5jb25zdCBidG5OZXdRdWVzdGlvbm5haXJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3YW50TmV3UXVlc3Rpb25uYWlyZVwiKTtcbmNvbnN0IGJ0blByZXZpZXdRdWVzdGlvbm5haXJlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwcmV2aWV3UXVlc3Rpb25uYWlyZVwiKTtcblxuY29uc3QgZGl2UXVlc3Rpb25uYWlyZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVzTGlzdFwiKTtcblxuY29uc3QgZm9ybVNlYXJjaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoXCIpO1xuY29uc3QgZGl2U2VhcmNoUmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hSZXN1bHRcIik7XG5cbmNvbnN0IGZvcm1MaW5rID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsaW5rc1wiKTtcbmNvbnN0IGZvcm1JbGx1c3RyYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlsbHVzdHJhdGlvbnNcIik7XG5jb25zdCBmb3JtUXVlc3Rpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9uc1wiKTtcbmNvbnN0IGRpdkxpbmtzID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJsaW5rc0xpc3RcIik7XG5jb25zdCBkaXZJbGx1c3RyYXRpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbGx1c3RyYXRpb25zTGlzdFwiKTtcbmNvbnN0IGRpdlF1ZXN0aW9ucyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25zTGlzdFwiKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAgeyAgICAgICAgXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKFtcIm1hbmFnZXJcIiwgXCJhZG1pblwiXSwgXCIvXCIrY29uZmlnRnJvbnRFbmQuY29ubmVjdGlvblBhZ2UsIHsgbWVzc2FnZTogdHh0VXNlcnMubmVlZEJlQ29ubmVjdGVkLCBjb2xvcjpcImVycm9yXCIgfSwgd2luZG93LmxvY2F0aW9uKTtcbiAgICAgICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGRpdk1haW4uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkoZ2V0TG9jYWx5KFwibWVzc2FnZVwiKSkpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCBnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLm1lc3NhZ2UsIFwiXCIsIFtnZXRMb2NhbHkoXCJtZXNzYWdlXCIsIHRydWUpLmNvbG9yXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJtZXNzYWdlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ0Zyb250RW5kKTtcblxuICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2F0aW9uIGR1IGZvcm11bGFpcmUgZGUgcmVjaGVyY2hlIDpcbiAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnLCBmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXNlIGxlIGZvcm11bGFpcmUgcGVybWV0dGFudCBkZSBtZXR0cmUgw6Agam91ciBsZXMgaW5mb3MgZGUgYmFzZSBkdSBxdWVzdGlvbm5haXJlIDpcbiAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnLlF1ZXN0aW9ubmFpcmUsIGZvcm1RdWVzdGlvbm5haXJlKTtcbiAgICAgICAgICAgICAgICAvLyBDYXNlIGRlIHN1cHByZXNzaW9uIGNhY2jDqWUgcGFyIGTDqWZhdXQsIGNhciBpbnV0aWxlIHBvdXIgZm9ybXVsYWlyZSBkZSBjcsOpYXRpb25cbiAgICAgICAgICAgICAgICBkZWxldGVDaGVja0JveC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gdmlkYW50IGV0IGNhY2hhbnQgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlc1xuICAgICAgICAgICAgICAgIGNvbnN0IGhpZGVBbGxGb3JtcyA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbXB5QW5kSGlkZUZvcm0oZm9ybUxpbmspO1xuICAgICAgICAgICAgICAgICAgICBpZih0eHRMaW5rLmRlZmF1bHRWYWx1ZSE9MClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYW5jaG9yXCIpLnZhbHVlPXR4dExpbmsuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBlbXB5QW5kSGlkZUZvcm0oZm9ybUlsbHVzdHJhdGlvbik7XG4gICAgICAgICAgICAgICAgICAgIGVtcHlBbmRIaWRlRm9ybShmb3JtUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBBZmZpY2hlIGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgbGVzIGxpZW5zXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0xpbmtJbmZvcyA9IChMaW5rcykgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TGlua3MsIFwiaDRcIiwgdHh0TGluay5pbnRyb1RpdGxlKTsvLyByZW1wbGFjZSBsJ2V4aXN0YW50IGRhbnMgZGl2TGlua3NcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RMaW5rcz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gTGlua3MpXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0TGlua3MrPVwiPGxpPjxhIGhyZWY9J1wiK0xpbmtzW2ldLnVybCtcIicgdGFyZ2V0PSdfYmxhbmsnPlwiK0xpbmtzW2ldLmFuY2hvcitcIjwvYT4gfCA8YSBocmVmPScjdXBkYXRlTGlua1wiK0xpbmtzW2ldLmlkK1wiJyBpZD0nI3VwZGF0ZUxpbmtcIitMaW5rc1tpXS5pZCtcIicgPlwiK3R4dC51cGRhdGVCdG5UeHQrXCI8L2E+IHwgPGEgaHJlZj0nI2RlbGV0ZUxpbmtcIitMaW5rc1tpXS5pZCtcIicgaWQ9JyNkZWxldGVMaW5rXCIrTGlua3NbaV0uaWQrXCInID5cIit0eHQuZGVsZXRlQnRuVHh0K1wiPC9hPjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmKGxpc3RMaW5rcz09PVwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0TGlua3M9XCI8bGk+XCIrdHh0TGluay5pbnRyb05vTGluaytcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TGlua3MsIFwidWxcIiwgbGlzdExpbmtzLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSwgXCJcIiwgZmFsc2UpOy8vIMOgIGludMOpZ3JlciBkYW5zIGxlIERPTSBwb3VyIHBvdXZvaXIgYWpvdXRlciBkZXMgYWRkRXZlbnRMaXN0ZW5lciBlbnN1aXRlXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBMaW5rcylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjdXBkYXRlTGlua1wiK0xpbmtzW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1MaW5rSW5mb3MoTGlua3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjbGlua3NcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI2RlbGV0ZUxpbmtcIitMaW5rc1tpXS5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtTGlua0luZm9zKExpbmtzW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtTGluay5lbGVtZW50c1tcImRlbGV0ZU9rXCJdLnZhbHVlPXRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZExpbmtGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZihjb25maWcubmJMaW5rc01heCA+IExpbmtzLmxlbmd0aCB8fCBjb25maWcubmJMaW5rc01heD09PTApXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKExpbmtzLmxlbmd0aCA8IGNvbmZpZy5uYkxpbmtzTWluKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TGlua3MsIFwiYVwiLCB0eHQuYWRkQnRuVHh0LCBcIiNuZXdMaW5rXCIsIFtcImVycm9yXCJdLCB7IGhyZWY6XCIjbmV3TGlua1wiIH0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkxpbmtzLCBcImFcIiwgdHh0LmFkZEJ0blR4dCwgXCIjbmV3TGlua1wiLCBbXCJpbmZvcm1hdGlvblwiXSwgeyBocmVmOlwiI25ld0xpbmtcIiB9LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiNuZXdMaW5rXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtTGluay5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtTGluay5lbGVtZW50c1tcIlF1ZXN0aW9ubmFpcmVJZFwiXS52YWx1ZT1mb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImlkXCJdLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjbGlua3NcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5MaW5rLCBmb3JtTGluayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBBZmZpY2hlIGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgbGVzIGlsbHVzdHJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93SWxsdXN0cmF0aW9uSW5mb3MgPSAoSWxsdXN0cmF0aW9ucykgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2SWxsdXN0cmF0aW9ucywgXCJoNFwiLCB0eHRJbGx1c3RyYXRpb24uaW50cm9UaXRsZSk7Ly8gcmVtcGxhY2UgbCdleGlzdGFudCBkYW5zIGRpdklsbHVzdHJhdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RJbGx1c3RyYXRpb25zPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBJbGx1c3RyYXRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdElsbHVzdHJhdGlvbnMrPVwiPGxpPjxhIGhyZWY9J1wiK2NvbmZpZ0Zyb250RW5kLmlsbHVzdHJhdGlvbkRpcitJbGx1c3RyYXRpb25zW2ldLnVybCtcIicgdGFyZ2V0PSdfYmxhbmsnPjxpbWcgc3JjPSdcIitjb25maWdGcm9udEVuZC5pbGx1c3RyYXRpb25EaXIrSWxsdXN0cmF0aW9uc1tpXS51cmwrXCInIGFsdD0nXCIrdHh0SWxsdXN0cmF0aW9uLmRlZmF1bHRBbHQrXCInIHN0eWxlPSdtYXgtaGVpZ2h0OjE1MHB4Jz48L2E+IHwgPGEgaHJlZj0nI3VwZGF0ZUlsbHVzdHJhdGlvblwiK0lsbHVzdHJhdGlvbnNbaV0uaWQrXCInIGlkPScjdXBkYXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCtcIicgPlwiK3R4dC51cGRhdGVCdG5UeHQrXCI8L2E+IHwgPGEgaHJlZj0nI2RlbGV0ZUlsbHVzdHJhdGlvblwiK0lsbHVzdHJhdGlvbnNbaV0uaWQrXCInIGlkPScjZGVsZXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCtcIicgPlwiK3R4dC5kZWxldGVCdG5UeHQrXCI8L2E+PC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYobGlzdElsbHVzdHJhdGlvbnM9PT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdElsbHVzdHJhdGlvbnM9XCI8bGk+XCIrdHh0SWxsdXN0cmF0aW9uLmludHJvTm9JbGx1c3RyYXRpb24rXCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdklsbHVzdHJhdGlvbnMsIFwidWxcIiwgbGlzdElsbHVzdHJhdGlvbnMsIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdLCBcIlwiLCBmYWxzZSk7Ly8gw6AgaW50w6lncmVyIGRhbnMgbGUgRE9NIHBvdXIgcG91dm9pciBham91dGVyIGRlcyBhZGRFdmVudExpc3RlbmVyIGVuc3VpdGVcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIElsbHVzdHJhdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI3VwZGF0ZUlsbHVzdHJhdGlvblwiK0lsbHVzdHJhdGlvbnNbaV0uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybUlsbHVzdHJhdGlvbkluZm9zKElsbHVzdHJhdGlvbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjaWxsdXN0cmF0aW9uc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjZGVsZXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MoSWxsdXN0cmF0aW9uc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUlsbHVzdHJhdGlvbi5lbGVtZW50c1tcImRlbGV0ZU9rXCJdLnZhbHVlPXRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZElsbHVzdHJhdGlvbkZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpZy5uYklsbHVzdHJhdGlvbnNNYXggPiBJbGx1c3RyYXRpb25zLmxlbmd0aCB8fCBjb25maWcubmJJbGx1c3RyYXRpb25zTWF4PT09MClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICBpZihJbGx1c3RyYXRpb25zLmxlbmd0aCA8IGNvbmZpZy5uYklsbHVzdHJhdGlvbnNNaW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZJbGx1c3RyYXRpb25zLCBcImFcIiwgdHh0LmFkZEJ0blR4dCwgXCIjbmV3SWxsdXN0cmF0aW9uXCIsIFtcImVycm9yXCJdLCB7IGhyZWY6XCIjbmV3SWxsdXN0cmF0aW9uXCIgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2SWxsdXN0cmF0aW9ucywgXCJhXCIsIHR4dC5hZGRCdG5UeHQsIFwiI25ld0lsbHVzdHJhdGlvblwiLCBbXCJpbmZvcm1hdGlvblwiXSwgeyBocmVmOlwiI25ld0lsbHVzdHJhdGlvblwiIH0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI25ld0lsbHVzdHJhdGlvblwiKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUlsbHVzdHJhdGlvbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLmVsZW1lbnRzW1wiUXVlc3Rpb25uYWlyZUlkXCJdLnZhbHVlPWZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW1wiaWRcIl0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNpbGx1c3RyYXRpb25zXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWcuSWxsdXN0cmF0aW9uLCBmb3JtSWxsdXN0cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEFmZmljaGUgbGVzIGluZm9zIGNvbm51ZXMgY29uY2VybmFudCBsZXMgcXVlc3Rpb25zXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd1F1ZXN0aW9uSW5mb3MgPSAoUXVlc3Rpb25zKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbnMsIFwiaDRcIiwgdHh0UXVlc3Rpb24uaW50cm9UaXRsZSk7Ly8gcmVtcGxhY2UgbCdleGlzdGFudCBkYW5zIGRpdlF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdFF1ZXN0aW9ucz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gUXVlc3Rpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFF1ZXN0aW9ucys9XCI8bGk+XCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLnRleHQrXCIgfCA8YSBocmVmPScjdXBkYXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQrXCInIGlkPScjdXBkYXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQrXCInID5cIit0eHQudXBkYXRlQnRuVHh0K1wiPC9hPiB8IDxhIGhyZWY9JyNkZWxldGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCtcIicgaWQ9JyNkZWxldGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCtcIicgPlwiK3R4dC5kZWxldGVCdG5UeHQrXCI8L2E+PC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYobGlzdFF1ZXN0aW9ucz09PVwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0UXVlc3Rpb25zPVwiPGxpPlwiK3R4dFF1ZXN0aW9uLmludHJvTm9RdWVzdGlvbitcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcInVsXCIsIGxpc3RRdWVzdGlvbnMsIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdLCBcIlwiLCBmYWxzZSk7Ly8gw6AgaW50w6lncmVyIGRhbnMgbGUgRE9NIHBvdXIgcG91dm9pciBham91dGVyIGRlcyBhZGRFdmVudExpc3RlbmVyIGVuc3VpdGVcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIFF1ZXN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjdXBkYXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9uSW5mb3MoUXVlc3Rpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2xpbmtzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiNkZWxldGVRdWVzdGlvblwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtUXVlc3Rpb25JbmZvcyhRdWVzdGlvbnNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbi5lbGVtZW50c1tcImRlbGV0ZU9rXCJdLnZhbHVlPXRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZFF1ZXN0aW9uRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlnLm5iUXVlc3Rpb25zTWF4ID4gUXVlc3Rpb25zLmxlbmd0aCB8fCBjb25maWcubmJRdWVzdGlvbnNNYXg9PT0wKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmKFF1ZXN0aW9ucy5sZW5ndGggPCBjb25maWcubmJRdWVzdGlvbnNNaW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbnMsIFwiYVwiLCB0eHQuYWRkQnRuVHh0LCBcIiNuZXdRdWVzdGlvblwiLCBbXCJlcnJvclwiXSwgeyBocmVmOlwiI25ld1F1ZXN0aW9uXCIgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcImFcIiwgdHh0LmFkZEJ0blR4dCwgXCIjbmV3UXVlc3Rpb25cIiwgW1wiaW5mb3JtYXRpb25cIl0sIHsgaHJlZjpcIiNuZXdRdWVzdGlvblwiIH0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI25ld1F1ZXN0aW9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiUXVlc3Rpb25uYWlyZUlkXCJdLnZhbHVlPWZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW1wiaWRcIl0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wicmFua1wiXS52YWx1ZT1jb25maWcuUXVlc3Rpb24ucmFuay5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNxdWVzdGlvbnNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5RdWVzdGlvbiwgZm9ybVF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBkJ3VuIGxpZW4gZGFucyBsZSBmb3JtdWxhaXJlIGFkaG9jXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0Zvcm1MaW5rSW5mb3MgPSAoTGluaykgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGNvbW1lbmNlIHBhciBjYWNoZXIgZXQgdmlkZXIgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlc1xuICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVpcyBvbiBhZmZpY2hlIGNlbHVpIGRvbnQgbCdpZCBlc3QgcGFzc8OpIGF2ZWMgc2VzIGRvbm7DqWVzIGNvbm51ZXNcbiAgICAgICAgICAgICAgICAgICAgZm9ybUxpbmsuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgZGF0YSBpbiBMaW5rKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtTGluay5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtTGluay5lbGVtZW50c1tkYXRhXS52YWx1ZT1MaW5rW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vICsgbGVzIGNvbnRyYWludGVzIGRlIGNoYW1wIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5MaW5rLCBmb3JtTGluayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEZvbmN0aW9uIGFmZmljaGFudCBsZXMgaW5mb3MgZCd1bmUgaWxsdXN0cmF0aW9uIGRhbnMgbGUgZm9ybXVsYWlyZSBhZGhvY1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MgPSAoSWxsdXN0cmF0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb24gY29tbWVuY2UgcGFyIGNhY2hlciBldCB2aWRlciB0b3VzIGxlcyBmb3JtdWxhaXJlcyBhbm5leGVzXG4gICAgICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBwdWlzIG9uIGFmZmljaGUgY2VsdWkgZG9udCBsJ2lkIGVzdCBwYXNzw6kgYXZlYyBzZXMgZG9ubsOpZXMgY29ubnVlc1xuICAgICAgICAgICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGRhdGEgaW4gSWxsdXN0cmF0aW9uKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtSWxsdXN0cmF0aW9uLmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbZGF0YV0udmFsdWU9SWxsdXN0cmF0aW9uW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vICsgbGVzIGNvbnRyYWludGVzIGRlIGNoYW1wIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5JbGx1c3RyYXRpb24sIGZvcm1JbGx1c3RyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAvLyBzYXVmIGxlIGNoYW1wIGZpbGUgcXVpIG4nZXN0IHBsdXMgcmVxdWlzIHF1YW5kIHVuIGZpY2hpZXIgZXhpc3RlIGTDqWrDoCAhXG4gICAgICAgICAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbXCJpbWFnZVwiXS5yZW1vdmVBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBkJ3VuZSBxdWVzdGlvbiArIHNlcyByw6lwb25zZXMgcG9zc2libGVzIGRhbnMgbGUgZm9ybXVsYWlyZSBhZGhvY1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dGb3JtUXVlc3Rpb25JbmZvcyA9IChRdWVzdGlvbikgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGNvbW1lbmNlIHBhciBjYWNoZXIgZXQgdmlkZXIgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlc1xuICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVpcyBvbiBhZmZpY2hlIGNlbHVpIGRvbnQgbCdpZCBlc3QgcGFzc8OpIGF2ZWMgc2VzIGRvbm7DqWVzIGNvbm51ZXNcbiAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGRhdGEgaW4gUXVlc3Rpb24uUXVlc3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1RdWVzdGlvbi5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbZGF0YV0udmFsdWU9UXVlc3Rpb24uUXVlc3Rpb25bZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIFF1ZXN0aW9uLkNob2ljZXMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1RdWVzdGlvbi5lbGVtZW50c1tcImNob2ljZVRleHRcIitkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJjaG9pY2VUZXh0XCIrZGF0YV0udmFsdWU9UXVlc3Rpb24uQ2hvaWNlc1tkYXRhXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFF1ZXN0aW9uLkNob2ljZXNbZGF0YV0uaXNDb3JyZWN0PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJjaG9pY2VJc0NvcnJlY3RcIitkYXRhXS5jaGVja2VkPXRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiaWRDaG9pY2VcIitkYXRhXS52YWx1ZT1RdWVzdGlvbi5DaG9pY2VzW2RhdGFdLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyArIGxlcyBjb250cmFpbnRlcyBkZSBjaGFtcCA6XG4gICAgICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWcuUXVlc3Rpb24sIGZvcm1RdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgdW4gcXVlc3Rpb25uYWlyZSBldCBzZXMgZMOpcGVuZGFuY2VzXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MgPSAoaWQpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWcuZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIitpZCk7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5RdWVzdGlvbm5haXJlICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLnJlc2V0KCk7Ly8gcG91ciBuZSBwYXMgZ2FyZGVyIGRvbm7DqWVzIGTDqWrDoCBhZmZpY2jDqWVzIHNpIHZpZGUgZGFucyBjZSBxdWkgZXN0IHJldG91cm7DqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGRhdGEgaW4gcmVzcG9uc2UuUXVlc3Rpb25uYWlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbZGF0YV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YT09PVwicHVibGlzaGluZ0F0XCIgJiYgcmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtkYXRhXSE9PW51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW2RhdGFdLnZhbHVlPWRhdGVGb3JtYXQocmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtkYXRhXSwgXCJmb3JtXCIpOy8vICEhIHJldm9pciBjYXIgZm9ybWF0IHBvdXZhbnQgcG9zZXIgc291Y2lzIHNpIG5hdmlnYXRldXIgbmUgZ8OocmUgcGFzIGxlcyBjaGFtcHMgZGUgdHlwZSBcImRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tkYXRhXS52YWx1ZT1yZXNwb25zZS5RdWVzdGlvbm5haXJlW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlRhZ3MgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsYXNzaWZpY2F0aW9uPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5UYWdzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uKz1yZXNwb25zZS5UYWdzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24rPVwiLFwiK3Jlc3BvbnNlLlRhZ3NbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImNsYXNzaWZpY2F0aW9uXCJdLnZhbHVlPWNsYXNzaWZpY2F0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZMaW5rcy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZRdWVzdGlvbnMuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2SWxsdXN0cmF0aW9ucy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5MaW5rcyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMaW5rSW5mb3MocmVzcG9uc2UuTGlua3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlF1ZXN0aW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbkluZm9zKHJlc3BvbnNlLlF1ZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuSWxsdXN0cmF0aW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbGx1c3RyYXRpb25JbmZvcyhyZXNwb25zZS5JbGx1c3RyYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwUHVibGlzaGluZ0F0LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7Ly8gaW5mbyB1dGlsZSBwb3VyIFwicGxhY2VyXCIgdW4gbm91dmVhdSBxdWl6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6AgcmV2b2lyIDogcmVtcGxhY2VyIGxpZW4gcG91ciB1biBib3V0b24gKyByZXNldCBjb21wbGV0IGR1IGZvcm11bGFpcmUsIHkgY29tcHJpcyBjaGFtcHMgaGlkZGVuIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG5OZXdRdWVzdGlvbm5haXJlLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bk5ld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBjb25maWdGcm9udEVuZC5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG5QcmV2aWV3UXVlc3Rpb25uYWlyZS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5RdWVzdGlvbm5haXJlW1wiaXNQdWJsaXNoZWRcIl09PT1mYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLnByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiK2lkK1wiL1wiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBjb25maWcuc2l0ZVVybCtjb25maWcucHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcytyZXNwb25zZS5RdWVzdGlvbm5haXJlW1wic2x1Z1wiXStcIi5odG1sXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNlbmQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCwgb24gZXNzYXllIGQnYWZmaWNoZXIgbGUgcXVlc3Rpb25uYWlyZSA6XG4gICAgICAgICAgICAgICAgbGV0IHVybERhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIGlmKHVybERhdGFzICYmIHVybERhdGFzLmlkIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyh1cmxEYXRhcy5pZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGVtZW50IGR1IGxhbmNlbWVudCBkJ3VuZSByZWNoZXJjaGVcbiAgICAgICAgICAgICAgICBmb3JtU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLnNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5sZW5ndGg9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCB0eHRRdWVzdGlvbm5haXJlLm5vdEZvdW5kLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdEhUTUw9XCI8b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhUTUwrPVwiPG9wdGlvbiB2YWx1ZT0nXCIrcmVzcG9uc2VbaV0uaWQrXCInPlwiK3Jlc3BvbnNlW2ldLnRpdGxlK1wiPC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJzZWxlY3RcIiwgc2VsZWN0SFRNTCwgXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hTZWxlY3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VhcmNoU2VsZWN0LnZhbHVlIT09XCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3Moc2VhcmNoU2VsZWN0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIExlcyBxdWVzdGlvbm5haXJlcyBiaWVudMO0dCBwdWJsacOpcy4gRGFucyB1bmUgZm9uY3Rpb24gY2FyIGRldmFudCDDqnRyZSByZWNoYXJnw6kuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd05leHRRdWVzdGlvbm5haXJlcyA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJOZXh0UXVlc3Rpb25uYWlyZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZy5nZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0SFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjxsaT5cIitkYXRlRm9ybWF0KHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmRhdGVQdWJsaXNoaW5nLCBcImZyXCIpK1wiOiA8YSBocmVmPSdcIitjb25maWdGcm9udEVuZC5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkK1wiJyBpZD0ncXVlc3Rpb25uYWlyZV9cIityZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pZCtcIic+XCIrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0udGl0bGUrXCI8L2E+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pc1B1Ymxpc2hhYmxlPT09ZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiIDxzcGFuIGNsYXNzPSdlcnJvcic+KFwiK3R4dFF1ZXN0aW9ubmFpcmUubmVlZEJlQ29tcGxldGVkK1wiKTwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCs9XCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcImgzXCIsIHR4dFF1ZXN0aW9ubmFpcmUubmV4dFF1ZXN0aW9ubmFpcmVzTGlzdC5yZXBsYWNlKFwiI05CXCIsIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGhlbHBQdWJsaXNoaW5nQXQsIFwiZW1cIiwgdHh0UXVlc3Rpb25uYWlyZS5uZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlK2RhdGVGb3JtYXQobmV3IERhdGUocmVzcG9uc2UuZGF0ZU5lZWRlZCksIFwiZnJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcInVsXCIsIGxpc3RIVE1MLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5xdWVzdGlvbm5haXJlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlX1wiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MoZS50YXJnZXQuaWQuc3BsaXQoXCJfXCIpWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1ZXN0aW9ubmFpcmVzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLnNlbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcygpO1xuIFxuICAgICAgICAgICAgICAgIC8vIEFpZGUgc2Fpc2llIGNsYXNzZW1lbnQgZHUgcXVpelxuICAgICAgICAgICAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFncz1pbnB1dENsYXNzaWZpY2F0aW9uLnZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGFncy5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUYWc9dGFnc1swXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGxhc3RUYWcubGVuZ3RoID49IDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOgIHJldm9pciA6IGltcG9ydGVyIGxhIGxpc3RlIGRlcyB0YWdzIGxvcnMgZGUgbCdpbml0aWFsaXNhdGlvbiBwb3VyIMOpdml0ZXIgbGVzIGFwcGVscyBtdWx0aXBsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1haXMgZGFucyBjZSBjYXMgYWN0dWFsaXNlciBjZXR0ZSBsaXN0ZSBhcHLDqHMgY2hhcXVlIG1pc2Ugw6Agam91ci5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaFRhZ3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Mub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZy50YWdzU2VhcmNoUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoVGFncy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscENsYXNzaWZpY2F0aW9uLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoaGVscENsYXNzaWZpY2F0aW9uLCBcImFcIiwgcmVzcG9uc2VbaV0ubmFtZSwgXCIjdGFnXCIrcmVzcG9uc2VbaV0uaWQsIFtcImluZm9ybWF0aW9uXCJdLCB7IGhyZWY6XCIjdGFnXCIrcmVzcG9uc2VbaV0uaWQgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI3RhZ1wiK3Jlc3BvbnNlW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnc1swXT1lLnRhcmdldC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENsYXNzaWZpY2F0aW9uLnZhbHVlPXRhZ3Muam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hUYWdzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoVGFncy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Muc2VuZChKU09OLnN0cmluZ2lmeSh7c2VhcmNoOiBsYXN0VGFnfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZHUgZm9ybXVsYWlyZSBkZXMgaW5mb3MgZGUgYmFzZSBkdSBxdWl6XG4gICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmUuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtUXVlc3Rpb25uYWlyZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclF1ZXN0aW9ubmFpcmVEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIitkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgcmVzcG9uc2UuaWQhPXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuYWRkT2tNZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuaWQ9cmVzcG9uc2UuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXMoKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UhPXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcygpOy8vIHBldXQgYXZvaXIgw6l2b2x1w6kgc3VpdmFudCBjZSBxdWkgcydlc3QgcGFzc8OpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rPT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyhkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBMJ2Vudm9pIGRlcyBkb25uw6llcyBkJ3VuIGxpZW4gcGV1dCDDqnRyZSBnw6luw6lyw6kgcGFyIGxlIGJvdXRvbiBmb3JtdWxhaXJlIG91IHBhciBsZSBsaWVuIHN1cHByaW1lclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRMaW5rRm9ybSA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZSZXNwb25zZUxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZUxpbmtcIik7XG4gICAgICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlTGluay5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtTGluayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockxpbmtEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKCFpc0VtcHR5KGRhdGFzLmRlbGV0ZU9rKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJMaW5rRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnLmxpbmtzUm91dGUrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhockxpbmtEYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWcubGlua3NSb3V0ZStkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHhockxpbmtEYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnLmxpbmtzUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB4aHJMaW5rRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gMjAxKSAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQgJiYgcmVzcG9uc2UucXVlc3Rpb25uYWlyZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xpbmtJbmZvcyhyZXNwb25zZS5xdWVzdGlvbm5haXJlLkxpbmtzKTsvLyBsZSBzZXJ2ZXVyIG1lIHJldG91cm5lIHVuZSB2ZXJzaW9uIGFjdHVhbGlzw6llIGRlIGxhIGxpc3RlIGRlcyBsaWVuc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkxpbmtzLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNsaW5rc0xpc3RcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXMoKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHR4dC5zZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZUxpbmssIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlTGluaywgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhockxpbmtEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyTGlua0RhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB4aHJMaW5rRGF0YXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtTGluay5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rRm9ybSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gTCdlbnZvaSBkZXMgZG9ubsOpZXMgZCd1biBsaWVuIHBldXQgw6p0cmUgZ8OpbsOpcsOpIHBhciBsZSBib3V0b24gZm9ybXVsYWlyZSBvdSBwYXIgbGUgbGllbiBzdXBwcmltZXJcbiAgICAgICAgICAgICAgICBjb25zdCBzZW5kSWxsdXN0cmF0aW9uRm9ybSA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZSZXNwb25zZUlsbHVzdHJhdGlvbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlSWxsdXN0cmF0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgICBkaXZSZXNwb25zZUlsbHVzdHJhdGlvbi5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtSWxsdXN0cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzV2l0aEZpbGVzPW5ldyBGb3JtRGF0YShmb3JtSWxsdXN0cmF0aW9uKTsgLy8gaWwgbWUgbWFucXVlIGxlcyBpbmZvcm1hdGlvbnMgZHUgZmljaGllciBhdmVjIG1hIGZvbmN0aW9uIGdldERhdGFzRnJvbUlucHV0c1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJJbGx1c3RyYXRpb25EYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKCFpc0VtcHR5KGRhdGFzLmRlbGV0ZU9rKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWcuaWxsdXN0cmF0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWcuaWxsdXN0cmF0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhySWxsdXN0cmF0aW9uRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy5pbGx1c3RyYXRpb25zUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLnN0YXR1cyA9PT0gMjAwIHx8IHRoaXMuc3RhdHVzID09PSAyMDEpICYmIHJlc3BvbnNlLm1lc3NhZ2UhPXVuZGVmaW5lZCAmJiByZXNwb25zZS5xdWVzdGlvbm5haXJlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93SWxsdXN0cmF0aW9uSW5mb3MocmVzcG9uc2UucXVlc3Rpb25uYWlyZS5JbGx1c3RyYXRpb25zKTsvLyBsZSBzZXJ2ZXVyIG1lIHJldG91cm5lIHVuZSB2ZXJzaW9uIGFjdHVhbGlzw6llIGRlIGxhIGxpc3RlIGRlcyBsaWVuc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdklsbHVzdHJhdGlvbnMsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2lsbHVzdHJhdGlvbnNMaXN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TmV4dFF1ZXN0aW9ubmFpcmVzKCk7Ly8gcGV1dCBhdm9pciDDqXZvbHXDqSBzdWl2YW50IGNlIHF1aSBzJ2VzdCBwYXNzw6lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2VJbGx1c3RyYXRpb24sIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhySWxsdXN0cmF0aW9uRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHhocklsbHVzdHJhdGlvbkRhdGFzLnNlbmQoZGF0YXNXaXRoRmlsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZElsbHVzdHJhdGlvbkZvcm0oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIC8vIEwnZW52b2kgZGVzIGRvbm7DqWVzIGQndW5lIHF1ZXN0aW9uIGV0IGRlIHNlcyByw6lwb25zZSBxdWkgcGV1dCDDqnRyZSBnw6luw6lyw6kgcGFyIGxlIGJvdXRvbiBzdWJtaXQgb3UgcGFyIGxlIGxpZW4gc3VwcHJpbWVyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VuZFF1ZXN0aW9uRm9ybSA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZSZXNwb25zZVF1ZXN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VRdWVzdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgZGl2UmVzcG9uc2VRdWVzdGlvbi5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJRdWVzdGlvbkRhdGFzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoIWlzRW1wdHkoZGF0YXMuZGVsZXRlT2spKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbnNSb3V0ZStkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbnNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gMjAxKSAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQgJiYgcmVzcG9uc2UucXVlc3Rpb25uYWlyZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1F1ZXN0aW9uSW5mb3MocmVzcG9uc2UucXVlc3Rpb25uYWlyZS5RdWVzdGlvbnMpOy8vIGxlIHNlcnZldXIgbWUgcmV0b3VybmUgdW5lIHZlcnNpb24gYWN0dWFsaXPDqWUgZGUgbGEgbGlzdGUgZGVzIHF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ucywgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVlc3Rpb25zTGlzdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcygpOy8vIHBldXQgYXZvaXIgw6l2b2x1w6kgc3VpdmFudCBjZSBxdWkgcydlc3QgcGFzc8OpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlUXVlc3Rpb24sIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlUXVlc3Rpb24sIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFF1ZXN0aW9uRm9ybSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IGVzdCBsaXNpYmxlIHN1ciBnaXRsYWIgOiBcXG4gQm9ubmUgbGVjdHVyZSA6LSkgXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gbGUgdG9rZW4gZXQgZGUgdG91dGUgZmHDp29uIHbDqXJpZmllciDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL2lsbHVzdHJhdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9saW5rJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9uJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3F1ZXN0aW9ubmFpcmUkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvdXNlciQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvZ2VuZXJhbC5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9pbGx1c3RyYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvbGluay5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9xdWVzdGlvbm5haXJlLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3VzZXIuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInJlZ2VuZXJhdGVIVE1MIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5lZWRVcmwiLCJuZWVkVW5pcXVlVXJsIiwibmVlZEdvb2RMb25nVXJsIiwibmVlZEdvb2RMb25nQWx0IiwibmVlZEdvb2RMb25nVGl0bGUiLCJuZWVkR29vZExvbmdDYXB0aW9uIiwibmVlZEdvb2RGaWxlIiwibmVlZFF1ZXN0aW9ubmFpcmVGb3JJbGx1c3RyYXRpb24iLCJuZWVkTWF4SWxsdXN0cmF0aW9uc0ZvclF1ZXN0aW9ubmFpcmUiLCJub3RGb3VuZCIsImFkZGVkT2tNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsImRlbGV0ZWRPa01lc3NhZ2UiLCJkZWZhdWx0QWx0IiwiaW50cm9UaXRsZSIsImludHJvTm9JbGx1c3RyYXRpb24iLCJuZWVkVmFsaWRVcmwiLCJuZWVkTm90VG9vTG9uZ1VybCIsIm5lZWRBbmNob3IiLCJuZWVkR29vZExvbmdBbmNob3IiLCJuZWVkUXVlc3Rpb25uYWlyZSIsIm5lZWRNYXhMaW5rc0ZvclF1ZXN0aW9ubmFpcmUiLCJpbnRyb05vTGluayIsIm5lZWRUZXh0IiwibmVlZE5vdFRvb0xvbmdUZXh0IiwibmVlZE1heFF1ZXN0aW9ucyIsImludHJvTm9RdWVzdGlvbiIsIm5lZWROdW1iZXJGb3JSYW5rIiwibmVlZFRpdGxlIiwibmVlZE5vdFRvb0xvbmdUaXRsZSIsIm5lZWRJbnRyb2R1Y3Rpb24iLCJuZWVkQ29ycmVjdFB1Ymxpc2hpbmdEYXRlIiwibmVlZEtub3dJZklzUHVibGlzaGVkIiwibmVlZExhbmd1YWdlIiwibmVlZEVzdGltYXRlZFRpbWUiLCJzZWFyY2hSZXN1bHRUaXRsZSIsInNlYXJjaE5vUmVzdWx0Iiwic2VhcmNoV2l0aFJlc3VsdCIsInF1ZXN0aW9ubmFpcmVzTmFtZSIsInB1Ymxpc2hlZEJ5IiwicHVibGlzaGVkQXQiLCJsYXN0VXBkYXRlZCIsImVzdGltYXRlZFRpbWUiLCJlc3RpbWF0ZWRUaW1lT3B0aW9uIiwic2hvcnQiLCJtZWRpdW0iLCJsb25nIiwiZXhwbGFuYXRpb25CZWZvcmVUeHQiLCJjb3JyZWN0QW5zd2VyVHh0Iiwid3JvbmdBbnN3ZXJUeHQiLCJidG5TZW5kUmVzcG9uc2UiLCJidG5Qcm9wb3NlU3Vic2NyaWJlIiwiYnRuUHJvcG9zZUNvbm5lY3Rpb24iLCJidG5TaG93UXVlc3Rpb25uYWlyZSIsImJ0blNoYXJlUXVpelR4dCIsIm5leHRRdWVzdGlvbm5haXJlc0xpc3QiLCJuZWVkQmVDb21wbGV0ZWQiLCJuZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlIiwiaGF2ZUJlZW5QdWJsaXNoZWQiLCJoYXZlQmVlblJlZ2VuZXJhdGVkIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0IiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsInR4dFF1ZXN0aW9ubmFpcmUiLCJ0eHRRdWVzdGlvbiIsInR4dExpbmsiLCJ0eHRJbGx1c3RyYXRpb24iLCJoZWxsb0RldiIsImRpdk1haW4iLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZGl2TWVzc2FnZSIsImRpdlJlc3BvbnNlIiwiZm9ybVF1ZXN0aW9ubmFpcmUiLCJpbnB1dENsYXNzaWZpY2F0aW9uIiwiaGVscENsYXNzaWZpY2F0aW9uIiwiaGVscFB1Ymxpc2hpbmdBdCIsImRlbGV0ZUNoZWNrQm94IiwiYnRuTmV3UXVlc3Rpb25uYWlyZSIsImJ0blByZXZpZXdRdWVzdGlvbm5haXJlIiwiZGl2UXVlc3Rpb25uYWlyZXMiLCJmb3JtU2VhcmNoIiwiZGl2U2VhcmNoUmVzdWx0IiwiZm9ybUxpbmsiLCJmb3JtSWxsdXN0cmF0aW9uIiwiZm9ybVF1ZXN0aW9uIiwiZGl2TGlua3MiLCJkaXZJbGx1c3RyYXRpb25zIiwiZGl2UXVlc3Rpb25zIiwiaW5pdGlhbGlzZSIsImdldENvbmZpZyIsImNvbmZpZyIsImFkZEVsZW1lbnQiLCJjaGVja1Nlc3Npb24iLCJtZXNzYWdlIiwiY29sb3IiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImlzQ29ubmVjdGVkIiwic3R5bGUiLCJkaXNwbGF5IiwiZ2V0TG9jYWx5IiwicmVtb3ZlTG9jYWx5IiwidXNlciIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaGlkZUFsbEZvcm1zIiwiZW1weUFuZEhpZGVGb3JtIiwic2hvd0xpbmtJbmZvcyIsIkxpbmtzIiwibGlzdExpbmtzIiwiaSIsInVybCIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJzaG93Rm9ybUxpbmtJbmZvcyIsImFzc2lnbiIsImVsZW1lbnRzIiwic2VuZExpbmtGb3JtIiwiTGluayIsInNob3dJbGx1c3RyYXRpb25JbmZvcyIsIklsbHVzdHJhdGlvbnMiLCJsaXN0SWxsdXN0cmF0aW9ucyIsInNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MiLCJzZW5kSWxsdXN0cmF0aW9uRm9ybSIsIklsbHVzdHJhdGlvbiIsInNob3dRdWVzdGlvbkluZm9zIiwiUXVlc3Rpb25zIiwibGlzdFF1ZXN0aW9ucyIsInNob3dGb3JtUXVlc3Rpb25JbmZvcyIsInNlbmRRdWVzdGlvbkZvcm0iLCJjb25zb2xlIiwibG9nIiwiZGF0YSIsInJlbW92ZUF0dHJpYnV0ZSIsIkNob2ljZXMiLCJpc0NvcnJlY3QiLCJjaGVja2VkIiwic2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MiLCJ4aHJHZXRJbmZvcyIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJyZXNldCIsImRhdGVGb3JtYXQiLCJUYWdzIiwiY2xhc3NpZmljYXRpb24iLCJzZXRBdHRyaWJ1dGUiLCJ0b2tlbiIsInNlbmQiLCJ1cmxEYXRhcyIsImdldFVybFBhcmFtcyIsImRhdGFzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwieGhyU2VhcmNoIiwiQXJyYXkiLCJpc0FycmF5Iiwic2VsZWN0SFRNTCIsInNlYXJjaFNlbGVjdCIsInNldFJlcXVlc3RIZWFkZXIiLCJzdHJpbmdpZnkiLCJzaG93TmV4dFF1ZXN0aW9ubmFpcmVzIiwieGhyTmV4dFF1ZXN0aW9ubmFpcmVzIiwibGlzdEhUTUwiLCJkYXRlUHVibGlzaGluZyIsImlzUHVibGlzaGFibGUiLCJkYXRlTmVlZGVkIiwidGFyZ2V0Iiwic3BsaXQiLCJpbm5lckhUTUwiLCJ0YWdzIiwicmV2ZXJzZSIsImxhc3RUYWciLCJ4aHJTZWFyY2hUYWdzIiwic2VhcmNoIiwieGhyUXVlc3Rpb25uYWlyZURhdGFzIiwiZGVsZXRlT2siLCJlcnJvcnMiLCJkaXZSZXNwb25zZUxpbmsiLCJ4aHJMaW5rRGF0YXMiLCJsaW5rc1JvdXRlIiwicXVlc3Rpb25uYWlyZSIsImRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uIiwiZGF0YXNXaXRoRmlsZXMiLCJGb3JtRGF0YSIsInhocklsbHVzdHJhdGlvbkRhdGFzIiwiaWxsdXN0cmF0aW9uc1JvdXRlIiwiZGl2UmVzcG9uc2VRdWVzdGlvbiIsInhoclF1ZXN0aW9uRGF0YXMiLCJlcnJvciIsInNhdmVMb2NhbHkiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwiYXBwZW5kQ2hpbGQiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJob21lUGFnZSIsImlucHV0c0NvbmYiLCJteUZvcm0iLCJpZElucHV0IiwiaW5wdXRIVE1MIiwiYXR0cmlidXRlIiwiZm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwiZW1weUZvcm0iLCJ0eXBlIiwicGFyYW1ldGVycyIsInBhcmFtIiwiZGVjb2RlVVJJIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FB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TUFBTSxDQUFDQyxHQUFHLENBQUNHLFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBSCxxQkFBRyxDQUFDOUUsSUFBSjtBQUNIO0FBQ0o7QUFDSixhQXRFTSxDQUZpQjs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFaaEUsWUFBWTtBQUFBO0FBQUE7QUFBQSxHQUFsQixDLENBMEVQOztBQUNBLElBQU15SyxZQUFZLEdBQUcsU0FBZkEsWUFBZSxDQUFDSCxjQUFELEVBQWlCckssT0FBakIsRUFBMEJzSyxTQUExQixFQUNyQjtBQUNJLE1BQUcsQ0FBQzVRLDJEQUFPLENBQUNzRyxPQUFELENBQVgsRUFDSXdHLG9FQUFVLENBQUMsU0FBRCxFQUFZeEcsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDdEcsMkRBQU8sQ0FBQzRRLFNBQUQsQ0FBWCxFQUNJOUQsb0VBQVUsQ0FBQyxLQUFELEVBQVE4RCxTQUFSLENBQVY7QUFDSixNQUFHLENBQUM1USwyREFBTyxDQUFDMlEsY0FBRCxDQUFYLEVBQ0luSyxNQUFNLENBQUNDLFFBQVAsQ0FBZ0JxQixNQUFoQixDQUF1QjZJLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbWFuYWdlUXVlc3Rpb25uYWlyZXMuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLC8vIGlkZW1cbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLy8gbGltaXRlIGxlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvaWxsdXN0cmF0aW9uXCI6IFwiLi4vbGFuZy9mci9pbGx1c3RyYXRpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9pbGx1c3RyYXRpb24kXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2xpbmtcIjogXCIuLi9sYW5nL2ZyL2xpbmsuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9saW5rJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9xdWVzdGlvblwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9xdWVzdGlvbiRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvcXVlc3Rpb25uYWlyZVwiOiBcIi4uL2xhbmcvZnIvcXVlc3Rpb25uYWlyZS5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3F1ZXN0aW9ubmFpcmUkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBXaWtpcMOpZGlhIGVuIHF1ZXN0aW9uc1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCByZWNldmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlYXV4IHF1aXpzIHBvdXIgdGVzdGVyIHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbmVlZFVybCA6IFwiTWVyY2kgZGUgZm91cm5pciB1bmUgdXJsIHBvdXIgbCdpbWFnZS5cIixcbiAgICBuZWVkVW5pcXVlVXJsIDogXCJMJ3VybCBlc3QgZMOpasOgIHV0aWxpc8OpZSBwYXIgdW5lIGF1dHJlIGltYWdlLlwiLFxuICAgIG5lZWRHb29kTG9uZ1VybCA6IFwiTCd1cmwgZGUgbCdpbWFnZSBkb2l0IGNvbnRlbmlyIGVudHJlIDUgZXQgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRHb29kTG9uZ0FsdCA6IFwiTGUgdGV4dGUgZGUgbGEgcHJvcHJpw6l0w6kgJ2FsdCcgbmUgZG9pdCBwYXMgY29tcHRlciBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkR29vZExvbmdUaXRsZSA6IFwiTGUgdGV4dGUgZGUgbGEgcHJvcHJpw6l0w6kgJ3RpdGxlJyBuZSBkb2l0IHBhcyBjb21wdGVyIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRHb29kTG9uZ0NhcHRpb24gOiBcIkxlIHRleHRlIGRlIGxhIGzDqWdlbmRlIGRlIGwnaW1hZ2UgbmUgZG9pdCBwYXMgY29tcHRlciBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkR29vZEZpbGUgOiBcIlZvdHJlIGZpY2hpZXIgbidhIHBhcyDDqXTDqSBhY2NlcHTDqS5cIixcbiAgICBuZWVkUXVlc3Rpb25uYWlyZUZvcklsbHVzdHJhdGlvbiA6IFwiVGVudGF0aXZlIGQnYWpvdXQvbWlzZSDDoCBqb3VyL3N1cHByZWVzc2lvbiBkJ3VuZSBpbGx1c3RyYXRpb24gcG91ciB1biBxdWVzdGlvbm5haXJlIG4nYXlhbnQgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE1heElsbHVzdHJhdGlvbnNGb3JRdWVzdGlvbm5haXJlIDogXCJWb3VzIGF2ZXogZMOpasOgIGF0dGVpbnQgbGUgbm9tYnJlIG1heGltYWwgZCdpbGx1c3RyYXRpb25zIHBvdXIgY2UgcXVlc3Rpb25uYWlyZS5cIixcbiAgICBub3RGb3VuZDogXCJMJ2VucmVnaXN0cmVtZW50IGRlIGwnaWxsdXN0cmF0aW9uIG4nYSBwYXMgw6l0w6kgdHJvdXbDqSA6IFwiLFxuICAgIGFkZGVkT2tNZXNzYWdlOiBcIkwnaWxsdXN0cmF0aW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJMJ2lsbHVzdHJhdGlvbiBhIGJpZW4gw6l0w6kgbW9kaWZpw6llLlwiLFxuICAgIGRlbGV0ZWRPa01lc3NhZ2U6IFwiTCdpbGx1c3RyYXRpb24gYSBiaWVuIMOpdMOpIHN1cHByaW3DqWUuXCIsXG4gICAgZGVmYXVsdEFsdCA6IFwiSWxsdXN0cmF0aW9uIGR1IHF1aXpcIixcbiAgICBpbnRyb1RpdGxlIDogXCJJbGx1c3RyYXRpb25zIGR1IHF1aXpcIixcbiAgICBpbnRyb05vSWxsdXN0cmF0aW9uIDogXCJBdWN1bmUgaWxsdXN0cmF0aW9uIHBvdXIgbCdpbnN0YW50LlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkVXJsIDogXCJNZXJjaSBkZSAgc2Fpc2lyIGwndXJsIGR1IGxpZW4uXCIsXG4gICAgbmVlZFZhbGlkVXJsIDogXCJNZXJjaSBkZSAgc2Fpc2lyIHVuIHVybCBheWFudCB1biBmb3JtYXQgdmFsaWRlLlwiLFxuICAgIG5lZWROb3RUb29Mb25nVXJsIDogXCJNZXJjaSBkZSAgc2Fpc2lyIHVuIHVybCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEFuY2hvciA6IFwiTWVyY2kgZGUgZm91cm5pciB1bmUgYW5jcmUgcG91ciBjZSBsaWVuLlwiLFxuICAgIG5lZWRHb29kTG9uZ0FuY2hvciA6IFwiTWVyY2kgZGUgZm91cm5pciB1bmUgYW5jcmUgcG91ciBjZSBsaWVuIGNvbXB0YW50IGVudHJlIDUgZXQgMTUwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRRdWVzdGlvbm5haXJlIDogXCJMZSBxdWVzdGlvbm5haXJlIGR1IGxpZW4gbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWRNYXhMaW5rc0ZvclF1ZXN0aW9ubmFpcmUgOiBcIlZvdXMgYXZleiBkw6lqw6AgYXR0ZWludCBsZSBub21icmUgbWF4aW1hbCBkZSBsaWVucyBwb3VyIGNlIHF1ZXN0aW9ubmFpcmUuXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJMZSBsaWVuIGEgYmllbiDDqXTDqSBtb2RpZmnDqS5cIixcbiAgICBhZGRlZE9rTWVzc2FnZTogXCJMZSBsaWVuIGEgYmllbiDDqXTDqSBham91dMOpLlwiLFxuICAgIGRlbGV0ZWRPa01lc3NhZ2U6IFwiTGUgbGllbiBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIG5vdEZvdW5kIDogXCJMJ2VucmVnaXN0cmVtZW50IGR1IGxpZW4gbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIGludHJvVGl0bGUgOiBcIkxlY3R1cmVzIHByb3Bvc8OpZXNcIixcbiAgICBpbnRyb05vTGluayA6IFwiQXVjdW4gbGllbiBwb3VyIGwnaW5zdGFudC5cIixcbiAgICBkZWZhdWx0VmFsdWU6IFwiTGlyZSBsJ2FydGljbGUgc3VyIFdpa2lww6lkaWEuXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWRUZXh0OiBcIk1lcmNpIGRlIHNhaXNpciBsZSB0ZXh0ZSBkZSBsYSBxdWVzdGlvbiAhXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdUZXh0OiBcIkxhIHF1ZXN0aW9uIG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFF1ZXN0aW9ubmFpcmU6IFwiTGUgcXVlc3Rpb25uYWlyZSBjb25jZXJuw6kgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWRNYXhRdWVzdGlvbnM6IFwiVm91cyBhdmV6IGTDqWrDoCBhdHRlaW50IGxlIG5vbWJyZSBtYXhpbWFsIGRlIHF1ZXN0aW9ucyBwb3VyIGNlIHF1ZXN0aW9ubmFpcmUgOiBcIixcbiAgICBub3RGb3VuZDogXCJMJ2VucmVnaXN0cmVtZW50IGRlIGxhIHF1ZXN0aW9uIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBhZGRPa01lc3NhZ2U6IFwiTGEgcXVlc3Rpb24gYSBiaWVuIMOpdMOpIGFqb3V0w6llLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZTogXCJMYSBxdWVzdGlvbiBhIGJpZW4gw6l0w6kgbW9kaWZpw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMYSBxdWVzdGlvbiBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpZS5cIixcbiAgICBpbnRyb1RpdGxlOiBcIkxlcyBxdWVzdGlvbnMgZW5yZWdpc3Ryw6llc1wiLFxuICAgIGludHJvTm9RdWVzdGlvbjogXCJBdWN1bmUgcXVlc3Rpb24gbidhIMOpdMOpIHNhaXNpZSBwb3VyIGwnaW5zdGFudFwiLFxuICAgIG5lZWROdW1iZXJGb3JSYW5rIDogXCJWb3VzIGRldmV6IGZvdXJuaXIgdW4gbm9tYnJlIHN1cMOpcmlldXIgb3Ugw6lnYWwgw6AgMSBwb3VyIGxlIHJhbmcgZGUgY2V0dGUgcXVlc3Rpb24uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWRUaXRsZTogXCJNZXJjaSBkZSBmb3VybmlyIHVuIHRpdHJlIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdUaXRsZTogXCJMZSB0aXRyZSBkdSBxdWl6IG5lIGRvaXQgcGFzIGNvbXB0ZXIgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFVybDogXCJNZXJjaSBkZSBmb3VybmlyIGwndXJsIMOgIHZvdHJlIHF1aXouXCIsXG4gICAgbmVlZFVuaXF1ZVVybDogXCJMJ3VybCBkdSBxdWl6IGRvaXQgw6p0cmUgdW5pcXVlLlwiLFxuICAgIG5lZWRJbnRyb2R1Y3Rpb246IFwiTWVyY2kgZGUgZm91cm5pciB1biB0ZXh0ZSBkJ2ludHJvZHVjdGlvbiDDoCB2b3RyZSBxdWl6LlwiLFxuICAgIG5lZWRDb3JyZWN0UHVibGlzaGluZ0RhdGU6IFwiTGEgZGF0ZSBkZSBwdWJsaWNhdGlvbiBmb3VybmllIG4nYSBwYXMgdW4gZm9ybWF0IHZhbGlkZS5cIixcbiAgICBuZWVkS25vd0lmSXNQdWJsaXNoZWQ6IFwiSWwgZmF1dCBzYXZvaXIgc2kgY2UgcXVpeiBlc3QgcHVibGnDqS5cIixcbiAgICBuZWVkTGFuZ3VhZ2U6IFwiVm91cyBkZXZleiBzw6lsZWN0aW9ubmVyIGxhIGxhbmd1ZSBkZSBjZSBxdWl6LlwiLFxuICAgIG5lZWRFc3RpbWF0ZWRUaW1lOiBcIk1lcmNpIGRlIHPDqWxlY3Rpb25uZXIgdW5lIGVzdGltYXRpb24gZGUgbGEgZHVyw6llIGRlIGNlIHF1aXouXCIsXG4gICAgbm90Rm91bmQgOiBcIkF1Y3VuIHF1aXogbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIHNlYXJjaFJlc3VsdFRpdGxlIDogXCJSw6lzdWx0YXQgcG91ciB2b3RyZSByZWNoZXJjaGVcIixcbiAgICBzZWFyY2hOb1Jlc3VsdCA6IFwiQXVjdW4gcsOpc3VsdGF0IG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgdm90cmUgcmVjaGVyY2hlXCIsXG4gICAgc2VhcmNoV2l0aFJlc3VsdCA6IFwiVm9pY2kgI05CIHF1aXpzIHBvdXIgdm90cmUgcmVjaGVyY2hlIDpcIixcbiAgICBxdWVzdGlvbm5haXJlc05hbWU6IFwicXVpelwiLFxuICAgIHB1Ymxpc2hlZEJ5OiBcIlF1aXogcHVibGnDqSBwYXJcIixcbiAgICBwdWJsaXNoZWRBdDogXCIsIGxlXCIsXG4gICAgbGFzdFVwZGF0ZWQ6IFwiRGVybmnDqHJlIG1pc2Ugw6Agam91ciwgbGUgXCIsXG4gICAgZXN0aW1hdGVkVGltZTogXCJEdXLDqWUgZGUgbGVjdHVyZSBlc3RpbcOpZSA6IFwiLFxuICAgIGVzdGltYXRlZFRpbWVPcHRpb24gOlxuICAgIHtcbiAgICAgICAgc2hvcnQ6IFwiY291cnRlXCIsXG4gICAgICAgIG1lZGl1bTogXCJtb3llbm5lXCIsXG4gICAgICAgIGxvbmc6IFwibG9uZ3VlXCJcbiAgICB9LFxuICAgIGV4cGxhbmF0aW9uQmVmb3JlVHh0OiBcIkV4dHJhaXQgOlwiLFxuICAgIGNvcnJlY3RBbnN3ZXJUeHQ6IFwiQm9ubmUgcsOpcG9uc2VcIixcbiAgICB3cm9uZ0Fuc3dlclR4dDogXCJNYXV2YWlzZSByw6lwb25zZVwiLFxuICAgIGJ0blNlbmRSZXNwb25zZTogXCJUZXN0ZXogdm9zIHLDqXBvbnNlcy5cIixcbiAgICBidG5Qcm9wb3NlU3Vic2NyaWJlOiBcIkplIGNyw6llIG1vbiBjb21wdGUuXCIsXG4gICAgYnRuUHJvcG9zZUNvbm5lY3Rpb246IFwiSmUgbWUgY29ubmVjdGUuXCIsXG4gICAgYnRuU2hvd1F1ZXN0aW9ubmFpcmU6IFwiQWZmaWNoZXIgbGUgcXVpeiAhXCIsXG4gICAgYnRuU2hhcmVRdWl6VHh0OiBcIlBhcnRhZ2VyIGNlIHF1aXogc3VyIFwiLFxuICAgIG5leHRRdWVzdGlvbm5haXJlc0xpc3Q6IFwiTGVzICNOQiBwcm9jaGFpbnMgcXVpenMgZGV2YW50IMOqdHJlIHB1Ymxpw6lzXCIsXG4gICAgbmVlZEJlQ29tcGxldGVkOiBcIlF1aXogaW5jb21wbGV0XCIsXG4gICAgbmV4dERhdGVXaXRob3V0UXVlc3Rpb25uYWlyZTogXCJQcm9jaGFpbmUgZGF0ZSBzYW5zIHF1aXogcHJvZ3JhbW3DqSA6IFwiLFxuICAgIGhhdmVCZWVuUHVibGlzaGVkIDogXCI6TkIgbm91dmVhdXggcXVlc3Rpb25uYWlyZXMgb250IMOpdMOpIHB1Ymxpw6lzLlwiLFxuICAgIGhhdmVCZWVuUmVnZW5lcmF0ZWQgOiBcIkxlcyBmaWNoaWVycyBIVE1MIGRlICNOQjEgcXVlc3Rpb25uYWlyZXMgZXQgI05CMiBydWJyaXF1ZXMgb250IMOpdMOpIHJlZ8OpbsOpcsOpcy5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyB2b3RyZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciAoQ3RybCtWKSBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmllcnMgcXVpenNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogOSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJtb24tY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhIDxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKTwvc3Bhbj4sIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvc3Bhbj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSAhXCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogXCJUZXN0ZXIgV2lraUxlcm5pIGdyYXR1aXRlbWVudC5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5TdWl2YW50IGxlcyBxdWVzdGlvbnMsIHVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzIGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gPGI+Qydlc3QgdG91am91cnMgbGUgY29udGVudSBkZSBsJ2FydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2kgY29uY2VybmFudCBsZXMgXFxcImJvbm5lc1xcXCIgcsOpcG9uc2VzPC9iPi4gTWFpcyBsZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlcywgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50PC9iPi48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuIENlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSA8Yj50ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6PC9iPiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEdyw6JjZSDDoCBjZSBjb21wdGUsIHZvdXMgcG91cnJleiBhdXNzaSA8Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenM8L2I+IHBvdXIgY29udGludWVyIMOgIFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCJMZXMgZGVybmnDqHJlcyBncmFpbmVzIGRlIHNhdm9pclwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBERSBTQUlTSVIgLyDDiURJVEVSIExFUyBRVUlaUyBFVCBMRVVSUyBEw4lQRU5EQU5DRVMgKExJRU5TLCBJTUFHRVMsIFRBR1MsIEVUQy4pXG5cbi8vLyBWw6lyaWZpZSBxdWUgbCd1dGlsaXNhdGV1ciBlc3QgYmllbiBjb25uZWN0w6ksIGEgbGUgYm9uIHN0YXR1dCBldCBsZSByZWRpcmlnZSB2ZXJzIGxlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbiBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLlxuLy8vIFNpIGMnZXN0IG9rLCBwcm9wb3NlIHVuIG1vdGV1ciBkZSByZWNoZXJjaGUgcGVybWV0dGFudCBkZSBjaGVyY2hlciB1biBxdWl6XG4vLy8gU2kgdW4gaWQgZXN0IHBhc3PDqSBwYXIgbCd1cmwgb24gYWZmaWNoZSBsZXMgaW5mb3JtYXRpb25zIGR1IHF1aXogZGFucyB1biBmb3JtdWxhaXJlIHBlcm1ldHRhbnQgZGUgbCfDqWRpdGVyL3N1cHByaW1lciBhdmVjIHVuZSBsaXN0ZSBkZXMgw6lsw6ltZW50cyBsacOpcyAobGllbnMsIGlsbHVzdHJhdGlvbnMsIHF1ZXN0aW9ucy4uLikgcG91dmFudCBldXgtbcOqbWVzIMOqdHJlIMOpZGl0w6lzL3N1cHByaW3DqXMuXG4vLy8gU2kgbGUgbm9tYnJlIG1heCBjb25maWd1csOpIHBvdXIgY2hhY3VuIGRlIHNlcyDDqWzDqW1lbnRzIG4nZXN0IHBhcyBhdHRlaW50LCBpbCBlc3QgYXVzc2kgcHJvcG9zw6kgZCdham91dGVyIHVuIG5vdXZlbCDDqWzDqW1lbnQuXG4vLy8gU2lub24gcGFzIGQnaWQgcGFzc8OpIHBhciBsJ3VybCwgb24gYWZmaWNoZSB1biBmb3JtdWxhaXJlIHZpZGUgcGVybWV0dGFudCBkJ2VuIHNhaXNpciB1biBub3V2ZWF1IGF2ZWMgc2VzIHRhZ3MuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6ICEhIHJldm9pciBxdWFuZCBsZSByZXN0ZSBzZXJhIGZpbmkgcG91ciB2w6lyaWZpZXIgc2kgdG91dCBlc3QgdXRpbGVcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZW1weUFuZEhpZGVGb3JtLCBlbXB5Rm9ybSwgZ2V0RGF0YXNGcm9tSW5wdXRzLCBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMgfSBmcm9tIFwiLi90b29scy9mb3Jtcy5qc1wiO1xuaW1wb3J0IHsgZGF0ZUZvcm1hdCwgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi90b29scy9tYWluXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB0eHRVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcbmNvbnN0IHR4dFF1ZXN0aW9ubmFpcmUgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3F1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCB0eHRRdWVzdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvcXVlc3Rpb25cIik7XG5jb25zdCB0eHRMaW5rID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9saW5rXCIpO1xuY29uc3QgdHh0SWxsdXN0cmF0aW9uID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9pbGx1c3RyYXRpb25cIik7XG5cbmhlbGxvRGV2KCk7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBkaXZNYWluID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtYWluLWNvbnRlbnRcIik7XG5jb25zdCBkaXZNZXNzYWdlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtZXNzYWdlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgZm9ybVF1ZXN0aW9ubmFpcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVzXCIpO1xuY29uc3QgaW5wdXRDbGFzc2lmaWNhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2xhc3NpZmljYXRpb25cIik7XG5jb25zdCBoZWxwQ2xhc3NpZmljYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlbHBDbGFzc2lmaWNhdGlvblwiKTtcbmNvbnN0IGhlbHBQdWJsaXNoaW5nQXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImhlbHBQdWJsaXNoaW5nQXRcIik7XG5jb25zdCBkZWxldGVDaGVja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlT2tMYWJlbFwiKTtcbmNvbnN0IGJ0bk5ld1F1ZXN0aW9ubmFpcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndhbnROZXdRdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInByZXZpZXdRdWVzdGlvbm5haXJlXCIpO1xuXG5jb25zdCBkaXZRdWVzdGlvbm5haXJlcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZXNMaXN0XCIpO1xuXG5jb25zdCBmb3JtU2VhcmNoID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hcIik7XG5jb25zdCBkaXZTZWFyY2hSZXN1bHQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlYXJjaFJlc3VsdFwiKTtcblxuY29uc3QgZm9ybUxpbmsgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxpbmtzXCIpO1xuY29uc3QgZm9ybUlsbHVzdHJhdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaWxsdXN0cmF0aW9uc1wiKTtcbmNvbnN0IGZvcm1RdWVzdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25zXCIpO1xuY29uc3QgZGl2TGlua3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImxpbmtzTGlzdFwiKTtcbmNvbnN0IGRpdklsbHVzdHJhdGlvbnMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImlsbHVzdHJhdGlvbnNMaXN0XCIpO1xuY29uc3QgZGl2UXVlc3Rpb25zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbnNMaXN0XCIpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7ICAgICAgICBcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1wibWFuYWdlclwiLCBcImFkbWluXCJdLCBcIi9cIitjb25maWdGcm9udEVuZC5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiB0eHRVc2Vycy5uZWVkQmVDb25uZWN0ZWQsIGNvbG9yOlwiZXJyb3JcIiB9LCB3aW5kb3cubG9jYXRpb24pO1xuICAgICAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgZGl2TWFpbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICB1cGRhdGVBY2NvdW50TGluayh1c2VyLnN0YXR1cywgY29uZmlnRnJvbnRFbmQpO1xuXG4gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzYXRpb24gZHUgZm9ybXVsYWlyZSBkZSByZWNoZXJjaGUgOlxuICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWcsIGZvcm1TZWFyY2gpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2UgbGUgZm9ybXVsYWlyZSBwZXJtZXR0YW50IGRlIG1ldHRyZSDDoCBqb3VyIGxlcyBpbmZvcyBkZSBiYXNlIGR1IHF1ZXN0aW9ubmFpcmUgOlxuICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWcuUXVlc3Rpb25uYWlyZSwgZm9ybVF1ZXN0aW9ubmFpcmUpO1xuICAgICAgICAgICAgICAgIC8vIENhc2UgZGUgc3VwcHJlc3Npb24gY2FjaMOpZSBwYXIgZMOpZmF1dCwgY2FyIGludXRpbGUgcG91ciBmb3JtdWxhaXJlIGRlIGNyw6lhdGlvblxuICAgICAgICAgICAgICAgIGRlbGV0ZUNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG5cbiAgICAgICAgICAgICAgICAvLyBGb25jdGlvbiB2aWRhbnQgZXQgY2FjaGFudCB0b3VzIGxlcyBmb3JtdWxhaXJlcyBhbm5leGVzXG4gICAgICAgICAgICAgICAgY29uc3QgaGlkZUFsbEZvcm1zID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVtcHlBbmRIaWRlRm9ybShmb3JtTGluayk7XG4gICAgICAgICAgICAgICAgICAgIGlmKHR4dExpbmsuZGVmYXVsdFZhbHVlIT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhbmNob3JcIikudmFsdWU9dHh0TGluay5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGVtcHlBbmRIaWRlRm9ybShmb3JtSWxsdXN0cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgZW1weUFuZEhpZGVGb3JtKGZvcm1RdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEFmZmljaGUgbGVzIGluZm9zIGNvbm51ZXMgY29uY2VybmFudCBsZXMgbGllbnNcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93TGlua0luZm9zID0gKExpbmtzKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZMaW5rcywgXCJoNFwiLCB0eHRMaW5rLmludHJvVGl0bGUpOy8vIHJlbXBsYWNlIGwnZXhpc3RhbnQgZGFucyBkaXZMaW5rc1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdExpbmtzPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBMaW5rcylcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RMaW5rcys9XCI8bGk+PGEgaHJlZj0nXCIrTGlua3NbaV0udXJsK1wiJyB0YXJnZXQ9J19ibGFuayc+XCIrTGlua3NbaV0uYW5jaG9yK1wiPC9hPiB8IDxhIGhyZWY9JyN1cGRhdGVMaW5rXCIrTGlua3NbaV0uaWQrXCInIGlkPScjdXBkYXRlTGlua1wiK0xpbmtzW2ldLmlkK1wiJyA+XCIrdHh0LnVwZGF0ZUJ0blR4dCtcIjwvYT4gfCA8YSBocmVmPScjZGVsZXRlTGlua1wiK0xpbmtzW2ldLmlkK1wiJyBpZD0nI2RlbGV0ZUxpbmtcIitMaW5rc1tpXS5pZCtcIicgPlwiK3R4dC5kZWxldGVCdG5UeHQrXCI8L2E+PC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgaWYobGlzdExpbmtzPT09XCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RMaW5rcz1cIjxsaT5cIit0eHRMaW5rLmludHJvTm9MaW5rK1wiPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZMaW5rcywgXCJ1bFwiLCBsaXN0TGlua3MsIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdLCBcIlwiLCBmYWxzZSk7Ly8gw6AgaW50w6lncmVyIGRhbnMgbGUgRE9NIHBvdXIgcG91dm9pciBham91dGVyIGRlcyBhZGRFdmVudExpc3RlbmVyIGVuc3VpdGVcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIExpbmtzKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiN1cGRhdGVMaW5rXCIrTGlua3NbaV0uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybUxpbmtJbmZvcyhMaW5rc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNsaW5rc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjZGVsZXRlTGlua1wiK0xpbmtzW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1MaW5rSW5mb3MoTGlua3NbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1MaW5rLmVsZW1lbnRzW1wiZGVsZXRlT2tcIl0udmFsdWU9dHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kTGlua0Zvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmKGNvbmZpZy5uYkxpbmtzTWF4ID4gTGlua3MubGVuZ3RoIHx8IGNvbmZpZy5uYkxpbmtzTWF4PT09MClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoTGlua3MubGVuZ3RoIDwgY29uZmlnLm5iTGlua3NNaW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZMaW5rcywgXCJhXCIsIHR4dC5hZGRCdG5UeHQsIFwiI25ld0xpbmtcIiwgW1wiZXJyb3JcIl0sIHsgaHJlZjpcIiNuZXdMaW5rXCIgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TGlua3MsIFwiYVwiLCB0eHQuYWRkQnRuVHh0LCBcIiNuZXdMaW5rXCIsIFtcImluZm9ybWF0aW9uXCJdLCB7IGhyZWY6XCIjbmV3TGlua1wiIH0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI25ld0xpbmtcIikuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1MaW5rLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1MaW5rLmVsZW1lbnRzW1wiUXVlc3Rpb25uYWlyZUlkXCJdLnZhbHVlPWZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW1wiaWRcIl0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNsaW5rc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnLkxpbmssIGZvcm1MaW5rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEFmZmljaGUgbGVzIGluZm9zIGNvbm51ZXMgY29uY2VybmFudCBsZXMgaWxsdXN0cmF0aW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dJbGx1c3RyYXRpb25JbmZvcyA9IChJbGx1c3RyYXRpb25zKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZJbGx1c3RyYXRpb25zLCBcImg0XCIsIHR4dElsbHVzdHJhdGlvbi5pbnRyb1RpdGxlKTsvLyByZW1wbGFjZSBsJ2V4aXN0YW50IGRhbnMgZGl2SWxsdXN0cmF0aW9uc1xuICAgICAgICAgICAgICAgICAgICBsZXQgbGlzdElsbHVzdHJhdGlvbnM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIElsbHVzdHJhdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0SWxsdXN0cmF0aW9ucys9XCI8bGk+PGEgaHJlZj0nXCIrY29uZmlnRnJvbnRFbmQuaWxsdXN0cmF0aW9uRGlyK0lsbHVzdHJhdGlvbnNbaV0udXJsK1wiJyB0YXJnZXQ9J19ibGFuayc+PGltZyBzcmM9J1wiK2NvbmZpZ0Zyb250RW5kLmlsbHVzdHJhdGlvbkRpcitJbGx1c3RyYXRpb25zW2ldLnVybCtcIicgYWx0PSdcIit0eHRJbGx1c3RyYXRpb24uZGVmYXVsdEFsdCtcIicgc3R5bGU9J21heC1oZWlnaHQ6MTUwcHgnPjwvYT4gfCA8YSBocmVmPScjdXBkYXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCtcIicgaWQ9JyN1cGRhdGVJbGx1c3RyYXRpb25cIitJbGx1c3RyYXRpb25zW2ldLmlkK1wiJyA+XCIrdHh0LnVwZGF0ZUJ0blR4dCtcIjwvYT4gfCA8YSBocmVmPScjZGVsZXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCtcIicgaWQ9JyNkZWxldGVJbGx1c3RyYXRpb25cIitJbGx1c3RyYXRpb25zW2ldLmlkK1wiJyA+XCIrdHh0LmRlbGV0ZUJ0blR4dCtcIjwvYT48L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICBpZihsaXN0SWxsdXN0cmF0aW9ucz09PVwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0SWxsdXN0cmF0aW9ucz1cIjxsaT5cIit0eHRJbGx1c3RyYXRpb24uaW50cm9Ob0lsbHVzdHJhdGlvbitcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2SWxsdXN0cmF0aW9ucywgXCJ1bFwiLCBsaXN0SWxsdXN0cmF0aW9ucywgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0sIFwiXCIsIGZhbHNlKTsvLyDDoCBpbnTDqWdyZXIgZGFucyBsZSBET00gcG91ciBwb3V2b2lyIGFqb3V0ZXIgZGVzIGFkZEV2ZW50TGlzdGVuZXIgZW5zdWl0ZVxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gSWxsdXN0cmF0aW9ucylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjdXBkYXRlSWxsdXN0cmF0aW9uXCIrSWxsdXN0cmF0aW9uc1tpXS5pZCkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MoSWxsdXN0cmF0aW9uc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNpbGx1c3RyYXRpb25zXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIiNkZWxldGVJbGx1c3RyYXRpb25cIitJbGx1c3RyYXRpb25zW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1JbGx1c3RyYXRpb25JbmZvcyhJbGx1c3RyYXRpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLmVsZW1lbnRzW1wiZGVsZXRlT2tcIl0udmFsdWU9dHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5kSWxsdXN0cmF0aW9uRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlnLm5iSWxsdXN0cmF0aW9uc01heCA+IElsbHVzdHJhdGlvbnMubGVuZ3RoIHx8IGNvbmZpZy5uYklsbHVzdHJhdGlvbnNNYXg9PT0wKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmKElsbHVzdHJhdGlvbnMubGVuZ3RoIDwgY29uZmlnLm5iSWxsdXN0cmF0aW9uc01pbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdklsbHVzdHJhdGlvbnMsIFwiYVwiLCB0eHQuYWRkQnRuVHh0LCBcIiNuZXdJbGx1c3RyYXRpb25cIiwgW1wiZXJyb3JcIl0sIHsgaHJlZjpcIiNuZXdJbGx1c3RyYXRpb25cIiB9LCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZJbGx1c3RyYXRpb25zLCBcImFcIiwgdHh0LmFkZEJ0blR4dCwgXCIjbmV3SWxsdXN0cmF0aW9uXCIsIFtcImluZm9ybWF0aW9uXCJdLCB7IGhyZWY6XCIjbmV3SWxsdXN0cmF0aW9uXCIgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjbmV3SWxsdXN0cmF0aW9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbXCJRdWVzdGlvbm5haXJlSWRcIl0udmFsdWU9Zm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbXCJpZFwiXS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2lsbHVzdHJhdGlvbnNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5JbGx1c3RyYXRpb24sIGZvcm1JbGx1c3RyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gQWZmaWNoZSBsZXMgaW5mb3MgY29ubnVlcyBjb25jZXJuYW50IGxlcyBxdWVzdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93UXVlc3Rpb25JbmZvcyA9IChRdWVzdGlvbnMpID0+XG4gICAgICAgICAgICAgICAgeyAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcImg0XCIsIHR4dFF1ZXN0aW9uLmludHJvVGl0bGUpOy8vIHJlbXBsYWNlIGwnZXhpc3RhbnQgZGFucyBkaXZRdWVzdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpc3RRdWVzdGlvbnM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIFF1ZXN0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RRdWVzdGlvbnMrPVwiPGxpPlwiK1F1ZXN0aW9uc1tpXS5RdWVzdGlvbi50ZXh0K1wiIHwgPGEgaHJlZj0nI3VwZGF0ZVF1ZXN0aW9uXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLmlkK1wiJyBpZD0nI3VwZGF0ZVF1ZXN0aW9uXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLmlkK1wiJyA+XCIrdHh0LnVwZGF0ZUJ0blR4dCtcIjwvYT4gfCA8YSBocmVmPScjZGVsZXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQrXCInIGlkPScjZGVsZXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQrXCInID5cIit0eHQuZGVsZXRlQnRuVHh0K1wiPC9hPjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIGlmKGxpc3RRdWVzdGlvbnM9PT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdFF1ZXN0aW9ucz1cIjxsaT5cIit0eHRRdWVzdGlvbi5pbnRyb05vUXVlc3Rpb24rXCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ucywgXCJ1bFwiLCBsaXN0UXVlc3Rpb25zLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSwgXCJcIiwgZmFsc2UpOy8vIMOgIGludMOpZ3JlciBkYW5zIGxlIERPTSBwb3VyIHBvdXZvaXIgYWpvdXRlciBkZXMgYWRkRXZlbnRMaXN0ZW5lciBlbnN1aXRlXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBRdWVzdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI3VwZGF0ZVF1ZXN0aW9uXCIrUXVlc3Rpb25zW2ldLlF1ZXN0aW9uLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbkluZm9zKFF1ZXN0aW9uc1tpXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNsaW5rc1wiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCIjZGVsZXRlUXVlc3Rpb25cIitRdWVzdGlvbnNbaV0uUXVlc3Rpb24uaWQpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9uSW5mb3MoUXVlc3Rpb25zW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJkZWxldGVPa1wiXS52YWx1ZT10cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRRdWVzdGlvbkZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coY29uZmlnLm5iUXVlc3Rpb25zTWF4KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coUXVlc3Rpb25zLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgaWYoY29uZmlnLm5iUXVlc3Rpb25zTWF4ID4gUXVlc3Rpb25zLmxlbmd0aCB8fCBjb25maWcubmJRdWVzdGlvbnNNYXg9PT0wKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgIGlmKFF1ZXN0aW9ucy5sZW5ndGggPCBjb25maWcubmJRdWVzdGlvbnNNaW4pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZRdWVzdGlvbnMsIFwiYVwiLCB0eHQuYWRkQnRuVHh0LCBcIiNuZXdRdWVzdGlvblwiLCBbXCJlcnJvclwiXSwgeyBocmVmOlwiI25ld1F1ZXN0aW9uXCIgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UXVlc3Rpb25zLCBcImFcIiwgdHh0LmFkZEJ0blR4dCwgXCIjbmV3UXVlc3Rpb25cIiwgW1wiaW5mb3JtYXRpb25cIl0sIHsgaHJlZjpcIiNuZXdRdWVzdGlvblwiIH0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI25ld1F1ZXN0aW9uXCIpLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiUXVlc3Rpb25uYWlyZUlkXCJdLnZhbHVlPWZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW1wiaWRcIl0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wicmFua1wiXS52YWx1ZT1jb25maWcuUXVlc3Rpb24ucmFuay5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNxdWVzdGlvbnNcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5RdWVzdGlvbiwgZm9ybVF1ZXN0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBkJ3VuIGxpZW4gZGFucyBsZSBmb3JtdWxhaXJlIGFkaG9jXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0Zvcm1MaW5rSW5mb3MgPSAoTGluaykgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGNvbW1lbmNlIHBhciBjYWNoZXIgZXQgdmlkZXIgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlc1xuICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVpcyBvbiBhZmZpY2hlIGNlbHVpIGRvbnQgbCdpZCBlc3QgcGFzc8OpIGF2ZWMgc2VzIGRvbm7DqWVzIGNvbm51ZXNcbiAgICAgICAgICAgICAgICAgICAgZm9ybUxpbmsuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgZGF0YSBpbiBMaW5rKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtTGluay5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtTGluay5lbGVtZW50c1tkYXRhXS52YWx1ZT1MaW5rW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vICsgbGVzIGNvbnRyYWludGVzIGRlIGNoYW1wIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5MaW5rLCBmb3JtTGluayk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEZvbmN0aW9uIGFmZmljaGFudCBsZXMgaW5mb3MgZCd1bmUgaWxsdXN0cmF0aW9uIGRhbnMgbGUgZm9ybXVsYWlyZSBhZGhvY1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dGb3JtSWxsdXN0cmF0aW9uSW5mb3MgPSAoSWxsdXN0cmF0aW9uKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gb24gY29tbWVuY2UgcGFyIGNhY2hlciBldCB2aWRlciB0b3VzIGxlcyBmb3JtdWxhaXJlcyBhbm5leGVzXG4gICAgICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBwdWlzIG9uIGFmZmljaGUgY2VsdWkgZG9udCBsJ2lkIGVzdCBwYXNzw6kgYXZlYyBzZXMgZG9ubsOpZXMgY29ubnVlc1xuICAgICAgICAgICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGRhdGEgaW4gSWxsdXN0cmF0aW9uKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtSWxsdXN0cmF0aW9uLmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbZGF0YV0udmFsdWU9SWxsdXN0cmF0aW9uW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vICsgbGVzIGNvbnRyYWludGVzIGRlIGNoYW1wIDpcbiAgICAgICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZy5JbGx1c3RyYXRpb24sIGZvcm1JbGx1c3RyYXRpb24pO1xuICAgICAgICAgICAgICAgICAgICAvLyBzYXVmIGxlIGNoYW1wIGZpbGUgcXVpIG4nZXN0IHBsdXMgcmVxdWlzIHF1YW5kIHVuIGZpY2hpZXIgZXhpc3RlIGTDqWrDoCAhXG4gICAgICAgICAgICAgICAgICAgIGZvcm1JbGx1c3RyYXRpb24uZWxlbWVudHNbXCJpbWFnZVwiXS5yZW1vdmVBdHRyaWJ1dGUoXCJyZXF1aXJlZFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBkJ3VuZSBxdWVzdGlvbiArIHNlcyByw6lwb25zZXMgcG9zc2libGVzIGRhbnMgbGUgZm9ybXVsYWlyZSBhZGhvY1xuICAgICAgICAgICAgICAgIGNvbnN0IHNob3dGb3JtUXVlc3Rpb25JbmZvcyA9IChRdWVzdGlvbikgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGNvbW1lbmNlIHBhciBjYWNoZXIgZXQgdmlkZXIgdG91cyBsZXMgZm9ybXVsYWlyZXMgYW5uZXhlc1xuICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcHVpcyBvbiBhZmZpY2hlIGNlbHVpIGRvbnQgbCdpZCBlc3QgcGFzc8OpIGF2ZWMgc2VzIGRvbm7DqWVzIGNvbm51ZXNcbiAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGRhdGEgaW4gUXVlc3Rpb24uUXVlc3Rpb24pXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1RdWVzdGlvbi5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbZGF0YV0udmFsdWU9UXVlc3Rpb24uUXVlc3Rpb25bZGF0YV07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIFF1ZXN0aW9uLkNob2ljZXMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1RdWVzdGlvbi5lbGVtZW50c1tcImNob2ljZVRleHRcIitkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJjaG9pY2VUZXh0XCIrZGF0YV0udmFsdWU9UXVlc3Rpb24uQ2hvaWNlc1tkYXRhXS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKFF1ZXN0aW9uLkNob2ljZXNbZGF0YV0uaXNDb3JyZWN0PT10cnVlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb24uZWxlbWVudHNbXCJjaG9pY2VJc0NvcnJlY3RcIitkYXRhXS5jaGVja2VkPXRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmVsZW1lbnRzW1wiaWRDaG9pY2VcIitkYXRhXS52YWx1ZT1RdWVzdGlvbi5DaG9pY2VzW2RhdGFdLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyArIGxlcyBjb250cmFpbnRlcyBkZSBjaGFtcCA6XG4gICAgICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWcuUXVlc3Rpb24sIGZvcm1RdWVzdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgdW4gcXVlc3Rpb25uYWlyZSBldCBzZXMgZMOpcGVuZGFuY2VzXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MgPSAoaWQpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytjb25maWcuZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIitpZCk7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5RdWVzdGlvbm5haXJlICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLnJlc2V0KCk7Ly8gcG91ciBuZSBwYXMgZ2FyZGVyIGRvbm7DqWVzIGTDqWrDoCBhZmZpY2jDqWVzIHNpIHZpZGUgZGFucyBjZSBxdWkgZXN0IHJldG91cm7DqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGRhdGEgaW4gcmVzcG9uc2UuUXVlc3Rpb25uYWlyZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZm9ybVF1ZXN0aW9ubmFpcmUuZWxlbWVudHNbZGF0YV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YT09PVwicHVibGlzaGluZ0F0XCIgJiYgcmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtkYXRhXSE9PW51bGwpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1RdWVzdGlvbm5haXJlLmVsZW1lbnRzW2RhdGFdLnZhbHVlPWRhdGVGb3JtYXQocmVzcG9uc2UuUXVlc3Rpb25uYWlyZVtkYXRhXSwgXCJmb3JtXCIpOy8vICEhIHJldm9pciBjYXIgZm9ybWF0IHBvdXZhbnQgcG9zZXIgc291Y2lzIHNpIG5hdmlnYXRldXIgbmUgZ8OocmUgcGFzIGxlcyBjaGFtcHMgZGUgdHlwZSBcImRhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tkYXRhXS52YWx1ZT1yZXNwb25zZS5RdWVzdGlvbm5haXJlW2RhdGFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlRhZ3MgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNsYXNzaWZpY2F0aW9uPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5UYWdzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uKz1yZXNwb25zZS5UYWdzW2ldLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NpZmljYXRpb24rPVwiLFwiK3Jlc3BvbnNlLlRhZ3NbaV0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5lbGVtZW50c1tcImNsYXNzaWZpY2F0aW9uXCJdLnZhbHVlPWNsYXNzaWZpY2F0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZMaW5rcy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZRdWVzdGlvbnMuc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2SWxsdXN0cmF0aW9ucy5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5MaW5rcyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dMaW5rSW5mb3MocmVzcG9uc2UuTGlua3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlF1ZXN0aW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dRdWVzdGlvbkluZm9zKHJlc3BvbnNlLlF1ZXN0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuSWxsdXN0cmF0aW9ucyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dJbGx1c3RyYXRpb25JbmZvcyhyZXNwb25zZS5JbGx1c3RyYXRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwUHVibGlzaGluZ0F0LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7Ly8gaW5mbyB1dGlsZSBwb3VyIFwicGxhY2VyXCIgdW4gbm91dmVhdSBxdWl6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gw6AgcmV2b2lyIDogcmVtcGxhY2VyIGxpZW4gcG91ciB1biBib3V0b24gKyByZXNldCBjb21wbGV0IGR1IGZvcm11bGFpcmUsIHkgY29tcHJpcyBjaGFtcHMgaGlkZGVuIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG5OZXdRdWVzdGlvbm5haXJlLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ0bk5ld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBjb25maWdGcm9udEVuZC5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBidG5QcmV2aWV3UXVlc3Rpb25uYWlyZS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5RdWVzdGlvbm5haXJlW1wiaXNQdWJsaXNoZWRcIl09PT1mYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLnByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiK2lkK1wiL1wiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnRuUHJldmlld1F1ZXN0aW9ubmFpcmUuc2V0QXR0cmlidXRlKFwiaHJlZlwiLCBjb25maWcuc2l0ZVVybCtjb25maWcucHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcytyZXNwb25zZS5RdWVzdGlvbm5haXJlW1wic2x1Z1wiXStcIi5odG1sXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNlbmQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCwgb24gZXNzYXllIGQnYWZmaWNoZXIgbGUgcXVlc3Rpb25uYWlyZSA6XG4gICAgICAgICAgICAgICAgbGV0IHVybERhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIGlmKHVybERhdGFzICYmIHVybERhdGFzLmlkIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyh1cmxEYXRhcy5pZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGVtZW50IGR1IGxhbmNlbWVudCBkJ3VuZSByZWNoZXJjaGVcbiAgICAgICAgICAgICAgICBmb3JtU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLnNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5sZW5ndGg9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCB0eHRRdWVzdGlvbm5haXJlLm5vdEZvdW5kLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdEhUTUw9XCI8b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhUTUwrPVwiPG9wdGlvbiB2YWx1ZT0nXCIrcmVzcG9uc2VbaV0uaWQrXCInPlwiK3Jlc3BvbnNlW2ldLnRpdGxlK1wiPC9vcHRpb24+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJzZWxlY3RcIiwgc2VsZWN0SFRNTCwgXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWFyY2hTZWxlY3Q9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWxlY3RTZWFyY2hcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hTZWxlY3QuYWRkRXZlbnRMaXN0ZW5lcihcImNoYW5nZVwiLCBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc2VhcmNoU2VsZWN0LnZhbHVlIT09XCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3Moc2VhcmNoU2VsZWN0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIExlcyBxdWVzdGlvbm5haXJlcyBiaWVudMO0dCBwdWJsacOpcy4gRGFucyB1bmUgZm9uY3Rpb24gY2FyIGRldmFudCDDqnRyZSByZWNoYXJnw6kuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd05leHRRdWVzdGlvbm5haXJlcyA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJOZXh0UXVlc3Rpb25uYWlyZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZy5nZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaXN0SFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UucXVlc3Rpb25uYWlyZXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RIVE1MKz1cIjxsaT5cIitkYXRlRm9ybWF0KHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmRhdGVQdWJsaXNoaW5nLCBcImZyXCIpK1wiOiA8YSBocmVmPSdcIitjb25maWdGcm9udEVuZC5xdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkK1wiJyBpZD0ncXVlc3Rpb25uYWlyZV9cIityZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pZCtcIic+XCIrcmVzcG9uc2UucXVlc3Rpb25uYWlyZXNbaV0udGl0bGUrXCI8L2E+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5xdWVzdGlvbm5haXJlc1tpXS5pc1B1Ymxpc2hhYmxlPT09ZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdEhUTUwrPVwiIDxzcGFuIGNsYXNzPSdlcnJvcic+KFwiK3R4dFF1ZXN0aW9ubmFpcmUubmVlZEJlQ29tcGxldGVkK1wiKTwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0SFRNTCs9XCI8L2xpPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcImgzXCIsIHR4dFF1ZXN0aW9ubmFpcmUubmV4dFF1ZXN0aW9ubmFpcmVzTGlzdC5yZXBsYWNlKFwiI05CXCIsIHJlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzLmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGhlbHBQdWJsaXNoaW5nQXQsIFwiZW1cIiwgdHh0UXVlc3Rpb25uYWlyZS5uZXh0RGF0ZVdpdGhvdXRRdWVzdGlvbm5haXJlK2RhdGVGb3JtYXQobmV3IERhdGUocmVzcG9uc2UuZGF0ZU5lZWRlZCksIFwiZnJcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ubmFpcmVzLCBcInVsXCIsIGxpc3RIVE1MLCBcIlwiLCBcIlwiLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5xdWVzdGlvbm5haXJlcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlX1wiK3Jlc3BvbnNlLnF1ZXN0aW9ubmFpcmVzW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1RdWVzdGlvbm5haXJlSW5mb3MoZS50YXJnZXQuaWQuc3BsaXQoXCJfXCIpWzFdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI3F1ZXN0aW9ubmFpcmVzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgeGhyTmV4dFF1ZXN0aW9ubmFpcmVzLnNlbmQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcygpO1xuIFxuICAgICAgICAgICAgICAgIC8vIEFpZGUgc2Fpc2llIGNsYXNzZW1lbnQgZHUgcXVpelxuICAgICAgICAgICAgICAgIGlucHV0Q2xhc3NpZmljYXRpb24uYWRkRXZlbnRMaXN0ZW5lcihcImlucHV0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFncz1pbnB1dENsYXNzaWZpY2F0aW9uLnZhbHVlLnNwbGl0KFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdGFncy5yZXZlcnNlKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxhc3RUYWc9dGFnc1swXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKGxhc3RUYWcubGVuZ3RoID49IDIpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIMOgIHJldm9pciA6IGltcG9ydGVyIGxhIGxpc3RlIGRlcyB0YWdzIGxvcnMgZGUgbCdpbml0aWFsaXNhdGlvbiBwb3VyIMOpdml0ZXIgbGVzIGFwcGVscyBtdWx0aXBsZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1haXMgZGFucyBjZSBjYXMgYWN0dWFsaXNlciBjZXR0ZSBsaXN0ZSBhcHLDqHMgY2hhcXVlIG1pc2Ugw6Agam91ci5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclNlYXJjaFRhZ3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Mub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZy50YWdzU2VhcmNoUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoVGFncy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscENsYXNzaWZpY2F0aW9uLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoaGVscENsYXNzaWZpY2F0aW9uLCBcImFcIiwgcmVzcG9uc2VbaV0ubmFtZSwgXCIjdGFnXCIrcmVzcG9uc2VbaV0uaWQsIFtcImluZm9ybWF0aW9uXCJdLCB7IGhyZWY6XCIjdGFnXCIrcmVzcG9uc2VbaV0uaWQgfSwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiI3RhZ1wiK3Jlc3BvbnNlW2ldLmlkKS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnc1swXT1lLnRhcmdldC5pbm5lckhUTUw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ3MucmV2ZXJzZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dENsYXNzaWZpY2F0aW9uLnZhbHVlPXRhZ3Muam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2hUYWdzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoVGFncy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaFRhZ3Muc2VuZChKU09OLnN0cmluZ2lmeSh7c2VhcmNoOiBsYXN0VGFnfSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZHUgZm9ybXVsYWlyZSBkZXMgaW5mb3MgZGUgYmFzZSBkdSBxdWl6XG4gICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9ubmFpcmUuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtUXVlc3Rpb25uYWlyZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclF1ZXN0aW9ubmFpcmVEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIitkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK1wiL1wiK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWcucXVlc3Rpb25uYWlyZVJvdXRlcytcIi9cIik7XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgcmVzcG9uc2UuaWQhPXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuYWRkT2tNZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuaWQ9cmVzcG9uc2UuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXMoKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UhPXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UubWVzc2FnZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZS5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcygpOy8vIHBldXQgYXZvaXIgw6l2b2x1w6kgc3VpdmFudCBjZSBxdWkgcydlc3QgcGFzc8OpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rPT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVF1ZXN0aW9ubmFpcmVJbmZvcyhkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtUXVlc3Rpb25uYWlyZS5yZXNldCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyUXVlc3Rpb25uYWlyZURhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9ubmFpcmVEYXRhcy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBMJ2Vudm9pIGRlcyBkb25uw6llcyBkJ3VuIGxpZW4gcGV1dCDDqnRyZSBnw6luw6lyw6kgcGFyIGxlIGJvdXRvbiBmb3JtdWxhaXJlIG91IHBhciBsZSBsaWVuIHN1cHByaW1lclxuICAgICAgICAgICAgICAgIGNvbnN0IHNlbmRMaW5rRm9ybSA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZSZXNwb25zZUxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZUxpbmtcIik7XG4gICAgICAgICAgICAgICAgICAgIGRpdlJlc3BvbnNlTGluay5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtTGluayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockxpbmtEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKCFpc0VtcHR5KGRhdGFzLmRlbGV0ZU9rKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJMaW5rRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnLmxpbmtzUm91dGUrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhockxpbmtEYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWcubGlua3NSb3V0ZStkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHhockxpbmtEYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnLmxpbmtzUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB4aHJMaW5rRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gMjAxKSAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQgJiYgcmVzcG9uc2UucXVlc3Rpb25uYWlyZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xpbmtJbmZvcyhyZXNwb25zZS5xdWVzdGlvbm5haXJlLkxpbmtzKTsvLyBsZSBzZXJ2ZXVyIG1lIHJldG91cm5lIHVuZSB2ZXJzaW9uIGFjdHVhbGlzw6llIGRlIGxhIGxpc3RlIGRlcyBsaWVuc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkxpbmtzLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaWRlQWxsRm9ybXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIiNsaW5rc0xpc3RcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dOZXh0UXVlc3Rpb25uYWlyZXMoKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHR4dC5zZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZUxpbmssIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlTGluaywgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhockxpbmtEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyTGlua0RhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB4aHJMaW5rRGF0YXMuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtTGluay5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbmRMaW5rRm9ybSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gTCdlbnZvaSBkZXMgZG9ubsOpZXMgZCd1biBsaWVuIHBldXQgw6p0cmUgZ8OpbsOpcsOpIHBhciBsZSBib3V0b24gZm9ybXVsYWlyZSBvdSBwYXIgbGUgbGllbiBzdXBwcmltZXJcbiAgICAgICAgICAgICAgICBjb25zdCBzZW5kSWxsdXN0cmF0aW9uRm9ybSA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZSZXNwb25zZUlsbHVzdHJhdGlvbj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlSWxsdXN0cmF0aW9uXCIpO1xuICAgICAgICAgICAgICAgICAgICBkaXZSZXNwb25zZUlsbHVzdHJhdGlvbi5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtSWxsdXN0cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzV2l0aEZpbGVzPW5ldyBGb3JtRGF0YShmb3JtSWxsdXN0cmF0aW9uKTsgLy8gaWwgbWUgbWFucXVlIGxlcyBpbmZvcm1hdGlvbnMgZHUgZmljaGllciBhdmVjIG1hIGZvbmN0aW9uIGdldERhdGFzRnJvbUlucHV0c1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJJbGx1c3RyYXRpb25EYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKCFpc0VtcHR5KGRhdGFzLmRlbGV0ZU9rKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWcuaWxsdXN0cmF0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWcuaWxsdXN0cmF0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhySWxsdXN0cmF0aW9uRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy5pbGx1c3RyYXRpb25zUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB4aHJJbGx1c3RyYXRpb25EYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLnN0YXR1cyA9PT0gMjAwIHx8IHRoaXMuc3RhdHVzID09PSAyMDEpICYmIHJlc3BvbnNlLm1lc3NhZ2UhPXVuZGVmaW5lZCAmJiByZXNwb25zZS5xdWVzdGlvbm5haXJlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93SWxsdXN0cmF0aW9uSW5mb3MocmVzcG9uc2UucXVlc3Rpb25uYWlyZS5JbGx1c3RyYXRpb25zKTsvLyBsZSBzZXJ2ZXVyIG1lIHJldG91cm5lIHVuZSB2ZXJzaW9uIGFjdHVhbGlzw6llIGRlIGxhIGxpc3RlIGRlcyBsaWVuc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdklsbHVzdHJhdGlvbnMsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVBbGxGb3JtcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiI2lsbHVzdHJhdGlvbnNMaXN0XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93TmV4dFF1ZXN0aW9ubmFpcmVzKCk7Ly8gcGV1dCBhdm9pciDDqXZvbHXDqSBzdWl2YW50IGNlIHF1aSBzJ2VzdCBwYXNzw6lcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2VJbGx1c3RyYXRpb24sIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlSWxsdXN0cmF0aW9uLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhySWxsdXN0cmF0aW9uRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHhocklsbHVzdHJhdGlvbkRhdGFzLnNlbmQoZGF0YXNXaXRoRmlsZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtSWxsdXN0cmF0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZElsbHVzdHJhdGlvbkZvcm0oKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIC8vIEwnZW52b2kgZGVzIGRvbm7DqWVzIGQndW5lIHF1ZXN0aW9uIGV0IGRlIHNlcyByw6lwb25zZSBxdWkgcGV1dCDDqnRyZSBnw6luw6lyw6kgcGFyIGxlIGJvdXRvbiBzdWJtaXQgb3UgcGFyIGxlIGxpZW4gc3VwcHJpbWVyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VuZFF1ZXN0aW9uRm9ybSA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXZSZXNwb25zZVF1ZXN0aW9uPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VRdWVzdGlvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgZGl2UmVzcG9uc2VRdWVzdGlvbi5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtUXVlc3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJRdWVzdGlvbkRhdGFzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoIWlzRW1wdHkoZGF0YXMuZGVsZXRlT2spKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub3BlbihcIkRFTEVURVwiLCBhcGlVcmwrY29uZmlnLnF1ZXN0aW9uc1JvdXRlK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbnNSb3V0ZStkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy5xdWVzdGlvbnNSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclF1ZXN0aW9uRGF0YXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gMjAxKSAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQgJiYgcmVzcG9uc2UucXVlc3Rpb25uYWlyZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1F1ZXN0aW9uSW5mb3MocmVzcG9uc2UucXVlc3Rpb25uYWlyZS5RdWVzdGlvbnMpOy8vIGxlIHNlcnZldXIgbWUgcmV0b3VybmUgdW5lIHZlcnNpb24gYWN0dWFsaXPDqWUgZGUgbGEgbGlzdGUgZGVzIHF1ZXN0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlF1ZXN0aW9ucywgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUFsbEZvcm1zKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVlc3Rpb25zTGlzdFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd05leHRRdWVzdGlvbm5haXJlcygpOy8vIHBldXQgYXZvaXIgw6l2b2x1w6kgc3VpdmFudCBjZSBxdWkgcydlc3QgcGFzc8OpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlUXVlc3Rpb24sIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlUXVlc3Rpb24sIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB4aHJRdWVzdGlvbkRhdGFzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9ybVF1ZXN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgc2VuZFF1ZXN0aW9uRm9ybSgpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHNlcmEgYmllbnTDtHQgbGlzaWJsZSBzdXIgR2l0bGFiLlxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/manageUsers.app.js b/front/public/JS/manageUsers.app.js index b69165a..90848f6 100644 --- a/front/public/JS/manageUsers.app.js +++ b/front/public/JS/manageUsers.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -420,8 +424,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -444,6 +448,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -468,17 +473,18 @@ module.exports = { unsubscriptionOk: "Votre demande a bien été prise en compte. Vous ne recevrez plus de messages venant du site, sauf pour vous signaler la fin de votre abonnement.
N'hésitez pas à accéder à votre compte pour de nouveau autoriser certains envois.", unsubscriptionFail: "Si vous voyez ce message, c'est que votre lien de désabonnement ne fonctionne pas.
Vous pouvez accéder à votre compte pour désactiver les envois manuellement.", allSubscriptionProcessed: "Tous les abonnés ont été traités pour le moment.", - mailNewQuestionnaireSubject: "Qu'allez-vous apprendre aujourd'hui ?", - mailNewQuestionnaireBodyTxt: "Bonjour USER_NAME,\n\nUn nouveau quiz vient de vous être proposé :\nQUESTIONNAIRE_URL\n\nBonne lecture !\n\nStopper les envois ?\nUNSUBSCRIBE_URL", - mailNewQuestionnaireBodyHTML: "

Bonjour USER_NAME,

MAIL_INTRODUCTION

Stopper les envois.

", + mailStopMailLinkTxt: "Stopper les envois.", + mailNewQuestionnaireBodyTxt: "Bonjour USER_NAME,\n\nUn nouveau quiz vient de vous être proposé :\n\nQUESTIONNAIRE_URL\n\nBonne lecture !\n\nStopper les envois ?\nUNSUBSCRIBE_URL", noNewQuestionnaireForUser: "Aucun nouveau questionnaire trouvé pour un abonné : ", mailEndFreeTimeSubject: "Votre abonnement gratuit va expirer", - mailEndFreeTimeBodyTxt: "Bonjour USER_NAME,\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\nPour continuer à utiliser le site, vous pouvez souscrire à un abonnement dès aujourd'hui :\nLINK_URL", - mailEndFreeTimeBodyHTML: "

Bonjour USER_NAME,

Votre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours. Pour continuer à utiliser le site, vous pouvez souscrire à un abonnement dès aujourd'hui en cliquez ici sans tarder.

", + mailEndFreeTimeLinkTxt: "M'abonner.", + mailEndFreeTimeBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez sans attendre souscrire à un abonnement :\nLINK_URL", + mailEndFreeTimeBodyHTML: "

Bonjour USER_NAME,

Votre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.

Pour continuer à utiliser le site, vous pouvez souscrire à un abonnement sans tarder en cliquant sur le lien ci-dessous.

", mailEndFreeTimeMessage: " relances envoyées.", mailExpirationSubject: "Votre abonnement va bientôt expirer", - mailExpirationBodyTxt: "Bonjour USER_NAME,\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL", - mailExpirationBodyHTML: "

Bonjour USER_NAME,

Votre abonnement à SITE_NAME va expirer d'ici quelques jours.
Pour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui en cliquant ici.

", + mailExpirationLinkTxt: "Prolonger mon abonnement.", + mailExpirationBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL", + mailExpirationBodyHTML: "

Bonjour USER_NAME,

Votre abonnement à SITE_NAME va expirer d'ici quelques jours.

Pour continuer à utiliser SITE_NAME, vous pouvez le prolonger dès aujourd'hui en cliquant sur le lien ci-dessous.

", mailExpirationMessage: "FIRST premières et SECOND deuxièmes relances envoyées pour des abonnements expirant d'ici peu.", infosNbDays: "Votre abonnement est encore valable pendant NB_DAYS jours.
Vous pouvez à tout moment prolonger votre abonnement en suivant les indications ci-dessous :", infosExpirated: "Votre abonnement a expiré, mais il vous reste encore quelques jours avant que votre compte et vos données ne soient complètement supprimées.
Pour ce faire, suivez sans tarder les indications ci-dessous :", @@ -506,7 +512,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -517,20 +523,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -543,15 +552,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -559,8 +570,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -674,7 +686,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -715,7 +728,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -778,7 +791,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -1257,7 +1372,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1459,7 +1574,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1547,13 +1663,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1605,4 +1721,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21hbmFnZVVzZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nSW5mbyIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwibmVlZGVkUGFyYW1zIiwiYmFkVXJsIiwibm90VmFsaWRGb3JtYXQiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJ1cGRhdGVCdG5UeHQiLCJhZGRCdG5UeHQiLCJkZWxldGVCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJ1cGRhdGVPa01lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhUb2tlbiIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aENyb24iLCJwcmV2aW91c1BhZ2UiLCJuZXh0UGFnZSIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJzdGF0c0FkbWluIiwibmVlZE51bWJlck9mRGF5cyIsIm5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIiwibmVlZE1pbk51bWJlck9mRGF5cyIsIm5lZWROb3RUb29Mb25nRGF5c0xpc3QiLCJuZWVkVmFsaWREYXlzTGlzdCIsIm5lZWRVbmlxdWVEYXlzTGlzdCIsIm5lZWRLbm93SWZOb3RpY2VPayIsInVuc3Vic2NyaXB0aW9uT2siLCJ1bnN1YnNjcmlwdGlvbkZhaWwiLCJhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQiLCJtYWlsTmV3UXVlc3Rpb25uYWlyZVN1YmplY3QiLCJtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQiLCJtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlIVE1MIiwibm9OZXdRdWVzdGlvbm5haXJlRm9yVXNlciIsIm1haWxFbmRGcmVlVGltZVN1YmplY3QiLCJtYWlsRW5kRnJlZVRpbWVCb2R5VHh0IiwibWFpbEVuZEZyZWVUaW1lQm9keUhUTUwiLCJtYWlsRW5kRnJlZVRpbWVNZXNzYWdlIiwibWFpbEV4cGlyYXRpb25TdWJqZWN0IiwibWFpbEV4cGlyYXRpb25Cb2R5VHh0IiwibWFpbEV4cGlyYXRpb25Cb2R5SFRNTCIsIm1haWxFeHBpcmF0aW9uTWVzc2FnZSIsImluZm9zTmJEYXlzIiwiaW5mb3NFeHBpcmF0ZWQiLCJpbmZvc05iRGF5c0FkbWluIiwiaW5mb3NFeHBpcmF0ZWRBZG1pbiIsImlzTm90VmFsaWRlZCIsImluZm9zUGF5bWVudHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwid2VsY29tZU1lc3NhZ2UiLCJieWVieWVNZXNzYWdlIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJjb25maWdGcm9udEVuZCIsInR4dCIsInR4dFVzZXJzIiwidHh0U3Vic2NyaXB0aW9ucyIsImhlbGxvRGV2IiwiZGl2TWFpbiIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZNZXNzYWdlIiwiZGl2UmVzcG9uc2UiLCJkaXZTdWJzY3JpYmVJbnRybyIsImRpdlBheW1lbnRzSW5mb3MiLCJkaXZHb2RjaGlsZHNJbmZvcyIsImZvcm1Vc2VyIiwiZGVsZXRlQ2hlY2tCb3giLCJ2YWxpZGF0aW9uQ2hlY2tCb3giLCJidG5OZXdVc2VyIiwidGltZURpZmZlcmVuY2UiLCJmb3JtU2VhcmNoIiwiZGl2U2VhcmNoUmVzdWx0IiwiaW5pdGlhbGlzZSIsImdldENvbmZpZyIsImNvbmZpZyIsImFkZEVsZW1lbnQiLCJjaGVja1Nlc3Npb24iLCJtZXNzYWdlIiwiY29sb3IiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImlzQ29ubmVjdGVkIiwidXNlciIsImdldExvY2FseSIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwic3R5bGUiLCJkaXNwbGF5IiwicmVtb3ZlTG9jYWx5Iiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiZW1wdHlVc2VyRm9ybSIsImVtcHlGb3JtIiwiaW5uZXJIVE1MIiwicGFyZW50Tm9kZSIsInNob3dGb3JtVXNlckluZm9zIiwieGhyR2V0SW5mb3MiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiVXNlciIsIm1hcFRleHQiLCJJRF9VU0VSIiwiREFURV9DUkVBIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZWRBdCIsIkRBVEVfVVBEQVRFIiwidXBkYXRlZEF0IiwiREFURV9DT05ORUNUSU9OIiwiY29ubmVjdGVkQXQiLCJzdWJzY3JpYmVJbnRybyIsInJlcGxhY2VBbGwiLCJkYXRhIiwiZWxlbWVudHMiLCJjaGVja2VkIiwiU3Vic2NyaXB0aW9uIiwibm90aWNlT2siLCJpIiwicmVjZWlwdERheXMiLCJiZWdpblN1YlRTIiwiZ2V0VGltZSIsIm5iRGF5c09rIiwibnVtYmVyT2ZEYXlzIiwicm91bmQiLCJub3ciLCJ4aHJHZXRQYXltZW50c0luZm9zIiwicmVzcG9uc2VQYXkiLCJ0eHRQYXltZW50cyIsIkRBVEVfUEFZTUVOVCIsIkFNT1VOVCIsImFtb3VudCIsIkNMSUVOVF9OQU1FIiwiY2xpZW50TmFtZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInNlbmQiLCJ0eHRHb2RjaGlsZHMiLCJHb2RmYXRoZXJJZCIsInhockdldEdvZEZhdGhlckluZm9zIiwicmVzcG9uc2VHRiIsInhockdldEdvZGNoaWxkcyIsInJlc3BvbnNlR1MiLCJ1cmxEYXRhcyIsImdldFVybFBhcmFtcyIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJkYXRhcyIsImdldERhdGFzRnJvbUlucHV0cyIsIm5ld3NsZXR0ZXJPayIsInhoclVzZXJEYXRhcyIsImRlbGV0ZU9rIiwidmFsaWRhdGlvbk9rIiwiZ2V0UGFzc3dvcmQiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJzdHJpbmdpZnkiLCJ4aHJTZWFyY2giLCJzZWxlY3RIVE1MIiwic2VhcmNoU2VsZWN0IiwiY29uc29sZSIsImVycm9yIiwic2F2ZUxvY2FseSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImxvZyIsImNvbmZpZ1RlbXBsYXRlIiwibGluayIsImhvbWVQYWdlIiwiaW5wdXRzQ29uZiIsIm15Rm9ybSIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsInR5cGUiLCJlbXB5QW5kSGlkZUZvcm0iLCJzZWFyY2giLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiIsImFzc2lnbiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFD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QUFVLENBQUMsS0FBRCxFQUFRa0UsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDNU8sMkRBQU8sQ0FBQzJPLGNBQUQsQ0FBWCxFQUNJMUosTUFBTSxDQUFDQyxRQUFQLENBQWdCaUssTUFBaEIsQ0FBdUJSLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvbWFuYWdlVXNlcnMuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvbWFuYWdlVXNlcnMuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcImRlZmF1bHRcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJ3aWtpbGVybmlcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LCAgICBcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIvLyBpZGVtXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvc3Vic2NyaXB0aW9uXCI6IFwiLi4vbGFuZy9mci9zdWJzY3JpcHRpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9zdWJzY3JpcHRpb24kXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBxdSdhbGxlei12b3VzIGFwcHJlbmRyZSBhdWpvdXJkJ2h1aSA/XCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQ2hhcXVlIGpvdXIsIHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWROdW1iZXJPZkRheXMgOiBcIklsIGZhdXQgdW4gbm9tYnJlIGRlIGpvdXJzIHBvdXIgbCdhYm9ubmVtZW50LlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIDogXCJMZSBub21icmUgZGUgam91cnMgZGUgbCdhYm9ubmVtZW50IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWluTnVtYmVyT2ZEYXlzIDogXCJMZSBub21icmUgZGUgam91cnMgZGUgbCdhYm9ubmVtZW50IG5lIHBldXQgw6p0cmUgbsOpZ2F0aWYgIVwiLFxuICAgIG5lZWROb3RUb29Mb25nRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdCAodHJvcCBsb25ndWUpLlwiLFxuICAgIG5lZWRWYWxpZERheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIENhcmFjdMOocmUgbm9uIHZhbGlkZSA6IFwiLFxuICAgIG5lZWRVbmlxdWVEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBEb3VibG9uIDogXCIsXG4gICAgbmVlZEtub3dJZk5vdGljZU9rIDogXCJJbCBtYW5xdWUgbCdpbmZvcm1hdGlvbiBzdXIgbCdhY2NlcHRhdGlvbiBvdSBub24gZGUgcmVjZXZvaXIgZGVzIG5vdGlmaWNhdGlvbnMuXCIsXG4gICAgdW5zdWJzY3JpcHRpb25PayA6IFwiVm90cmUgZGVtYW5kZSBhIGJpZW4gw6l0w6kgcHJpc2UgZW4gY29tcHRlLiBWb3VzIG5lIHJlY2V2cmV6IHBsdXMgZGUgbWVzc2FnZXMgdmVuYW50IGR1IHNpdGUsIHNhdWYgcG91ciB2b3VzIHNpZ25hbGVyIGxhIGZpbiBkZSB2b3RyZSBhYm9ubmVtZW50Ljxicj5OJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvI1VSTCc+w6AgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlPC9hPiBwb3VyIGRlIG5vdXZlYXUgYXV0b3Jpc2VyIGNlcnRhaW5zIGVudm9pcy5cIixcbiAgICB1bnN1YnNjcmlwdGlvbkZhaWwgOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGxpZW4gZGUgZMOpc2Fib25uZW1lbnQgbmUgZm9uY3Rpb25uZSBwYXMuPGJyPlZvdXMgcG91dmV6IDxhIGhyZWY9Jy8jVVJMJz5hY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZMOpc2FjdGl2ZXIgbGVzIGVudm9pcyBtYW51ZWxsZW1lbnQuXCIsXG4gICAgYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIDogXCJUb3VzIGxlcyBhYm9ubsOpcyBvbnQgw6l0w6kgdHJhaXTDqXMgcG91ciBsZSBtb21lbnQuXCIsXG4gICAgbWFpbE5ld1F1ZXN0aW9ubmFpcmVTdWJqZWN0IDogXCJRdSdhbGxlei12b3VzIGFwcHJlbmRyZSBhdWpvdXJkJ2h1aSA/XCIsXG4gICAgbWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5VbiBub3V2ZWF1IHF1aXogdmllbnQgZGUgdm91cyDDqnRyZSBwcm9wb3PDqSA6XFxuUVVFU1RJT05OQUlSRV9VUkxcXG5cXG5Cb25uZSBsZWN0dXJlICFcXG5cXG5TdG9wcGVyIGxlcyBlbnZvaXMgP1xcblVOU1VCU0NSSUJFX1VSTFwiLFxuICAgIG1haWxOZXdRdWVzdGlvbm5haXJlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPk1BSUxfSU5UUk9EVUNUSU9OPHVsPjxsaT48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCIgdGl0bGU9XFxcIkxJTktfVElUTEVcXFwiPkxpcmUgbCdhcnRpY2xlLjwvYT48L2xpPjxsaT48YSBocmVmPVxcXCJRVUVTVElPTk5BSVJFX1VSTFxcXCI+QWxsZXogYXUgcXVpei48L2E+PC9saT48L3VsPjxwPjxhIGhyZWY9XFxcIlVOU1VCU0NSSUJFX1VSTFxcXCI+U3RvcHBlciBsZXMgZW52b2lzLjwvYT48L3A+XCIsXG4gICAgbm9OZXdRdWVzdGlvbm5haXJlRm9yVXNlciA6IFwiQXVjdW4gbm91dmVhdSBxdWVzdGlvbm5haXJlIHRyb3V2w6kgcG91ciB1biBhYm9ubsOpIDogXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lU3ViamVjdDogXCJWb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgdmEgZXhwaXJlclwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNvdXNjcmlyZSDDoCB1biBhYm9ubmVtZW50IGTDqHMgYXVqb3VyZCdodWkgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keUhUTUw6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLiBQb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBzb3VzY3JpcmUgw6AgdW4gYWJvbm5lbWVudCBkw6hzIGF1am91cmQnaHVpIGVuIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxFbmRGcmVlVGltZU1lc3NhZ2U6IFwiIHJlbGFuY2VzIGVudm95w6llcy5cIixcbiAgICBtYWlsRXhwaXJhdGlvblN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCB2YSBiaWVudMO0dCBleHBpcmVyXCIsXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5VHh0OiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuPGJyPlBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIGVuIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWFudCBpY2k8L2E+LjwvcD5cIixcbiAgICBtYWlsRXhwaXJhdGlvbk1lc3NhZ2U6IFwiRklSU1QgcHJlbWnDqHJlcyBldCBTRUNPTkQgZGV1eGnDqG1lcyByZWxhbmNlcyBlbnZvecOpZXMgcG91ciBkZXMgYWJvbm5lbWVudHMgZXhwaXJhbnQgZCdpY2kgcGV1LlwiLFxuICAgIGluZm9zTmJEYXlzOiBcIlZvdHJlIGFib25uZW1lbnQgZXN0IGVuY29yZSB2YWxhYmxlIDxiPnBlbmRhbnQgTkJfREFZUyBqb3VyczwvYj4uPGJyPlZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHByb2xvbmdlciB2b3RyZSBhYm9ubmVtZW50IGVuIHN1aXZhbnQgbGVzIGluZGljYXRpb25zIGNpLWRlc3NvdXMgOlwiLFxuICAgIGluZm9zRXhwaXJhdGVkOiBcIlZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpLCBtYWlzIGlsIHZvdXMgcmVzdGUgZW5jb3JlIHF1ZWxxdWVzIGpvdXJzIGF2YW50IHF1ZSB2b3RyZSBjb21wdGUgZXQgdm9zIGRvbm7DqWVzIG5lIHNvaWVudCBjb21wbMOodGVtZW50IHN1cHByaW3DqWVzLjxicj5Qb3VyIGNlIGZhaXJlLCBzdWl2ZXogc2FucyB0YXJkZXIgbGVzIGluZGljYXRpb25zIGNpLWRlc3NvdXMgOlwiLFxuICAgIGluZm9zTmJEYXlzQWRtaW46IFwiQ2V0IGFib25uZW1lbnQgZXN0IGVuY29yZSB2YWxhYmxlIDxiPnBlbmRhbnQgTkJfREFZUyBqb3VyczwvYj4uXCIsXG4gICAgaW5mb3NFeHBpcmF0ZWRBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBhIGV4cGlyw6kuXCIsICBcbiAgICBpc05vdFZhbGlkZWQgOiBcIkNldCB1dGlsaXNhdGV1ciBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuPGJyPlZvdXMgcG91dmV6IGxlIGZhaXJlIMOgIHNhIHBsYWNlIDxhIGhyZWY9JyN2YWxpZGF0aW9uT2snPmVuIGNvY2hhbnQgbGEgY2FzZSBpbmRpcXXDqWU8L2E+IGV0IGVucmVnaXN0cmFudC5cIixcbiAgICBpbmZvc1BheW1lbnRzQWRtaW4gOiBcIkRBVEVfUEFZTUVOVCA6IHBhaWVtZW50IGRlIEFNT1VOVCDigqwgYXUgbm9tIGRlIENMSUVOVF9OQU1FLlwiLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgU0FJU0lSIC8gw4lESVRFUiBMRVMgSU5GT1MgREVTIFVUSUxJU0FURVVSUyBFVCBERSBMRVVSIEFCT05ORU1FTlRcblxuLy8vIFbDqXJpZmllIHF1ZSBsJ3V0aWxpc2F0ZXVyIGVzdCBiaWVuIGNvbm5lY3TDqSwgYSBsZSBib24gc3RhdHV0IGV0IGxlIHJlZGlyaWdlIHZlcnMgbGUgZm9ybXVsYWlyZSBkJ2luc2NyaXB0aW9uIHNpIGNlIG4nZXN0IHBhcyBsZSBjYXMuXG4vLy8gU2kgYydlc3Qgb2ssIHByb3Bvc2UgdW4gbW90ZXVyIGRlIHJlY2hlcmNoZSBwZXJtZXR0YW50IGRlIGNoZXJjaGVyIHVuIHV0aWxpc2F0ZXVyXG4vLy8gU2kgdW4gaWQgZXN0IHBhc3PDqSBwYXIgbCd1cmwgb24gYWZmaWNoZSBsZXMgaW5mb3JtYXRpb25zIGRlIGwndXRpbGlzYXRldXIgZGFucyB1biBmb3JtdWxhaXJlIHBlcm1ldHRhbnQgZGUgbCfDqWRpdGVyL3N1cHByaW1lci5cbi8vLyBTaSBwYXMgZCdpZCBwYXNzw6kgcGFyIGwndXJsLCBvbiBhZmZpY2hlIHVuIGZvcm11bGFpcmUgdmlkZSBwZXJtZXR0YW50IGQnZW4gc2Fpc2lyIHVuIG5vdXZlbCB1dGlsaXNhdGV1clxuXG4vLy8gw4AgYWpvdXRlciA6IFxuLy8vIC0gaW1wb3J0YXRpb24gbGlzdGUgZGUgY29tcHRlcyB1dGlsaXNhdGV1ciDDoCBjcsOpZXJcbi8vLyAtIGF0dHJpYnV0aW9uIGQndW4gcGFycmFpbiDDoCB1biB1dGlsaXNhdGV1ciAodmlhIHVuIG1vdGV1ciBkZSByZWNoZXJjaGUpLiBQcsOpdnUgcGFyIGxlIGNvbnRyw7RsZXVyLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gRm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOiAhISByZXZvaXIgcXVhbmQgbGUgcmVzdGUgc2VyYSBmaW5pIHBvdXIgdsOpcmlmaWVyIHNpIHRvdXQgZXN0IHV0aWxlXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGVtcHlGb3JtLCBnZXREYXRhc0Zyb21JbnB1dHMsIHNldEF0dHJpYnV0ZXNUb0lucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBkYXRlRm9ybWF0LCBpc0VtcHR5LCByZXBsYWNlQWxsIH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIGdldFBhc3N3b3JkIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB0eHRVc2VycyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvdXNlclwiKTtcbmNvbnN0IHR4dFN1YnNjcmlwdGlvbnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3N1YnNjcmlwdGlvblwiKTtcblxuaGVsbG9EZXYoKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IGRpdk1haW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1haW4tY29udGVudFwiKTtcbmNvbnN0IGRpdk1lc3NhZ2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm1lc3NhZ2VcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBkaXZTdWJzY3JpYmVJbnRybyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaWJlSW50cm9cIik7XG5jb25zdCBkaXZQYXltZW50c0luZm9zID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJpbmZvc1BheW1lbnRzXCIpO1xuY29uc3QgZGl2R29kY2hpbGRzSW5mb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluZm9zR29kY2hpbGRzXCIpO1xuXG5jb25zdCBmb3JtVXNlciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidXNlcnNcIik7XG5jb25zdCBkZWxldGVDaGVja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZGVsZXRlT2tMYWJlbFwiKTtcbmNvbnN0IHZhbGlkYXRpb25DaGVja0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwidmFsaWRhdGlvbk9rTGFiZWxcIik7XG5jb25zdCBidG5OZXdVc2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ3YW50TmV3VXNlclwiKTtcbmNvbnN0IG5ld1Bhc3N3b3JkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJuZXdQYXNzd29yZFwiKTtcbmNvbnN0IHRpbWVEaWZmZXJlbmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ0aW1lRGlmZmVyZW5jZVwiKTtcbmNvbnN0IGZvcm1TZWFyY2ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlYXJjaFwiKTtcbmNvbnN0IGRpdlNlYXJjaFJlc3VsdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoUmVzdWx0XCIpO1xuXG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7ICAgICAgICBcbiAgICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdk1lc3NhZ2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1wibWFuYWdlclwiLCBcImFkbWluXCJdLCBcIi9cIitjb25maWdGcm9udEVuZC5jb25uZWN0aW9uUGFnZSwgeyBtZXNzYWdlOiB0eHRVc2Vycy5uZWVkQmVDb25uZWN0ZWQsIGNvbG9yOlwiZXJyb3JcIiB9LCB3aW5kb3cubG9jYXRpb24pO1xuICAgICAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdGcm9udEVuZCk7XG4gICAgICAgICAgICAgICAgZGl2TWFpbi5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICBpZighaXNFbXB0eShnZXRMb2NhbHkoXCJtZXNzYWdlXCIpKSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIGdldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkubWVzc2FnZSwgXCJcIiwgW2dldExvY2FseShcIm1lc3NhZ2VcIiwgdHJ1ZSkuY29sb3JdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcIm1lc3NhZ2VcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXNhdGlvbiBkdSBmb3JtdWxhaXJlIGRlIHJlY2hlcmNoZSA6XG4gICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZywgZm9ybVNlYXJjaCk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gdXRpbGUgcG91ciB2aWRlciBsZSBmb3JtdWxhaXJlLCB5IGNvbXByaXMgbGVzIGNoYW1wcyBoaWRkZW4sIGV0Yy5cbiAgICAgICAgICAgICAgICAvLyBDYWNoZSBhdXNzaSBjZXJ0YWlucyBjaGFtcHMgZW4gbW9kZSBjcsOpYXRpb25cbiAgICAgICAgICAgICAgICBjb25zdCBlbXB0eVVzZXJGb3JtID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVtcHlGb3JtKGZvcm1Vc2VyKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSBkZSBzdXBwcmVzc2lvbiBjYWNow6llIHBhciBkw6lmYXV0LCBjYXIgaW51dGlsZSBwb3VyIGZvcm11bGFpcmUgZGUgY3LDqWF0aW9uXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgZGUgdmFsaWRhdGlvbiBjYWNow6llIHBhciBkw6lmYXV0LCBjYXIgdXRpbGUgcXVlIGRhbnMgY2VydGFpbnMgY2FzXG4gICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25DaGVja0JveC5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICBkaXZTdWJzY3JpYmVJbnRyby5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZGl2UGF5bWVudHNJbmZvcy5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZGl2R29kY2hpbGRzSW5mb3MuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIENlcnRhaW5zIG5hdmlnYXRldXJzIG9udCB0ZW5kYW5jZSDDoCByZW1wbGlyIHRvdXQgc2V1bCBsZXMgY2hhbXBzIHBhc3N3b3JkXG4gICAgICAgICAgICAgICAgICAgIG5ld1Bhc3N3b3JkLnZhbHVlPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIEVuIG1vZGUgY3LDqWF0aW9uLCBwYXMgZGUgY2hhbXAgcG91ciBjaGFuZ2VyIGxlIG1vdCBkZSBwYXNzZVxuICAgICAgICAgICAgICAgICAgICBuZXdQYXNzd29yZC5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIC8vIEludXRpbGUgZW4gbW9kZSBjcsOpYXRpb25cbiAgICAgICAgICAgICAgICAgICAgdGltZURpZmZlcmVuY2UucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbXB0eVVzZXJGb3JtKCk7XG4gICAgICAgICAgICAgICAgLy8gSW5pdGlhbGlzZSBsZXMgY29udHJhaW50ZXMgZHUgZm9ybXVsYWlyZSA6XG4gICAgICAgICAgICAgICAgc2V0QXR0cmlidXRlc1RvSW5wdXRzKGNvbmZpZywgZm9ybVVzZXIpO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIC8vIEZvbmN0aW9uIGFmZmljaGFudCBsZXMgaW5mb3MgY29ubnVlcyBjb25jZXJuYW50IHVuIHV0aWxpc2F0ZXVyIGV0IHNvbiBhYm9ubmVtZW50XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvd0Zvcm1Vc2VySW5mb3MgPSAoaWQpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAvLyBvbiBjb21tZW5jZSBwYXIgdG91dCB2aWRlciwgZGVzIGZvaXMgcXVlLi4uIDpcbiAgICAgICAgICAgICAgICAgICAgZW1wdHlVc2VyRm9ybSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuZ2V0VXNlckluZm9zK2lkKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLlVzZXIgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGFzc3dvcmQucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZURpZmZlcmVuY2UucGFyZW50Tm9kZS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElEX1VTRVIgOiByZXNwb25zZS5Vc2VyLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURV9DUkVBIDogZGF0ZUZvcm1hdChyZXNwb25zZS5Vc2VyLmNyZWF0ZWRBdCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRFX1VQREFURSA6IGRhdGVGb3JtYXQocmVzcG9uc2UuVXNlci51cGRhdGVkQXQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURV9DT05ORUNUSU9OIDogZGF0ZUZvcm1hdChyZXNwb25zZS5Vc2VyLmNvbm5lY3RlZEF0KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3Vic2NyaWJlSW50cm89cmVwbGFjZUFsbCh0eHRVc2Vycy5pbmZvc1VzZXJGb3JBZG1pbiwgbWFwVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgZGF0YSBpbiByZXNwb25zZS5Vc2VyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihmb3JtVXNlci5lbGVtZW50c1tkYXRhXSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5Vc2VyW2RhdGFdIT09dHJ1ZSAmJiByZXNwb25zZS5Vc2VyW2RhdGFdIT09ZmFsc2UpLy8gYm9vbMOpZW4gPSBjYXNlIMOgIGNvY2hlciAhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Vc2VyLmVsZW1lbnRzW2RhdGFdLnZhbHVlPXJlc3BvbnNlLlVzZXJbZGF0YV07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuVXNlcltkYXRhXT09dHJ1ZSkgLy8gc2kgZmFsc2UsIG9uIG5lIGZhaXQgcmllblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tcIlwiK2RhdGFdLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuU3Vic2NyaXB0aW9uICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVVzZXIuZWxlbWVudHNbXCJudW1iZXJPZkRheXNcIl0udmFsdWU9cmVzcG9uc2UuU3Vic2NyaXB0aW9uW1wibnVtYmVyT2ZEYXlzXCJdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW5mb3MgZGUgbCdhYm9ubmVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5TdWJzY3JpcHRpb24ubm90aWNlT2s9PXRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVVzZXIuZWxlbWVudHNbXCJub3RpY2VPa1wiXS5jaGVja2VkPVwiY2hlY2tlZFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gam91cnMgZGUgcsOpY2VwdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5cylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tcImRcIityZXNwb25zZS5TdWJzY3JpcHRpb24ucmVjZWlwdERheXNbaV1dLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBiZWdpblN1YlRTPW5ldyBEYXRlKHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5jcmVhdGVkQXQpLmdldFRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5iRGF5c09rPXJlc3BvbnNlLlN1YnNjcmlwdGlvbi5udW1iZXJPZkRheXMtTWF0aC5yb3VuZCgoRGF0ZS5ub3coKS1iZWdpblN1YlRTKS8xMDAwLzM2MDAvMjQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmJEYXlzT2s+MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVJbnRybys9XCI8YnI+XCIrdHh0U3Vic2NyaXB0aW9ucy5pbmZvc05iRGF5c0FkbWluLnJlcGxhY2UoXCJOQl9EQVlTXCIsIG5iRGF5c09rKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVJbnRybys9XCI8YnI+XCIrdHh0U3Vic2NyaXB0aW9ucy5pbmZvc0V4cGlyYXRlZEFkbWluO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTdWJzY3JpYmVJbnRybywgXCJwXCIsIHN1YnNjcmliZUludHJvLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTdWJzY3JpYmVJbnRybywgXCJwXCIsIHR4dFN1YnNjcmlwdGlvbnMuaXNOb3RWYWxpZGVkLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZm9zIGRlIHBhaWVtZW50cyB2aWEgQVBJIFdQXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockdldFBheW1lbnRzSW5mb3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcuZ2V0UGF5bWVudHMrcmVzcG9uc2UuVXNlci5pZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldFBheW1lbnRzSW5mb3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlUGF5PUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2VQYXkubGVuZ3RoIT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR4dFBheW1lbnRzPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2VQYXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwVGV4dCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRFX1BBWU1FTlQgOiBkYXRlRm9ybWF0KHJlc3BvbnNlUGF5W2ldLmNyZWF0ZWRBdCwgXCJmclwiKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQU1PVU5UIDogcmVzcG9uc2VQYXlbaV0uYW1vdW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDTElFTlRfTkFNRSA6IHJlc3BvbnNlUGF5W2ldLmNsaWVudE5hbWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dFBheW1lbnRzKz1cIjxsaT5cIityZXBsYWNlQWxsKHR4dFN1YnNjcmlwdGlvbnMuaW5mb3NQYXltZW50c0FkbWluLCBtYXBUZXh0KStcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlBheW1lbnRzSW5mb3MsIFwidWxcIiwgdHh0UGF5bWVudHMsIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXZQYXltZW50c0luZm9zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5zZW5kKCk7ICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVuIHBhcnJhaW4gb3UgZGV1eCBwYXIgZGV1eCA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0eHRHb2RjaGlsZHM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlzRW1wdHkocmVzcG9uc2UuVXNlci5Hb2RmYXRoZXJJZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEdvZEZhdGhlckluZm9zID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RGYXRoZXJJbmZvcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuZ2V0VXNlckluZm9zK3Jlc3BvbnNlLlVzZXIuR29kZmF0aGVySWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kRmF0aGVySW5mb3Mub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZUdGPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZUdGLlVzZXIgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzKz10eHRVc2Vycy5pbmZvc0FkbWluR29kZmF0aGVyK1wiPGEgaHJlZj0nL1wiK2NvbmZpZ0Zyb250RW5kLnVzZXJzTWFuYWdlbWVudFBhZ2UrXCI/aWQ9XCIrcmVzcG9uc2VHRi5Vc2VyLmlkK1wiJyB0YXJnZXQ9J19ibGFuayc+XCIrcmVzcG9uc2VHRi5Vc2VyLm5hbWUrXCI8L2E+XCIrXCIuPGJyPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZEZhdGhlckluZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZEZhdGhlckluZm9zLnNlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZXMgZmlsbGV1bHMgP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJHZXRHb2RjaGlsZHMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5nZXRHb2RDaGlsZHMraWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlR1M9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZUdTLmxlbmd0aCE9PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4dEdvZGNoaWxkcys9dHh0VXNlcnMuaW5mb3NBZG1pbk5iR29kQ2hpbGRzLnJlcGxhY2UoXCIjTkJcIiwgcmVzcG9uc2VHUy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlR1MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzKz1cIjxhIGhyZWY9Jy9cIitjb25maWdGcm9udEVuZC51c2Vyc01hbmFnZW1lbnRQYWdlK1wiP2lkPVwiK3Jlc3BvbnNlR1NbaV0uaWQrXCInIHRhcmdldD0nX2JsYW5rJz5cIityZXNwb25zZUdTW2ldLm5hbWUrXCI8L2E+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pOyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kY2hpbGRzLnNlbmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHh0R29kY2hpbGRzIT09XCJcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZHb2RjaGlsZHNJbmZvcywgXCJwXCIsIHR4dEdvZGNoaWxkcytcIi5cIiwgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdkdvZGNoaWxkc0luZm9zLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5zZW5kKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gU2kgdW4gaWQgZXN0IHBhc3PDqSBwYXIgbCd1cmwsIG9uIGVzc2F5ZSBkJ2FmZmljaGVyIGwndXRpbGlzYXRldXIgOlxuICAgICAgICAgICAgICAgIGxldCB1cmxEYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgICAgICBpZih1cmxEYXRhcyAmJiB1cmxEYXRhcy5pZCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1Vc2VySW5mb3ModXJsRGF0YXMuaWQpO1xuXG4gICAgICAgICAgICAgICAgLy8gQmVzb2luIGQndW4gY291cCBkZSBLw6RyY2hlciA/IFxuICAgICAgICAgICAgICAgIGJ0bk5ld1VzZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBlbXB0eVVzZXJGb3JtKCk7XG4gICAgICAgICAgICAgICAgfSk7ICAgXG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRW52b2kgZHUgZm9ybXVsYWlyZSBkZXMgaW5mb3MgZGUgbCd1dGlsaXNhdGV1clxuICAgICAgICAgICAgICAgIGZvcm1Vc2VyLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgZGl2UmVzcG9uc2UuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhcz1nZXREYXRhc0Zyb21JbnB1dHMoZm9ybVVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyByZWNvbXBvc2l0aW9uIGRlcyBqb3VycyB2YWxhYmxlcyBwb3VyIGwnYWJvbm5lbWVudCA6XG4gICAgICAgICAgICAgICAgICAgIGRhdGFzLnJlY2VpcHREYXlzPVwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0xOyBpPD03OyBpKyspXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzW1wiZFwiK2ldIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLnJlY2VpcHREYXlzKz1cIlwiK2k7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMubm90aWNlT2s9PT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5ub3RpY2VPaz1cImZhbHNlXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLm5ld3NsZXR0ZXJPaz09PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLm5ld3NsZXR0ZXJPaz1cImZhbHNlXCI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhoclVzZXJEYXRhcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKGRhdGFzLmRlbGV0ZU9rIT09dW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vcGVuKFwiREVMRVRFXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytcIi9cIitkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpICYmIChkYXRhcy52YWxpZGF0aW9uT2shPT11bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcudmFsaWRhdGVVc2VyUm91dGUrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vcGVuKFwiUFVUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcudXBkYXRlVXNlckluZm9zK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5wYXNzd29yZD1nZXRQYXNzd29yZChjb25maWcucGFzc3dvcmQubWlubGVuZ3RoLCBjb25maWcucGFzc3dvcmQubWlubGVuZ3RoKzIpOy8vIG1vdCBkZSBwYXNzZSB0ZW1wb3JhaXJlXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5jcmVhdGVVc2VyUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgcmVzcG9uc2UuaWQhPXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuYWRkT2tNZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMuaWQ9cmVzcG9uc2UuaWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5tZXNzYWdlID0gcmVzcG9uc2UubWVzc2FnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLm1lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5lcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHR4dC5zZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpc0VtcHR5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihkYXRhcy5kZWxldGVPaz09PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtVXNlckluZm9zKGRhdGFzLmlkKTsvLyBwZXV0IGF2b2lyIMOpdm9sdcOpIHN1aXZhbnQgY2UgcXVpIHMnZXN0IHBhc3PDqVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eVVzZXJGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBUcmFpdGVtZW50IGR1IGxhbmNlbWVudCBkJ3VuZSByZWNoZXJjaGVcbiAgICAgICAgICAgICAgICBmb3JtU2VhcmNoLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyU2VhcmNoID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLnNlYXJjaFVzZXJSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgQXJyYXkuaXNBcnJheShyZXNwb25zZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5sZW5ndGg9PT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwicFwiLCB0eHRVc2Vycy5ub3RGb3VuZCwgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzZWxlY3RIVE1MPVwiPG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RIVE1MKz1cIjxvcHRpb24gdmFsdWU9J1wiK3Jlc3BvbnNlW2ldLmlkK1wiJz5cIityZXNwb25zZVtpXS5uYW1lK1wiIChcIityZXNwb25zZVtpXS5lbWFpbCtcIik8L29wdGlvbj5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInNlbGVjdFwiLCBzZWxlY3RIVE1MLCBcInNlbGVjdFNlYXJjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlYXJjaFNlbGVjdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNlbGVjdFNlYXJjaFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFNlbGVjdC5hZGRFdmVudExpc3RlbmVyKFwiY2hhbmdlXCIsIGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzZWFyY2hTZWxlY3QudmFsdWUhPT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVVzZXJJbmZvcyhzZWFyY2hTZWxlY3QudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcylcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclNlYXJjaC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IGVzdCBsaXNpYmxlIHN1ciBnaXRsYWIgOiBcXG4gQm9ubmUgbGVjdHVyZSA6LSkgXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gbGUgdG9rZW4gZXQgZGUgdG91dGUgZmHDp29uIHbDqXJpZmllciDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL21hbmFnZVVzZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91cmwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJyZWdlbmVyYXRlSFRNTCIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nSW5mbyIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwibmVlZGVkUGFyYW1zIiwiYmFkVXJsIiwibm90VmFsaWRGb3JtYXQiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJ1cGRhdGVCdG5UeHQiLCJhZGRCdG5UeHQiLCJkZWxldGVCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJ1cGRhdGVPa01lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhUb2tlbiIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aENyb24iLCJwcmV2aW91c1BhZ2UiLCJuZXh0UGFnZSIsImFsZXJ0TmV3V2luZG93IiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJuZWVkTnVtYmVyT2ZEYXlzIiwibmVlZEludGVnZXJOdW1iZXJPZkRheXMiLCJuZWVkTWluTnVtYmVyT2ZEYXlzIiwibmVlZE5vdFRvb0xvbmdEYXlzTGlzdCIsIm5lZWRWYWxpZERheXNMaXN0IiwibmVlZFVuaXF1ZURheXNMaXN0IiwibmVlZEtub3dJZk5vdGljZU9rIiwidW5zdWJzY3JpcHRpb25PayIsInVuc3Vic2NyaXB0aW9uRmFpbCIsImFsbFN1YnNjcmlwdGlvblByb2Nlc3NlZCIsIm1haWxTdG9wTWFpbExpbmtUeHQiLCJtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlUeHQiLCJub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIiwibWFpbEVuZEZyZWVUaW1lU3ViamVjdCIsIm1haWxFbmRGcmVlVGltZUxpbmtUeHQiLCJtYWlsRW5kRnJlZVRpbWVCb2R5VHh0IiwibWFpbEVuZEZyZWVUaW1lQm9keUhUTUwiLCJtYWlsRW5kRnJlZVRpbWVNZXNzYWdlIiwibWFpbEV4cGlyYXRpb25TdWJqZWN0IiwibWFpbEV4cGlyYXRpb25MaW5rVHh0IiwibWFpbEV4cGlyYXRpb25Cb2R5VHh0IiwibWFpbEV4cGlyYXRpb25Cb2R5SFRNTCIsIm1haWxFeHBpcmF0aW9uTWVzc2FnZSIsImluZm9zTmJEYXlzIiwiaW5mb3NFeHBpcmF0ZWQiLCJpbmZvc05iRGF5c0FkbWluIiwiaW5mb3NFeHBpcmF0ZWRBZG1pbiIsImlzTm90VmFsaWRlZCIsImluZm9zUGF5bWVudHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJhYm91dFBhZ2UiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJuZXdzTGlzdFRpdGxlIiwibWFpbFJlY2lwaWVudFR4dCIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwidHh0VXNlcnMiLCJ0eHRTdWJzY3JpcHRpb25zIiwiaGVsbG9EZXYiLCJkaXZNYWluIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdk1lc3NhZ2UiLCJkaXZSZXNwb25zZSIsImRpdlN1YnNjcmliZUludHJvIiwiZGl2UGF5bWVudHNJbmZvcyIsImRpdkdvZGNoaWxkc0luZm9zIiwiZm9ybVVzZXIiLCJkZWxldGVDaGVja0JveCIsInZhbGlkYXRpb25DaGVja0JveCIsImJ0bk5ld1VzZXIiLCJ0aW1lRGlmZmVyZW5jZSIsImZvcm1TZWFyY2giLCJkaXZTZWFyY2hSZXN1bHQiLCJpbml0aWFsaXNlIiwiZ2V0Q29uZmlnIiwiY29uZmlnIiwiYWRkRWxlbWVudCIsImNoZWNrU2Vzc2lvbiIsIm1lc3NhZ2UiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwiaXNDb25uZWN0ZWQiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJzdHlsZSIsImRpc3BsYXkiLCJyZW1vdmVMb2NhbHkiLCJzZXRBdHRyaWJ1dGVzVG9JbnB1dHMiLCJlbXB0eVVzZXJGb3JtIiwiZW1weUZvcm0iLCJpbm5lckhUTUwiLCJwYXJlbnROb2RlIiwic2hvd0Zvcm1Vc2VySW5mb3MiLCJ4aHJHZXRJbmZvcyIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJVc2VyIiwibWFwVGV4dCIsIklEX1VTRVIiLCJEQVRFX0NSRUEiLCJkYXRlRm9ybWF0IiwiY3JlYXRlZEF0IiwiREFURV9VUERBVEUiLCJ1cGRhdGVkQXQiLCJEQVRFX0NPTk5FQ1RJT04iLCJjb25uZWN0ZWRBdCIsInN1YnNjcmliZUludHJvIiwicmVwbGFjZUFsbCIsImRhdGEiLCJlbGVtZW50cyIsImNoZWNrZWQiLCJTdWJzY3JpcHRpb24iLCJub3RpY2VPayIsImkiLCJyZWNlaXB0RGF5cyIsImJlZ2luU3ViVFMiLCJnZXRUaW1lIiwibmJEYXlzT2siLCJudW1iZXJPZkRheXMiLCJyb3VuZCIsIm5vdyIsInhockdldFBheW1lbnRzSW5mb3MiLCJyZXNwb25zZVBheSIsInR4dFBheW1lbnRzIiwiREFURV9QQVlNRU5UIiwiQU1PVU5UIiwiYW1vdW50IiwiQ0xJRU5UX05BTUUiLCJjbGllbnROYW1lIiwic2V0UmVxdWVzdEhlYWRlciIsInRva2VuIiwic2VuZCIsInR4dEdvZGNoaWxkcyIsIkdvZGZhdGhlcklkIiwieGhyR2V0R29kRmF0aGVySW5mb3MiLCJyZXNwb25zZUdGIiwieGhyR2V0R29kY2hpbGRzIiwicmVzcG9uc2VHUyIsInVybERhdGFzIiwiZ2V0VXJsUGFyYW1zIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImRhdGFzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwibmV3c2xldHRlck9rIiwieGhyVXNlckRhdGFzIiwiZGVsZXRlT2siLCJ2YWxpZGF0aW9uT2siLCJnZXRQYXNzd29yZCIsIkFycmF5IiwiaXNBcnJheSIsImVycm9ycyIsInN0cmluZ2lmeSIsInhoclNlYXJjaCIsInNlbGVjdEhUTUwiLCJzZWFyY2hTZWxlY3QiLCJjb25zb2xlIiwiZXJyb3IiLCJzYXZlTG9jYWx5IiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwibG9nIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJpbnB1dHNDb25mIiwibXlGb3JtIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwidHlwZSIsImVtcHlBbmRIaWRlRm9ybSIsInNlYXJjaCIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGVjb2RlVVJJIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInVybEFjY291bnQiLCJpbmRleE9mIiwiYXNzaWduIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtR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LEtBQUQsRUFBUWtFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQzFQLDJEQUFPLENBQUN5UCxjQUFELENBQVgsRUFDSTFKLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQmlLLE1BQWhCLENBQXVCUixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL21hbmFnZVVzZXJzLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL21hbmFnZVVzZXJzLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcIndpa2lsZXJuaVwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwiV0xcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDIsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvZ2V0cmFuZG9tXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIHJlZ2VuZXJhdGVIVE1MOiBcIi9odG1scmVnZW5lcmF0ZWRcIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIiwvLyBpZGVtXG4gICAgbmJSYW5kb21SZXN1bHRzIDogMy8vIGxpbWl0ZSBsZXMgcsOpc3VsdGF0IGR1IG1vdGV1ciBkZSByZWNoZXJjaGUgcXVhbmQgZGVtYW5kZSBkZSByw6lzdWx0YXRzIGF1IGhhc2FyZFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3N1YnNjcmlwdGlvblwiOiBcIi4uL2xhbmcvZnIvc3Vic2NyaXB0aW9uLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvc3Vic2NyaXB0aW9uJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogV2lraXDDqWRpYSBlbiBxdWVzdGlvbnNcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgcmVjZXZleiBjaGFxdWUgam91ciBkZSBub3V2ZWF1eCBxdWl6cyBwb3VyIHRlc3RlciB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3Nlcy5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5lZWROdW1iZXJPZkRheXMgOiBcIklsIGZhdXQgdW4gbm9tYnJlIGRlIGpvdXJzIHBvdXIgbCdhYm9ubmVtZW50LlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyT2ZEYXlzIDogXCJMZSBub21icmUgZGUgam91cnMgZGUgbCdhYm9ubmVtZW50IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWluTnVtYmVyT2ZEYXlzIDogXCJMZSBub21icmUgZGUgam91cnMgZGUgbCdhYm9ubmVtZW50IG5lIHBldXQgw6p0cmUgbsOpZ2F0aWYgIVwiLFxuICAgIG5lZWROb3RUb29Mb25nRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdCAodHJvcCBsb25ndWUpLlwiLFxuICAgIG5lZWRWYWxpZERheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIENhcmFjdMOocmUgbm9uIHZhbGlkZSA6IFwiLFxuICAgIG5lZWRVbmlxdWVEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBEb3VibG9uIDogXCIsXG4gICAgbmVlZEtub3dJZk5vdGljZU9rIDogXCJJbCBtYW5xdWUgbCdpbmZvcm1hdGlvbiBzdXIgbCdhY2NlcHRhdGlvbiBvdSBub24gZGUgcmVjZXZvaXIgZGVzIG5vdGlmaWNhdGlvbnMuXCIsXG4gICAgdW5zdWJzY3JpcHRpb25PayA6IFwiVm90cmUgZGVtYW5kZSBhIGJpZW4gw6l0w6kgcHJpc2UgZW4gY29tcHRlLiBWb3VzIG5lIHJlY2V2cmV6IHBsdXMgZGUgbWVzc2FnZXMgdmVuYW50IGR1IHNpdGUsIHNhdWYgcG91ciB2b3VzIHNpZ25hbGVyIGxhIGZpbiBkZSB2b3RyZSBhYm9ubmVtZW50Ljxicj5OJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvI1VSTCc+w6AgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlPC9hPiBwb3VyIGRlIG5vdXZlYXUgYXV0b3Jpc2VyIGNlcnRhaW5zIGVudm9pcy5cIixcbiAgICB1bnN1YnNjcmlwdGlvbkZhaWwgOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGxpZW4gZGUgZMOpc2Fib25uZW1lbnQgbmUgZm9uY3Rpb25uZSBwYXMuPGJyPlZvdXMgcG91dmV6IDxhIGhyZWY9Jy8jVVJMJz5hY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZMOpc2FjdGl2ZXIgbGVzIGVudm9pcyBtYW51ZWxsZW1lbnQuXCIsXG4gICAgYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIDogXCJUb3VzIGxlcyBhYm9ubsOpcyBvbnQgw6l0w6kgdHJhaXTDqXMgcG91ciBsZSBtb21lbnQuXCIsXG4gICAgbWFpbFN0b3BNYWlsTGlua1R4dCA6IFwiU3RvcHBlciBsZXMgZW52b2lzLlwiLFxuICAgIG1haWxOZXdRdWVzdGlvbm5haXJlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVW4gbm91dmVhdSBxdWl6IHZpZW50IGRlIHZvdXMgw6p0cmUgcHJvcG9zw6kgOlxcblxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIDogXCJBdWN1biBub3V2ZWF1IHF1ZXN0aW9ubmFpcmUgdHJvdXbDqSBwb3VyIHVuIGFib25uw6kgOiBcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVTdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCB2YSBleHBpcmVyXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTGlua1R4dCA6IFwiTSdhYm9ubmVyLlwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IHNhbnMgYXR0ZW5kcmUgc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keUhUTUw6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgYWJvbm5lbWVudCBncmF0dWl0IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj48YnI+UG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgc2FucyB0YXJkZXIgZW4gY2xpcXVhbnQgc3VyIGxlIGxpZW4gY2ktZGVzc291cy48L3A+XCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lTWVzc2FnZTogXCIgcmVsYW5jZXMgZW52b3nDqWVzLlwiLFxuXG4gICAgbWFpbEV4cGlyYXRpb25TdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgdmEgYmllbnTDtHQgZXhwaXJlclwiLFxuICAgIG1haWxFeHBpcmF0aW9uTGlua1R4dCA6IFwiUHJvbG9uZ2VyIG1vbiBhYm9ubmVtZW50LlwiLCAgICBcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlUeHQ6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm90cmUgYWJvbm5lbWVudCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRXhwaXJhdGlvbkJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuPGJyPjxicj5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBTSVRFX05BTUUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIGVuIGNsaXF1YW50IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMuPC9wPlwiLFxuXG4gICAgbWFpbEV4cGlyYXRpb25NZXNzYWdlOiBcIkZJUlNUIHByZW1pw6hyZXMgZXQgU0VDT05EIGRldXhpw6htZXMgcmVsYW5jZXMgZW52b3nDqWVzIHBvdXIgZGVzIGFib25uZW1lbnRzIGV4cGlyYW50IGQnaWNpIHBldS5cIixcbiAgICBpbmZvc05iRGF5czogXCJWb3RyZSBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+Ljxicj5Wb3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCBwcm9sb25nZXIgdm90cmUgYWJvbm5lbWVudCBlbiBzdWl2YW50IGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc0V4cGlyYXRlZDogXCJWb3RyZSBhYm9ubmVtZW50IGEgZXhwaXLDqSwgbWFpcyBpbCB2b3VzIHJlc3RlIGVuY29yZSBxdWVscXVlcyBqb3VycyBhdmFudCBxdWUgdm90cmUgY29tcHRlIGV0IHZvcyBkb25uw6llcyBuZSBzb2llbnQgY29tcGzDqHRlbWVudCBzdXBwcmltw6llcy48YnI+UG91ciBjZSBmYWlyZSwgc3VpdmV6IHNhbnMgdGFyZGVyIGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc05iRGF5c0FkbWluOiBcIkNldCBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+LlwiLFxuICAgIGluZm9zRXhwaXJhdGVkQWRtaW46IFwiQ2V0IGFib25uZW1lbnQgYSBleHBpcsOpLlwiLCAgXG4gICAgaXNOb3RWYWxpZGVkIDogXCJDZXQgdXRpbGlzYXRldXIgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLjxicj5Wb3VzIHBvdXZleiBsZSBmYWlyZSDDoCBzYSBwbGFjZSA8YSBocmVmPScjdmFsaWRhdGlvbk9rJz5lbiBjb2NoYW50IGxhIGNhc2UgaW5kaXF1w6llPC9hPiBldCBlbnJlZ2lzdHJhbnQuXCIsXG4gICAgaW5mb3NQYXltZW50c0FkbWluIDogXCJEQVRFX1BBWU1FTlQgOiBwYWllbWVudCBkZSBBTU9VTlQg4oKsIGF1IG5vbSBkZSBDTElFTlRfTkFNRS5cIixcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyB2b3RyZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciAoQ3RybCtWKSBvw7kgdm91cyBsZSBzb3VoYWl0ZXouXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgbidhIMOpdMOpIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rVHh0IDogXCJWYWxpZGVyIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIGRhbnMgbGVzIDI0aC48L3A+XCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgY29tcHRlIHZpZW50IGJpZW4gZCfDqnRyZSB2YWxpZMOpLiBNZXJjaSBldCBiaWVudmVudWUgITxicj5Wb3VzIHBvdXZleiBzYW5zIHRhcmRlciB2b3VzIGNvbm5lY3RlciBjaS1kZXNzb3VzIHBvdXIgYWNjw6lkZXIgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlQWRtaW46IFwiTGUgY29tcHRlIGEgYmllbiDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW46IFwiQ2UgY29tcHRlIGEgZMOpasOgIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgbWFpbFdlbGNvbWVTdWJqZWN0IDogXCJCaWVudmVudWUgIVwiLFxuICAgIG1haWxXZWxjb21lTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhXFxuXFxuU2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIEVNQUlMLlxcblxcbkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIEVNQUlMIMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIFxcXCJzcGFtXFxcIi5cXG5cXG5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLlxcblxcblBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gc3VpdmFudCA6IExJTktfVVJMXFxuXFxuRW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+PGJyPlNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCA8Yj5FTUFJTDwvYj4uPGJyPjxicj5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciA8Yj5FTUFJTDwvYj4gw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gPGk+c3BhbTwvaT4uPGJyPjxicj5QYXIgYWlsbGV1cnMsIHBvdXIgZ8OpcmVyIHZvdHJlIGFib25uZW1lbnQsIGFjY8OpZGVyIMOgIHZvcyBpbmZvcm1hdGlvbnMgb3UgZW5jb3JlIGNoZXJjaGVyIHBsdXMgZmFjaWxlbWVudCBwYXJtaSBsZXMgcXVpenMgZHUgc2l0ZSwgdm91cyBwb3V2ZXogw6AgdG91dCBtb21lbnQgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlIHV0aWxpc2F0ZXVyLjxicj48YnI+UG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBjaS1kZXNzb3VzLjxicj48YnI+RW5jb3JlIG1lcmNpIGV0IMOgIGJpZW50w7R0LlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyLlwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPlwiLFxuICAgIG1haWxMb2dpbkxpbmtNZXNzYWdlIDogXCJVbiBsaWVuIGRlIGNvbm5leGlvbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLiBOZSB0YXJkZXogcGFzIMOgIGwndXRpbGlzZXIsIGNhciBpbCBuJ2VzdCB2YWxhYmxlIHF1ZSBkdXJhbnQgXCIsXG4gICAgdXBkYXRlZE9rTWVzc2FnZTogXCJWb3MgaW5mb3JtYXRpb25zIG9udCBiaWVuIMOpdMOpIG1pc2VzIMOgIGpvdXIuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSBjYXIgZWxsZSBuJ2EgcGFzIHVuIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rVHh0IDogXCJWYWxpZGVyLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2U6IFwiQ2VwZW5kYW50LCB2b3VzIGF2ZXogbW9kaWZpw6kgYXUgbW9pbnMgdW4gZGUgdm9zIGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24gKGVtYWlsIGV0L291IG1vdCBkZSBwYXNzZSkgZXQgPGI+dm91cyBkZXZleiBjbGlxdWVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlcyBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIChORVdfRU1BSUwpIHBvdXIgdmFsaWRlciBjZSBjaGFuZ2VtZW50PC9iPi4gRW4gYXR0ZW5kYW50LCBtZXJjaSBkZSBjb250aW51ZXIgw6AgdXRpbGlzZXIgdm9zIGFuY2llbnMgaWRlbnRpZmlhbnRzLlwiLFxuICAgIHVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlcjogXCJMJ3V0aWxpc2F0ZXVyIHF1ZSB2b3VzIHNvdWhhaXTDqSBtb2RpZmllciBuJ2V4aXN0ZSBwYXMvcGx1cyBvdSBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuXCIsXG4gICAgdXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIDogXCJNYWlzIGxlIG5vdXZlYXUgY29kZSBwYXJyYWluIG4nYSBwdSDDqnRyZSByZXRlbnUsIGNhciBpbCBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIGNvbXB0ZSB1dGlsaXNhdGV1ciBvdSDDoCBsJ3V0aWxpc2F0ZXVyIGx1aS1tw6ptZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2U6IFwiTGEgbWlzZSDDoCBqb3VyIGRlIHZvcyBpZGVudGlmaWFudHMgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICB1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQgOiBcIkwnaWRlbnRpZmlhbnQgZm91cm5pIHBvdXIgbGUgcGFycmFpbiBuZSBjb3JyZXNwb25kIMOgIGF1Y3VuIHV0aWxpc2F0ZXVyLlwiLFxuICAgIGNyZWF0aW9uT2tNZXNzYWdlOiBcIkxlIG5vdXZlbCB1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6kuXCIsXG4gICAgbWFpbERlbGV0ZVN1YmplY3QgOiBcIkNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtUeHQgOiBcIkNvbmZpcm1lci5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gY2ktZGVzc291cyBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmllcnMgcXVpenNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogOSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJtb24tY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhIDxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKTwvc3Bhbj4sIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvc3Bhbj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSAhXCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogXCJUZXN0ZXIgV2lraUxlcm5pIGdyYXR1aXRlbWVudC5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5TdWl2YW50IGxlcyBxdWVzdGlvbnMsIHVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzIGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gPGI+Qydlc3QgdG91am91cnMgbGUgY29udGVudSBkZSBsJ2FydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2kgY29uY2VybmFudCBsZXMgXFxcImJvbm5lc1xcXCIgcsOpcG9uc2VzPC9iPi4gTWFpcyBsZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlcywgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50PC9iPi48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuIENlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSA8Yj50ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6PC9iPiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEdyw6JjZSDDoCBjZSBjb21wdGUsIHZvdXMgcG91cnJleiBhdXNzaSA8Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenM8L2I+IHBvdXIgY29udGludWVyIMOgIFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCJMZXMgZGVybmnDqHJlcyBncmFpbmVzIGRlIHNhdm9pclwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBERSBTQUlTSVIgLyDDiURJVEVSIExFUyBJTkZPUyBERVMgVVRJTElTQVRFVVJTIEVUIERFIExFVVIgQUJPTk5FTUVOVFxuXG4vLy8gVsOpcmlmaWUgcXVlIGwndXRpbGlzYXRldXIgZXN0IGJpZW4gY29ubmVjdMOpLCBhIGxlIGJvbiBzdGF0dXQgZXQgbGUgcmVkaXJpZ2UgdmVycyBsZSBmb3JtdWxhaXJlIGQnaW5zY3JpcHRpb24gc2kgY2Ugbidlc3QgcGFzIGxlIGNhcy5cbi8vLyBTaSBjJ2VzdCBvaywgcHJvcG9zZSB1biBtb3RldXIgZGUgcmVjaGVyY2hlIHBlcm1ldHRhbnQgZGUgY2hlcmNoZXIgdW4gdXRpbGlzYXRldXJcbi8vLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCBvbiBhZmZpY2hlIGxlcyBpbmZvcm1hdGlvbnMgZGUgbCd1dGlsaXNhdGV1ciBkYW5zIHVuIGZvcm11bGFpcmUgcGVybWV0dGFudCBkZSBsJ8OpZGl0ZXIvc3VwcHJpbWVyLlxuLy8vIFNpIHBhcyBkJ2lkIHBhc3PDqSBwYXIgbCd1cmwsIG9uIGFmZmljaGUgdW4gZm9ybXVsYWlyZSB2aWRlIHBlcm1ldHRhbnQgZCdlbiBzYWlzaXIgdW4gbm91dmVsIHV0aWxpc2F0ZXVyXG5cbi8vLyDDgCBham91dGVyIDogXG4vLy8gLSBpbXBvcnRhdGlvbiBsaXN0ZSBkZSBjb21wdGVzIHV0aWxpc2F0ZXVyIMOgIGNyw6llclxuLy8vIC0gYXR0cmlidXRpb24gZCd1biBwYXJyYWluIMOgIHVuIHV0aWxpc2F0ZXVyICh2aWEgdW4gbW90ZXVyIGRlIHJlY2hlcmNoZSkuIFByw6l2dSBwYXIgbGUgY29udHLDtGxldXIuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBGb25jdGlvbnMgdXRpbGVzIGF1IHNjcmlwdCA6ICEhIHJldm9pciBxdWFuZCBsZSByZXN0ZSBzZXJhIGZpbmkgcG91ciB2w6lyaWZpZXIgc2kgdG91dCBlc3QgdXRpbGVcbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZW1weUZvcm0sIGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIGdldENvbmZpZywgZ2V0UGFzc3dvcmQgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuY29uc3QgdHh0U3Vic2NyaXB0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvc3Vic2NyaXB0aW9uXCIpO1xuXG5oZWxsb0RldigpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgZGl2TWFpbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWFpbi1jb250ZW50XCIpO1xuY29uc3QgZGl2TWVzc2FnZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibWVzc2FnZVwiKTtcbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGRpdlN1YnNjcmliZUludHJvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdWJzY3JpYmVJbnRyb1wiKTtcbmNvbnN0IGRpdlBheW1lbnRzSW5mb3MgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImluZm9zUGF5bWVudHNcIik7XG5jb25zdCBkaXZHb2RjaGlsZHNJbmZvcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiaW5mb3NHb2RjaGlsZHNcIik7XG5cbmNvbnN0IGZvcm1Vc2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ1c2Vyc1wiKTtcbmNvbnN0IGRlbGV0ZUNoZWNrQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJkZWxldGVPa0xhYmVsXCIpO1xuY29uc3QgdmFsaWRhdGlvbkNoZWNrQm94ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJ2YWxpZGF0aW9uT2tMYWJlbFwiKTtcbmNvbnN0IGJ0bk5ld1VzZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIndhbnROZXdVc2VyXCIpO1xuY29uc3QgbmV3UGFzc3dvcmQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcIm5ld1Bhc3N3b3JkXCIpO1xuY29uc3QgdGltZURpZmZlcmVuY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInRpbWVEaWZmZXJlbmNlXCIpO1xuY29uc3QgZm9ybVNlYXJjaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VhcmNoXCIpO1xuY29uc3QgZGl2U2VhcmNoUmVzdWx0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzZWFyY2hSZXN1bHRcIik7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHsgICAgICAgIFxuICAgICAgICBjb25zdCBjb25maWcgPSBhd2FpdCBnZXRDb25maWcoKTtcbiAgICAgICAgaWYoIWNvbmZpZylcbiAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2TWVzc2FnZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJtYW5hZ2VyXCIsIFwiYWRtaW5cIl0sIFwiL1wiK2NvbmZpZ0Zyb250RW5kLmNvbm5lY3Rpb25QYWdlLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLm5lZWRCZUNvbm5lY3RlZCwgY29sb3I6XCJlcnJvclwiIH0sIHdpbmRvdy5sb2NhdGlvbik7XG4gICAgICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VyPWdldExvY2FseShcInVzZXJcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ0Zyb250RW5kKTtcbiAgICAgICAgICAgICAgICBkaXZNYWluLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGdldExvY2FseShcIm1lc3NhZ2VcIikpKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5tZXNzYWdlLCBcIlwiLCBbZ2V0TG9jYWx5KFwibWVzc2FnZVwiLCB0cnVlKS5jb2xvcl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwibWVzc2FnZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgIC8vIEluaXRpYWxpc2F0aW9uIGR1IGZvcm11bGFpcmUgZGUgcmVjaGVyY2hlIDpcbiAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnLCBmb3JtU2VhcmNoKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBGb25jdGlvbiB1dGlsZSBwb3VyIHZpZGVyIGxlIGZvcm11bGFpcmUsIHkgY29tcHJpcyBsZXMgY2hhbXBzIGhpZGRlbiwgZXRjLlxuICAgICAgICAgICAgICAgIC8vIENhY2hlIGF1c3NpIGNlcnRhaW5zIGNoYW1wcyBlbiBtb2RlIGNyw6lhdGlvblxuICAgICAgICAgICAgICAgIGNvbnN0IGVtcHR5VXNlckZvcm0gPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZW1weUZvcm0oZm9ybVVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIGRlIHN1cHByZXNzaW9uIGNhY2jDqWUgcGFyIGTDqWZhdXQsIGNhciBpbnV0aWxlIHBvdXIgZm9ybXVsYWlyZSBkZSBjcsOpYXRpb25cbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlQ2hlY2tCb3guc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2FzZSBkZSB2YWxpZGF0aW9uIGNhY2jDqWUgcGFyIGTDqWZhdXQsIGNhciB1dGlsZSBxdWUgZGFucyBjZXJ0YWlucyBjYXNcbiAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbkNoZWNrQm94LnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIGRpdlN1YnNjcmliZUludHJvLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBkaXZQYXltZW50c0luZm9zLmlubmVySFRNTD1cIlwiO1xuICAgICAgICAgICAgICAgICAgICBkaXZHb2RjaGlsZHNJbmZvcy5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2VydGFpbnMgbmF2aWdhdGV1cnMgb250IHRlbmRhbmNlIMOgIHJlbXBsaXIgdG91dCBzZXVsIGxlcyBjaGFtcHMgcGFzc3dvcmRcbiAgICAgICAgICAgICAgICAgICAgbmV3UGFzc3dvcmQudmFsdWU9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gRW4gbW9kZSBjcsOpYXRpb24sIHBhcyBkZSBjaGFtcCBwb3VyIGNoYW5nZXIgbGUgbW90IGRlIHBhc3NlXG4gICAgICAgICAgICAgICAgICAgIG5ld1Bhc3N3b3JkLnBhcmVudE5vZGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgLy8gSW51dGlsZSBlbiBtb2RlIGNyw6lhdGlvblxuICAgICAgICAgICAgICAgICAgICB0aW1lRGlmZmVyZW5jZS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVtcHR5VXNlckZvcm0oKTtcbiAgICAgICAgICAgICAgICAvLyBJbml0aWFsaXNlIGxlcyBjb250cmFpbnRlcyBkdSBmb3JtdWxhaXJlIDpcbiAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGVzVG9JbnB1dHMoY29uZmlnLCBmb3JtVXNlcik7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgLy8gRm9uY3Rpb24gYWZmaWNoYW50IGxlcyBpbmZvcyBjb25udWVzIGNvbmNlcm5hbnQgdW4gdXRpbGlzYXRldXIgZXQgc29uIGFib25uZW1lbnRcbiAgICAgICAgICAgICAgICBjb25zdCBzaG93Rm9ybVVzZXJJbmZvcyA9IChpZCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIC8vIG9uIGNvbW1lbmNlIHBhciB0b3V0IHZpZGVyLCBkZXMgZm9pcyBxdWUuLi4gOlxuICAgICAgICAgICAgICAgICAgICBlbXB0eVVzZXJGb3JtKCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEluZm9zID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5nZXRVc2VySW5mb3MraWQpO1xuICAgICAgICAgICAgICAgICAgICB4aHJHZXRJbmZvcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuVXNlciAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdQYXNzd29yZC5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lRGlmZmVyZW5jZS5wYXJlbnROb2RlLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSURfVVNFUiA6IHJlc3BvbnNlLlVzZXIuaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRFX0NSRUEgOiBkYXRlRm9ybWF0KHJlc3BvbnNlLlVzZXIuY3JlYXRlZEF0KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfVVBEQVRFIDogZGF0ZUZvcm1hdChyZXNwb25zZS5Vc2VyLnVwZGF0ZWRBdCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEQVRFX0NPTk5FQ1RJT04gOiBkYXRlRm9ybWF0KHJlc3BvbnNlLlVzZXIuY29ubmVjdGVkQXQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdWJzY3JpYmVJbnRybz1yZXBsYWNlQWxsKHR4dFVzZXJzLmluZm9zVXNlckZvckFkbWluLCBtYXBUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBkYXRhIGluIHJlc3BvbnNlLlVzZXIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1Vc2VyLmVsZW1lbnRzW2RhdGFdIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlVzZXJbZGF0YV0hPT10cnVlICYmIHJlc3BvbnNlLlVzZXJbZGF0YV0hPT1mYWxzZSkvLyBib29sw6llbiA9IGNhc2Ugw6AgY29jaGVyICFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybVVzZXIuZWxlbWVudHNbZGF0YV0udmFsdWU9cmVzcG9uc2UuVXNlcltkYXRhXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyZXNwb25zZS5Vc2VyW2RhdGFdPT10cnVlKSAvLyBzaSBmYWxzZSwgb24gbmUgZmFpdCByaWVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Vc2VyLmVsZW1lbnRzW1wiXCIrZGF0YV0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5TdWJzY3JpcHRpb24gIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBub21icmUgZGUgam91cnMgZGUgbCdhYm9ubmVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tcIm51bWJlck9mRGF5c1wiXS52YWx1ZT1yZXNwb25zZS5TdWJzY3JpcHRpb25bXCJudW1iZXJPZkRheXNcIl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbmZvcyBkZSBsJ2Fib25uZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlN1YnNjcmlwdGlvbi5ub3RpY2VPaz09dHJ1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtVXNlci5lbGVtZW50c1tcIm5vdGljZU9rXCJdLmNoZWNrZWQ9XCJjaGVja2VkXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqb3VycyBkZSByw6ljZXB0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UuU3Vic2NyaXB0aW9uLnJlY2VpcHREYXlzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Vc2VyLmVsZW1lbnRzW1wiZFwiK3Jlc3BvbnNlLlN1YnNjcmlwdGlvbi5yZWNlaXB0RGF5c1tpXV0uY2hlY2tlZD1cImNoZWNrZWRcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJlZ2luU3ViVFM9bmV3IERhdGUocmVzcG9uc2UuU3Vic2NyaXB0aW9uLmNyZWF0ZWRBdCkuZ2V0VGltZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmJEYXlzT2s9cmVzcG9uc2UuU3Vic2NyaXB0aW9uLm51bWJlck9mRGF5cy1NYXRoLnJvdW5kKChEYXRlLm5vdygpLWJlZ2luU3ViVFMpLzEwMDAvMzYwMC8yNCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuYkRheXNPaz4wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUludHJvKz1cIjxicj5cIit0eHRTdWJzY3JpcHRpb25zLmluZm9zTmJEYXlzQWRtaW4ucmVwbGFjZShcIk5CX0RBWVNcIiwgbmJEYXlzT2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZUludHJvKz1cIjxicj5cIit0eHRTdWJzY3JpcHRpb25zLmluZm9zRXhwaXJhdGVkQWRtaW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgc3Vic2NyaWJlSW50cm8sIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdLCBcIlwiLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlN1YnNjcmliZUludHJvLCBcInBcIiwgdHh0U3Vic2NyaXB0aW9ucy5pc05vdFZhbGlkZWQsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb25DaGVja0JveC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVDaGVja0JveC5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSW5mb3MgZGUgcGFpZW1lbnRzIHZpYSBBUEkgV1BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyR2V0UGF5bWVudHNJbmZvcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRQYXltZW50c0luZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy5nZXRQYXltZW50cytyZXNwb25zZS5Vc2VyLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0UGF5bWVudHNJbmZvcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VQYXk9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZVBheS5sZW5ndGghPT0wKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdHh0UGF5bWVudHM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZVBheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtYXBUZXh0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVfUEFZTUVOVCA6IGRhdGVGb3JtYXQocmVzcG9uc2VQYXlbaV0uY3JlYXRlZEF0LCBcImZyXCIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBTU9VTlQgOiByZXNwb25zZVBheVtpXS5hbW91bnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENMSUVOVF9OQU1FIDogcmVzcG9uc2VQYXlbaV0uY2xpZW50TmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0UGF5bWVudHMrPVwiPGxpPlwiK3JlcGxhY2VBbGwodHh0U3Vic2NyaXB0aW9ucy5pbmZvc1BheW1lbnRzQWRtaW4sIG1hcFRleHQpK1wiPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UGF5bWVudHNJbmZvcywgXCJ1bFwiLCB0eHRQYXltZW50cywgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0sIFwiXCIsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpdlBheW1lbnRzSW5mb3Muc3R5bGUuZGlzcGxheT1cImJsb2NrXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRQYXltZW50c0luZm9zLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRQYXltZW50c0luZm9zLnNlbmQoKTsgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVW4gcGFycmFpbiBvdSBkZXV4IHBhciBkZXV4ID9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR4dEdvZGNoaWxkcz1cIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaXNFbXB0eShyZXNwb25zZS5Vc2VyLkdvZGZhdGhlcklkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyR2V0R29kRmF0aGVySW5mb3MgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZEZhdGhlckluZm9zLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5nZXRVc2VySW5mb3MrcmVzcG9uc2UuVXNlci5Hb2RmYXRoZXJJZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RGYXRoZXJJbmZvcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlR0Y9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlR0YuVXNlciAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHMrPXR4dFVzZXJzLmluZm9zQWRtaW5Hb2RmYXRoZXIrXCI8YSBocmVmPScvXCIrY29uZmlnRnJvbnRFbmQudXNlcnNNYW5hZ2VtZW50UGFnZStcIj9pZD1cIityZXNwb25zZUdGLlVzZXIuaWQrXCInIHRhcmdldD0nX2JsYW5rJz5cIityZXNwb25zZUdGLlVzZXIubmFtZStcIjwvYT5cIitcIi48YnI+XCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kRmF0aGVySW5mb3Muc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGhyR2V0R29kRmF0aGVySW5mb3Muc2VuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlcyBmaWxsZXVscyA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHhockdldEdvZGNoaWxkcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmdldEdvZENoaWxkcytpZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhockdldEdvZGNoaWxkcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2VHUz1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlR1MubGVuZ3RoIT09MClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHh0R29kY2hpbGRzKz10eHRVc2Vycy5pbmZvc0FkbWluTmJHb2RDaGlsZHMucmVwbGFjZShcIiNOQlwiLCByZXNwb25zZUdTLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2VHUylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eHRHb2RjaGlsZHMrPVwiPGEgaHJlZj0nL1wiK2NvbmZpZ0Zyb250RW5kLnVzZXJzTWFuYWdlbWVudFBhZ2UrXCI/aWQ9XCIrcmVzcG9uc2VHU1tpXS5pZCtcIicgdGFyZ2V0PSdfYmxhbmsnPlwiK3Jlc3BvbnNlR1NbaV0ubmFtZStcIjwvYT5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4aHJHZXRHb2RjaGlsZHMuc2VuZCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0eHRHb2RjaGlsZHMhPT1cIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdkdvZGNoaWxkc0luZm9zLCBcInBcIiwgdHh0R29kY2hpbGRzK1wiLlwiLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSwgXCJcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGl2R29kY2hpbGRzSW5mb3Muc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyR2V0SW5mb3Muc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHhockdldEluZm9zLnNlbmQoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBTaSB1biBpZCBlc3QgcGFzc8OpIHBhciBsJ3VybCwgb24gZXNzYXllIGQnYWZmaWNoZXIgbCd1dGlsaXNhdGV1ciA6XG4gICAgICAgICAgICAgICAgbGV0IHVybERhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIGlmKHVybERhdGFzICYmIHVybERhdGFzLmlkIT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzaG93Rm9ybVVzZXJJbmZvcyh1cmxEYXRhcy5pZCk7XG5cbiAgICAgICAgICAgICAgICAvLyBCZXNvaW4gZCd1biBjb3VwIGRlIEvDpHJjaGVyID8gXG4gICAgICAgICAgICAgICAgYnRuTmV3VXNlci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGVtcHR5VXNlckZvcm0oKTtcbiAgICAgICAgICAgICAgICB9KTsgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBFbnZvaSBkdSBmb3JtdWxhaXJlIGRlcyBpbmZvcyBkZSBsJ3V0aWxpc2F0ZXVyXG4gICAgICAgICAgICAgICAgZm9ybVVzZXIuYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzPWdldERhdGFzRnJvbUlucHV0cyhmb3JtVXNlcik7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlY29tcG9zaXRpb24gZGVzIGpvdXJzIHZhbGFibGVzIHBvdXIgbCdhYm9ubmVtZW50IDpcbiAgICAgICAgICAgICAgICAgICAgZGF0YXMucmVjZWlwdERheXM9XCJcIjtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpPTE7IGk8PTc7IGkrKylcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXNbXCJkXCIraV0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMucmVjZWlwdERheXMrPVwiXCIraTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZihkYXRhcy5ub3RpY2VPaz09PXVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLm5vdGljZU9rPVwiZmFsc2VcIjtcbiAgICAgICAgICAgICAgICAgICAgaWYoZGF0YXMubmV3c2xldHRlck9rPT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXMubmV3c2xldHRlck9rPVwiZmFsc2VcIjtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyVXNlckRhdGFzID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCFpc0VtcHR5KGRhdGFzLmlkKSAmJiAoZGF0YXMuZGVsZXRlT2shPT11bmRlZmluZWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLm9wZW4oXCJERUxFVEVcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK1wiL1wiK2RhdGFzLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZighaXNFbXB0eShkYXRhcy5pZCkgJiYgKGRhdGFzLnZhbGlkYXRpb25PayE9PXVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy52YWxpZGF0ZVVzZXJSb3V0ZStkYXRhcy5pZCk7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIWlzRW1wdHkoZGF0YXMuaWQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLm9wZW4oXCJQVVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy51cGRhdGVVc2VySW5mb3MrZGF0YXMuaWQpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzLnBhc3N3b3JkPWdldFBhc3N3b3JkKGNvbmZpZy5wYXNzd29yZC5taW5sZW5ndGgsIGNvbmZpZy5wYXNzd29yZC5taW5sZW5ndGgrMik7Ly8gbW90IGRlIHBhc3NlIHRlbXBvcmFpcmVcbiAgICAgICAgICAgICAgICAgICAgICAgIHhoclVzZXJEYXRhcy5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmNyZWF0ZVVzZXJSb3V0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMSAmJiByZXNwb25zZS5pZCE9dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5hZGRPa01lc3NhZ2UsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhcy5pZD1yZXNwb25zZS5pZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5tZXNzYWdlIT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UubWVzc2FnZSA9IHJlc3BvbnNlLm1lc3NhZ2Uuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLm1lc3NhZ2UgPSByZXNwb25zZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLmVycm9ycylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzRW1wdHkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzLmRlbGV0ZU9rPT09dW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0Zvcm1Vc2VySW5mb3MoZGF0YXMuaWQpOy8vIHBldXQgYXZvaXIgw6l2b2x1w6kgc3VpdmFudCBjZSBxdWkgcydlc3QgcGFzc8OpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtcHR5VXNlckZvcm0oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJVc2VyRGF0YXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyVXNlckRhdGFzLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIC8vIFRyYWl0ZW1lbnQgZHUgbGFuY2VtZW50IGQndW5lIHJlY2hlcmNoZVxuICAgICAgICAgICAgICAgIGZvcm1TZWFyY2guYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKGZvcm1TZWFyY2gpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHJTZWFyY2ggPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuc2VhcmNoVXNlclJvdXRlKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmxlbmd0aD09PTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlNlYXJjaFJlc3VsdCwgXCJwXCIsIHR4dFVzZXJzLm5vdEZvdW5kLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNlbGVjdEhUTUw9XCI8b3B0aW9uIHZhbHVlPScnPjwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEhUTUwrPVwiPG9wdGlvbiB2YWx1ZT0nXCIrcmVzcG9uc2VbaV0uaWQrXCInPlwiK3Jlc3BvbnNlW2ldLm5hbWUrXCIgKFwiK3Jlc3BvbnNlW2ldLmVtYWlsK1wiKTwvb3B0aW9uPlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZTZWFyY2hSZXN1bHQsIFwic2VsZWN0XCIsIHNlbGVjdEhUTUwsIFwic2VsZWN0U2VhcmNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoU2VsZWN0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2VsZWN0U2VhcmNoXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoU2VsZWN0LmFkZEV2ZW50TGlzdGVuZXIoXCJjaGFuZ2VcIiwgZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNlYXJjaFNlbGVjdC52YWx1ZSE9PVwiXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dGb3JtVXNlckluZm9zKHNlYXJjaFNlbGVjdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2U2VhcmNoUmVzdWx0LCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICB4aHJTZWFyY2guc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGlmKGRhdGFzKVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyU2VhcmNoLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICAgICAgYWRkRWxlbWVudChkaXZNZXNzYWdlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/newLoginValidation.app.js b/front/public/JS/newLoginValidation.app.js index 537c6b2..ffd8842 100644 --- a/front/public/JS/newLoginValidation.app.js +++ b/front/public/JS/newLoginValidation.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -387,8 +391,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -411,6 +415,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -433,7 +438,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -444,20 +449,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

Valider.

", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

Bonjour USER_NAME,

Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Votre venez de valider votre inscription à NOM_SITE.

Merci et à bientôt !

", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

Bonjour USER_NAME,

Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

Pour ce faire, utilisez le lien ci-dessous.

Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

Bonjour USER_NAME,

Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

Merci et à bientôt !

", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -470,15 +478,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

Valider.

", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

Bonjour USER_NAME,

Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

Bonjour USER_NAME,

Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -486,8 +496,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour valider la suppression de votre compte, cliquez ici sans tarder.

", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

Bonjour USER_NAME,

Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -601,7 +612,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -642,7 +654,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -705,7 +717,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -913,7 +1027,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1025,7 +1139,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1113,13 +1228,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1171,4 +1286,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9uZXdMb2dpblZhbGlkYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwid2VsY29tZU1lc3NhZ2UiLCJieWVieWVNZXNzYWdlIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJjb25maWdGcm9udEVuZCIsInR4dCIsInR4dFVzZXJzIiwiZGl2UmVzcG9uc2UiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiaGVsbG9EZXYiLCJjb25maWciLCJpbml0aWFsaXNlIiwiZ2V0Q29uZmlnIiwiYWRkRWxlbWVudCIsImRhdGFzIiwiZ2V0VXJsUGFyYW1zIiwidCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJzdGF0dXMiLCJtZXNzYWdlIiwic2F2ZUxvY2FseSIsImNvbG9yIiwid2luZG93IiwibG9jYXRpb24iLCJhc3NpZ24iLCJlcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJzZXRSZXF1ZXN0SGVhZGVyIiwic2VuZCIsImNvbnNvbGUiLCJlcnJvciIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwiZ2V0TG9jYWx5IiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJob21lUGFnZSIsInNlYXJjaCIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGVjb2RlVVJJIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwiY2hlY2tTZXNzaW9uIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwibm93IiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNB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QUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBM0QscUJBQUcsQ0FBQzhELE9BQUosR0FBYztBQUFBLDJCQUFNRixNQUFNLENBQUM1RCxHQUFHLENBQUMrRCxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQS9ELHFCQUFHLENBQUNxQixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVpnRSxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTUksWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQjNFLE9BQWpCLEVBQTBCNEUsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUMzSiwyREFBTyxDQUFDK0UsT0FBRCxDQUFYLEVBQ0lDLG9FQUFVLENBQUMsU0FBRCxFQUFZRCxPQUFaLENBQVY7QUFDSixNQUFHLENBQUMvRSwyREFBTyxDQUFDMkosU0FBRCxDQUFYLEVBQ0kzRSxvRUFBVSxDQUFDLEtBQUQsRUFBUTJFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQzNKLDJEQUFPLENBQUMwSixjQUFELENBQVgsRUFDSXhFLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBaEIsQ0FBdUJzRSxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL25ld0xvZ2luVmFsaWRhdGlvbi5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9uZXdMb2dpblZhbGlkYXRpb24uanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcImRlZmF1bHRcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJ3aWtpbGVybmlcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LCAgICBcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIvLyBpZGVtXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IHF1J2FsbGV6LXZvdXMgYXBwcmVuZHJlIGF1am91cmQnaHVpID9cIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJDaGFxdWUgam91ciwgdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciBvw7kgdm91cyBsZSBzb3VoYWl0ZXIuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdmFsaWRlIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGNvbXB0ZVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvdHJlIGNvbXB0ZSwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aC48L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IHNhbnMgdGFyZGVyIHZvdXMgY29ubmVjdGVyIGNpLWRlc3NvdXMgcG91ciBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Wb3RyZSB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOiBMSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPjxwPjxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5WYWxpZGVyLjwvYT48L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCBcIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llIGNhciBlbGxlIG4nYSBwYXMgdW5lIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+LiBFbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdMOpIG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2YWxpZGVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgPGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPmNsaXF1ZXogaWNpPC9hPiBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmhtdFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG59OyIsIi8vIC0tIFBBR0UgUEVSTUVUVEFOVCBERSBWQUxJREVSIFVOIENIQU5HRU1FTlQgRCdFTUFJTCBPVSBERSBNT1QgREUgUEFTU0VcblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLlxuLy8vIFNpIGxlIHRva2VuIGVzdCBvaywgb24gdmFsaWRlIGxhIG1pc2Ugw6Agam91ciBldCByZWRpcmlnZSBsJ3V0aWxpc2F0ZXVyIHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWxcblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmxldCBjb25maWc7XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYoZGF0YXMgJiYgZGF0YXMudCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmNoZWNrTmV3TG9naW5MaW5rUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgeyBtZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlLCBjb2xvcjpcInN1Y2Nlc3NcIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7Ly8gYXUgY2FzIG/DucKgYmxvY2FnZSByZWRpcmVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnRnJvbnRFbmQudXNlckhvbWVQYWdlKTsvLyBxdWUgdXNlciBwb3NzaWJsZSBpY2lcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSA0MDQgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5iYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnRnJvbnRFbmQuYWNjb3VudFBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK2RhdGFzLnQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9uZXdMb2dpblZhbGlkYXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJ1c2VycyIsInJlcXVpcmUiLCJxdWVzdGlvbm5haXJlcyIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcGlVcmwiLCJzaXRlVXJsIiwiYWRtaW5OYW1lIiwiYWRtaW5FbWFpbCIsInNlbmRlck5hbWUiLCJzZW5kZXJFbWFpbCIsImFkbWluTGFuZyIsInRoZW1lIiwiYXZhaWxhYmxlTGFuZ3MiLCJzaXRlTmFtZSIsImJlZ2luQ29kZUdvZGZhdGhlciIsImNyb25UaW1pbmdBbGVydEluU2Vjb25kZSIsInJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGUiLCJ0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VycyIsInRva2VuTG9naW5MaW5rVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzIiwidG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnMiLCJ0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VycyIsInRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5cyIsImZyZWVBY2NvdW50VGltaW5nSW5EYXlzIiwiZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzIiwiaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzIiwibmJRdWVzdGlvbnNNaW4iLCJuYlF1ZXN0aW9uc01heCIsIm5iQ2hvaWNlc01heCIsIm5iTmV3UXVlc3Rpb25uYWlyZXMiLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbiIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZCIsIm51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lIiwibWluU2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJuYklsbHVzdHJhdGlvbnNNaW4iLCJuYklsbHVzdHJhdGlvbnNNYXgiLCJtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldCIsIm1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbiIsImlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHgiLCJpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeCIsIm5iTGlua3NNaW4iLCJuYkxpbmtzTWF4IiwicGFzc3dvcmQiLCJtaW5sZW5ndGgiLCJkaXJDYWNoZVVzZXJzIiwiZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMiLCJkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIiwiZGlyQ2FjaGVRdWVzdGlvbnMiLCJkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMiLCJkaXJIVE1MUXVlc3Rpb25uYWlyZSIsImRpcldlYlF1ZXN0aW9ubmFpcmUiLCJxdWVzdGlvbm5haXJlUm91dGVzIiwiZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcyIsInByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzIiwicHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlcyIsInNhdmVBbnN3ZXJzUm91dGUiLCJnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIiwic2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicmVnZW5lcmF0ZUhUTUwiLCJxdWVzdGlvbnNSb3V0ZSIsInRhZ3NTZWFyY2hSb3V0ZSIsImdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlciIsImdldFByZXZpb3VzQW5zd2VycyIsImdldFN0YXRzQW5zd2VycyIsImdldEFkbWluU3RhdHMiLCJRdWVzdGlvbm5haXJlIiwidGl0bGUiLCJtYXhsZW5ndGgiLCJyZXF1aXJlZCIsInNsdWciLCJpbnRyb2R1Y3Rpb24iLCJzZWFyY2hRdWVzdGlvbm5haXJlcyIsIlF1ZXN0aW9uIiwidGV4dCIsInJhbmsiLCJtaW4iLCJkZWZhdWx0VmFsdWUiLCJDaG9pY2UiLCJuYlRhZ3NNaW4iLCJuYlRhZ3NNYXgiLCJkaXJDYWNoZVRhZ3MiLCJkaXJIVE1MVGFncyIsImRpcldlYlRhZ3MiLCJuYlJhbmRvbVJlc3VsdHMiLCJ1c2VyUm91dGVzIiwic3Vic2NyaWJlUm91dGUiLCJnZXRHb2RmYXRoZXJSb3V0ZSIsImNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlIiwiY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlIiwiY2hlY2tMb2dpblJvdXRlIiwiY29ubmVjdGlvblJvdXRlIiwiZ2V0TG9naW5MaW5rUm91dGUiLCJjb25uZWN0aW9uV2l0aExpbmtSb3V0ZSIsImdldFVzZXJJbmZvcyIsImNyZWF0ZVVzZXJSb3V0ZSIsInZhbGlkYXRlVXNlclJvdXRlIiwidXBkYXRlVXNlckluZm9zIiwic2VhcmNoVXNlclJvdXRlIiwiZ2V0R29kQ2hpbGRzIiwiY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZSIsImNoZWNrRGVsZXRlTGlua1JvdXRlIiwiZ2V0UGF5bWVudHMiLCJ1bnN1YnNjcmliZVJvdXRlIiwibmFtZSIsImVtYWlsIiwibmV3UGFzc3dvcmQiLCJjb2RlR29kZmF0aGVyIiwiY2d1T2siLCJ2YWx1ZSIsInRpbWVEaWZmZXJlbmNlTWluIiwidGltZURpZmZlcmVuY2VNYXgiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJhbGVydE5ld1dpbmRvdyIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJzdGF0c0FkbWluIiwibm90Rm91bmQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZExhbmd1YWdlIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0IiwiY29uZmlnRnJvbnRFbmQiLCJ0eHQiLCJ0eHRVc2VycyIsImRpdlJlc3BvbnNlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImhlbGxvRGV2IiwiY29uZmlnIiwiaW5pdGlhbGlzZSIsImdldENvbmZpZyIsImFkZEVsZW1lbnQiLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwibWVzc2FnZSIsInNhdmVMb2NhbHkiLCJjb2xvciIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwiZXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5Iiwic2V0UmVxdWVzdEhlYWRlciIsInNlbmQiLCJjb25zb2xlIiwiZXJyb3IiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImdldExvY2FseSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiaG9tZVBhZ2UiLCJzZWFyY2giLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsImNoZWNrU2Vzc2lvbiIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwidXNlciIsIm5vdyIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENB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QUosR0FBYztBQUFBLDJCQUFNRixNQUFNLENBQUM1RCxHQUFHLENBQUMrRCxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQS9ELHFCQUFHLENBQUNxQixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVpnRSxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTUksWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQjNFLE9BQWpCLEVBQTBCNEUsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN6SywyREFBTyxDQUFDNkYsT0FBRCxDQUFYLEVBQ0lDLG9FQUFVLENBQUMsU0FBRCxFQUFZRCxPQUFaLENBQVY7QUFDSixNQUFHLENBQUM3RiwyREFBTyxDQUFDeUssU0FBRCxDQUFYLEVBQ0kzRSxvRUFBVSxDQUFDLEtBQUQsRUFBUTJFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3pLLDJEQUFPLENBQUN3SyxjQUFELENBQVgsRUFDSXhFLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBaEIsQ0FBdUJzRSxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL25ld0xvZ2luVmFsaWRhdGlvbi5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9uZXdMb2dpblZhbGlkYXRpb24uanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLC8vIGlkZW1cbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLy8gbGltaXRlIGxlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IFdpa2lww6lkaWEgZW4gcXVlc3Rpb25zXCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQXZlYyBXaWtpTGVybmksIHJlY2V2ZXogY2hhcXVlIGpvdXIgZGUgbm91dmVhdXggcXVpenMgcG91ciB0ZXN0ZXIgdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMuXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBhbGVydE5ld1dpbmRvdzogXCJub3V2ZWxsZSBmZW7DqnRyZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIHZvdHJlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIChDdHJsK1YpIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IHNhbnMgdGFyZGVyIHZvdXMgY29ubmVjdGVyIGNpLWRlc3NvdXMgcG91ciBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlcyBxdWl6cyBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGR1IHNpdGUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlcyBxdWl6cyBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCBcIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+LiBFbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdMOpIG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuaWVycyBxdWl6c1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiQmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiA5LFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcIm1vbi1jb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgPHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopPC9zcGFuPiwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9zcGFuPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pICFcIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiBcIlRlc3RlciBXaWtpTGVybmkgZ3JhdHVpdGVtZW50LlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgdW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXMgZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiA8Yj5DJ2VzdCB0b3Vqb3VycyBsZSBjb250ZW51IGRlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaSBjb25jZXJuYW50IGxlcyBcXFwiYm9ubmVzXFxcIiByw6lwb25zZXM8L2I+LiBNYWlzIGxlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbidow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzLCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQ8L2I+Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci4gQ2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIDxiPnRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXo8L2I+IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gR3LDomNlIMOgIGNlIGNvbXB0ZSwgdm91cyBwb3VycmV6IGF1c3NpIDxiPnJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWF1eCBxdWl6czwvYj4gcG91ciBjb250aW51ZXIgw6AgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIkxlcyBkZXJuacOocmVzIGdyYWluZXMgZGUgc2F2b2lyXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXNcIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG59OyIsIi8vIC0tIFBBR0UgUEVSTUVUVEFOVCBERSBWQUxJREVSIFVOIENIQU5HRU1FTlQgRCdFTUFJTCBPVSBERSBNT1QgREUgUEFTU0VcblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLlxuLy8vIFNpIGxlIHRva2VuIGVzdCBvaywgb24gdmFsaWRlIGxhIG1pc2Ugw6Agam91ciBldCByZWRpcmlnZSBsJ3V0aWxpc2F0ZXVyIHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWxcblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIGPDtHTDqSBjbGllbnQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmxldCBjb25maWc7XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYoZGF0YXMgJiYgZGF0YXMudCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmNoZWNrTmV3TG9naW5MaW5rUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UubWVzc2FnZSAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgeyBtZXNzYWdlOiByZXNwb25zZS5tZXNzYWdlLCBjb2xvcjpcInN1Y2Nlc3NcIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7Ly8gYXUgY2FzIG/DucKgYmxvY2FnZSByZWRpcmVjdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnRnJvbnRFbmQudXNlckhvbWVQYWdlKTsvLyBxdWUgdXNlciBwb3NzaWJsZSBpY2lcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdHVzID09PSA0MDQgJiYgcmVzcG9uc2UuZXJyb3JzICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSByZXNwb25zZS5lcnJvcnMuam9pbihcIjxicj5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHJlc3BvbnNlLmVycm9ycywgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5iYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnRnJvbnRFbmQuYWNjb3VudFBhZ2UpLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK2RhdGFzLnQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBzZXJhIGJpZW50w7R0IGxpc2libGUgc3VyIEdpdGxhYi5cXG4gUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5cbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgLy8gbXVsdGlwbGllciBwYXIgLTEsIGNhciBjJ2VzdCBjZSBxdSdpbCBmYXV0IFwiYWpvdXRlclwiIMOgIGwnaGV1cmUgVVRDIHBvdXIgcmV2ZW5pciBlbiBoZXVyZSBsb2NhbGUgcXVpIG0naW50w6lyZXNzZSBldCBub24gbCdpbnZlcnNlXG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKSotMTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGMnZXN0IGxlIHRva2VuIHF1aSBzZXJ0IMOgIHbDqXJpZmllciBsZSBzdGF0dXQgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5hY2NvdW50UGFnZStcIiNzdWJzY3JpYmVcIik7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/public/JS/questionnaire.app.js b/front/public/JS/questionnaire.app.js index f9128ca..4473f6e 100644 --- a/front/public/JS/questionnaire.app.js +++ b/front/public/JS/questionnaire.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -400,7 +404,7 @@ module.exports = { checkResponsesOuputFail: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. C'est certain, vous ferez mieux la prochaine fois !", checkResponsesOuputMedium: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. C'est pas mal du tout !", checkResponsesOuputSuccess: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. Bravo ! Rien ne vous échappe !", - wantToSaveResponses: "Si vous le souhaitez, vous pouvez sauvegarder votre résultat en créant votre compte.\nCela vous permettra de tester de nouveau ce quiz dans l'avenir pour voir si vous avez mémoriser les bonnes réponses. Vous pourrez ainsi aussi recevoir régulièrement de nouveaux quizs.", + wantToSaveResponses: "Si vous le souhaitez, vous pouvez sauvegarder votre résultat en vous connectant à votre compte.", responseSavedMessage: "Votre résultat a été enregistré. Accèder à tous vos quizs.", responseSavedError: "Cependant une erreur a été rencontrée durant l'enregistrement de votre résultat. Accèder à tous vos quizs.", noQuestionnaireWithoudAnswer: "Bravo ! Vous avez répondu à tous les quizs qui vous on été proposés !
Il y en a des nouveaux publiés régulièrement et qui vous seront proposés.
En attendant vous pouvez peut-être essayer de répondre de nouveau à certain quiz pour voir si vous vous souvenez des bonnes réponses ?", @@ -422,8 +426,8 @@ module.exports = { /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -446,6 +450,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -548,7 +553,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -589,7 +595,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -652,7 +658,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

(*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -764,15 +872,16 @@ var initialise = /*#__PURE__*/function () { checkPreviousResponses(user); } - _context.next = 11; + _context.next = 12; break; case 8: _context.prev = 8; _context.t0 = _context["catch"](0); Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); + console.error(_context.t0); - case 11: + case 12: case "end": return _context.stop(); } @@ -792,10 +901,12 @@ Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_4__["helloDev"])(); // Affi var showQuestionnaire = function showQuestionnaire() { chronoBegin = Date.now(); myForm.style.display = "block"; - btnShow.setAttribute("disabled", true); + btnShow.style.display = "none"; + window.location.hash = ""; // risque d'enchaîner les ancres si on recharge la page + var here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... - window.location.assign(here + "#questionnaire"); + window.location.assign(here + "questionnaire"); }; var chronoBegin = 0; @@ -805,6 +916,7 @@ btnShow.addEventListener("click", function (e) { showQuestionnaire(); } catch (e) { Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); + console.error(e); } }); // Lien passé par mail pour voir directement le quiz @@ -814,7 +926,7 @@ var answer = {}; myForm.addEventListener("submit", function (e) { try { e.preventDefault(); - btnSubmit.setAttribute("disabled", true); // seulement un envoi à la fois :) + btnSubmit.style.display = "none"; // seulement un envoi à la fois :) divResponse.innerHTML = ""; // supprime les éventuels messages déjà affichés @@ -844,14 +956,14 @@ myForm.addEventListener("submit", function (e) { } if (userResponses[item] == "true") { - document.getElementById("response_" + idChoice).parentNode.classList.add("success"); + document.getElementById("response_" + idChoice).parentNode.classList.add("isCorrect"); if (userResponses["response_" + idChoice] === undefined) // bonne réponse non sélectionnée goodResponse = false; } else { if (userResponses["response_" + idChoice] === "on") // réponse cochée n'étant pas une des bonnes { goodResponse = false; - document.getElementById("response_" + idChoice).parentNode.classList.add("error"); + document.getElementById("response_" + idChoice).parentNode.classList.add("isNotCorrect"); } } } @@ -876,7 +988,7 @@ myForm.addEventListener("submit", function (e) { checkPreviousResponses(user); } else getOuput += "
" + txtAnswers.responseSavedError.replace("#URL", configTemplate.userHomePage); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", getOuput, "", ["information"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", getOuput, "", ["info"]); } }; @@ -888,11 +1000,17 @@ myForm.addEventListener("submit", function (e) { } else { // si pas connecté, on enregistre le résultat côté client pour permettre de le retrouver au moment de la création du compte ou de la connexion if (Object(_tools_answers_js__WEBPACK_IMPORTED_MODULE_2__["saveAnswer"])(answer)) { - getOuput += "
" + txtAnswers.wantToSaveResponses; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", getOuput, "", ["information"]); + getOuput += "

" + txtAnswers.wantToSaveResponses; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", getOuput, "", ["info"]); document.querySelector(".subcribeBtns").style.display = "block"; } else // pas la peine de proposer de créer un compte si le stockage local ne fonctionne pas - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", getOuput, "", ["information"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(divResponse, "p", getOuput, "", ["info"]); // on redirige vers le résultat + + + window.location.hash = ""; + var here = window.location; // window.location à ajouter pour ne pas quitter la page en mode "preview"... + + window.location.assign(here + "response"); } // affichage des textes d'explications pour chaque question @@ -920,9 +1038,9 @@ var checkPreviousResponses = function checkPreviousResponses(user) { if (this.status === 200) { var nbResponses = response.length; var previousAnswersContent = ""; + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(explanationsTitle, "span", txtAnswers.previousAnswersTitle.replace("#NOM", user.name)); if (nbResponses !== 0) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_3__["addElement"])(explanationsTitle, "span", txtAnswers.previousAnswersTitle.replace("#NOM", user.name)); var totNbQuestions = 0, totNbCorrectAnswers = 0, totDuration = 0, @@ -1138,7 +1256,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1309,7 +1427,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1397,13 +1516,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1455,4 +1574,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9ubmFpcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Fuc3dlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsIm5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWROdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZEludGVnZXJOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZE1pbk51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRJbnRlZ2VyTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5lZWRNaW5OdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIiwiY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwiLCJjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIiwiY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MiLCJ3YW50VG9TYXZlUmVzcG9uc2VzIiwicmVzcG9uc2VTYXZlZE1lc3NhZ2UiLCJyZXNwb25zZVNhdmVkRXJyb3IiLCJub1F1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyIiwibmJRdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlciIsInN0YXRzVXNlciIsInByZXZpb3VzQW5zd2Vyc1RpdGxlIiwicHJldmlvdXNBbnN3ZXJzU3RhdHMiLCJwcmV2aW91c0Fuc3dlcnNMaW5lIiwibm9QcmV2aW91c0Fuc3dlciIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nSW5mbyIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwibmVlZGVkUGFyYW1zIiwiYmFkVXJsIiwibm90VmFsaWRGb3JtYXQiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJ1cGRhdGVCdG5UeHQiLCJhZGRCdG5UeHQiLCJkZWxldGVCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJ1cGRhdGVPa01lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhUb2tlbiIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aENyb24iLCJwcmV2aW91c1BhZ2UiLCJuZXh0UGFnZSIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJzdGF0c0FkbWluIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ1c2Vyc0dldENvbmZpZ1VybCIsImNvbmZpZ1RlbXBsYXRlIiwidHh0IiwidHh0QW5zd2VycyIsIm15Rm9ybSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsImJ0blNob3ciLCJidG5TdWJtaXQiLCJleHBsYW5hdGlvbnNUaXRsZSIsImV4cGxhbmF0aW9uc0NvbnRlbnQiLCJpc0Nvbm5lY3RlZCIsInVzZXIiLCJpbml0aWFsaXNlIiwic3R5bGUiLCJkaXNwbGF5IiwiY2hlY2tTZXNzaW9uIiwiZ2V0TG9jYWx5IiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJjaGVja1ByZXZpb3VzUmVzcG9uc2VzIiwiYWRkRWxlbWVudCIsImhlbGxvRGV2Iiwic2hvd1F1ZXN0aW9ubmFpcmUiLCJjaHJvbm9CZWdpbiIsIm5vdyIsInNldEF0dHJpYnV0ZSIsImhlcmUiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImFzc2lnbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJoYXNoIiwiYW5zd2VyIiwiaW5uZXJIVE1MIiwidXNlclJlc3BvbnNlcyIsImdldERhdGFzRnJvbUlucHV0cyIsImR1cmF0aW9uIiwicm91bmQiLCJuYlF1ZXN0aW9ucyIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJpZENob2ljZSIsImlkUXVlc3Rpb24iLCJnb29kUmVzcG9uc2UiLCJpdGVtIiwic3RhcnRzV2l0aCIsImxhc3RJbmRleE9mIiwicGFyZW50Tm9kZSIsImNsYXNzTGlzdCIsImFkZCIsImdldE91cHV0IiwiY2hlY2tBbnN3ZXJPdXB1dCIsInhoclNhdmVBbnN3ZXIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInhoclJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwibWVzc2FnZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ0b2tlbiIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJzZW5kIiwic3RyaW5naWZ5Iiwic2F2ZUFuc3dlciIsInF1ZXJ5U2VsZWN0b3IiLCJleHBsYW5hdGlvbnMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiaSIsImNvbnNvbGUiLCJlcnJvciIsInhoclByZXZpb3VzUmVzIiwicmVzcG9uc2UiLCJuYlJlc3BvbnNlcyIsInByZXZpb3VzQW5zd2Vyc0NvbnRlbnQiLCJ0b3ROYlF1ZXN0aW9ucyIsInRvdE5iQ29ycmVjdEFuc3dlcnMiLCJ0b3REdXJhdGlvbiIsIm1hcExpbmVDb250ZW50IiwiREFURUFOU1dFUiIsImRhdGVGb3JtYXQiLCJjcmVhdGVkQXQiLCJOQkNPUlJFQ1RBTlNXRVJTIiwiQVZHRFVSQVRJT04iLCJyZXBsYWNlQWxsIiwiQVZHQ09SUkVDVEFOU1dFUlMiLCJjb25maWdGcm9udEVuZCIsInNhdmVMb2NhbHkiLCJyYXRpbyIsIkRVUkFUSU9OIiwiTkJRVUVTVElPTlMiLCJvdXRwdXQiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwibG9nIiwibGluayIsImhvbWVQYWdlIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImRhdGFzIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZXMiLCJlbnRyaWUiLCJlbXB5Rm9ybSIsInR5cGUiLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiZ2V0Q29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7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O0FBQ0osYUF0RU0sQ0FGaUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBWnRELFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNa0osWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQjlGLE9BQWpCLEVBQTBCK0YsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN2TiwyREFBTyxDQUFDd0gsT0FBRCxDQUFYLEVBQ0k4QixvRUFBVSxDQUFDLFNBQUQsRUFBWTlCLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3hILDJEQUFPLENBQUN1TixTQUFELENBQVgsRUFDSWpFLG9FQUFVLENBQUMsS0FBRCxFQUFRaUUsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDdk4sMkRBQU8sQ0FBQ3NOLGNBQUQsQ0FBWCxFQUNJbkksTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxNQUFoQixDQUF1QmlJLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvcXVlc3Rpb25uYWlyZS5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9xdWVzdGlvbm5haXJlLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJkZWZhdWx0XCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwid2lraWxlcm5pXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCwgICAgXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLy8gaWRlbVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvYW5zd2VyXCI6IFwiLi4vbGFuZy9mci9hbnN3ZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9hbnN3ZXIkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkTnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBkb2l0IMOqdHJlIGZvdXJuaS5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IG5lIHBldXQgw6p0cmUgaW5mw6lyaWV1ciDDoCAxLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IG5lIHBldXQgw6p0cmUgYXVzc2kgw6lsZXbDqS5cIixcbiAgICBuZWVkTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIuXCIsXG4gICAgbmVlZE1pbk51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIG5lIHBldXQgw6p0cmUgbsOpZ2F0aWYuXCIsXG4gICAgbmVlZE1heE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIG5lIHBldXQgw6p0cmUgc3Vww6lyaWV1ciBhdSBub21icmUgZGUgcXVlc3Rpb25zLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllciBkZSBzZWNvbmRlcy5cIixcbiAgICBuZWVkTWluTnVtYmVyU2Vjb25kZXNSZXNwb25zZSA6IFwiTGEgZHVyw6llIGRlIGxhIHLDqXBvbnNlIG5lIHBldXQgw6p0cmUgbsOpZ2F0aXZlLlwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRGYWlsIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiBOQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUy4gQydlc3QgY2VydGFpbiwgdm91cyBmZXJleiBtaWV1eCBsYSBwcm9jaGFpbmUgZm9pcyAhXCIsXG4gICAgY2hlY2tSZXNwb25zZXNPdXB1dE1lZGl1bSA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogTkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMuIEMnZXN0IHBhcyBtYWwgZHUgdG91dCAhXCIsXG4gICAgY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MgOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IE5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TLiBCcmF2byAhIFJpZW4gbmUgdm91cyDDqWNoYXBwZSAhXCIsXG4gICAgd2FudFRvU2F2ZVJlc3BvbnNlczogXCJTaSB2b3VzIGxlIHNvdWhhaXRleiwgdm91cyBwb3V2ZXogc2F1dmVnYXJkZXIgdm90cmUgcsOpc3VsdGF0IGVuIGNyw6lhbnQgdm90cmUgY29tcHRlLlxcbkNlbGEgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBkYW5zIGwnYXZlbmlyIHBvdXIgdm9pciBzaSB2b3VzIGF2ZXogbcOpbW9yaXNlciBsZXMgYm9ubmVzIHLDqXBvbnNlcy4gVm91cyBwb3VycmV6IGFpbnNpIGF1c3NpIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWF1eCBxdWl6cy5cIixcbiAgICByZXNwb25zZVNhdmVkTWVzc2FnZSA6IFwiVm90cmUgcsOpc3VsdGF0IGEgw6l0w6kgZW5yZWdpc3Ryw6kuIDxhIGhyZWY9Jy8jVVJMJz5BY2PDqGRlciDDoCB0b3VzIHZvcyBxdWl6czwvYT4uXCIsXG4gICAgcmVzcG9uc2VTYXZlZEVycm9yIDogXCJDZXBlbmRhbnQgdW5lIGVycmV1ciBhIMOpdMOpIHJlbmNvbnRyw6llIGR1cmFudCBsJ2VucmVnaXN0cmVtZW50IGRlIHZvdHJlIHLDqXN1bHRhdC4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICBub1F1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyOiBcIkJyYXZvICEgVm91cyBhdmV6IHLDqXBvbmR1IMOgIHRvdXMgbGVzIHF1aXpzIHF1aSB2b3VzIG9uIMOpdMOpIHByb3Bvc8OpcyAhPGJyPklsIHkgZW4gYSBkZXMgbm91dmVhdXggcHVibGnDqXMgcsOpZ3VsacOocmVtZW50IGV0IHF1aSB2b3VzIHNlcm9udCBwcm9wb3PDqXMuPGJyPkVuIGF0dGVuZGFudCB2b3VzIHBvdXZleiBwZXV0LcOqdHJlIGVzc2F5ZXIgZGUgcsOpcG9uZHJlIGRlIG5vdXZlYXUgw6AgY2VydGFpbiBxdWl6IHBvdXIgdm9pciBzaSB2b3VzIHZvdXMgc291dmVuZXogZGVzIGJvbm5lcyByw6lwb25zZXMgP1wiLFxuICAgIG5iUXVlc3Rpb25uYWlyZVdpdGhvdWRBbnN3ZXI6IFwiSWwgeSBhICNOQiBxdWl6cyBxdWkgdm91cyBvbnQgw6l0w6kgcHJvcG9zw6lzIGV0IGF1eHF1ZWxzIHZvdXMgbidhdmV6IHBhcyByw6lwb25kdS4gVm9pY2kgbGVzIGRlcm5pZXJzIDohXCIsXG4gICAgc3RhdHNVc2VyOiBcIlZvdXMgYXZleiBlbnJlZ2lzdHLDqSBOQkFOU1dFUlMgcsOpcG9uc2VzIMOgIDxiPk5CUVVFU1RJT05OQUlSRVMgcXVlc3Rpb25uYWlyZXMgZGlmZsOpcmVudHM8L2I+IHN1ciBsZXMgTkJUT1RRVUVTVElPTk5BSVJFUyBwcm9wb3PDqXMgcGFyIGxlIHNpdGUuPGJyPkVuIG1veWVubmUsIHZvdXMgYXZleiBtaXMgQVZHRFVSQVRJT04gc2Vjb25kZXMgw6AgcsOpcG9uZHJlIGV0IGF2ZXogPGI+Y29ycmVjdGVtZW50IHLDqXBvbmR1IMOgIEFWR0NPUlJFQ1RBTlNXRVJTICUgZGVzIHF1ZXN0aW9uczwvYj4uXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzVGl0bGU6IFwiQm9uam91ciAjTk9NLCB2b2ljaSB2b3MgcHLDqWPDqWRlbnRzIHLDqXN1bHRhdHMgw6AgY2UgcXVpelwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc1N0YXRzOiBcIkVuIG1veWVubmUsIHZvdXMgYXZleiByw6lwb25kdSDDoCBjZSBxdWl6IGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLCBlbiBheWFudCA8Yj5BVkdDT1JSRUNUQU5TV0VSUyAlIGRlIGJvbm5lcyByw6lwb25zZXM8L2I+LlwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc0xpbmU6IFwiTGUgREFURUFOU1dFUiwgdm91cyBhdmV6IHLDqXBvbmR1IGNvcnJlY3RlbWVudCDDoCBOQkNPUlJFQ1RBTlNXRVJTIHF1ZXN0aW9ucyBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcy5cIixcbiAgICBub1ByZXZpb3VzQW5zd2VyOiBcIkJvbmpvdXIgI05PTSwgYydlc3QgbGEgcHJlbWnDqHJlIGZvaXMgcXVlIHZvdXMgcsOpcG9uZGV6IMOgIGNlIHF1aXouIEJvbm5lIGxlY3R1cmUgIVwiXG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IHF1J2FsbGV6LXZvdXMgYXBwcmVuZHJlIGF1am91cmQnaHVpID9cIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJDaGFxdWUgam91ciwgdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gw6Agc3VwcHJpbWVyIHVuZSBmb2lzIHF1ZSB0b3V0IHLDqWN1cMOpcmVyIGR1IGJhY2tlbmQgOlxuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsIDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgdXNlcnNHZXRDb25maWdVcmwgOiBcIi91c2VyL2dldGNvbmZpZ1wiLFxuICAgIGxhbmcgOiBcImZyXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCJcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgRCdBRkZJQ0hFUiBFVCBSw4lQT05EUkUgw4AgVU4gUVVJWlxuXG4vLy8gSWwgbidlc3QgcGFzIG7DqWNlc3NhaXJlIGQnw6p0cmUgY29ubmVjdMOpIHBvdXIgcsOpcG9uZHJlIGF1IHF1aXogZXQgdm9pciBzb24gcsOpc3VsdGF0LlxuLy8vIE1haXMgc2kgcGFzIGNvbm5lY3TDqSwgb24gcHJvcG9zZSDDoCBsJ2ludGVybmF1dGUgZGUgc2UgY29ubmVjdGVyIG91IGRlIGNyw6llciB1biBjb21wdGUgcG91ciBzYXV2ZWdhcmRlciBzb24gcsOpc3VsdGF0LlxuLy8vIERhbnMgY2UgYnV0IHNvbiByw6lzdWx0YXQgZXN0IHN0b2Nrw6kgZGFucyBzb24gbmF2aWdhdGV1ci5cbi8vLyBTaSBpbCBlc3QgY29ubmVjdMOpLCBsJ2VucmVnaXN0cmVtZW50IGRlIHNvbiByw6lzdWx0YXQgc2UgZmFpdCBhdXRvbWF0aXF1ZW1lbnQgY8O0dMOpIHNlcnZldXIgZXQgc2VzIMOpdmVudHVlbHMgcHLDqWPDqWRlbnRzIHLDqXN1bHRhdHMgc29udCBhZmZpY2jDqXMuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB0aXLDqXMgZHUgYmFja2VuZCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5pbXBvcnQgeyBnZXRQcmV2aW91c0Fuc3dlcnMsIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMsIHF1ZXN0aW9ubmFpcmVSb3V0ZXMsIHNhdmVBbnN3ZXJzUm91dGUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzXCI7XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgY2hlY2tBbnN3ZXJPdXB1dCwgc2F2ZUFuc3dlciB9IGZyb20gXCIuL3Rvb2xzL2Fuc3dlcnMuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2LCB1cGRhdGVBY2NvdW50TGluayB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldExvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cyB9IGZyb20gXCIuL3Rvb2xzL2Zvcm1zLmpzXCI7XG5pbXBvcnQgeyBkYXRlRm9ybWF0LCByZXBsYWNlQWxsIH0gZnJvbSBcIi4uLy4uL3Rvb2xzL21haW5cIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiwgZ2V0VGltZURpZmZlcmVuY2UgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dEFuc3dlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL2Fuc3dlclwiKTtcblxuLy8gUHJpbmNpcGF1eCDDqWzDqW1lbnRzIGR1IERPTSBtYW5pcHVsw6lzIDpcbmNvbnN0IG15Rm9ybSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZVwiKTtcbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IGJ0blNob3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInNob3dRdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgYnRuU3VibWl0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjaGVja1Jlc3BvbnNlc1wiKTtcbmNvbnN0IGV4cGxhbmF0aW9uc1RpdGxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleHBsYW5hdGlvbnNUaXRsZVwiKTtcbmNvbnN0IGV4cGxhbmF0aW9uc0NvbnRlbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxhbmF0aW9uc0NvbnRlbnRcIik7XG5cbmxldCBpc0Nvbm5lY3RlZCwgdXNlcjtcbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgYnRuU2hvdy5zdHlsZS5kaXNwbGF5PVwiaW5saW5lXCI7Ly8gYm91dG9uIGNhY2jDqSBzaSBKUyBpbmFjdGlmLCBjYXIgSlMgbsOpY2Vzc2FpcmUgcG91ciB2w6lyaWZpZXIgbGVzIHLDqXBvbnNlc1xuICAgICAgICBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oW1widXNlclwiXSk7Ly8gc2V1bHMgbGVzIHV0aWxpc2F0ZXVycyBkZSBiYXNlIHBldXZlbnQgcsOpcG9uZHJlIGF1eCBxdWl6c1xuICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgZXQgYSBkw6lqw6AgcsOpcG9uZHUgw6AgY2UgcXVpeiwgb24gYWZmaWNoZSBzZXMgcHLDqWPDqWRlbnRlcyByw6lwb25zZXMgw6AgbGEgcGxhY2UgZHUgdGV4dGUgc2VydmFudCDDoCBleHBsaXF1ZXIgbGUgdG9wbyBhdXggbm91dmVhdXhcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIHVwZGF0ZUFjY291bnRMaW5rKHVzZXIuc3RhdHVzLCBjb25maWdUZW1wbGF0ZSk7XG4gICAgICAgICAgICBjaGVja1ByZXZpb3VzUmVzcG9uc2VzKHVzZXIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpO1xuaGVsbG9EZXYoKTtcblxuLy8gQWZmaWNoYWdlIGR1IHF1ZXN0aW9ubmFpcmUgcXVhbmQgbCd1dGlsaXNhdGV1ciBjbGlxdWUgc3VyIGxlIGJvdXRvbiBvdSBzaSBsJ2lkIGR1IGZvcm11bGFpcmUgZXN0IHBhc3PDqWUgcGFyIGwndXJsXG4vLyBEw6ljbGVuY2hlIGVuIG3Dqm1lIHRlbXBzIGxlIGNocm9ub23DqHRyZSBtZXN1cmFudCBsYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UgYXV4IHF1ZXN0aW9ucy5cbmNvbnN0IHNob3dRdWVzdGlvbm5haXJlID0gKCkgPT5cbntcbiAgICBjaHJvbm9CZWdpbj1EYXRlLm5vdygpO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICBidG5TaG93LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgIGNvbnN0IGhlcmU9d2luZG93LmxvY2F0aW9uOy8vIHdpbmRvdy5sb2NhdGlvbiDDoCBham91dGVyIHBvdXIgbmUgcGFzIHF1aXR0ZXIgbGEgcGFnZSBlbiBtb2RlIFwicHJldmlld1wiLi4uXG4gICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihoZXJlK1wiI3F1ZXN0aW9ubmFpcmVcIik7XG59XG5sZXQgY2hyb25vQmVnaW49MDtcbmJ0blNob3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHNob3dRdWVzdGlvbm5haXJlKCk7XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufSk7XG4vLyBMaWVuIHBhc3PDqSBwYXIgbWFpbCBwb3VyIHZvaXIgZGlyZWN0ZW1lbnQgbGUgcXVpelxuaWYobG9jYXRpb24uaGFzaCE9dW5kZWZpbmVkICYmIGxvY2F0aW9uLmhhc2g9PT1cIiNxdWVzdGlvbm5haXJlXCIpXG4gICAgc2hvd1F1ZXN0aW9ubmFpcmUoKTtcblxuLy8gVHJhaXRlbWVudCBkZSBsJ2Vudm9pIGRlIGxhIHLDqXBvbnNlIGRlIGwndXRpbGlzYXRldXIgOlxubGV0IGFuc3dlciA9IHt9O1xubXlGb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgICAgICAgXG4gICAgICAgIGJ0blN1Ym1pdC5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLCB0cnVlKTsvLyBzZXVsZW1lbnQgdW4gZW52b2kgw6AgbGEgZm9pcyA6KVxuICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjsvLyBzdXBwcmltZSBsZXMgw6l2ZW50dWVscyBtZXNzYWdlcyBkw6lqw6AgYWZmaWNow6lzXG4gICAgICAgIGNvbnN0IHVzZXJSZXNwb25zZXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGFuc3dlci5kdXJhdGlvbj1NYXRoLnJvdW5kKChEYXRlLm5vdygpLWNocm9ub0JlZ2luKS8xMDAwKTtcbiAgICAgICAgYW5zd2VyLm5iUXVlc3Rpb25zPTA7XG4gICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzPTA7XG4gICAgICAgIGFuc3dlci5RdWVzdGlvbm5haXJlSWQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlSWRcIikudmFsdWU7XG4gICAgICAgIC8vIExlcyByw6lwb25zZXMgc29udCByZWdyb3Vww6llcyBwYXIgcXVlc3Rpb24sIGRvbmMgcXVhbmQgbCdpZFF1ZXN0aW9uIGNoYW5nZSwgb24gY29ubmHDrnQgbGUgcsOpc3VsdGF0IHBvdXIgbGEgcXVlc3Rpb24gcHLDqWPDqWRlbnRlXG4gICAgICAgIC8vIFBvdXIgcXUndW5lIHLDqXBvbnNlIHNvaXQgYm9ubmUsIGlsIGZhdXQgY29jaGVyIHRvdXRlcyBsZXMgYm9ubmVzIHLDqXBvbnNlcyAoc2kgUUNNKSDDoCB1bmUgcXVlc3Rpb24gZXQgY29jaGVyIGF1Y3VuZSBkZXMgbWF1dmFpc2VzXG4gICAgICAgIGxldCBpZENob2ljZSwgaWRRdWVzdGlvbj1cIlwiLCBnb29kUmVzcG9uc2U9ZmFsc2U7XG4gICAgICAgIGZvcihsZXQgaXRlbSBpbiB1c2VyUmVzcG9uc2VzKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihpdGVtLnN0YXJ0c1dpdGgoXCJpc0NvcnJlY3RfcmVzcG9uc2VfXCIpKS8vID0gbm91dmVsbGUgcsOpcG9uc2UgcG9zc2libGVcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZENob2ljZSA9IGl0ZW0uc3Vic3RyaW5nKGl0ZW0ubGFzdEluZGV4T2YoXCJfXCIpICsgMSk7XG4gICAgICAgICAgICAgICAgLy8gc2kgb24gY2hhbmdlIGRlIHF1ZXN0b25cbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdIT1pZFF1ZXN0aW9uKSAvLyBvbiBjb21tZW5jZSDDoCB0cmFpdGVyIHVuZSBub3V2ZWxsZSBxdWVzdGlvblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWRRdWVzdGlvbj11c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdO1xuICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmJRdWVzdGlvbnMrKztcbiAgICAgICAgICAgICAgICAgICAgaWYoZ29vZFJlc3BvbnNlKSAvLyByw6lzdWx0YXQgcG91ciBsYSBxdWVzdGlvbiBwcsOpY8OpZGVudGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKys7XG4gICAgICAgICAgICAgICAgICAgIGdvb2RSZXNwb25zZT10cnVlOy8vIHLDqXBvbnNlIGJvbm5lIGp1c3F1J8OgIGxhIHByZW1pw6hyZSBlcnJldXIuLi5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodXNlclJlc3BvbnNlc1tpdGVtXT09XCJ0cnVlXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlX1wiK2lkQ2hvaWNlKS5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQoXCJzdWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdPT09dW5kZWZpbmVkKS8vIGJvbm5lIHLDqXBvbnNlIG5vbiBzw6lsZWN0aW9ubsOpZVxuICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdPT09XCJvblwiKS8vIHLDqXBvbnNlIGNvY2jDqWUgbifDqXRhbnQgcGFzIHVuZSBkZXMgYm9ubmVzXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RSZXNwb25zZT1mYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VfXCIraWRDaG9pY2UpLnBhcmVudE5vZGUuY2xhc3NMaXN0LmFkZChcImVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNpIGonYWkgYmllbiByw6lwb25kdSDDoCBsYSBkZXJuacOocmUgcXVlc3Rpb24sIGlsIGZhdXQgbGUgdHJhaXRlciBpY2ksIGNhciBqZSBzdWlzIHNvcnRpIGRlIGxhIGJvdWNsZSA6XG4gICAgICAgIGlmKGdvb2RSZXNwb25zZSlcbiAgICAgICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKys7XG5cbiAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHLDqXN1bHRhdCwgc3VpdmFudCBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgb3UgcGFzIGV0IHNvbiBzY29yZSA6XG4gICAgICAgIGxldCBnZXRPdXB1dD1jaGVja0Fuc3dlck91cHV0KGFuc3dlcik7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgb24gZW5yZWdpc3RyZSBzb24gcsOpc3VsdGF0IHN1ciBsZSBzZXJ2ZXVyLlxuICAgICAgICAgICAgY29uc3QgeGhyU2F2ZUFuc3dlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrcXVlc3Rpb25uYWlyZVJvdXRlcytzYXZlQW5zd2Vyc1JvdXRlKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4aHJSZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgKHhoclJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIreGhyUmVzcG9uc2UubWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIrdHh0QW5zd2Vycy5yZXNwb25zZVNhdmVkRXJyb3IucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnVGVtcGxhdGUudXNlckhvbWVQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGdldE91cHV0LCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgICAgICBhbnN3ZXIudGltZURpZmZlcmVuY2U9Z2V0VGltZURpZmZlcmVuY2UoKTsvLyBvbiBlbiBwcm9maXRlIHBvdXIgbWV0dHJlIGxlcyBwZW5kdWxlcyDDoCBsJ2hldXJlXG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNlbmQoSlNPTi5zdHJpbmdpZnkoYW5zd2VyKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7ICAgLy8gc2kgcGFzIGNvbm5lY3TDqSwgb24gZW5yZWdpc3RyZSBsZSByw6lzdWx0YXQgY8O0dMOpIGNsaWVudCBwb3VyIHBlcm1ldHRyZSBkZSBsZSByZXRyb3V2ZXIgYXUgbW9tZW50IGRlIGxhIGNyw6lhdGlvbiBkdSBjb21wdGUgb3UgZGUgbGEgY29ubmV4aW9uXG4gICAgICAgICAgICBpZihzYXZlQW5zd2VyKGFuc3dlcikpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgIGdldE91cHV0Kz1cIjxicj5cIit0eHRBbnN3ZXJzLndhbnRUb1NhdmVSZXNwb25zZXM7XG4gICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBnZXRPdXB1dCwgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLnN1YmNyaWJlQnRuc1wiKS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgLy8gcGFzIGxhIHBlaW5lIGRlIHByb3Bvc2VyIGRlIGNyw6llciB1biBjb21wdGUgc2kgbGUgc3RvY2thZ2UgbG9jYWwgbmUgZm9uY3Rpb25uZSBwYXNcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgZ2V0T3VwdXQsIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBhZmZpY2hhZ2UgZGVzIHRleHRlcyBkJ2V4cGxpY2F0aW9ucyBwb3VyIGNoYXF1ZSBxdWVzdGlvblxuICAgICAgICBjb25zdCBleHBsYW5hdGlvbnM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5oZWxwXCIpO1xuICAgICAgICBmb3IobGV0IGkgaW4gZXhwbGFuYXRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihleHBsYW5hdGlvbnNbaV0uc3R5bGUhPXVuZGVmaW5lZCkgLy8gc2lub24sIGxhIGNvbnNvbGUgYWZmaWNoZSB1bmUgZXJyZXVyIFwiVHlwZUVycm9yOiBleHBsYW5hdGlvbnNbaV0uc3R5bGUgaXMgdW5kZWZpbmVkXCIsIGJpZW4gcXVlIHRvdXQgZm9uY3Rpb25uZSAoPylcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbnNbaV0uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59KVxuXG4vLyBGb25jdGlvbiB2w6lyaWZpYW50IGxlcyBwcsOpY8OpZGVudGVzIHLDqXBvbnNlcyBkZSBsJ3V0aWxpc2F0ZXVyXG4vLyBVdGlsZSBzaSBjb25uZWN0w6kgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQgZGUgbGEgcGFnZSwgcHVpcyBhcHLDqHMgdW5lIG5vdXZlbGxlIHLDqXBvbnNlXG5jb25zdCBjaGVja1ByZXZpb3VzUmVzcG9uc2VzID0gKHVzZXIpID0+XG57XG4gICAgY29uc3QgeGhyUHJldmlvdXNSZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK2dldFByZXZpb3VzQW5zd2Vycyt1c2VyLmlkK1wiL1wiK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZUlkXCIpLnZhbHVlKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5iUmVzcG9uc2VzPXJlc3BvbnNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIlwiO1xuICAgICAgICAgICAgICAgIGlmKG5iUmVzcG9uc2VzIT09MClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zVGl0bGUsIFwic3BhblwiLCB0eHRBbnN3ZXJzLnByZXZpb3VzQW5zd2Vyc1RpdGxlLnJlcGxhY2UoXCIjTk9NXCIsIHVzZXIubmFtZSkpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG90TmJRdWVzdGlvbnM9MCwgdG90TmJDb3JyZWN0QW5zd2Vycz0wLCB0b3REdXJhdGlvbj0wLCBtYXBMaW5lQ29udGVudDtcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIHJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYlF1ZXN0aW9ucys9cmVzcG9uc2VbaV0ubmJRdWVzdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3ROYkNvcnJlY3RBbnN3ZXJzKz1yZXNwb25zZVtpXS5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG90RHVyYXRpb24rPXJlc3BvbnNlW2ldLmR1cmF0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgbWFwTGluZUNvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERBVEVBTlNXRVIgOiBkYXRlRm9ybWF0KHJlc3BvbnNlW2ldLmNyZWF0ZWRBdCksLy8gcmV2b2lyIHByb2Jsw6htZSBkZSBsYSBsYW5ndWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQkNPUlJFQ1RBTlNXRVJTIDogcmVzcG9uc2VbaV0ubmJDb3JyZWN0QW5zd2VycyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IHJlc3BvbnNlW2ldLmR1cmF0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNBbnN3ZXJzQ29udGVudCs9XCI8bGk+XCIrcmVwbGFjZUFsbCh0eHRBbnN3ZXJzLnByZXZpb3VzQW5zd2Vyc0xpbmUsIG1hcExpbmVDb250ZW50KStcIjwvbGk+XCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWFwTGluZUNvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBBVkdEVVJBVElPTiA6IE1hdGgucm91bmQodG90RHVyYXRpb24vbmJSZXNwb25zZXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgQVZHQ09SUkVDVEFOU1dFUlMgOiBNYXRoLnJvdW5kKHRvdE5iQ29ycmVjdEFuc3dlcnMvdG90TmJRdWVzdGlvbnMqMTAwKVxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Fuc3dlcnNDb250ZW50PVwiPGg1PlwiK3JlcGxhY2VBbGwodHh0QW5zd2Vycy5wcmV2aW91c0Fuc3dlcnNTdGF0cywgbWFwTGluZUNvbnRlbnQpK1wiPC9oNT5cIitwcmV2aW91c0Fuc3dlcnNDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwidWxcIiwgcHJldmlvdXNBbnN3ZXJzQ29udGVudCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChleHBsYW5hdGlvbnNDb250ZW50LCBcInVsXCIsIHR4dEFuc3dlcnMubm9QcmV2aW91c0Fuc3dlci5yZXBsYWNlKFwiI05PTVwiLCB1c2VyLm5hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vZWxzZVxuICAgICAgICAgICAgICAvLyAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pOyAvLyBwYXMgZm9yY8OpbWVudCB1dGlsZSBkZSBwcsOpdmVuaXIgZHUgYnVnIGljaSA/XG4gICAgICAgIH1cbiAgICB9XG4gICAgeGhyUHJldmlvdXNSZXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgeGhyUHJldmlvdXNSZXMuc2VuZCgpO1xufSIsImNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uL2NvbmZpZy9nZW5lcmFsXCIpO1xuXG5pbXBvcnQgeyBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9sYW5nL1wiK2NvbmZpZ0Zyb250RW5kLmxhbmcrXCIvYW5zd2VyXCIpO1xuXG4vLyBFbnJlZ2lzdHJlbWVudCBjw7R0w6kgY2xpZW50IGR1IGRlcm5pZXIgcsOpc3VsdGF0IMOgIHVuIHF1aXogZW4gYXR0ZW5kYW50IGQnw6p0cmUgY29ubmVjdMOpXG5leHBvcnQgY29uc3Qgc2F2ZUFuc3dlciA9IChhbnN3ZXIpID0+XG57XG4gICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICB7XG4gICAgICAgIHNhdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIsIGFuc3dlcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUmV0b3VybmUgbGUgdGV4dGUgc3VpdmFudCBsZSBub21icmUgZGUgYm9ubmVzIHLDqXBvbnNlc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyT3VwdXQgPSAoYW5zd2VyKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAge1xuICAgICAgICBjb25zdCByYXRpbz1hbnN3ZXIubmJDb3JyZWN0QW5zd2Vycy9hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIGNvbnN0IG1hcE9iaj1cbiAgICAgICAge1xuICAgICAgICAgICAgRFVSQVRJT046IGFuc3dlci5kdXJhdGlvbixcbiAgICAgICAgICAgIE5CQ09SUkVDVEFOU1dFUlM6IGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzLFxuICAgICAgICAgICAgTkJRVUVTVElPTlM6IGFuc3dlci5uYlF1ZXN0aW9uc1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXQ9XCJcIjtcbiAgICAgICAgaWYocmF0aW8gPCAwLjQpXG4gICAgICAgICAgICBvdXRwdXQ9cmVwbGFjZUFsbCh0eHQuY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwsIG1hcE9iaik7XG4gICAgICAgIGVsc2UgaWYocmF0aW8gPCAwLjgpXG4gICAgICAgICAgICBvdXRwdXQ9cmVwbGFjZUFsbCh0eHQuY2hlY2tSZXNwb25zZXNPdXB1dE1lZGl1bSwgbWFwT2JqKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzLCBtYXBPYmopO1xuICAgICAgICBpZihvdXRwdXQpXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJcIjtcbn1cblxuLypcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoY29uZmlnKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgaWYoaXNFbXB0eShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXJcIikpKVxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlclwiKSk7XG4gICAgICAgICAgICBpZih1c2VyLmR1cmF0aW9uPT09dW5kZWZpbmVkIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBjb25maWdGcm9udEVuZC5hcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmNoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufSovIiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzIHN5bmMgXlxcLlxcLy4qXFwuanMkIiwid2VicGFjazovLy8uLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3F1ZXN0aW9ubmFpcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Fuc3dlcnMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJyZWdlbmVyYXRlSFRNTCIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsIm5lZWROdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE1pbk51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWROdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZEludGVnZXJOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZE1pbk51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWF4TnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRJbnRlZ2VyTnVtYmVyU2Vjb25kZXNSZXNwb25zZSIsIm5lZWRNaW5OdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIiwiY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwiLCJjaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtIiwiY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MiLCJ3YW50VG9TYXZlUmVzcG9uc2VzIiwicmVzcG9uc2VTYXZlZE1lc3NhZ2UiLCJyZXNwb25zZVNhdmVkRXJyb3IiLCJub1F1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyIiwibmJRdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlciIsInN0YXRzVXNlciIsInByZXZpb3VzQW5zd2Vyc1RpdGxlIiwicHJldmlvdXNBbnN3ZXJzU3RhdHMiLCJwcmV2aW91c0Fuc3dlcnNMaW5lIiwibm9QcmV2aW91c0Fuc3dlciIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nSW5mbyIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwibmVlZGVkUGFyYW1zIiwiYmFkVXJsIiwibm90VmFsaWRGb3JtYXQiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJ1cGRhdGVCdG5UeHQiLCJhZGRCdG5UeHQiLCJkZWxldGVCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJ1cGRhdGVPa01lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhUb2tlbiIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aENyb24iLCJwcmV2aW91c1BhZ2UiLCJuZXh0UGFnZSIsImFsZXJ0TmV3V2luZG93IiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJhYm91dFBhZ2UiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJuZXdzTGlzdFRpdGxlIiwibWFpbFJlY2lwaWVudFR4dCIsInVzZXJzR2V0Q29uZmlnVXJsIiwiY29uZmlnVGVtcGxhdGUiLCJ0eHQiLCJ0eHRBbnN3ZXJzIiwibXlGb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdlJlc3BvbnNlIiwiYnRuU2hvdyIsImJ0blN1Ym1pdCIsImV4cGxhbmF0aW9uc1RpdGxlIiwiZXhwbGFuYXRpb25zQ29udGVudCIsImlzQ29ubmVjdGVkIiwidXNlciIsImluaXRpYWxpc2UiLCJzdHlsZSIsImRpc3BsYXkiLCJjaGVja1Nlc3Npb24iLCJnZXRMb2NhbHkiLCJ1cGRhdGVBY2NvdW50TGluayIsInN0YXR1cyIsImNoZWNrUHJldmlvdXNSZXNwb25zZXMiLCJhZGRFbGVtZW50IiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJzaG93UXVlc3Rpb25uYWlyZSIsImNocm9ub0JlZ2luIiwibm93Iiwid2luZG93IiwibG9jYXRpb24iLCJoYXNoIiwiaGVyZSIsImFzc2lnbiIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJhbnN3ZXIiLCJpbm5lckhUTUwiLCJ1c2VyUmVzcG9uc2VzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwiZHVyYXRpb24iLCJyb3VuZCIsIm5iUXVlc3Rpb25zIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsImlkQ2hvaWNlIiwiaWRRdWVzdGlvbiIsImdvb2RSZXNwb25zZSIsIml0ZW0iLCJzdGFydHNXaXRoIiwibGFzdEluZGV4T2YiLCJwYXJlbnROb2RlIiwiY2xhc3NMaXN0IiwiYWRkIiwiZ2V0T3VwdXQiLCJjaGVja0Fuc3dlck91cHV0IiwieGhyU2F2ZUFuc3dlciIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwieGhyUmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJtZXNzYWdlIiwic2V0UmVxdWVzdEhlYWRlciIsInRva2VuIiwidGltZURpZmZlcmVuY2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInNlbmQiLCJzdHJpbmdpZnkiLCJzYXZlQW5zd2VyIiwicXVlcnlTZWxlY3RvciIsImV4cGxhbmF0aW9ucyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJpIiwieGhyUHJldmlvdXNSZXMiLCJyZXNwb25zZSIsIm5iUmVzcG9uc2VzIiwicHJldmlvdXNBbnN3ZXJzQ29udGVudCIsInRvdE5iUXVlc3Rpb25zIiwidG90TmJDb3JyZWN0QW5zd2VycyIsInRvdER1cmF0aW9uIiwibWFwTGluZUNvbnRlbnQiLCJEQVRFQU5TV0VSIiwiZGF0ZUZvcm1hdCIsImNyZWF0ZWRBdCIsIk5CQ09SUkVDVEFOU1dFUlMiLCJBVkdEVVJBVElPTiIsInJlcGxhY2VBbGwiLCJBVkdDT1JSRUNUQU5TV0VSUyIsImNvbmZpZ0Zyb250RW5kIiwic2F2ZUxvY2FseSIsInJhdGlvIiwiRFVSQVRJT04iLCJOQlFVRVNUSU9OUyIsIm91dHB1dCIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJsaW5rIiwiaG9tZVBhZ2UiLCJzZXRBdHRyaWJ1dGVzVG9JbnB1dHMiLCJpbnB1dHNDb25mIiwiZWxlbWVudHMiLCJpZElucHV0IiwiaW5wdXRIVE1MIiwiYXR0cmlidXRlIiwiZGF0YXMiLCJmb3JtRGF0YSIsIkZvcm1EYXRhIiwiZW50cmllcyIsImVudHJpZSIsImVtcHlGb3JtIiwidHlwZSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInhociIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsImlzVmFsaWQiLCJsYW5ndWFnZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsImluZGV4T2YiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FBRUlDLFFBQU0sRUFBRSwyQkFGWjtBQUdJQyxTQUFPLEVBQUUsdUJBSGI7QUFJSUMsV0FBUyxFQUFFLFNBSmY7QUFLSUMsWUFBVSxFQUFFLG1CQUxoQjtBQU1JQyxZQUFVLEVBQUUsbUJBTmhCO0FBT0lDLGFBQVcsRUFBRSx1QkFQakI7QUFRSUMsV0FBUyxFQUFFLElBUmY7QUFTSUMsT0FBSyxFQUFFLFdBVFg7QUFT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QVp2RCxZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTWtKLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNILGNBQUQsRUFBaUI3RixPQUFqQixFQUEwQjhGLFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDck8sMkRBQU8sQ0FBQ3VJLE9BQUQsQ0FBWCxFQUNJNEIsb0VBQVUsQ0FBQyxTQUFELEVBQVk1QixPQUFaLENBQVY7QUFDSixNQUFHLENBQUN2SSwyREFBTyxDQUFDcU8sU0FBRCxDQUFYLEVBQ0lsRSxvRUFBVSxDQUFDLEtBQUQsRUFBUWtFLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3JPLDJEQUFPLENBQUNvTyxjQUFELENBQVgsRUFDSW5JLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkcsTUFBaEIsQ0FBdUIrSCxjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL3F1ZXN0aW9ubmFpcmUuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvcXVlc3Rpb25uYWlyZS5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIsLy8gaWRlbVxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMvLyBsaW1pdGUgbGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmRcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2Fuc3dlclwiOiBcIi4uL2xhbmcvZnIvYW5zd2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvYW5zd2VyJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbmVlZE51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGluZsOpcmlldXIgw6AgMS5cIixcbiAgICBuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGF1c3NpIMOpbGV2w6kuXCIsXG4gICAgbmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIHN1cMOpcmlldXIgYXUgbm9tYnJlIGRlIHF1ZXN0aW9ucy5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIgZGUgc2Vjb25kZXMuXCIsXG4gICAgbmVlZE1pbk51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBuZSBwZXV0IMOqdHJlIG7DqWdhdGl2ZS5cIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0RmFpbCA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogTkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMuIEMnZXN0IGNlcnRhaW4sIHZvdXMgZmVyZXogbWlldXggbGEgcHJvY2hhaW5lIGZvaXMgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0gOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IE5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TLiBDJ2VzdCBwYXMgbWFsIGR1IHRvdXQgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiBOQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUy4gQnJhdm8gISBSaWVuIG5lIHZvdXMgw6ljaGFwcGUgIVwiLFxuICAgIHdhbnRUb1NhdmVSZXNwb25zZXM6IFwiU2kgdm91cyBsZSBzb3VoYWl0ZXosIHZvdXMgcG91dmV6IHNhdXZlZ2FyZGVyIHZvdHJlIHLDqXN1bHRhdCBlbiB2b3VzIGNvbm5lY3RhbnQgw6Agdm90cmUgY29tcHRlLlwiLFxuICAgIHJlc3BvbnNlU2F2ZWRNZXNzYWdlIDogXCJWb3RyZSByw6lzdWx0YXQgYSDDqXTDqSBlbnJlZ2lzdHLDqS4gPGEgaHJlZj0nLyNVUkwnPkFjY8OoZGVyIMOgIHRvdXMgdm9zIHF1aXpzPC9hPi5cIixcbiAgICByZXNwb25zZVNhdmVkRXJyb3IgOiBcIkNlcGVuZGFudCB1bmUgZXJyZXVyIGEgw6l0w6kgcmVuY29udHLDqWUgZHVyYW50IGwnZW5yZWdpc3RyZW1lbnQgZGUgdm90cmUgcsOpc3VsdGF0LiA8YSBocmVmPScvI1VSTCc+QWNjw6hkZXIgw6AgdG91cyB2b3MgcXVpenM8L2E+LlwiLFxuICAgIG5vUXVlc3Rpb25uYWlyZVdpdGhvdWRBbnN3ZXI6IFwiQnJhdm8gISBWb3VzIGF2ZXogcsOpcG9uZHUgw6AgdG91cyBsZXMgcXVpenMgcXVpIHZvdXMgb24gw6l0w6kgcHJvcG9zw6lzICE8YnI+SWwgeSBlbiBhIGRlcyBub3V2ZWF1eCBwdWJsacOpcyByw6lndWxpw6hyZW1lbnQgZXQgcXVpIHZvdXMgc2Vyb250IHByb3Bvc8Opcy48YnI+RW4gYXR0ZW5kYW50IHZvdXMgcG91dmV6IHBldXQtw6p0cmUgZXNzYXllciBkZSByw6lwb25kcmUgZGUgbm91dmVhdSDDoCBjZXJ0YWluIHF1aXogcG91ciB2b2lyIHNpIHZvdXMgdm91cyBzb3V2ZW5leiBkZXMgYm9ubmVzIHLDqXBvbnNlcyA/XCIsXG4gICAgbmJRdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlcjogXCJJbCB5IGEgI05CIHF1aXpzIHF1aSB2b3VzIG9udCDDqXTDqSBwcm9wb3PDqXMgZXQgYXV4cXVlbHMgdm91cyBuJ2F2ZXogcGFzIHLDqXBvbmR1LiBWb2ljaSBsZXMgZGVybmllcnMgOiFcIixcbiAgICBzdGF0c1VzZXI6IFwiVm91cyBhdmV6IGVucmVnaXN0csOpIE5CQU5TV0VSUyByw6lwb25zZXMgw6AgPGI+TkJRVUVTVElPTk5BSVJFUyBxdWVzdGlvbm5haXJlcyBkaWZmw6lyZW50czwvYj4gc3VyIGxlcyBOQlRPVFFVRVNUSU9OTkFJUkVTIHByb3Bvc8OpcyBwYXIgbGUgc2l0ZS48YnI+RW4gbW95ZW5uZSwgdm91cyBhdmV6IG1pcyBBVkdEVVJBVElPTiBzZWNvbmRlcyDDoCByw6lwb25kcmUgZXQgYXZleiA8Yj5jb3JyZWN0ZW1lbnQgcsOpcG9uZHUgw6AgQVZHQ09SUkVDVEFOU1dFUlMgJSBkZXMgcXVlc3Rpb25zPC9iPi5cIixcbiAgICBwcmV2aW91c0Fuc3dlcnNUaXRsZTogXCJCb25qb3VyICNOT00sIHZvaWNpIHZvcyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyDDoCBjZSBxdWl6XCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzU3RhdHM6IFwiRW4gbW95ZW5uZSwgdm91cyBhdmV6IHLDqXBvbmR1IMOgIGNlIHF1aXogZW4gQVZHRFVSQVRJT04gc2Vjb25kZXMsIGVuIGF5YW50IDxiPkFWR0NPUlJFQ1RBTlNXRVJTICUgZGUgYm9ubmVzIHLDqXBvbnNlczwvYj4uXCIsXG4gICAgcHJldmlvdXNBbnN3ZXJzTGluZTogXCJMZSBEQVRFQU5TV0VSLCB2b3VzIGF2ZXogcsOpcG9uZHUgY29ycmVjdGVtZW50IMOgIE5CQ09SUkVDVEFOU1dFUlMgcXVlc3Rpb25zIGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLlwiLFxuICAgIG5vUHJldmlvdXNBbnN3ZXI6IFwiQm9uam91ciAjTk9NLCBjJ2VzdCBsYSBwcmVtacOocmUgZm9pcyBxdWUgdm91cyByw6lwb25kZXogw6AgY2UgcXVpei4gQm9ubmUgbGVjdHVyZSAhXCJcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogV2lraXDDqWRpYSBlbiBxdWVzdGlvbnNcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgcmVjZXZleiBjaGFxdWUgam91ciBkZSBub3V2ZWF1eCBxdWl6cyBwb3VyIHRlc3RlciB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3Nlcy5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIixcblx0XCIuL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL3ZpZXdzIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcLmpzJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJBY2N1ZWlsXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9cIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlcyA6XCIsXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBoZWFkTGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJQYXJjb3VyaXJcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL3F1aXpzL1wiLCBpZDpcImluZGV4SGVhZExpbmtcIiwgdGl0bGU6XCJMZXMgZGVybmllcnMgcXVpenNcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1vbiBjb21wdGVcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nvbm5leGlvbi5odG1sXCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9XG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJCbG9nXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcImh0dHBzOi8vZnJhbWFzcGhlcmUub3JnL3Blb3BsZS83ZTU0YjdhMGI1MzIwMTM4OWVlZjJhMDAwMDA1MzYyNVwiLCB0aXRsZTpcIkJsb2cgV2lraUxlcm5pIHN1ciBkaWFzcG9yYSpcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ0dWICYgQ0dVXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9DR1YtQ0dVLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9XG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZTogMyxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogOSxcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMyxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICB2YWxpZGF0aW9uTGlua1BhZ2UgOiBcInZhbGlkYXRpb24uaHRtbD90PVwiLFxuICAgIGxvZ2luTGlua1BhZ2UgOiBcImxvZ2luLmh0bWw/dD1cIixcbiAgICBuZXdMb2dpbkxpbmtQYWdlIDogXCJuZXdsb2dpbi5odG1sP3Q9XCIsXG4gICAgZGVsZXRlTGlua1BhZ2UgOiBcImF1cmV2b2lyLmh0bWw/dD1cIixcbiAgICBzdG9wTWFpbFBhZ2UgOiBcInN0b3AtbWFpbC5odG1sP3Q9XCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICB1cGRhdGVBY2NvdW50UGFnZTogXCJtb24tY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIGFib3V0UGFnZTogXCJhLXByb3Bvcy5odG1sXCIsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVBhZ2VUeHQ6IFwiUGFnZSBkJ2FjY3VlaWxcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pLCB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhIDxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKTwvc3Bhbj4sIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvc3Bhbj5cIixcbiAgICBob21lQnRuQWJvdXRUeHQ6IFwiRW4gc2F2b2lyIHBsdXMgc3VyIFdpa2lMZXJuaSAhXCIsXG4gICAgaG9tZUJ0blN1YnNjcmliZVR4dDogXCJUZXN0ZXIgV2lraUxlcm5pIGdyYXR1aXRlbWVudC5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5TdWl2YW50IGxlcyBxdWVzdGlvbnMsIHVuZSBvdSBwbHVzaWV1cnMgcsOpcG9uc2VzIHBldXZlbnQgw6p0cmUgY29ycmVjdGVzIGV0IGRvaXZlbnQgZG9uYyDDqnRyZSBjb2Now6llcy4gPGI+Qydlc3QgdG91am91cnMgbGUgY29udGVudSBkZSBsJ2FydGljbGUgV2lraXDDqWRpYSBxdWkgZmFpdCBmb2kgY29uY2VybmFudCBsZXMgXFxcImJvbm5lc1xcXCIgcsOpcG9uc2VzPC9iPi4gTWFpcyBsZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBwZXV2ZW50IMOpdm9sdWVyLCBkb25jIG4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy9jb250YWN0Lmh0bWwnPsOgIG1lIHNpZ25hbGVyIHVuZSBlcnJldXI8L2E+Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlcywgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50PC9iPi48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuIENlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSA8Yj50ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6PC9iPiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEdyw6JjZSDDoCBjZSBjb21wdGUsIHZvdXMgcG91cnJleiBhdXNzaSA8Yj5yZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenM8L2I+IHBvdXIgY29udGludWVyIMOgIFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgbmV3c0xpc3RUaXRsZTogXCJMZXMgZGVybmnDqHJlcyBncmFpbmVzIGRlIHNhdm9pclwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzXCIsXG4gICAgbWFpbFJlY2lwaWVudFR4dDogXCJNZXNzYWdlIGVudm95w6kgw6AgOlwiLFxufTsiLCIvLyDDoCBzdXBwcmltZXIgdW5lIGZvaXMgcXVlIHRvdXQgcsOpY3Vww6lyZXIgZHUgYmFja2VuZCA6XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmwgOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICB1c2Vyc0dldENvbmZpZ1VybCA6IFwiL3VzZXIvZ2V0Y29uZmlnXCIsXG4gICAgbGFuZyA6IFwiZnJcIixcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIlxufTsiLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBEJ0FGRklDSEVSIEVUIFLDiVBPTkRSRSDDgCBVTiBRVUlaXG5cbi8vLyBJbCBuJ2VzdCBwYXMgbsOpY2Vzc2FpcmUgZCfDqnRyZSBjb25uZWN0w6kgcG91ciByw6lwb25kcmUgYXUgcXVpeiBldCB2b2lyIHNvbiByw6lzdWx0YXQuXG4vLy8gTWFpcyBzaSBwYXMgY29ubmVjdMOpLCBvbiBwcm9wb3NlIMOgIGwnaW50ZXJuYXV0ZSBkZSBzZSBjb25uZWN0ZXIgb3UgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIHNhdXZlZ2FyZGVyIHNvbiByw6lzdWx0YXQuXG4vLy8gRGFucyBjZSBidXQgc29uIHLDqXN1bHRhdCBlc3Qgc3RvY2vDqSBkYW5zIHNvbiBuYXZpZ2F0ZXVyLlxuLy8vIFNpIGlsIGVzdCBjb25uZWN0w6ksIGwnZW5yZWdpc3RyZW1lbnQgZGUgc29uIHLDqXN1bHRhdCBzZSBmYWl0IGF1dG9tYXRpcXVlbWVudCBjw7R0w6kgc2VydmV1ciBldCBzZXMgw6l2ZW50dWVscyBwcsOpY8OpZGVudHMgcsOpc3VsdGF0cyBzb250IGFmZmljaMOpcy5cblxuLy8gRmljaGllciBkZSBjb25maWd1cmF0aW9uIHRpcsOpcyBkdSBiYWNrZW5kIDpcbmltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHRoZW1lIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcbmltcG9ydCB7IGdldFByZXZpb3VzQW5zd2VycywgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlcywgcXVlc3Rpb25uYWlyZVJvdXRlcywgc2F2ZUFuc3dlcnNSb3V0ZSB9IGZyb20gXCIuLi8uLi9jb25maWcvcXVlc3Rpb25uYWlyZXMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyBjaGVja0Fuc3dlck91cHV0LCBzYXZlQW5zd2VyIH0gZnJvbSBcIi4vdG9vbHMvYW5zd2Vycy5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYsIHVwZGF0ZUFjY291bnRMaW5rIH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRUaW1lRGlmZmVyZW5jZSB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0QW5zd2VycyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvYW5zd2VyXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgbXlGb3JtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlXCIpO1xuY29uc3QgZGl2UmVzcG9uc2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlXCIpO1xuY29uc3QgYnRuU2hvdyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic2hvd1F1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCBidG5TdWJtaXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNoZWNrUmVzcG9uc2VzXCIpO1xuY29uc3QgZXhwbGFuYXRpb25zVGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImV4cGxhbmF0aW9uc1RpdGxlXCIpO1xuY29uc3QgZXhwbGFuYXRpb25zQ29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbGFuYXRpb25zQ29udGVudFwiKTtcblxubGV0IGlzQ29ubmVjdGVkLCB1c2VyO1xuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBidG5TaG93LnN0eWxlLmRpc3BsYXk9XCJpbmxpbmVcIjsvLyBib3V0b24gY2FjaMOpIHNpIEpTIGluYWN0aWYsIGNhciBKUyBuw6ljZXNzYWlyZSBwb3VyIHbDqXJpZmllciBsZXMgcsOpcG9uc2VzXG4gICAgICAgIGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihbXCJ1c2VyXCJdKTsvLyBzZXVscyBsZXMgdXRpbGlzYXRldXJzIGRlIGJhc2UgcGV1dmVudCByw6lwb25kcmUgYXV4IHF1aXpzXG4gICAgICAgIC8vIFNpIGwndXRpbGlzYXRldXIgZXN0IGNvbm5lY3TDqSBldCBhIGTDqWrDoCByw6lwb25kdSDDoCBjZSBxdWl6LCBvbiBhZmZpY2hlIHNlcyBwcsOpY8OpZGVudGVzIHLDqXBvbnNlcyDDoCBsYSBwbGFjZSBkdSB0ZXh0ZSBzZXJ2YW50IMOgIGV4cGxpcXVlciBsZSB0b3BvIGF1eCBub3V2ZWF1eFxuICAgICAgICBpZihpc0Nvbm5lY3RlZClcbiAgICAgICAge1xuICAgICAgICAgICAgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgdXBkYXRlQWNjb3VudExpbmsodXNlci5zdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKTtcbiAgICAgICAgICAgIGNoZWNrUHJldmlvdXNSZXNwb25zZXModXNlcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5oZWxsb0RldigpO1xuXG4vLyBBZmZpY2hhZ2UgZHUgcXVlc3Rpb25uYWlyZSBxdWFuZCBsJ3V0aWxpc2F0ZXVyIGNsaXF1ZSBzdXIgbGUgYm91dG9uIG91IHNpIGwnaWQgZHUgZm9ybXVsYWlyZSBlc3QgcGFzc8OpZSBwYXIgbCd1cmxcbi8vIETDqWNsZW5jaGUgZW4gbcOqbWUgdGVtcHMgbGUgY2hyb25vbcOodHJlIG1lc3VyYW50IGxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBhdXggcXVlc3Rpb25zLlxuY29uc3Qgc2hvd1F1ZXN0aW9ubmFpcmUgPSAoKSA9Plxue1xuICAgIGNocm9ub0JlZ2luPURhdGUubm93KCk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgIGJ0blNob3cuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbiAgICB3aW5kb3cubG9jYXRpb24uaGFzaD1cIlwiOy8vIHJpc3F1ZSBkJ2VuY2hhw65uZXIgbGVzIGFuY3JlcyBzaSBvbiByZWNoYXJnZSBsYSBwYWdlXG4gICAgY29uc3QgaGVyZT13aW5kb3cubG9jYXRpb247Ly8gd2luZG93LmxvY2F0aW9uIMOgIGFqb3V0ZXIgcG91ciBuZSBwYXMgcXVpdHRlciBsYSBwYWdlIGVuIG1vZGUgXCJwcmV2aWV3XCIuLi5cbiAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGhlcmUrXCJxdWVzdGlvbm5haXJlXCIpO1xufVxubGV0IGNocm9ub0JlZ2luPTA7XG5idG5TaG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBzaG93UXVlc3Rpb25uYWlyZSgpO1xuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn0pO1xuLy8gTGllbiBwYXNzw6kgcGFyIG1haWwgcG91ciB2b2lyIGRpcmVjdGVtZW50IGxlIHF1aXpcbmlmKGxvY2F0aW9uLmhhc2ghPXVuZGVmaW5lZCAmJiBsb2NhdGlvbi5oYXNoPT09XCIjcXVlc3Rpb25uYWlyZVwiKVxuICAgIHNob3dRdWVzdGlvbm5haXJlKCk7XG5cbi8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkZSBsYSByw6lwb25zZSBkZSBsJ3V0aWxpc2F0ZXVyIDpcbmxldCBhbnN3ZXIgPSB7fTtcbm15Rm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7ICAgICAgIFxuICAgICAgICBidG5TdWJtaXQuc3R5bGUuZGlzcGxheT1cIm5vbmVcIjsvLyBzZXVsZW1lbnQgdW4gZW52b2kgw6AgbGEgZm9pcyA6KVxuICAgICAgICBkaXZSZXNwb25zZS5pbm5lckhUTUw9XCJcIjsvLyBzdXBwcmltZSBsZXMgw6l2ZW50dWVscyBtZXNzYWdlcyBkw6lqw6AgYWZmaWNow6lzXG4gICAgICAgIGNvbnN0IHVzZXJSZXNwb25zZXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGFuc3dlci5kdXJhdGlvbj1NYXRoLnJvdW5kKChEYXRlLm5vdygpLWNocm9ub0JlZ2luKS8xMDAwKTtcbiAgICAgICAgYW5zd2VyLm5iUXVlc3Rpb25zPTA7XG4gICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzPTA7XG4gICAgICAgIGFuc3dlci5RdWVzdGlvbm5haXJlSWQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJxdWVzdGlvbm5haXJlSWRcIikudmFsdWU7XG4gICAgICAgIC8vIExlcyByw6lwb25zZXMgc29udCByZWdyb3Vww6llcyBwYXIgcXVlc3Rpb24sIGRvbmMgcXVhbmQgbCdpZFF1ZXN0aW9uIGNoYW5nZSwgb24gY29ubmHDrnQgbGUgcsOpc3VsdGF0IHBvdXIgbGEgcXVlc3Rpb24gcHLDqWPDqWRlbnRlXG4gICAgICAgIC8vIFBvdXIgcXUndW5lIHLDqXBvbnNlIHNvaXQgYm9ubmUsIGlsIGZhdXQgY29jaGVyIHRvdXRlcyBsZXMgYm9ubmVzIHLDqXBvbnNlcyAoc2kgUUNNKSDDoCB1bmUgcXVlc3Rpb24gZXQgY29jaGVyIGF1Y3VuZSBkZXMgbWF1dmFpc2VzXG4gICAgICAgIGxldCBpZENob2ljZSwgaWRRdWVzdGlvbj1cIlwiLCBnb29kUmVzcG9uc2U9ZmFsc2U7XG4gICAgICAgIGZvcihsZXQgaXRlbSBpbiB1c2VyUmVzcG9uc2VzKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihpdGVtLnN0YXJ0c1dpdGgoXCJpc0NvcnJlY3RfcmVzcG9uc2VfXCIpKS8vID0gbm91dmVsbGUgcsOpcG9uc2UgcG9zc2libGVcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZENob2ljZSA9IGl0ZW0uc3Vic3RyaW5nKGl0ZW0ubGFzdEluZGV4T2YoXCJfXCIpICsgMSk7XG4gICAgICAgICAgICAgICAgLy8gc2kgb24gY2hhbmdlIGRlIHF1ZXN0b25cbiAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdIT1pZFF1ZXN0aW9uKSAvLyBvbiBjb21tZW5jZSDDoCB0cmFpdGVyIHVuZSBub3V2ZWxsZSBxdWVzdGlvblxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWRRdWVzdGlvbj11c2VyUmVzcG9uc2VzW1wicXVlc3Rpb25faWRfcmVzcG9uc2VfXCIraWRDaG9pY2VdO1xuICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmJRdWVzdGlvbnMrKztcbiAgICAgICAgICAgICAgICAgICAgaWYoZ29vZFJlc3BvbnNlKSAvLyByw6lzdWx0YXQgcG91ciBsYSBxdWVzdGlvbiBwcsOpY8OpZGVudGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKys7XG4gICAgICAgICAgICAgICAgICAgIGdvb2RSZXNwb25zZT10cnVlOy8vIHLDqXBvbnNlIGJvbm5lIGp1c3F1J8OgIGxhIHByZW1pw6hyZSBlcnJldXIuLi5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYodXNlclJlc3BvbnNlc1tpdGVtXT09XCJ0cnVlXCIpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlX1wiK2lkQ2hvaWNlKS5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQoXCJpc0NvcnJlY3RcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmKHVzZXJSZXNwb25zZXNbXCJyZXNwb25zZV9cIitpZENob2ljZV09PT11bmRlZmluZWQpLy8gYm9ubmUgcsOpcG9uc2Ugbm9uIHPDqWxlY3Rpb25uw6llXG4gICAgICAgICAgICAgICAgICAgICAgICBnb29kUmVzcG9uc2U9ZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHVzZXJSZXNwb25zZXNbXCJyZXNwb25zZV9cIitpZENob2ljZV09PT1cIm9uXCIpLy8gcsOpcG9uc2UgY29jaMOpZSBuJ8OpdGFudCBwYXMgdW5lIGRlcyBib25uZXNcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZV9cIitpZENob2ljZSkucGFyZW50Tm9kZS5jbGFzc0xpc3QuYWRkKFwiaXNOb3RDb3JyZWN0XCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIHNpIGonYWkgYmllbiByw6lwb25kdSDDoCBsYSBkZXJuacOocmUgcXVlc3Rpb24sIGlsIGZhdXQgbGUgdHJhaXRlciBpY2ksIGNhciBqZSBzdWlzIHNvcnRpIGRlIGxhIGJvdWNsZSA6XG4gICAgICAgIGlmKGdvb2RSZXNwb25zZSlcbiAgICAgICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKys7XG5cbiAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHLDqXN1bHRhdCwgc3VpdmFudCBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgb3UgcGFzIGV0IHNvbiBzY29yZSA6XG4gICAgICAgIGxldCBnZXRPdXB1dD1jaGVja0Fuc3dlck91cHV0KGFuc3dlcik7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICAvLyBTaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgb24gZW5yZWdpc3RyZSBzb24gcsOpc3VsdGF0IHN1ciBsZSBzZXJ2ZXVyLlxuICAgICAgICAgICAgY29uc3QgeGhyU2F2ZUFuc3dlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrcXVlc3Rpb25uYWlyZVJvdXRlcytzYXZlQW5zd2Vyc1JvdXRlKTtcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB4aHJSZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgKHhoclJlc3BvbnNlLm1lc3NhZ2UpKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIreGhyUmVzcG9uc2UubWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS51c2VySG9tZVBhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tQcmV2aW91c1Jlc3BvbnNlcyh1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRPdXB1dCs9XCI8YnI+XCIrdHh0QW5zd2Vycy5yZXNwb25zZVNhdmVkRXJyb3IucmVwbGFjZShcIiNVUkxcIiwgY29uZmlnVGVtcGxhdGUudXNlckhvbWVQYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGdldE91cHV0LCBcIlwiLCBbXCJpbmZvXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB4aHJTYXZlQW5zd2VyLnNldFJlcXVlc3RIZWFkZXIoXCJBdXRob3JpemF0aW9uXCIsIFwiQmVhcmVyIFwiK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgeGhyU2F2ZUFuc3dlci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24vanNvblwiKTtcbiAgICAgICAgICAgIGFuc3dlci50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZSgpOy8vIG9uIGVuIHByb2ZpdGUgcG91ciBtZXR0cmUgbGVzIHBlbmR1bGVzIMOgIGwnaGV1cmVcbiAgICAgICAgICAgIHhoclNhdmVBbnN3ZXIuc2VuZChKU09OLnN0cmluZ2lmeShhbnN3ZXIpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHsgICAvLyBzaSBwYXMgY29ubmVjdMOpLCBvbiBlbnJlZ2lzdHJlIGxlIHLDqXN1bHRhdCBjw7R0w6kgY2xpZW50IHBvdXIgcGVybWV0dHJlIGRlIGxlIHJldHJvdXZlciBhdSBtb21lbnQgZGUgbGEgY3LDqWF0aW9uIGR1IGNvbXB0ZSBvdSBkZSBsYSBjb25uZXhpb25cbiAgICAgICAgICAgIGlmKHNhdmVBbnN3ZXIoYW5zd2VyKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgZ2V0T3VwdXQrPVwiPGJyPjxicj5cIit0eHRBbnN3ZXJzLndhbnRUb1NhdmVSZXNwb25zZXM7XG4gICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBnZXRPdXB1dCwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc3ViY3JpYmVCdG5zXCIpLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSAvLyBwYXMgbGEgcGVpbmUgZGUgcHJvcG9zZXIgZGUgY3LDqWVyIHVuIGNvbXB0ZSBzaSBsZSBzdG9ja2FnZSBsb2NhbCBuZSBmb25jdGlvbm5lIHBhc1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBnZXRPdXB1dCwgXCJcIiwgW1wiaW5mb1wiXSk7XG4gICAgICAgICAgICAvLyBvbiByZWRpcmlnZSB2ZXJzIGxlIHLDqXN1bHRhdFxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhhc2g9XCJcIjtcbiAgICAgICAgICAgIGNvbnN0IGhlcmU9d2luZG93LmxvY2F0aW9uOy8vIHdpbmRvdy5sb2NhdGlvbiDDoCBham91dGVyIHBvdXIgbmUgcGFzIHF1aXR0ZXIgbGEgcGFnZSBlbiBtb2RlIFwicHJldmlld1wiLi4uXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGhlcmUrXCJyZXNwb25zZVwiKTsgICAgICAgICAgICAgICBcbiAgICAgICAgfVxuICAgICAgICAvLyBhZmZpY2hhZ2UgZGVzIHRleHRlcyBkJ2V4cGxpY2F0aW9ucyBwb3VyIGNoYXF1ZSBxdWVzdGlvblxuICAgICAgICBjb25zdCBleHBsYW5hdGlvbnM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5oZWxwXCIpO1xuICAgICAgICBmb3IobGV0IGkgaW4gZXhwbGFuYXRpb25zKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZihleHBsYW5hdGlvbnNbaV0uc3R5bGUhPXVuZGVmaW5lZCkgLy8gc2lub24sIGxhIGNvbnNvbGUgYWZmaWNoZSB1bmUgZXJyZXVyIFwiVHlwZUVycm9yOiBleHBsYW5hdGlvbnNbaV0uc3R5bGUgaXMgdW5kZWZpbmVkXCIsIGJpZW4gcXVlIHRvdXQgZm9uY3Rpb25uZSAoPylcbiAgICAgICAgICAgICAgICBleHBsYW5hdGlvbnNbaV0uc3R5bGUuZGlzcGxheT1cImJsb2NrXCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59KVxuXG4vLyBGb25jdGlvbiB2w6lyaWZpYW50IGxlcyBwcsOpY8OpZGVudGVzIHLDqXBvbnNlcyBkZSBsJ3V0aWxpc2F0ZXVyXG4vLyBVdGlsZSBzaSBjb25uZWN0w6kgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQgZGUgbGEgcGFnZSwgcHVpcyBhcHLDqHMgdW5lIG5vdXZlbGxlIHLDqXBvbnNlXG5jb25zdCBjaGVja1ByZXZpb3VzUmVzcG9uc2VzID0gKHVzZXIpID0+XG57XG4gICAgY29uc3QgeGhyUHJldmlvdXNSZXMgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vcGVuKFwiR0VUXCIsIGFwaVVybCtxdWVzdGlvbm5haXJlUm91dGVzK2dldFByZXZpb3VzQW5zd2Vycyt1c2VyLmlkK1wiL1wiK2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZUlkXCIpLnZhbHVlKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAge1xuICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5iUmVzcG9uc2VzPXJlc3BvbnNlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBsZXQgcHJldmlvdXNBbnN3ZXJzQ29udGVudD1cIlwiO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zVGl0bGUsIFwic3BhblwiLCB0eHRBbnN3ZXJzLnByZXZpb3VzQW5zd2Vyc1RpdGxlLnJlcGxhY2UoXCIjTk9NXCIsIHVzZXIubmFtZSkpO1xuICAgICAgICAgICAgICAgIGlmKG5iUmVzcG9uc2VzIT09MClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3ROYlF1ZXN0aW9ucz0wLCB0b3ROYkNvcnJlY3RBbnN3ZXJzPTAsIHRvdER1cmF0aW9uPTAsIG1hcExpbmVDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdE5iUXVlc3Rpb25zKz1yZXNwb25zZVtpXS5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdE5iQ29ycmVjdEFuc3dlcnMrPXJlc3BvbnNlW2ldLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3REdXJhdGlvbis9cmVzcG9uc2VbaV0uZHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBMaW5lQ29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURUFOU1dFUiA6IGRhdGVGb3JtYXQocmVzcG9uc2VbaV0uY3JlYXRlZEF0KSwvLyByZXZvaXIgcHJvYmzDqG1lIGRlIGxhIGxhbmd1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CQ09SUkVDVEFOU1dFUlMgOiByZXNwb25zZVtpXS5uYkNvcnJlY3RBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWR0RVUkFUSU9OIDogcmVzcG9uc2VbaV0uZHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Fuc3dlcnNDb250ZW50Kz1cIjxsaT5cIityZXBsYWNlQWxsKHR4dEFuc3dlcnMucHJldmlvdXNBbnN3ZXJzTGluZSwgbWFwTGluZUNvbnRlbnQpK1wiPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtYXBMaW5lQ29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFWR0RVUkFUSU9OIDogTWF0aC5yb3VuZCh0b3REdXJhdGlvbi9uYlJlc3BvbnNlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBBVkdDT1JSRUNUQU5TV0VSUyA6IE1hdGgucm91bmQodG90TmJDb3JyZWN0QW5zd2Vycy90b3ROYlF1ZXN0aW9ucyoxMDApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ9XCI8aDU+XCIrcmVwbGFjZUFsbCh0eHRBbnN3ZXJzLnByZXZpb3VzQW5zd2Vyc1N0YXRzLCBtYXBMaW5lQ29udGVudCkrXCI8L2g1PlwiK3ByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zQ29udGVudCwgXCJ1bFwiLCBwcmV2aW91c0Fuc3dlcnNDb250ZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc0NvbnRlbnQsIFwidWxcIiwgdHh0QW5zd2Vycy5ub1ByZXZpb3VzQW5zd2VyLnJlcGxhY2UoXCIjTk9NXCIsIHVzZXIubmFtZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy9lbHNlXG4gICAgICAgICAgICAgIC8vICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7IC8vIHBhcyBmb3Jjw6ltZW50IHV0aWxlIGRlIHByw6l2ZW5pciBkdSBidWcgaWNpID9cbiAgICAgICAgfVxuICAgIH1cbiAgICB4aHJQcmV2aW91c1Jlcy5zZXRSZXF1ZXN0SGVhZGVyKFwiQXV0aG9yaXphdGlvblwiLCBcIkJlYXJlciBcIit1c2VyLnRva2VuKTtcbiAgICB4aHJQcmV2aW91c1Jlcy5zZW5kKCk7XG59IiwiY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vY29uZmlnL2dlbmVyYWxcIik7XG5cbmltcG9ydCB7IHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5LCByZXBsYWNlQWxsIH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uLy4uL2xhbmcvXCIrY29uZmlnRnJvbnRFbmQubGFuZytcIi9hbnN3ZXJcIik7XG5cbi8vIEVucmVnaXN0cmVtZW50IGPDtHTDqSBjbGllbnQgZHUgZGVybmllciByw6lzdWx0YXQgw6AgdW4gcXVpeiBlbiBhdHRlbmRhbnQgZCfDqnRyZSBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBzYXZlQW5zd2VyID0gKGFuc3dlcikgPT5cbntcbiAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpKVxuICAgIHtcbiAgICAgICAgc2F2ZUxvY2FseShcImxhc3RBbnN3ZXJcIiwgYW5zd2VyKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBSZXRvdXJuZSBsZSB0ZXh0ZSBzdWl2YW50IGxlIG5vbWJyZSBkZSBib25uZXMgcsOpcG9uc2VzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJPdXB1dCA9IChhbnN3ZXIpID0+XG57XG4gICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IHJhdGlvPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzL2Fuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgY29uc3QgbWFwT2JqPVxuICAgICAgICB7XG4gICAgICAgICAgICBEVVJBVElPTjogYW5zd2VyLmR1cmF0aW9uLFxuICAgICAgICAgICAgTkJDT1JSRUNUQU5TV0VSUzogYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMsXG4gICAgICAgICAgICBOQlFVRVNUSU9OUzogYW5zd2VyLm5iUXVlc3Rpb25zXG4gICAgICAgIH1cbiAgICAgICAgbGV0IG91dHB1dD1cIlwiO1xuICAgICAgICBpZihyYXRpbyA8IDAuNClcbiAgICAgICAgICAgIG91dHB1dD1yZXBsYWNlQWxsKHR4dC5jaGVja1Jlc3BvbnNlc091cHV0RmFpbCwgbWFwT2JqKTtcbiAgICAgICAgZWxzZSBpZihyYXRpbyA8IDAuOClcbiAgICAgICAgICAgIG91dHB1dD1yZXBsYWNlQWxsKHR4dC5jaGVja1Jlc3BvbnNlc091cHV0TWVkaXVtLCBtYXBPYmopO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBvdXRwdXQ9cmVwbGFjZUFsbCh0eHQuY2hlY2tSZXNwb25zZXNPdXB1dFN1Y2Nlc3MsIG1hcE9iaik7XG4gICAgICAgIGlmKG91dHB1dClcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBcIlwiO1xufVxuXG4vKlxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChjb25maWcpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBpZihpc0VtcHR5KGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlclwiKSkpXG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJ1c2VyXCIpKTtcbiAgICAgICAgICAgIGlmKHVzZXIuZHVyYXRpb249PT11bmRlZmluZWQgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGNvbmZpZ0Zyb250RW5kLmFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59Ki8iLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHNlcmEgYmllbnTDtHQgbGlzaWJsZSBzdXIgR2l0bGFiLlxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/quiz.app.js b/front/public/JS/quiz.app.js deleted file mode 100644 index ac026ef..0000000 --- a/front/public/JS/quiz.app.js +++ /dev/null @@ -1,1104 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/quiz.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "../lang sync recursive ^\\.\\/.*\\/answer$": -/*!*************************************!*\ - !*** ../lang sync ^\.\/.*\/answer$ ***! - \*************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./fr/answer": "../lang/fr/answer.js" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/answer$"; - -/***/ }), - -/***/ "../lang sync recursive ^\\.\\/.*\\/general$": -/*!**************************************!*\ - !*** ../lang sync ^\.\/.*\/general$ ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./fr/general": "../lang/fr/general.js" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/general$"; - -/***/ }), - -/***/ "../lang/fr/answer.js": -/*!****************************!*\ - !*** ../lang/fr/answer.js ***! - \****************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - needNumberUserResponses: "Le nombre de questions auxquelles l'utilisateur a répondu doit être fourni.", - needIntegerNumberUserResponses: "Le nombre de questions auxquelles l'utilisateur a répondu doit être un nombre entier.", - needMinNumberUserResponses: "Le nombre de questions auxquelles l'utilisateur a répondu ne peut être inférieur à 1.", - needMaxNumberUserResponses: "Le nombre de questions auxquelles l'utilisateur a répondu ne peut être aussi élevé.", - needNumberCorrectResponses: "Le nombre de réponses correctes doit être fourni.", - needIntegerNumberCorrectResponses: "Le nombre de réponses correctes doit être un nombre entier.", - needMinNumberCorrectResponses: "Le nombre de réponses correctes ne peut être négatif.", - needMaxNumberCorrectResponses: "Le nombre de réponses correctes ne peut être supérieur au nombre de questions.", - needIntegerNumberSecondesResponse: "La durée de la réponse doit être un nombre entier de secondes.", - needMinNumberSecondesResponse: "La durée de la réponse ne peut être négative.", - checkResponsesOuputFail: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. C'est certain, vous ferez mieux la prochaine fois !", - checkResponsesOuputMedium: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. C'est pas mal du tout !", - checkResponsesOuputSuccess: "Vous avez répondu en DURATION secondes et avez NBCORRECTANSWERS bonne(s) réponse(s) sur NBQUESTIONS. Bravo ! Rien ne vous échappe !", - wantToSaveResponses: "Si vous le souhaitez, vous pouvez sauvegarder votre résultat en créant votre compte.\nCela vous permettra de tester de nouveau ce quiz dans l'avenir pour voir si vous avez mémoriser les bonnes réponses. Vous pourrez ainsi aussi recevoir régulièrement de nouveaux quizs.", - responseSavedMessage: "Votre résultat a été enregistré. Accèder à tous vos quizs.", - responseSavedError: "Cependant une erreur a été rencontrée durant l'enregistrement de votre résultat. Accèder à tous vos quizs.", - noQuestionnaireWithoudAnswer: "Bravo ! Vous avez répondu à tous les quizs qui vous on été proposés !
Il y en a des nouveaux publiés régulièrement et qui vous seront proposés.
En attendant vous pouvez peut-être essayer de répondre de nouveau à certain quiz pour voir si vous vous souvenez des bonnes réponses ?", - nbQuestionnaireWithoudAnswer: "Il y a #NB quizs qui vous ont été proposés et auxquels vous n'avez pas répondu. Voici les derniers :!", - statsUser: "Vous avez enregistré NBANSWERS réponses à NBQUESTIONNAIRES questionnaires différents sur les NBTOTQUESTIONNAIRES proposés par le site.
En moyenne, vous avez mis AVGDURATION secondes à répondre et avez correctement répondu à AVGCORRECTANSWERS % des questions.", - previousAnswersTitle: "Vos résultats précédents", - previousAnswersStats: "En moyenne, vous avez répondu à ce quiz en AVGDURATION secondes, en ayant AVGCORRECTANSWERS % de bonnes réponses.", - previousAnswersLine: "Le DATEANSWER, vous avez répondu correctement à NBCORRECTANSWERS questions en AVGDURATION secondes." -}; - -/***/ }), - -/***/ "../lang/fr/general.js": -/*!*****************************!*\ - !*** ../lang/fr/general.js ***! - \*****************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", - scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", - scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", - serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", - serverErrorAdmin: "Bug de l'application :", - neededParams: "Des paramètres nécessaires manquants sont manquants.", - badUrl: "Tentative d'accès à une page n'existant pas :", - notValidFormat: "Format non valide.", - notAllowed: "Vous n'avez pas les droits nécessaires pour cette action.", - notRequired: "Facultatif.", - updateBtnTxt: "Modifier", - addBtnTxt: "Ajouter", - deleteBtnTxt: "Supprimer", - addOkMessage: "Les données ont bien été enregistrées.", - updateOkMessage: "La mise à jour à jour a bien été enregistrée.", - deleteOkMessage: "La suppression a bien été enregistrée.", - failAuth: "Erreur d'authentification.", - failAuthHeader: "Absence de header Authorization.", - failAuthToken: "Token invalide ou utilisateur non trouvé.", - failAuthId: "Identifiant non valide : ", - failAuthCron: "Tentative de lancement d'un cron sans le bon token.", - previousPage: "Page précédente", - nextPage: "Page suivante", - btnLinkToQuestionnaire: "Aller au quiz !", - statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." -}; - -/***/ }), - -/***/ "../tools/main.js": -/*!************************!*\ - !*** ../tools/main.js ***! - \************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// Quelques fonctions utiles pour les chaînes -var Tool = /*#__PURE__*/function () { - function Tool() { - _classCallCheck(this, Tool); - } - - _createClass(Tool, null, [{ - key: "isEmpty", - value: function isEmpty(myVar) { - if (myVar === undefined || myVar === null) return true;else { - myVar += ""; // si autre chose qu'une chaîne envoyé... - - myVar = myVar.trim(); - if (myVar === "") return true;else return false; - } - } - }, { - key: "trimIfNotNull", - value: function trimIfNotNull(myString) { - if (Tool.isEmpty(myString)) myString = null;else { - myString += ""; // si autre chose qu'une chaîne envoyé... - - myString = myString.trim(); - } - return myString; - } - }, { - key: "shortenIfLongerThan", - value: function shortenIfLongerThan(myString, max) { - myString += ""; // au cas où cela ne serait pas une chaîne... - - if (myString.length > max) myString = myString.substring(0, max - 3) + "..."; - return myString; - } // source : https://stackoverflow.com/questions/15604140/replace-multiple-strings-with-multiple-other-strings - - }, { - key: "replaceAll", - value: function replaceAll(myString, mapObj) { - var replaceElts = new RegExp(Object.keys(mapObj).join("|"), "gi"); - return myString.replace(replaceElts, function (matched) { - return mapObj[matched]; - }); - } // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random - - }, { - key: "getRandomInt", - value: function getRandomInt(min, max) { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min)) + min; - } // à compléter : https://en.wikipedia.org/wiki/Date_format_by_country - - }, { - key: "dateFormat", - value: function dateFormat(dateString) { - var lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "fr"; - if (Tool.isEmpty(dateString)) return ""; - var myDate = new Date(dateString); - var myDay = myDate.getDate() + ""; - if (myDay.length === 1) myDay = "0" + myDay; - var myMounth = myDate.getMonth() + 1 + ""; - if (myMounth.length === 1) myMounth = "0" + myMounth; - var myYear = myDate.getFullYear(); - if (lang === "fr") return myDay + "/" + myMounth + "/" + myYear;else if (lang === "form") // 2014-02-09 - return myYear + "-" + myMounth + "-" + myDay;else return myMounth + "/" + myDay + "/" + myYear; - } - }]); - - return Tool; -}(); - -module.exports = Tool; - -/***/ }), - -/***/ "./src/config/general.js": -/*!*******************************!*\ - !*** ./src/config/general.js ***! - \*******************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - apiUrl: "http://localhost:3000/api", - usersGetConfigUrl: "/user/getconfig", - lang: "fr", - userHomePage: "accueil.html", - adminHomePage: "admin.html", - managerHomePage: "gestion.html", - subscribePage: "inscription.html", - connectionPage: "connexion.html", - accountPage: "compte.html", - questionnairesManagementPage: "gestion-quizs.html", - usersManagementPage: "gestion-utilisateurs.html", - nbQuestionnairesUserHomePage: 10, - illustrationDir: "/img/quizs/" -}; // à terme fusionner avec les déclarations backend concernant le front, tout étant saisi dans l'admin - -/***/ }), - -/***/ "./src/quiz.js": -/*!*********************!*\ - !*** ./src/quiz.js ***! - \*********************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _tools_answers_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/answers.js */ "./src/tools/answers.js"); -/* harmony import */ var _tools_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/dom.js */ "./src/tools/dom.js"); -/* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js"); -/* harmony import */ var _tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/clientstorage.js */ "./src/tools/clientstorage.js"); -/* harmony import */ var _tools_forms_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/forms.js */ "./src/tools/forms.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_5__); -/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -// -- GESTION DU FORMULAIRE PERMETTANT D'AFFICHER ET RÉPONDRE À UN QUIZ -/// Il n'est pas nécessaire d'être connecté pour répondre au quiz et voir son résultat. -/// Mais si pas connecté, je propose à l'internaute de se connecter ou de créer un compte. -/// Dans ce but son résultat est alors stocké dans son navigateur -/// Si il est connecté, l'enregistrement de son résultat se fait automatiquement et ses précédents résultats affichés -// Fichier de configuration côté client : -var configFrontEnd = __webpack_require__(/*! ./config/general */ "./src/config/general.js"); // Importation des fonctions utiles au script : - - - - - - - - - // Dictionnaires : - -var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + configFrontEnd.lang + "/general"); - -var txtAnswers = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + configFrontEnd.lang + "/answer"); // Principaux éléments du DOM manipulés : - - -var myForm = document.getElementById("questionnaire"); -var divResponse = document.getElementById("response"); -var btnShow = document.getElementById("showQuestionnaire"); -var btnSubmit = document.getElementById("checkResponses"); -var explanationsTitle = document.getElementById("explanationsTitle"); -var explanationsContent = document.getElementById("explanationsContent"); -Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["helloDev"])(); // Chargement des configurations fournies par le backend + test de connexion de l'utilisateur : - -var config, isConnected, user; - -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getConfig"])(); - - case 3: - config = _context.sent; - - if (config) { - _context.next = 8; - break; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - _context.next = 13; - break; - - case 8: - btnShow.style.display = "inline"; - _context.next = 11; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["checkSession"])(config, ["user"]); - - case 11: - isConnected = _context.sent; - - // seuls les simples utilisateurs peuvent répondre aux quizs - // Si l'utilisateur est connecté, je vérifie sur il a déjà répondu à ce quiz et si oui affiche ses précédentes réponses dans l'encart servant à expliquer le topo aux nouveaux - if (isConnected) { - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_3__["getLocaly"])("user", true); - checkPreviousResponses(config, user); - } - - case 13: - _context.next = 18; - break; - - case 15: - _context.prev = 15; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - - case 18: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 15]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); - -initialise(); // Affichage du questionnaire si l'utilisateur clique sur le bouton ou si l'id du formulaire est passée par l'url -// Déclenche en même temps le chronomètre mesurant la durée de la réponse aux questions. - -var showQuestionnaire = function showQuestionnaire() { - chronoBegin = Date.now(); - myForm.style.display = "block"; - btnShow.setAttribute("disabled", true); - window.location.assign("#questionnaire"); -}; - -var chronoBegin = 0; -btnShow.addEventListener("click", function (e) { - try { - e.preventDefault(); - showQuestionnaire(); - } catch (e) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - } -}); -if (location.hash != undefined && location.hash === "#questionnaire") showQuestionnaire(); // Traitement de l'envoi de sa réponse par l'utilisateur : - -var answer = {}; -myForm.addEventListener("submit", function (e) { - try { - e.preventDefault(); - btnSubmit.setAttribute("disabled", true); // seulement un envoi à la fois :) - - divResponse.innerHTML = ""; // supprime les éventuels messages déjà affichés - - var userResponses = Object(_tools_forms_js__WEBPACK_IMPORTED_MODULE_4__["getDatasFromInputs"])(myForm); - answer.duration = Math.round((Date.now() - chronoBegin) / 1000); - answer.nbCorrectAnswers = 0; - answer.QuestionnaireId = document.getElementById("questionnaireId").value; // Récupére les réponses du quiz sur le serveur : - - var xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + config.questionnaireRoutes + config.getQuestionnaireRoutes + "/" + userResponses.questionnaireId); - var idChoice, goodResponse; - - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && Array.isArray(response.Questions)) { - answer.nbQuestions = response.Questions.length; // Puis on passe en revue les réponses pour afficher celles qui sont correctes et détecter les erreurs - // Il peut y avoir plusieurs bonnes réponses pour une même question (QCM) - - for (var i in response.Questions) { - goodResponse = true; - - for (var j in response.Questions[i].Choices) { - idChoice = response.Questions[i].Choices[j].id; - - if (response.Questions[i].Choices[j].isCorrect === true) { - document.getElementById("response_" + idChoice).parentNode.classList.add("success"); - if (userResponses["response_" + idChoice] === undefined) // bonne réponse non sélectionnée - goodResponse = false; - } else { - if (userResponses["response_" + idChoice] === "on") // réponse cochée n'étant pas une des bonnes - { - goodResponse = false; - document.getElementById("response_" + idChoice).parentNode.classList.add("error"); - } - } - } - - if (goodResponse) answer.nbCorrectAnswers++; - } // Affichage du résultat, suivant si l'utilisateur est connecté ou pas et son score : - - - var getOuput = Object(_tools_answers_js__WEBPACK_IMPORTED_MODULE_0__["checkAnswerOuput"])(answer); - - if (isConnected) { - // si l'utilisateur est connecté on enregistre son résultat sur le serveur. - var xhr2 = new XMLHttpRequest(); - xhr2.open("POST", configFrontEnd.apiUrl + config.questionnaireRoutes + config.saveAnswersRoute); - - xhr2.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response2 = JSON.parse(this.responseText); - - if (this.status === 201 && response2.message) { - getOuput += "
" + response2.message.replace("#URL", configFrontEnd.userHomePage); - checkPreviousResponses(config, user); - } else getOuput += "
" + txtAnswers.responseSavedError.replace("#URL", configFrontEnd.userHomePage); - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", getOuput, "", ["information"]); - } - }; - - xhr2.setRequestHeader("Authorization", "Bearer " + user.token); - xhr2.setRequestHeader("Content-Type", "application/json"); - answer.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_6__["getTimeDifference"])(config); // on en profite pour mettre les pendules à l'heure - - xhr2.send(JSON.stringify(answer)); - } else { - // sinon je l'enregistre côté client pour permettre de le retrouver au moment de la création du compte ou de la connexion - if (Object(_tools_answers_js__WEBPACK_IMPORTED_MODULE_0__["saveAnswer"])(answer)) { - getOuput += "
" + txtAnswers.wantToSaveResponses; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", getOuput, "", ["information"]); - document.querySelector(".subcribeBtns").style.display = "block"; - } else // pas la peine de proposer de créer un compte si le stockage local ne fonctionne pas - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", getOuput, "", ["information"]); - } // affichage des textes d'explications pour chaque question - - - var explanations = document.querySelectorAll(".help"); - - for (var _i in explanations) { - explanations[_i].style.display = "block"; - } // affiche une erreur "TypeError: explanations[i].style is undefined" mais tout fonctionne ? - - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - } - }; - - xhr.send(); - } catch (e) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - } -}); // Fonction vérifiant les précédentes réponses de l'utilisateur -// Utile si connecté lors du premier chargement de la page, puis après une nouvelle réponse - -var checkPreviousResponses = function checkPreviousResponses(config, user) { - var xhrPreviousRes = new XMLHttpRequest(); - xhrPreviousRes.open("GET", configFrontEnd.apiUrl + config.questionnaireRoutes + config.getPreviousAnswers + user.id + "/" + document.getElementById("questionnaireId").value); - - xhrPreviousRes.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200) { - var nbResponses = response.length; - var previousAnswersContent = ""; - - if (nbResponses !== 0) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(explanationsTitle, "span", txtAnswers.previousAnswersTitle); - var totNbQuestions = 0, - totNbCorrectAnswers = 0, - totDuration = 0, - mapLineContent; - - for (var i in response) { - totNbQuestions += response[i].nbQuestions; - totNbCorrectAnswers += response[i].nbCorrectAnswers; - totDuration += response[i].duration; - mapLineContent = { - DATEANSWER: Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["dateFormat"])(response[i].createdAt), - // revoir problème de la langue - NBCORRECTANSWERS: response[i].nbCorrectAnswers, - AVGDURATION: response[i].duration - }; - previousAnswersContent += "
  • " + Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(txtAnswers.previousAnswersLine, mapLineContent) + "
  • "; - } - - mapLineContent = { - AVGDURATION: Math.round(totDuration / nbResponses), - AVGCORRECTANSWERS: Math.round(totNbCorrectAnswers / totNbQuestions * 100) - }; - previousAnswersContent = "
    " + Object(_tools_main__WEBPACK_IMPORTED_MODULE_5__["replaceAll"])(txtAnswers.previousAnswersStats, mapLineContent) + "
    " + previousAnswersContent; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(explanationsContent, "ul", previousAnswersContent); - } - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - } - }; - - xhrPreviousRes.setRequestHeader("Authorization", "Bearer " + user.token); - xhrPreviousRes.send(); -}; - -/***/ }), - -/***/ "./src/tools/answers.js": -/*!******************************!*\ - !*** ./src/tools/answers.js ***! - \******************************/ -/*! exports provided: saveAnswer, checkAnswerOuput */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveAnswer", function() { return saveAnswer; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAnswerOuput", function() { return checkAnswerOuput; }); -/* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_1__); -var configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); - - - - -var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/answer$")("./" + configFrontEnd.lang + "/answer"); // Enregistrement côté client du dernier résultat à un quiz en attendant d'être connecté - - -var saveAnswer = function saveAnswer(answer) { - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.QuestionnaireId)) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("lastAnswer", answer); - return true; - } else return false; -}; // Retourne le texte suivant le nombre de bonnes réponses - -var checkAnswerOuput = function checkAnswerOuput(answer) { - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions)) { - var ratio = answer.nbCorrectAnswers / answer.nbQuestions; - var mapObj = { - DURATION: answer.duration, - NBCORRECTANSWERS: answer.nbCorrectAnswers, - NBQUESTIONS: answer.nbQuestions - }; - var output = ""; - if (ratio < 0.4) output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputFail, mapObj);else if (ratio < 0.8) output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputMedium, mapObj);else output = Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["replaceAll"])(txt.checkResponsesOuputSuccess, mapObj); - if (output) return output;else return ""; - } else return ""; -}; -/* -export const checkSession = async (config) => -{ - return new Promise((resolve, reject) => - { - if(isEmpty(localStorage.getItem("user"))) - resolve(false); - else - { - const user=JSON.parse(localStorage.getItem("user")); - if(user.duration===undefined || user.duration < Date.now()) - { - localStorage.removeItem("user"); - resolve(false); - } - else - { - const xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl+config.userRoutes+config.checkLoginRoute+user.token); - xhr.onload = () => - { - let response=JSON.parse(xhr.responseText); - if (xhr.status === 200 && response.isValid && response.id != undefined) - { - if(response.id===user.id) - resolve(true); - else - { - localStorage.removeItem("user"); - resolve(false); - } - } - else - { - localStorage.removeItem("user"); - resolve(false); - } - } - xhr.onerror = () => reject(xhr.statusText); - xhr.send(); - } - } - }); -}*/ - -/***/ }), - -/***/ "./src/tools/clientstorage.js": -/*!************************************!*\ - !*** ./src/tools/clientstorage.js ***! - \************************************/ -/*! exports provided: saveLocaly, getLocaly, removeLocaly */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveLocaly", function() { return saveLocaly; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaly", function() { return getLocaly; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); -// FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) -// Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { - localStorage.setItem(name, JSON.stringify(data)); -}; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); -}; -var removeLocaly = function removeLocaly(name) { - localStorage.removeItem(name); -}; - -/***/ }), - -/***/ "./src/tools/dom.js": -/*!**************************!*\ - !*** ./src/tools/dom.js ***! - \**************************/ -/*! exports provided: addElement */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - // Fonction associant les attributs fournis à un champ de formulaire - -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? - newElement.id = eltId; - - if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } - } - - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok - { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } - } - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. - - if (replace) eltParent.innerHTML = ""; - eltParent.appendChild(newElement); - } -}; - -/***/ }), - -/***/ "./src/tools/everywhere.js": -/*!*********************************!*\ - !*** ./src/tools/everywhere.js ***! - \*********************************/ -/*! exports provided: helloDev */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); -// Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); - return true; -}; - -/***/ }), - -/***/ "./src/tools/forms.js": -/*!****************************!*\ - !*** ./src/tools/forms.js ***! - \****************************/ -/*! exports provided: setAttributesToInputs, getDatasFromInputs, empyForm, empyAndHideForm */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setAttributesToInputs", function() { return setAttributesToInputs; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getDatasFromInputs", function() { return getDatasFromInputs; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyForm", function() { return empyForm; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empyAndHideForm", function() { return empyAndHideForm; }); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _createForOfIteratorHelper(o, allowArrayLike) { var it; if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = o[Symbol.iterator](); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; } - -function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } - -function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } - - // Fonction associant les attributs fournis à un champ de formulaire - -var setAttributesToInputs = function setAttributesToInputs(inputsConf, myForm) { - for (var i in myForm.elements) { - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(myForm.elements[i].id)) { - var idInput = myForm.elements[i].id; - - if (inputsConf[idInput] !== undefined) { - var inputHTML = document.getElementById(idInput); - - for (var attribute in inputsConf[idInput]) { - inputHTML.setAttribute(attribute, inputsConf[idInput][attribute]); - } - } - } - } - - return true; -}; // Récupère toutes les valeurs de champs en omettant les checkbox non cochées, etc. - -var getDatasFromInputs = function getDatasFromInputs(myForm) { - var datas = {}; - var formData = new FormData(myForm); - - var _iterator = _createForOfIteratorHelper(formData.entries()), - _step; - - try { - for (_iterator.s(); !(_step = _iterator.n()).done;) { - var entrie = _step.value; - datas[entrie[0]] = entrie[1]; - } - } catch (err) { - _iterator.e(err); - } finally { - _iterator.f(); - } - - return datas; -}; // Vide tous les champs d'un formulaire, y compris hidden, checkbox, etc. -// Revoir pour les select - -var empyForm = function empyForm(myForm) { - var formData = new FormData(myForm); - - var _iterator2 = _createForOfIteratorHelper(formData.entries()), - _step2; - - try { - for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) { - var entrie = _step2.value; - if (myForm.elements[entrie[0]].type == "checkbox" || myForm.elements[entrie[0]].type == "radio") myForm.elements[entrie[0]].checked = false;else myForm.elements[entrie[0]].value = ""; - } - } catch (err) { - _iterator2.e(err); - } finally { - _iterator2.f(); - } - - return true; -}; // Vide et cache le formulaire - -var empyAndHideForm = function empyAndHideForm(myForm) { - empyForm(myForm); - myForm.style.display = "none"; -}; - -/***/ }), - -/***/ "./src/tools/users.js": -/*!****************************!*\ - !*** ./src/tools/users.js ***! - \****************************/ -/*! exports provided: getConfig, getTimeDifference, getPassword, setSession, checkAnswerDatas, checkSession */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfig", function() { return getConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimeDifference", function() { return getTimeDifference; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPassword", function() { return getPassword; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSession", function() { return setSession; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAnswerDatas", function() { return checkAnswerDatas; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkSession", function() { return checkSession; }); -/* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_1__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -var configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); - - - // Récupère les données de configuration des utilisateurs -// À terme, un fichier statique importable comme module devrait éviter une requête ajax - -var getConfig = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + configFrontEnd.usersGetConfigUrl); - - xhr.onload = function () { - return resolve(JSON.parse(xhr.responseText)); - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - })); - - case 1: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - - return function getConfig() { - return _ref.apply(this, arguments); - }; -}(); -var getTimeDifference = function getTimeDifference(config) { - var timeLocal = new Date().getTimezoneOffset(); - if (timeLocal > config.timeDifferenceMax || timeLocal < config.timeDifferenceMin) return 0;else return timeLocal; -}; // On enlève volontairement les 0/O pour éviter les confusions ! -// Et mieux vaut aussi débuter et finir par une lettre simple. - -var getPassword = function getPassword(nbCarMin, nbCarMax) { - var nbCar = nbCarMin + Math.floor(Math.random() * (nbCarMax - nbCarMin)); - var letters = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz"; - var others = "123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ"; - var password = letters[Math.floor(Math.random() * letters.length)]; - - for (var i = 1; i < nbCar - 1; i++) { - if (i % 2 === 1) password += others[Math.floor(Math.random() * others.length)];else password += letters[Math.floor(Math.random() * letters.length)]; - } - - password += letters[Math.floor(Math.random() * letters.length)]; - return password; -}; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite -// Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. - -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { - id: userId, - token: token, - duration: durationTS - }; - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", storageUser); -}; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz -// Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas - -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("lastAnswer"); - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.QuestionnaireId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions)) { - datas.duration = answer.duration; - datas.nbCorrectAnswers = answer.nbCorrectAnswers; - datas.QuestionnaireId = answer.QuestionnaireId; - datas.nbQuestions = answer.nbQuestions; - } - } - - return datas; -}; // Cette fonction teste la connexion de l'utilisateur d'une page -// On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté - -var checkSession = /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(config) { - var status, - urlRedirection, - message, - urlWanted, - _args2 = arguments; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - status = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : []; - urlRedirection = _args2.length > 2 ? _args2[2] : undefined; - message = _args2.length > 3 ? _args2[3] : undefined; - urlWanted = _args2.length > 4 ? _args2[4] : undefined; - return _context2.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("user"); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + config.userRoutes + config.checkLoginRoute + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = config.siteUrl + "/" + configFrontEnd.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configFrontEnd.accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } - } - })); - - case 5: - case "end": - return _context2.stop(); - } - } - }, _callee2); - })); - - return function checkSession(_x) { - return _ref2.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", message); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("url", urlWanted); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); -}; - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9hbnN3ZXIkIiwid2VicGFjazovLy8uLi9sYW5nIHN5bmMgXlxcLlxcLy4qXFwvZ2VuZXJhbCQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvYW5zd2VyLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL3Rvb2xzL21haW4uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbmZpZy9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9xdWl6LmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9hbnN3ZXJzLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2Zvcm1zLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwibmVlZE51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlclVzZXJSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJVc2VyUmVzcG9uc2VzIiwibmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkSW50ZWdlck51bWJlckNvcnJlY3RSZXNwb25zZXMiLCJuZWVkTWluTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyIsIm5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIiwibmVlZEludGVnZXJOdW1iZXJTZWNvbmRlc1Jlc3BvbnNlIiwibmVlZE1pbk51bWJlclNlY29uZGVzUmVzcG9uc2UiLCJjaGVja1Jlc3BvbnNlc091cHV0RmFpbCIsImNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0iLCJjaGVja1Jlc3BvbnNlc091cHV0U3VjY2VzcyIsIndhbnRUb1NhdmVSZXNwb25zZXMiLCJyZXNwb25zZVNhdmVkTWVzc2FnZSIsInJlc3BvbnNlU2F2ZWRFcnJvciIsIm5vUXVlc3Rpb25uYWlyZVdpdGhvdWRBbnN3ZXIiLCJuYlF1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyIiwic3RhdHNVc2VyIiwicHJldmlvdXNBbnN3ZXJzVGl0bGUiLCJwcmV2aW91c0Fuc3dlcnNTdGF0cyIsInByZXZpb3VzQW5zd2Vyc0xpbmUiLCJzaXRlSFRNTFRpdGxlIiwic2l0ZU1ldGFEZXNjcmlwdGlvbiIsInNjcmlwdFRpbWluZ0luZm8iLCJzY3JpcHRUaW1pbmdBbGVydCIsInNlcnZlckVycm9yIiwic2VydmVyRXJyb3JBZG1pbiIsIm5lZWRlZFBhcmFtcyIsImJhZFVybCIsIm5vdFZhbGlkRm9ybWF0Iiwibm90QWxsb3dlZCIsIm5vdFJlcXVpcmVkIiwidXBkYXRlQnRuVHh0IiwiYWRkQnRuVHh0IiwiZGVsZXRlQnRuVHh0IiwiYWRkT2tNZXNzYWdlIiwidXBkYXRlT2tNZXNzYWdlIiwiZGVsZXRlT2tNZXNzYWdlIiwiZmFpbEF1dGgiLCJmYWlsQXV0aEhlYWRlciIsImZhaWxBdXRoVG9rZW4iLCJmYWlsQXV0aElkIiwiZmFpbEF1dGhDcm9uIiwicHJldmlvdXNQYWdlIiwibmV4dFBhZ2UiLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJtaW4iLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiYXBpVXJsIiwidXNlcnNHZXRDb25maWdVcmwiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJjb25maWdGcm9udEVuZCIsInJlcXVpcmUiLCJ0eHQiLCJ0eHRBbnN3ZXJzIiwibXlGb3JtIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImRpdlJlc3BvbnNlIiwiYnRuU2hvdyIsImJ0blN1Ym1pdCIsImV4cGxhbmF0aW9uc1RpdGxlIiwiZXhwbGFuYXRpb25zQ29udGVudCIsImhlbGxvRGV2IiwiY29uZmlnIiwiaXNDb25uZWN0ZWQiLCJ1c2VyIiwiaW5pdGlhbGlzZSIsImdldENvbmZpZyIsImFkZEVsZW1lbnQiLCJzdHlsZSIsImRpc3BsYXkiLCJjaGVja1Nlc3Npb24iLCJnZXRMb2NhbHkiLCJjaGVja1ByZXZpb3VzUmVzcG9uc2VzIiwic2hvd1F1ZXN0aW9ubmFpcmUiLCJjaHJvbm9CZWdpbiIsIm5vdyIsInNldEF0dHJpYnV0ZSIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsImhhc2giLCJhbnN3ZXIiLCJpbm5lckhUTUwiLCJ1c2VyUmVzcG9uc2VzIiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwiZHVyYXRpb24iLCJyb3VuZCIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJ2YWx1ZSIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicXVlc3Rpb25uYWlyZUlkIiwiaWRDaG9pY2UiLCJnb29kUmVzcG9uc2UiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0Iiwic3RhdHVzIiwiQXJyYXkiLCJpc0FycmF5IiwiUXVlc3Rpb25zIiwibmJRdWVzdGlvbnMiLCJpIiwiaiIsIkNob2ljZXMiLCJpZCIsImlzQ29ycmVjdCIsInBhcmVudE5vZGUiLCJjbGFzc0xpc3QiLCJhZGQiLCJnZXRPdXB1dCIsImNoZWNrQW5zd2VyT3VwdXQiLCJ4aHIyIiwic2F2ZUFuc3dlcnNSb3V0ZSIsInJlc3BvbnNlMiIsIm1lc3NhZ2UiLCJzZXRSZXF1ZXN0SGVhZGVyIiwidG9rZW4iLCJ0aW1lRGlmZmVyZW5jZSIsImdldFRpbWVEaWZmZXJlbmNlIiwic2VuZCIsInN0cmluZ2lmeSIsInNhdmVBbnN3ZXIiLCJxdWVyeVNlbGVjdG9yIiwiZXhwbGFuYXRpb25zIiwicXVlcnlTZWxlY3RvckFsbCIsInhoclByZXZpb3VzUmVzIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwibmJSZXNwb25zZXMiLCJwcmV2aW91c0Fuc3dlcnNDb250ZW50IiwidG90TmJRdWVzdGlvbnMiLCJ0b3ROYkNvcnJlY3RBbnN3ZXJzIiwidG90RHVyYXRpb24iLCJtYXBMaW5lQ29udGVudCIsIkRBVEVBTlNXRVIiLCJkYXRlRm9ybWF0IiwiY3JlYXRlZEF0IiwiTkJDT1JSRUNUQU5TV0VSUyIsIkFWR0RVUkFUSU9OIiwicmVwbGFjZUFsbCIsIkFWR0NPUlJFQ1RBTlNXRVJTIiwic2F2ZUxvY2FseSIsInJhdGlvIiwiRFVSQVRJT04iLCJOQlFVRVNUSU9OUyIsIm91dHB1dCIsIm5hbWUiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwiY29uc29sZSIsImxvZyIsInNldEF0dHJpYnV0ZXNUb0lucHV0cyIsImlucHV0c0NvbmYiLCJlbGVtZW50cyIsImlkSW5wdXQiLCJpbnB1dEhUTUwiLCJhdHRyaWJ1dGUiLCJkYXRhcyIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwiZW1weUZvcm0iLCJ0eXBlIiwiY2hlY2tlZCIsImVtcHlBbmRIaWRlRm9ybSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsInRpbWVEaWZmZXJlbmNlTWF4IiwidGltZURpZmZlcmVuY2VNaW4iLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJwYXNzd29yZCIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwidXNlclJvdXRlcyIsImNoZWNrTG9naW5Sb3V0ZSIsImlzVmFsaWQiLCJsYW5ndWFnZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsInNpdGVVcmwiLCJocmVmIiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FB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QUo7QUFDSDtBQUNKO0FBQ0osYUF0RU0sQ0FGaUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBWjdELFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNb0osWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQnpGLE9BQWpCLEVBQTBCMEYsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUM5TSwyREFBTyxDQUFDb0gsT0FBRCxDQUFYLEVBQ0kwQixvRUFBVSxDQUFDLFNBQUQsRUFBWTFCLE9BQVosQ0FBVjtBQUNKLE1BQUcsQ0FBQ3BILDJEQUFPLENBQUM4TSxTQUFELENBQVgsRUFDSWhFLG9FQUFVLENBQUMsS0FBRCxFQUFRZ0UsU0FBUixDQUFWO0FBQ0osTUFBRyxDQUFDOU0sMkRBQU8sQ0FBQzZNLGNBQUQsQ0FBWCxFQUNJMUksTUFBTSxDQUFDQyxRQUFQLENBQWdCQyxNQUFoQixDQUF1QndJLGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvcXVpei5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy9xdWl6LmpzXCIpO1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2Fuc3dlclwiOiBcIi4uL2xhbmcvZnIvYW5zd2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvYW5zd2VyJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbmVlZE51bWJlclVzZXJSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSBxdWVzdGlvbnMgYXV4cXVlbGxlcyBsJ3V0aWxpc2F0ZXVyIGEgcsOpcG9uZHUgZG9pdCDDqnRyZSBmb3VybmkuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJVc2VyUmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcXVlc3Rpb25zIGF1eHF1ZWxsZXMgbCd1dGlsaXNhdGV1ciBhIHLDqXBvbmR1IGRvaXQgw6p0cmUgdW4gbm9tYnJlIGVudGllci5cIixcbiAgICBuZWVkTWluTnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGluZsOpcmlldXIgw6AgMS5cIixcbiAgICBuZWVkTWF4TnVtYmVyVXNlclJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHF1ZXN0aW9ucyBhdXhxdWVsbGVzIGwndXRpbGlzYXRldXIgYSByw6lwb25kdSBuZSBwZXV0IMOqdHJlIGF1c3NpIMOpbGV2w6kuXCIsXG4gICAgbmVlZE51bWJlckNvcnJlY3RSZXNwb25zZXMgOiBcIkxlIG5vbWJyZSBkZSByw6lwb25zZXMgY29ycmVjdGVzIGRvaXQgw6p0cmUgZm91cm5pLlwiLFxuICAgIG5lZWRJbnRlZ2VyTnVtYmVyQ29ycmVjdFJlc3BvbnNlcyA6IFwiTGUgbm9tYnJlIGRlIHLDqXBvbnNlcyBjb3JyZWN0ZXMgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmLlwiLFxuICAgIG5lZWRNYXhOdW1iZXJDb3JyZWN0UmVzcG9uc2VzIDogXCJMZSBub21icmUgZGUgcsOpcG9uc2VzIGNvcnJlY3RlcyBuZSBwZXV0IMOqdHJlIHN1cMOpcmlldXIgYXUgbm9tYnJlIGRlIHF1ZXN0aW9ucy5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIgZGUgc2Vjb25kZXMuXCIsXG4gICAgbmVlZE1pbk51bWJlclNlY29uZGVzUmVzcG9uc2UgOiBcIkxhIGR1csOpZSBkZSBsYSByw6lwb25zZSBuZSBwZXV0IMOqdHJlIG7DqWdhdGl2ZS5cIixcbiAgICBjaGVja1Jlc3BvbnNlc091cHV0RmFpbCA6IFwiVm91cyBhdmV6IHLDqXBvbmR1IGVuIERVUkFUSU9OIHNlY29uZGVzIGV0IGF2ZXogTkJDT1JSRUNUQU5TV0VSUyBib25uZShzKSByw6lwb25zZShzKSBzdXIgTkJRVUVTVElPTlMuIEMnZXN0IGNlcnRhaW4sIHZvdXMgZmVyZXogbWlldXggbGEgcHJvY2hhaW5lIGZvaXMgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRNZWRpdW0gOiBcIlZvdXMgYXZleiByw6lwb25kdSBlbiBEVVJBVElPTiBzZWNvbmRlcyBldCBhdmV6IE5CQ09SUkVDVEFOU1dFUlMgYm9ubmUocykgcsOpcG9uc2Uocykgc3VyIE5CUVVFU1RJT05TLiBDJ2VzdCBwYXMgbWFsIGR1IHRvdXQgIVwiLFxuICAgIGNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzIDogXCJWb3VzIGF2ZXogcsOpcG9uZHUgZW4gRFVSQVRJT04gc2Vjb25kZXMgZXQgYXZleiBOQkNPUlJFQ1RBTlNXRVJTIGJvbm5lKHMpIHLDqXBvbnNlKHMpIHN1ciBOQlFVRVNUSU9OUy4gQnJhdm8gISBSaWVuIG5lIHZvdXMgw6ljaGFwcGUgIVwiLFxuICAgIHdhbnRUb1NhdmVSZXNwb25zZXM6IFwiU2kgdm91cyBsZSBzb3VoYWl0ZXosIHZvdXMgcG91dmV6IHNhdXZlZ2FyZGVyIHZvdHJlIHLDqXN1bHRhdCBlbiBjcsOpYW50IHZvdHJlIGNvbXB0ZS5cXG5DZWxhIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogZGFucyBsJ2F2ZW5pciBwb3VyIHZvaXIgc2kgdm91cyBhdmV6IG3DqW1vcmlzZXIgbGVzIGJvbm5lcyByw6lwb25zZXMuIFZvdXMgcG91cnJleiBhaW5zaSBhdXNzaSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVhdXggcXVpenMuXCIsXG4gICAgcmVzcG9uc2VTYXZlZE1lc3NhZ2UgOiBcIlZvdHJlIHLDqXN1bHRhdCBhIMOpdMOpIGVucmVnaXN0csOpLiA8YSBocmVmPScvI1VSTCc+QWNjw6hkZXIgw6AgdG91cyB2b3MgcXVpenM8L2E+LlwiLFxuICAgIHJlc3BvbnNlU2F2ZWRFcnJvciA6IFwiQ2VwZW5kYW50IHVuZSBlcnJldXIgYSDDqXTDqSByZW5jb250csOpZSBkdXJhbnQgbCdlbnJlZ2lzdHJlbWVudCBkZSB2b3RyZSByw6lzdWx0YXQuIDxhIGhyZWY9Jy8jVVJMJz5BY2PDqGRlciDDoCB0b3VzIHZvcyBxdWl6czwvYT4uXCIsXG4gICAgbm9RdWVzdGlvbm5haXJlV2l0aG91ZEFuc3dlcjogXCJCcmF2byAhIFZvdXMgYXZleiByw6lwb25kdSDDoCB0b3VzIGxlcyBxdWl6cyBxdWkgdm91cyBvbiDDqXTDqSBwcm9wb3PDqXMgITxicj5JbCB5IGVuIGEgZGVzIG5vdXZlYXV4IHB1Ymxpw6lzIHLDqWd1bGnDqHJlbWVudCBldCBxdWkgdm91cyBzZXJvbnQgcHJvcG9zw6lzLjxicj5FbiBhdHRlbmRhbnQgdm91cyBwb3V2ZXogcGV1dC3DqnRyZSBlc3NheWVyIGRlIHLDqXBvbmRyZSBkZSBub3V2ZWF1IMOgIGNlcnRhaW4gcXVpeiBwb3VyIHZvaXIgc2kgdm91cyB2b3VzIHNvdXZlbmV6IGRlcyBib25uZXMgcsOpcG9uc2VzID9cIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVXaXRob3VkQW5zd2VyOiBcIklsIHkgYSAjTkIgcXVpenMgcXVpIHZvdXMgb250IMOpdMOpIHByb3Bvc8OpcyBldCBhdXhxdWVscyB2b3VzIG4nYXZleiBwYXMgcsOpcG9uZHUuIFZvaWNpIGxlcyBkZXJuaWVycyA6IVwiLFxuICAgIHN0YXRzVXNlcjogXCJWb3VzIGF2ZXogZW5yZWdpc3Ryw6kgTkJBTlNXRVJTIHLDqXBvbnNlcyDDoCA8Yj5OQlFVRVNUSU9OTkFJUkVTIHF1ZXN0aW9ubmFpcmVzIGRpZmbDqXJlbnRzPC9iPiBzdXIgbGVzIE5CVE9UUVVFU1RJT05OQUlSRVMgcHJvcG9zw6lzIHBhciBsZSBzaXRlLjxicj5FbiBtb3llbm5lLCB2b3VzIGF2ZXogbWlzIEFWR0RVUkFUSU9OIHNlY29uZGVzIMOgIHLDqXBvbmRyZSBldCBhdmV6IDxiPmNvcnJlY3RlbWVudCByw6lwb25kdSDDoCBBVkdDT1JSRUNUQU5TV0VSUyAlIGRlcyBxdWVzdGlvbnM8L2I+LlwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc1RpdGxlOiBcIlZvcyByw6lzdWx0YXRzIHByw6ljw6lkZW50c1wiLFxuICAgIHByZXZpb3VzQW5zd2Vyc1N0YXRzOiBcIkVuIG1veWVubmUsIHZvdXMgYXZleiByw6lwb25kdSDDoCBjZSBxdWl6IGVuIEFWR0RVUkFUSU9OIHNlY29uZGVzLCBlbiBheWFudCA8Yj5BVkdDT1JSRUNUQU5TV0VSUyAlIGRlIGJvbm5lcyByw6lwb25zZXM8L2I+LlwiLFxuICAgIHByZXZpb3VzQW5zd2Vyc0xpbmU6IFwiTGUgREFURUFOU1dFUiwgdm91cyBhdmV6IHLDqXBvbmR1IGNvcnJlY3RlbWVudCDDoCBOQkNPUlJFQ1RBTlNXRVJTIHF1ZXN0aW9ucyBlbiBBVkdEVVJBVElPTiBzZWNvbmRlcy5cIlxufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBxdSdhbGxlei12b3VzIGFwcHJlbmRyZSBhdWpvdXJkJ2h1aSA/XCIsXG4gICAgc2l0ZU1ldGFEZXNjcmlwdGlvbiA6IFwiQ2hhcXVlIGpvdXIsIHRlc3RleiB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5leiBkZSBub3V2ZWxsZXMgY2hvc2VzIGF2ZWMgV2lraUxlcm5pLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybCA6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHVzZXJzR2V0Q29uZmlnVXJsIDogXCIvdXNlci9nZXRjb25maWdcIixcbiAgICBsYW5nIDogXCJmclwiLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiXG59O1xuLy8gw6AgdGVybWUgZnVzaW9ubmVyIGF2ZWMgbGVzIGTDqWNsYXJhdGlvbnMgYmFja2VuZCBjb25jZXJuYW50IGxlIGZyb250LCB0b3V0IMOpdGFudCBzYWlzaSBkYW5zIGwnYWRtaW4iLCIvLyAtLSBHRVNUSU9OIERVIEZPUk1VTEFJUkUgUEVSTUVUVEFOVCBEJ0FGRklDSEVSIEVUIFLDiVBPTkRSRSDDgCBVTiBRVUlaXG5cbi8vLyBJbCBuJ2VzdCBwYXMgbsOpY2Vzc2FpcmUgZCfDqnRyZSBjb25uZWN0w6kgcG91ciByw6lwb25kcmUgYXUgcXVpeiBldCB2b2lyIHNvbiByw6lzdWx0YXQuXG4vLy8gTWFpcyBzaSBwYXMgY29ubmVjdMOpLCBqZSBwcm9wb3NlIMOgIGwnaW50ZXJuYXV0ZSBkZSBzZSBjb25uZWN0ZXIgb3UgZGUgY3LDqWVyIHVuIGNvbXB0ZS5cbi8vLyBEYW5zIGNlIGJ1dCBzb24gcsOpc3VsdGF0IGVzdCBhbG9ycyBzdG9ja8OpIGRhbnMgc29uIG5hdmlnYXRldXJcbi8vLyBTaSBpbCBlc3QgY29ubmVjdMOpLCBsJ2VucmVnaXN0cmVtZW50IGRlIHNvbiByw6lzdWx0YXQgc2UgZmFpdCBhdXRvbWF0aXF1ZW1lbnQgZXQgc2VzIHByw6ljw6lkZW50cyByw6lzdWx0YXRzIGFmZmljaMOpc1xuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuL2NvbmZpZy9nZW5lcmFsXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgY2hlY2tBbnN3ZXJPdXB1dCwgc2F2ZUFuc3dlciB9IGZyb20gXCIuL3Rvb2xzL2Fuc3dlcnMuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0TG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgZ2V0RGF0YXNGcm9tSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGRhdGVGb3JtYXQsIGlzRW1wdHksIHJlcGxhY2VBbGwgfSBmcm9tIFwiLi4vLi4vdG9vbHMvbWFpblwiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIGdldFRpbWVEaWZmZXJlbmNlIH0gZnJvbSBcIi4vdG9vbHMvdXNlcnMuanNcIjtcblxuLy8gRGljdGlvbm5haXJlcyA6XG5jb25zdCB0eHQgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitjb25maWdGcm9udEVuZC5sYW5nK1wiL2dlbmVyYWxcIik7XG5jb25zdCB0eHRBbnN3ZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrY29uZmlnRnJvbnRFbmQubGFuZytcIi9hbnN3ZXJcIik7XG5cbi8vIFByaW5jaXBhdXggw6lsw6ltZW50cyBkdSBET00gbWFuaXB1bMOpcyA6XG5jb25zdCBteUZvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVcIik7XG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5jb25zdCBidG5TaG93ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzaG93UXVlc3Rpb25uYWlyZVwiKTtcbmNvbnN0IGJ0blN1Ym1pdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY2hlY2tSZXNwb25zZXNcIik7XG5jb25zdCBleHBsYW5hdGlvbnNUaXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZXhwbGFuYXRpb25zVGl0bGVcIik7XG5jb25zdCBleHBsYW5hdGlvbnNDb250ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJleHBsYW5hdGlvbnNDb250ZW50XCIpO1xuXG5oZWxsb0RldigpO1xuXG4vLyBDaGFyZ2VtZW50IGRlcyBjb25maWd1cmF0aW9ucyBmb3VybmllcyBwYXIgbGUgYmFja2VuZCArIHRlc3QgZGUgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgOlxubGV0IGNvbmZpZywgaXNDb25uZWN0ZWQsIHVzZXI7XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGJ0blNob3cuc3R5bGUuZGlzcGxheT1cImlubGluZVwiO1xuICAgICAgICAgICAgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKGNvbmZpZywgW1widXNlclwiXSk7Ly8gc2V1bHMgbGVzIHNpbXBsZXMgdXRpbGlzYXRldXJzIHBldXZlbnQgcsOpcG9uZHJlIGF1eCBxdWl6c1xuICAgICAgICAgICAgLy8gU2kgbCd1dGlsaXNhdGV1ciBlc3QgY29ubmVjdMOpLCBqZSB2w6lyaWZpZSBzdXIgaWwgYSBkw6lqw6AgcsOpcG9uZHUgw6AgY2UgcXVpeiBldCBzaSBvdWkgYWZmaWNoZSBzZXMgcHLDqWPDqWRlbnRlcyByw6lwb25zZXMgZGFucyBsJ2VuY2FydCBzZXJ2YW50IMOgIGV4cGxpcXVlciBsZSB0b3BvIGF1eCBub3V2ZWF1eFxuICAgICAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGNoZWNrUHJldmlvdXNSZXNwb25zZXMoY29uZmlnLCB1c2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcblxuLy8gQWZmaWNoYWdlIGR1IHF1ZXN0aW9ubmFpcmUgc2kgbCd1dGlsaXNhdGV1ciBjbGlxdWUgc3VyIGxlIGJvdXRvbiBvdSBzaSBsJ2lkIGR1IGZvcm11bGFpcmUgZXN0IHBhc3PDqWUgcGFyIGwndXJsXG4vLyBEw6ljbGVuY2hlIGVuIG3Dqm1lIHRlbXBzIGxlIGNocm9ub23DqHRyZSBtZXN1cmFudCBsYSBkdXLDqWUgZGUgbGEgcsOpcG9uc2UgYXV4IHF1ZXN0aW9ucy5cbmNvbnN0IHNob3dRdWVzdGlvbm5haXJlID0gKCkgPT5cbntcbiAgICBjaHJvbm9CZWdpbj1EYXRlLm5vdygpO1xuICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICBidG5TaG93LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIjcXVlc3Rpb25uYWlyZVwiKTtcbn1cbmxldCBjaHJvbm9CZWdpbj0wO1xuYnRuU2hvdy5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgZnVuY3Rpb24oZSlcbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgc2hvd1F1ZXN0aW9ubmFpcmUoKTtcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59KTtcbmlmKGxvY2F0aW9uLmhhc2ghPXVuZGVmaW5lZCAmJiBsb2NhdGlvbi5oYXNoPT09XCIjcXVlc3Rpb25uYWlyZVwiKVxuICAgIHNob3dRdWVzdGlvbm5haXJlKCk7XG5cbi8vIFRyYWl0ZW1lbnQgZGUgbCdlbnZvaSBkZSBzYSByw6lwb25zZSBwYXIgbCd1dGlsaXNhdGV1ciA6XG5sZXQgYW5zd2VyID0ge307XG5teUZvcm0uYWRkRXZlbnRMaXN0ZW5lcihcInN1Ym1pdFwiLCBmdW5jdGlvbihlKVxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOyAgICAgICBcbiAgICAgICAgYnRuU3VibWl0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpOy8vIHNldWxlbWVudCB1biBlbnZvaSDDoCBsYSBmb2lzIDopXG4gICAgICAgIGRpdlJlc3BvbnNlLmlubmVySFRNTD1cIlwiOy8vIHN1cHByaW1lIGxlcyDDqXZlbnR1ZWxzIG1lc3NhZ2VzIGTDqWrDoCBhZmZpY2jDqXNcbiAgICAgICAgY29uc3QgdXNlclJlc3BvbnNlcz1nZXREYXRhc0Zyb21JbnB1dHMobXlGb3JtKTtcbiAgICAgICAgYW5zd2VyLmR1cmF0aW9uPU1hdGgucm91bmQoKERhdGUubm93KCktY2hyb25vQmVnaW4pLzEwMDApO1xuICAgICAgICBhbnN3ZXIubmJDb3JyZWN0QW5zd2Vycz0wO1xuICAgICAgICBhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicXVlc3Rpb25uYWlyZUlkXCIpLnZhbHVlO1xuICAgICAgICAvLyBSw6ljdXDDqXJlIGxlcyByw6lwb25zZXMgZHUgcXVpeiBzdXIgbGUgc2VydmV1ciA6XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBjb25maWdGcm9udEVuZC5hcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLmdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMrXCIvXCIrdXNlclJlc3BvbnNlcy5xdWVzdGlvbm5haXJlSWQpO1xuICAgICAgICBsZXQgaWRDaG9pY2UsIGdvb2RSZXNwb25zZTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiBBcnJheS5pc0FycmF5KHJlc3BvbnNlLlF1ZXN0aW9ucykpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhbnN3ZXIubmJRdWVzdGlvbnM9cmVzcG9uc2UuUXVlc3Rpb25zLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgLy8gUHVpcyBvbiBwYXNzZSBlbiByZXZ1ZSBsZXMgcsOpcG9uc2VzIHBvdXIgYWZmaWNoZXIgY2VsbGVzIHF1aSBzb250IGNvcnJlY3RlcyBldCBkw6l0ZWN0ZXIgbGVzIGVycmV1cnNcbiAgICAgICAgICAgICAgICAgICAgLy8gSWwgcGV1dCB5IGF2b2lyIHBsdXNpZXVycyBib25uZXMgcsOpcG9uc2VzIHBvdXIgdW5lIG3Dqm1lIHF1ZXN0aW9uIChRQ00pXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiByZXNwb25zZS5RdWVzdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RSZXNwb25zZT10cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIHJlc3BvbnNlLlF1ZXN0aW9uc1tpXS5DaG9pY2VzKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkQ2hvaWNlPXJlc3BvbnNlLlF1ZXN0aW9uc1tpXS5DaG9pY2VzW2pdLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLlF1ZXN0aW9uc1tpXS5DaG9pY2VzW2pdLmlzQ29ycmVjdD09PXRydWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJlc3BvbnNlX1wiK2lkQ2hvaWNlKS5wYXJlbnROb2RlLmNsYXNzTGlzdC5hZGQoXCJzdWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdPT09dW5kZWZpbmVkKS8vIGJvbm5lIHLDqXBvbnNlIG5vbiBzw6lsZWN0aW9ubsOpZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ29vZFJlc3BvbnNlPWZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih1c2VyUmVzcG9uc2VzW1wicmVzcG9uc2VfXCIraWRDaG9pY2VdPT09XCJvblwiKS8vIHLDqXBvbnNlIGNvY2jDqWUgbifDqXRhbnQgcGFzIHVuZSBkZXMgYm9ubmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvb2RSZXNwb25zZT1mYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VfXCIraWRDaG9pY2UpLnBhcmVudE5vZGUuY2xhc3NMaXN0LmFkZChcImVycm9yXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoZ29vZFJlc3BvbnNlKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gQWZmaWNoYWdlIGR1IHLDqXN1bHRhdCwgc3VpdmFudCBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgb3UgcGFzIGV0IHNvbiBzY29yZSA6XG4gICAgICAgICAgICAgICAgICAgIGxldCBnZXRPdXB1dD1jaGVja0Fuc3dlck91cHV0KGFuc3dlcik7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBjb25uZWN0w6kgb24gZW5yZWdpc3RyZSBzb24gcsOpc3VsdGF0IHN1ciBsZSBzZXJ2ZXVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgeGhyMiA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyMi5vcGVuKFwiUE9TVFwiLCBjb25maWdGcm9udEVuZC5hcGlVcmwrY29uZmlnLnF1ZXN0aW9ubmFpcmVSb3V0ZXMrY29uZmlnLnNhdmVBbnN3ZXJzUm91dGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgeGhyMi5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlMj1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDEgJiYgKHJlc3BvbnNlMi5tZXNzYWdlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3VwdXQrPVwiPGJyPlwiK3Jlc3BvbnNlMi5tZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ0Zyb250RW5kLnVzZXJIb21lUGFnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja1ByZXZpb3VzUmVzcG9uc2VzKGNvbmZpZywgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3VwdXQrPVwiPGJyPlwiK3R4dEFuc3dlcnMucmVzcG9uc2VTYXZlZEVycm9yLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ0Zyb250RW5kLnVzZXJIb21lUGFnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBnZXRPdXB1dCwgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHhocjIuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICB4aHIyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5zd2VyLnRpbWVEaWZmZXJlbmNlPWdldFRpbWVEaWZmZXJlbmNlKGNvbmZpZyk7Ly8gb24gZW4gcHJvZml0ZSBwb3VyIG1ldHRyZSBsZXMgcGVuZHVsZXMgw6AgbCdoZXVyZVxuICAgICAgICAgICAgICAgICAgICAgICAgeGhyMi5zZW5kKEpTT04uc3RyaW5naWZ5KGFuc3dlcikpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgeyAgIC8vIHNpbm9uIGplIGwnZW5yZWdpc3RyZSBjw7R0w6kgY2xpZW50IHBvdXIgcGVybWV0dHJlIGRlIGxlIHJldHJvdXZlciBhdSBtb21lbnQgZGUgbGEgY3LDqWF0aW9uIGR1IGNvbXB0ZSBvdSBkZSBsYSBjb25uZXhpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHNhdmVBbnN3ZXIoYW5zd2VyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0T3VwdXQrPVwiPGJyPlwiK3R4dEFuc3dlcnMud2FudFRvU2F2ZVJlc3BvbnNlcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIGdldE91cHV0LCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuc3ViY3JpYmVCdG5zXCIpLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSAvLyBwYXMgbGEgcGVpbmUgZGUgcHJvcG9zZXIgZGUgY3LDqWVyIHVuIGNvbXB0ZSBzaSBsZSBzdG9ja2FnZSBsb2NhbCBuZSBmb25jdGlvbm5lIHBhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCBnZXRPdXB1dCwgXCJcIiwgW1wiaW5mb3JtYXRpb25cIl0pO1xuICAgICAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgICAgICAgICAvLyBhZmZpY2hhZ2UgZGVzIHRleHRlcyBkJ2V4cGxpY2F0aW9ucyBwb3VyIGNoYXF1ZSBxdWVzdGlvblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBleHBsYW5hdGlvbnM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5oZWxwXCIpO1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gZXhwbGFuYXRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgZXhwbGFuYXRpb25zW2ldLnN0eWxlLmRpc3BsYXk9XCJibG9ja1wiOy8vIGFmZmljaGUgdW5lIGVycmV1ciBcIlR5cGVFcnJvcjogZXhwbGFuYXRpb25zW2ldLnN0eWxlIGlzIHVuZGVmaW5lZFwiIG1haXMgdG91dCBmb25jdGlvbm5lID9cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59KVxuXG4vLyBGb25jdGlvbiB2w6lyaWZpYW50IGxlcyBwcsOpY8OpZGVudGVzIHLDqXBvbnNlcyBkZSBsJ3V0aWxpc2F0ZXVyXG4vLyBVdGlsZSBzaSBjb25uZWN0w6kgbG9ycyBkdSBwcmVtaWVyIGNoYXJnZW1lbnQgZGUgbGEgcGFnZSwgcHVpcyBhcHLDqHMgdW5lIG5vdXZlbGxlIHLDqXBvbnNlXG5jb25zdCBjaGVja1ByZXZpb3VzUmVzcG9uc2VzID0gKGNvbmZpZywgdXNlcikgPT5cbntcbiAgICBjb25zdCB4aHJQcmV2aW91c1JlcyA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgIHhoclByZXZpb3VzUmVzLm9wZW4oXCJHRVRcIiwgY29uZmlnRnJvbnRFbmQuYXBpVXJsK2NvbmZpZy5xdWVzdGlvbm5haXJlUm91dGVzK2NvbmZpZy5nZXRQcmV2aW91c0Fuc3dlcnMrdXNlci5pZCtcIi9cIitkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInF1ZXN0aW9ubmFpcmVJZFwiKS52YWx1ZSk7XG4gICAgeGhyUHJldmlvdXNSZXMub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgIHtcbiAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICB7XG4gICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCBuYlJlc3BvbnNlcz1yZXNwb25zZS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbGV0IHByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ9XCJcIjtcbiAgICAgICAgICAgICAgICBpZihuYlJlc3BvbnNlcyE9PTApXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGV4cGxhbmF0aW9uc1RpdGxlLCBcInNwYW5cIiwgdHh0QW5zd2Vycy5wcmV2aW91c0Fuc3dlcnNUaXRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCB0b3ROYlF1ZXN0aW9ucz0wLCB0b3ROYkNvcnJlY3RBbnN3ZXJzPTAsIHRvdER1cmF0aW9uPTAsIG1hcExpbmVDb250ZW50O1xuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gcmVzcG9uc2UpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdE5iUXVlc3Rpb25zKz1yZXNwb25zZVtpXS5uYlF1ZXN0aW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvdE5iQ29ycmVjdEFuc3dlcnMrPXJlc3BvbnNlW2ldLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3REdXJhdGlvbis9cmVzcG9uc2VbaV0uZHVyYXRpb247XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXBMaW5lQ29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgREFURUFOU1dFUiA6IGRhdGVGb3JtYXQocmVzcG9uc2VbaV0uY3JlYXRlZEF0KSwvLyByZXZvaXIgcHJvYmzDqG1lIGRlIGxhIGxhbmd1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5CQ09SUkVDVEFOU1dFUlMgOiByZXNwb25zZVtpXS5uYkNvcnJlY3RBbnN3ZXJzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFWR0RVUkFUSU9OIDogcmVzcG9uc2VbaV0uZHVyYXRpb25cbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0Fuc3dlcnNDb250ZW50Kz1cIjxsaT5cIityZXBsYWNlQWxsKHR4dEFuc3dlcnMucHJldmlvdXNBbnN3ZXJzTGluZSwgbWFwTGluZUNvbnRlbnQpK1wiPC9saT5cIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtYXBMaW5lQ29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEFWR0RVUkFUSU9OIDogTWF0aC5yb3VuZCh0b3REdXJhdGlvbi9uYlJlc3BvbnNlcyksXG4gICAgICAgICAgICAgICAgICAgICAgICBBVkdDT1JSRUNUQU5TV0VSUyA6IE1hdGgucm91bmQodG90TmJDb3JyZWN0QW5zd2Vycy90b3ROYlF1ZXN0aW9ucyoxMDApXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ9XCI8aDU+XCIrcmVwbGFjZUFsbCh0eHRBbnN3ZXJzLnByZXZpb3VzQW5zd2Vyc1N0YXRzLCBtYXBMaW5lQ29udGVudCkrXCI8L2g1PlwiK3ByZXZpb3VzQW5zd2Vyc0NvbnRlbnQ7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZXhwbGFuYXRpb25zQ29udGVudCwgXCJ1bFwiLCBwcmV2aW91c0Fuc3dlcnNDb250ZW50KTtcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgeGhyUHJldmlvdXNSZXMuc2V0UmVxdWVzdEhlYWRlcihcIkF1dGhvcml6YXRpb25cIiwgXCJCZWFyZXIgXCIrdXNlci50b2tlbik7XG4gICAgeGhyUHJldmlvdXNSZXMuc2VuZCgpO1xufSIsImNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4uL2NvbmZpZy9nZW5lcmFsXCIpO1xuXG5pbXBvcnQgeyBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSwgcmVwbGFjZUFsbCB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi8uLi9sYW5nL1wiK2NvbmZpZ0Zyb250RW5kLmxhbmcrXCIvYW5zd2VyXCIpO1xuXG4vLyBFbnJlZ2lzdHJlbWVudCBjw7R0w6kgY2xpZW50IGR1IGRlcm5pZXIgcsOpc3VsdGF0IMOgIHVuIHF1aXogZW4gYXR0ZW5kYW50IGQnw6p0cmUgY29ubmVjdMOpXG5leHBvcnQgY29uc3Qgc2F2ZUFuc3dlciA9IChhbnN3ZXIpID0+XG57XG4gICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSlcbiAgICB7XG4gICAgICAgIHNhdmVMb2NhbHkoXCJsYXN0QW5zd2VyXCIsIGFuc3dlcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gUmV0b3VybmUgbGUgdGV4dGUgc3VpdmFudCBsZSBub21icmUgZGUgYm9ubmVzIHLDqXBvbnNlc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyT3VwdXQgPSAoYW5zd2VyKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAge1xuICAgICAgICBjb25zdCByYXRpbz1hbnN3ZXIubmJDb3JyZWN0QW5zd2Vycy9hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIGNvbnN0IG1hcE9iaj1cbiAgICAgICAge1xuICAgICAgICAgICAgRFVSQVRJT046IGFuc3dlci5kdXJhdGlvbixcbiAgICAgICAgICAgIE5CQ09SUkVDVEFOU1dFUlM6IGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzLFxuICAgICAgICAgICAgTkJRVUVTVElPTlM6IGFuc3dlci5uYlF1ZXN0aW9uc1xuICAgICAgICB9XG4gICAgICAgIGxldCBvdXRwdXQ9XCJcIjtcbiAgICAgICAgaWYocmF0aW8gPCAwLjQpXG4gICAgICAgICAgICBvdXRwdXQ9cmVwbGFjZUFsbCh0eHQuY2hlY2tSZXNwb25zZXNPdXB1dEZhaWwsIG1hcE9iaik7XG4gICAgICAgIGVsc2UgaWYocmF0aW8gPCAwLjgpXG4gICAgICAgICAgICBvdXRwdXQ9cmVwbGFjZUFsbCh0eHQuY2hlY2tSZXNwb25zZXNPdXB1dE1lZGl1bSwgbWFwT2JqKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgb3V0cHV0PXJlcGxhY2VBbGwodHh0LmNoZWNrUmVzcG9uc2VzT3VwdXRTdWNjZXNzLCBtYXBPYmopO1xuICAgICAgICBpZihvdXRwdXQpXG4gICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gXCJcIjtcbn1cblxuLypcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoY29uZmlnKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgaWYoaXNFbXB0eShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShcInVzZXJcIikpKVxuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidXNlclwiKSk7XG4gICAgICAgICAgICBpZih1c2VyLmR1cmF0aW9uPT09dW5kZWZpbmVkIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBjb25maWdGcm9udEVuZC5hcGlVcmwrY29uZmlnLnVzZXJSb3V0ZXMrY29uZmlnLmNoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufSovIiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3Qgc2V0QXR0cmlidXRlc1RvSW5wdXRzID0gKGlucHV0c0NvbmYsIG15Rm9ybSkgPT5cbntcbiAgICBmb3IobGV0IGkgaW4gbXlGb3JtLmVsZW1lbnRzKVxuICAgIHtcbiAgICAgICAgaWYoIWlzRW1wdHkobXlGb3JtLmVsZW1lbnRzW2ldLmlkKSlcbiAgICAgICAge1xuICAgICAgICAgICAgbGV0IGlkSW5wdXQ9bXlGb3JtLmVsZW1lbnRzW2ldLmlkO1xuICAgICAgICAgICAgaWYoaW5wdXRzQ29uZltpZElucHV0XSE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRIVE1MPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkSW5wdXQpO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGF0dHJpYnV0ZSBpbiBpbnB1dHNDb25mW2lkSW5wdXRdKVxuICAgICAgICAgICAgICAgICAgICBpbnB1dEhUTUwuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgaW5wdXRzQ29uZltpZElucHV0XVthdHRyaWJ1dGVdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLy8gUsOpY3Vww6hyZSB0b3V0ZXMgbGVzIHZhbGV1cnMgZGUgY2hhbXBzIGVuIG9tZXR0YW50IGxlcyBjaGVja2JveCBub24gY29jaMOpZXMsIGV0Yy5cbmV4cG9ydCBjb25zdCBnZXREYXRhc0Zyb21JbnB1dHMgPSAobXlGb3JtKSA9Plxue1xuICAgIGNvbnN0IGRhdGFzPXt9O1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKG15Rm9ybSk7XG4gICAgZm9yKGxldCBlbnRyaWUgb2YgZm9ybURhdGEuZW50cmllcygpKVxuICAgICAgIGRhdGFzW2VudHJpZVswXV09ZW50cmllWzFdO1xuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gVmlkZSB0b3VzIGxlcyBjaGFtcHMgZCd1biBmb3JtdWxhaXJlLCB5IGNvbXByaXMgaGlkZGVuLCBjaGVja2JveCwgZXRjLlxuLy8gUmV2b2lyIHBvdXIgbGVzIHNlbGVjdFxuZXhwb3J0IGNvbnN0IGVtcHlGb3JtID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICB7XG4gICAgICAgIGlmKG15Rm9ybS5lbGVtZW50c1tlbnRyaWVbMF1dLnR5cGU9PVwiY2hlY2tib3hcIiB8fCBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cInJhZGlvXCIpXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS5jaGVja2VkPWZhbHNlO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS52YWx1ZT1cIlwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cbi8vIFZpZGUgZXQgY2FjaGUgbGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGVtcHlBbmRIaWRlRm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgZW1weUZvcm0obXlGb3JtKTtcbiAgICBteUZvcm0uc3R5bGUuZGlzcGxheT1cIm5vbmVcIjtcbn0iLCJjb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi9jb25maWcvZ2VuZXJhbFwiKTtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBjb25maWdGcm9udEVuZC5hcGlVcmwrY29uZmlnRnJvbnRFbmQudXNlcnNHZXRDb25maWdVcmwpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoY29uZmlnKSA9Plxue1xuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYodGltZUxvY2FsID4gY29uZmlnLnRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IGNvbmZpZy50aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uIDogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChjb25maWcsIHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgY29uZmlnRnJvbnRFbmQuYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5jaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gbGUgdG9rZW4gZXQgZGUgdG91dGUgZmHDp29uIHbDqXJpZmllciDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1jb25maWcuc2l0ZVVybCtcIi9cIitjb25maWdGcm9udEVuZC5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdGcm9udEVuZC5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/public/JS/subscribe.app.js b/front/public/JS/subscribe.app.js index bc84789..09ce61c 100644 --- a/front/public/JS/subscribe.app.js +++ b/front/public/JS/subscribe.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -387,8 +391,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -411,6 +415,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
    En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
    Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -433,7 +438,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -444,20 +449,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

    Bonjour USER_NAME,

    Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

    Valider.

    ", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

    Bonjour USER_NAME,

    Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

    ", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
    Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

    Bonjour USER_NAME,

    Votre venez de valider votre inscription à NOM_SITE.

    Merci et à bientôt !

    ", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

    Bonjour USER_NAME,

    Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

    Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

    Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

    Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

    Pour ce faire, utilisez le lien ci-dessous.

    Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

    Bonjour USER_NAME,

    Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

    Merci et à bientôt !

    ", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -470,15 +478,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

    Bonjour USER_NAME,

    Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

    Valider.

    ", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

    Bonjour USER_NAME,

    Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

    ", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

    Bonjour USER_NAME,

    Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

    ", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

    Bonjour USER_NAME,

    Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

    ", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -486,8 +496,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

    Bonjour USER_NAME,

    Pour valider la suppression de votre compte, cliquez ici sans tarder.

    ", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

    Bonjour USER_NAME,

    Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

    ", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -601,7 +612,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -642,7 +654,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -705,7 +717,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
    Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

    Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

    Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

    Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
    Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

    Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
    Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
    De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
    Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
    Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
    Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

    (*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
    Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

    Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

    Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

    Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

    Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

    Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -822,7 +936,7 @@ passwordLink.addEventListener("click", function (e) { passwordInput.select(); document.execCommand("copy"); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(passwordHelp, "em", txtUsers.passwordCopied, "", ["success"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(passwordHelp, "div", txtUsers.passwordCopied, "", ["success"]); }); // Test si l'e-mail saisi est déjà utilisé pour un compte déjà existant. // Si c'est le cas, la validation du formulaire est bloquée. @@ -841,7 +955,7 @@ emailInput.addEventListener("blur", function (e) { var response = JSON.parse(this.responseText); if (this.status === 200 && response.free !== undefined && response.free === false) { - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("emailMessage"), "b", txtUsers.needUniqueEmail.replace("#URL", configTemplate.connectionPage), "", ["error"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("emailMessage"), "div", txtUsers.needUniqueEmail.replace("#URL", configTemplate.connectionPage), "", ["error"]); btnSubmit.setAttribute("disabled", true); } else btnSubmit.removeAttribute("disabled"); } @@ -858,7 +972,7 @@ emailInput.addEventListener("blur", function (e) { codeGodfatherInput.addEventListener("focus", function (e) { // on efface l'éventuel message d'erreur si on revient sur le champ pour rectifier le tir - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "i", txt.notRequired, "", ["information"]); + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "i", txt.notRequired); }); codeGodfatherInput.addEventListener("blur", function (e) { var codeValue = codeGodfatherInput.value.trim(); @@ -869,8 +983,8 @@ codeGodfatherInput.addEventListener("blur", function (e) { xhr.onreadystatechange = function () { if (this.readyState == XMLHttpRequest.DONE) { - if (this.status === 204) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "b", txtUsers.godfatherNotFound, "", ["error"]);else // !! à revoir car cela peut permettre de savoir qu'une adresse e-mail est présente dans le bd - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "b", txtUsers.godfatherFound, "", ["success"]); + if (this.status === 204) Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "div", txtUsers.godfatherNotFound, "", ["error"]);else // !! à revoir car cela peut permettre de savoir qu'une adresse e-mail est présente dans le bd + Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_2__["addElement"])(document.getElementById("codeGodfatherMessage"), "div", txtUsers.godfatherFound, "", ["success"]); } }; @@ -909,6 +1023,7 @@ myForm.addEventListener("submit", function (e) { if (datas) { datas.timeDifference = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_5__["getTimeDifference"])(configUsers); // si l'utilisateur a précédement répondu à un quiz, j'ajoute les infos de son résultat : + datas = Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_5__["checkAnswerDatas"])(datas); xhr.send(JSON.stringify(datas)); } } catch (e) { @@ -1008,7 +1123,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1179,7 +1294,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1267,13 +1383,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1325,4 +1441,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nSW5mbyIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwibmVlZGVkUGFyYW1zIiwiYmFkVXJsIiwibm90VmFsaWRGb3JtYXQiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJ1cGRhdGVCdG5UeHQiLCJhZGRCdG5UeHQiLCJkZWxldGVCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJ1cGRhdGVPa01lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhUb2tlbiIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aENyb24iLCJwcmV2aW91c1BhZ2UiLCJuZXh0UGFnZSIsImJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUiLCJzdGF0c0FkbWluIiwibm90Rm91bmQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZExhbmd1YWdlIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJhbHJlYWR5Q29ubmVjdGVkIiwibmVlZEJlQ29ubmVjdGVkIiwiY29ubmVjdGlvbk9rIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwidG9vTWFueUxvZ2luRmFpbHMiLCJiYWRQYXNzd29yZCIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsImNvbmZpZ1RlbXBsYXRlIiwiY29uZmlnVXNlcnMiLCJ0eHQiLCJ0eHRVc2VycyIsIm15Rm9ybSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJkaXZSZXNwb25zZSIsInBhc3N3b3JkSW5wdXQiLCJwYXNzd29yZExpbmsiLCJwYXNzd29yZEhlbHAiLCJlbWFpbElucHV0IiwiYnRuU3VibWl0IiwiY29kZUdvZGZhdGhlcklucHV0IiwiaGVsbG9EZXYiLCJpbml0aWFsaXNlIiwiY2hlY2tTZXNzaW9uIiwiaXNDb25uZWN0ZWQiLCJzYXZlTG9jYWx5IiwibWVzc2FnZSIsImNvbG9yIiwidXNlciIsImdldExvY2FseSIsImhvbWVQYWdlIiwic3RhdHVzIiwid2luZG93IiwibG9jYXRpb24iLCJhc3NpZ24iLCJzZXRBdHRyaWJ1dGVzVG9JbnB1dHMiLCJzdHlsZSIsImRpc3BsYXkiLCJhZGRFbGVtZW50IiwiY29uc29sZSIsImVycm9yIiwiYWRkRXZlbnRMaXN0ZW5lciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInR5cGUiLCJnZXRQYXNzd29yZCIsInNlbGVjdCIsImV4ZWNDb21tYW5kIiwiaW5uZXJIVE1MIiwiZW1haWxWYWx1ZSIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJmcmVlIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0UmVxdWVzdEhlYWRlciIsImRhdGFzIiwiZW1haWxUZXN0Iiwic2VuZCIsInN0cmluZ2lmeSIsImNvZGVWYWx1ZSIsImNvZGVUZXN0IiwicmVtb3ZlTG9jYWx5IiwiZXJyb3JzIiwiQXJyYXkiLCJpc0FycmF5IiwiZ2V0RGF0YXNGcm9tSW5wdXRzIiwidGltZURpZmZlcmVuY2UiLCJnZXRUaW1lRGlmZmVyZW5jZSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwianNvbiIsImdldEl0ZW0iLCJyZW1vdmVJdGVtIiwiZWx0UGFyZW50IiwiZWx0VHlwZSIsImVsdENvbnRlbnQiLCJlbHRJZCIsImVsdENsYXNzIiwiZWx0QXR0cmlidXRlcyIsIm5ld0VsZW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsImFwcGVuZENoaWxkIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJsaW5rIiwiaW5wdXRzQ29uZiIsImVsZW1lbnRzIiwiaWRJbnB1dCIsImlucHV0SFRNTCIsImF0dHJpYnV0ZSIsImZvcm1EYXRhIiwiRm9ybURhdGEiLCJlbnRyaWVzIiwiZW50cmllIiwiZW1weUZvcm0iLCJjaGVja2VkIiwiZW1weUFuZEhpZGVGb3JtIiwiZ2V0Q29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsIm5vdyIsImlzVmFsaWQiLCJsYW5ndWFnZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsImluZGV4T2YiXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDBDQUEwQyxnQ0FBZ0M7UUFDMUU7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSx3REFBd0Qsa0JBQWtCO1FBQzFFO1FBQ0EsaURBQWlELGNBQWM7UUFDL0Q7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBLHlDQUF5QyxpQ0FBaUM7UUFDMUUsZ0hBQWdILG1CQUFtQixFQUFFO1FBQ3JJO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7OztRQUdBO1FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsRkEsSUFBTUEsS0FBSyxHQUFHQyxtQkFBTyxDQUFDLG1DQUFELENBQXJCOztBQUNBLElBQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQyxxREFBRCxDQUE5Qjs7QUFFQUUsTUFBTSxDQUFDQyxPQUFQO0FBRUlDLFFBQU0sRUFBRSwyQkFGWjtBQUdJQyxTQUFPLEVBQUUsdUJBSGI7QUFJSUMsV0FBUyxFQUFFLFNBSmY7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LGNBQXZCO0FBQ1AsQ0FSRCxDIiwiZmlsZSI6Ii4vSlMvc3Vic2NyaWJlLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3N1YnNjcmliZS5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwiZGVmYXVsdFwiLCAvLyBsZSB0aMOobWUgdXRpbGlzw6kgKGRhbnMgL3ZpZXdzKSBwb3VyIGfDqW7DqXJlciBsZXMgcGFnZXMgSFRNTC4gQ29udGllbnQgc2VzIHByb3ByZXMgZmljaGllcnMgZGUgY29uZmlndXJhdGlvbi5cbiAgICBhdmFpbGFibGVMYW5nczogW1wiZnJcIl0sLy8gTGFuZ3VhZ2VzIGluIHdoaWNoIHRoZSBzaXRlIGlzIGF2YWlsYWJsZS4gVGhlIGZpcnN0IG9uZSBpcyB0aGUgZGVmYXVsdCBvbmUuXG4gICAgc2l0ZU5hbWU6IFwiV2lraUxlcm5pXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIndpa2lsZXJuaVwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsICAgIFxuICAgIGFjY291bnRFeHBpcmF0aW9uU2Vjb25kTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5czogMTgwLFxuICAgIC8vIFF1ZXN0aW9ubmFpcmVzOlxuICAgIG5iUXVlc3Rpb25zTWluOiAxLCAvLyBtaW5pbXVtIG51bWJlciBvZiBxdWVzdGlvbnMgZm9yIHRoZSBxdWVzdGlvbm5haXJlIHRvIGJlIHB1Ymxpc2hhYmxlXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgc2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoYWRtaW5cIixcbiAgICBnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzOiBcIi9nZXRsaXN0bmV4dHF1ZXN0aW9ubmFpcmVzL1wiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYlRhZ3NNaW46IDAsXG4gICAgbmJUYWdzTWF4OiAwLCAvLyAwID0gbm90IG1heCAgICBcbiAgICAvLyBKU09OIGFuZCBIVE1MIGRpclxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnMgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3F1ZXN0aW9uc1wiLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVRhZ3MgOiBcImRhdGFzL3F1ZXN0aW9ubmFpcmVzL3RhZ3NcIiwgIFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlIDogXCJmcm9udC9wdWJsaWMvcXVpelwiLFxuICAgIGRpckhUTUxUYWdzIDogXCJmcm9udC9wdWJsaWMvcXVpenNcIixcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlIDogXCJxdWl6XCIsLy9wb3VyIHVybCBwYWdlXG4gICAgZGlyV2ViVGFncyA6IFwicXVpenNcIi8vIGlkZW1cbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaG10XCIsIGlkOiBcImFjY291bnRIZWFkTGlua1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiw4AgcHJvcG9zXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9hLXByb3Bvcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDb250YWN0XCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb250YWN0Lmh0bWxcIiB9IH0sXG4gICAgXSxcbiAgICBmb290TGlua3M6XG4gICAgW1xuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5VLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d1Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVi5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Nndi5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiAxMCxcbiAgICB1c2VySG9tZVBhZ2UgOiBcImFjY3VlaWwuaHRtbFwiLFxuICAgIGFkbWluSG9tZVBhZ2UgOiBcImFkbWluLmh0bWxcIixcbiAgICBtYW5hZ2VySG9tZVBhZ2UgOiBcImdlc3Rpb24uaHRtbFwiLFxuICAgIHN1YnNjcmliZVBhZ2UgOiBcImluc2NyaXB0aW9uLmh0bWxcIixcbiAgICBjb25uZWN0aW9uUGFnZSA6IFwiY29ubmV4aW9uLmh0bWxcIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDEwLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmkgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSAoKiksIGxlIGxvZ2ljaWVsIGV0IGxlIGNvbnRlbnUgcGFydGFnw6kgc3VyIFdpa2lMZXJuaSBzb250IGxpYnJlcy48YnI+Vm91cyBwb3V2ZXogbGVzIHV0aWxpc2VyLCBsZXMgbW9kaWZpZXIgZXQgbGVzIGRpZmZ1c2VyIHNlbG9uIHZvdHJlIHNvdWhhaXQuPGJyPlN1ciBXaWtpTGVybmksIHBhcyBkZSBwdWJsaWNpdMOpLCBuaSBkZSBjb21tZXJjaWFsaXNhdGlvbiBkZSB2b3MgZG9ubsOpZXMgcGVyc29ubmVsbGVzLjxicj5Wb3VzIHBvdXZleiB2ZW5pciB5IFxcXCJjdWx0aXZlciB2b3RyZSBqYXJkaW5cXFwiIGVuIHRvdXRlIHRyYW5xdWlsbGl0w6kuPGJyPjxicj48c21hbGw+PGVtPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9lbT48L3NtYWxsPlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXM8L2I+LCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLjxicj5DZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgdGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBwbHVzaWV1cnMgam91cnMsIHNlbWFpbmVzLCBtb2lzLi4uIEV0IGRlIHJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWxsZXMgc3VnZ2VzdGlvbnMgZGUgbGVjdHVyZXMuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgQ1LDiUVSIFNPTiBDT01QVEVcblxuLy8vIEwndXRpbGlzYXRldXIgcGV1dCBhdm9pciByw6lwb25kdSDDoCB1biBxdWl6IGF2YW50IGQnYXJyaXZlciBzdXIgbGEgcGFnZSBkJ2luc2NyaXB0aW9uXG4vLy8gRGVzIGNlIGNhcyBpbCBmYXV0IGVucmVnaXN0cmVyIHNvbiByw6lzdWx0YXQgZW4gbcOqbWUgdGVtcHMgcXVlIGxlcyBpbmZvcm1hdGlvbnMgZGUgc29uIGNvbXB0ZVxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmNvbnN0IGNvbmZpZ1VzZXJzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGNoZWNrQW5zd2VyRGF0YXMsIGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBnZXRQYXNzd29yZCwgZ2V0VGltZURpZmZlcmVuY2UgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgbXlGb3JtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaXB0aW9uXCIpO1xuY29uc3QgZGl2UmVzcG9uc2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IHBhc3N3b3JkSW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwYXNzd29yZFwiKTtcbmNvbnN0IHBhc3N3b3JkTGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdldFBhc3N3b3JkXCIpO1xuY29uc3QgcGFzc3dvcmRIZWxwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGFzc3dvcmRNZXNzYWdlXCIpO1xuY29uc3QgZW1haWxJbnB1dD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtYWlsXCIpO1xuY29uc3QgYnRuU3VibWl0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VibWl0RGF0YXNcIik7XG5jb25zdCBjb2RlR29kZmF0aGVySW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2RlR29kZmF0aGVyXCIpO1xuXG5oZWxsb0RldigpO1xuXG4vLyBUZXN0IGRlIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyICsgYWZmaWNoYWdlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbi5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLmFscmVhZHlDb25uZWN0ZWQsIGNvbG9yOlwiaW5mb3JtYXRpb25cIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGhvbWVQYWdlPXVzZXIuc3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdVc2VycywgbXlGb3JtKTtcbiAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcblxuLy8gR8OpbsOpcmF0ZXVyIGRlIG1vdCBkZSBwYXNzZSBcImFsw6lhdG9pcmVcIlxucGFzc3dvcmRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxue1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBwYXNzd29yZElucHV0LnR5cGU9XCJ0ZXh0XCI7XG4gICAgcGFzc3dvcmRJbnB1dC52YWx1ZT1nZXRQYXNzd29yZCg4LCAxMik7XG4gICAgLy8gY29waWUgZHUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXJcbiAgICBwYXNzd29yZElucHV0LnNlbGVjdCgpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcbiAgICBhZGRFbGVtZW50KHBhc3N3b3JkSGVscCwgXCJlbVwiLCB0eHRVc2Vycy5wYXNzd29yZENvcGllZCwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG59KTtcblxuLy8gVGVzdCBzaSBsJ2UtbWFpbCBzYWlzaSBlc3QgZMOpasOgIHV0aWxpc8OpIHBvdXIgdW4gY29tcHRlIGTDqWrDoCBleGlzdGFudC5cbi8vIFNpIGMnZXN0IGxlIGNhcywgbGEgdmFsaWRhdGlvbiBkdSBmb3JtdWxhaXJlIGVzdCBibG9xdcOpZS5cbmVtYWlsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbE1lc3NhZ2VcIikuaW5uZXJIVE1MPVwiXCI7Ly8gcG91ciBzdXBwcmltZXIgbCfDqXZlbnR1ZWwgbWVzc2FnZSBkJ2VycmV1ciBkw6lqw6AgYWZmaWNow6lcbn0pO1xuZW1haWxJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLCBmdW5jdGlvbihlKVxue1xuICAgIGNvbnN0IGVtYWlsVmFsdWU9ZW1haWxJbnB1dC52YWx1ZS50cmltKCk7XG4gICAgaWYoZW1haWxWYWx1ZSE9PVwiXCIpXG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLmNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlKTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5mcmVlIT09dW5kZWZpbmVkICYmIHJlc3BvbnNlLmZyZWUgPT09IGZhbHNlKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtYWlsTWVzc2FnZVwiKSwgXCJiXCIsIHR4dFVzZXJzLm5lZWRVbmlxdWVFbWFpbC5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGNvbnN0IGRhdGFzPXsgZW1haWxUZXN0OmVtYWlsVmFsdWUgfTtcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICB9XG59KTtcblxuLy8gVsOpcmlmaWNhdGlvbiBxdWUgbGUgY29kZSBkZSBwYXJyYWluYWdlIHNhaXNpIGVzdCB2YWxpZGUuXG4vLyBTaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLCBjZWxhIG4nZXN0IHBhcyBibG9xdWFudC5cbmNvZGVHb2RmYXRoZXJJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgZnVuY3Rpb24oZSlcbnsgICAvLyBvbiBlZmZhY2UgbCfDqXZlbnR1ZWwgbWVzc2FnZSBkJ2VycmV1ciBzaSBvbiByZXZpZW50IHN1ciBsZSBjaGFtcCBwb3VyIHJlY3RpZmllciBsZSB0aXJcbiAgICBhZGRFbGVtZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kZUdvZGZhdGhlck1lc3NhZ2VcIiksIFwiaVwiLCB0eHQubm90UmVxdWlyZWQsIFwiXCIsIFtcImluZm9ybWF0aW9uXCJdKTtcbn0pO1xuY29kZUdvZGZhdGhlcklucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsIGZ1bmN0aW9uKGUpXG57XG4gICAgY29uc3QgY29kZVZhbHVlPWNvZGVHb2RmYXRoZXJJbnB1dC52YWx1ZS50cmltKCk7XG4gICAgaWYoY29kZVZhbHVlIT09XCJcIilcbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIlBPU1RcIiwgYXBpVXJsK2NvbmZpZ1VzZXJzLnVzZXJSb3V0ZXMrY29uZmlnVXNlcnMuZ2V0R29kZmF0aGVyUm91dGUpO1xuICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICB7XG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDQpXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2RlR29kZmF0aGVyTWVzc2FnZVwiKSwgXCJiXCIsIHR4dFVzZXJzLmdvZGZhdGhlck5vdEZvdW5kLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgZWxzZSAvLyAhISDDoCByZXZvaXIgY2FyIGNlbGEgcGV1dCBwZXJtZXR0cmUgZGUgc2F2b2lyIHF1J3VuZSBhZHJlc3NlIGUtbWFpbCBlc3QgcHLDqXNlbnRlIGRhbnMgbGUgYmRcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZGVHb2RmYXRoZXJNZXNzYWdlXCIpLCBcImJcIiwgdHh0VXNlcnMuZ29kZmF0aGVyRm91bmQsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pOyAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICBjb25zdCBkYXRhcz17IGNvZGVUZXN0OmNvZGVWYWx1ZSB9O1xuICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgIH1cbn0pO1xuXG4vLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZGVzIGRvbm7DqWVzIGQnaW5zY3JpcHRpb24gOlxubXlGb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgICAgICAgIFxuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLnN1YnNjcmliZVJvdXRlKTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcImxhc3RBbnN3ZXJcIik7Ly8gISBpbXBvcnRhbnQgcG91ciBuZSBwYXMgZW5yZWdpc3RlciBwbHVzaWV1cnMgZm9pcyBsZSByw6lzdWx0YXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGlmKGRhdGFzKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZShjb25maWdVc2Vycyk7XG4gICAgICAgICAgICAvLyBzaSBsJ3V0aWxpc2F0ZXVyIGEgcHLDqWPDqWRlbWVudCByw6lwb25kdSDDoCB1biBxdWl6LCBqJ2Fqb3V0ZSBsZXMgaW5mb3MgZGUgc29uIHLDqXN1bHRhdCA6XG4gICAgICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgfVxufSk7IiwiLy8gRk9OQ1RJT05TIFVUSUxFUyBBVSBTVE9DS0FHRSBMT0NBTCAoU0VTU0lPTiwgQ09PS0lFUywgSU5ERVhEQiwgRVRDLilcbi8vIFJldmVuaXIgcG91ciBnw6lyZXIgbGUgY2FzIG/DuSBsb2NhbC5zdG9yYWdlIG4nZXN0IHBhcyBjb25udSBwb3VyIHV0aWxpc2VyIGNvb2tpZVxuICAgIFxuZXhwb3J0IGNvbnN0IHNhdmVMb2NhbHkgPSAobmFtZSwgZGF0YSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShuYW1lLCBKU09OLnN0cmluZ2lmeShkYXRhKSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NhbHkgPSAobmFtZSwganNvbj1mYWxzZSkgPT5cbntcbiAgICBpZihqc29uKVxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKSk7XG4gICAgZWxzZVxuICAgICAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSk7XG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVMb2NhbHkgPSAobmFtZSkgPT5cbntcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShuYW1lKTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gYXNzb2NpYW50IGxlcyBhdHRyaWJ1dHMgZm91cm5pcyDDoCB1biBjaGFtcCBkZSBmb3JtdWxhaXJlXG5leHBvcnQgY29uc3QgYWRkRWxlbWVudCA9IChlbHRQYXJlbnQsIGVsdFR5cGUsIGVsdENvbnRlbnQ9XCJcIiwgZWx0SWQ9XCJcIiwgZWx0Q2xhc3M9W10sIGVsdEF0dHJpYnV0ZXM9e30sIHJlcGxhY2U9dHJ1ZSkgPT5cbntcbiAgICBpZihpc0VtcHR5KGVsdFR5cGUpIHx8IGlzRW1wdHkoZWx0UGFyZW50KSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGVsc2VcbiAgICB7XG4gICAgICAgIGNvbnN0IG5ld0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChlbHRUeXBlKTtcbiAgICAgICAgXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdElkKSkvLyB0ZXN0ZXIgc2kgbCdpZCBuJ2VzdCBwYXMgZMOpasOgIHV0aWxpc8OpIGRhbnMgbGUgRE9NID9cbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaWQ9ZWx0SWQ7XG5cbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheShlbHRDbGFzcykgJiYgZWx0Q2xhc3MubGVuZ3RoIT0wKVxuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGkgaW4gZWx0Q2xhc3MpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5jbGFzc0xpc3QuYWRkKGVsdENsYXNzW2ldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHR5cGVvZiBlbHRBdHRyaWJ1dGVzID09PSBcIm9iamVjdFwiKSAvLyAhISB0b3VzIGxlcyBvYmpldHMgbmUgc29udCBwYXMgb2tcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBhdHRyaWJ1dE5hbWUgaW4gZWx0QXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShhdHRyaWJ1dE5hbWUsIGVsdEF0dHJpYnV0ZXNbYXR0cmlidXROYW1lXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZighaXNFbXB0eShlbHRDb250ZW50KSlcbiAgICAgICAgICAgIG5ld0VsZW1lbnQuaW5uZXJIVE1MPWVsdENvbnRlbnQucmVwbGFjZSgvXFxuL2csXCI8YnI+XCIpOy8vIGlubmVySFRNTCBwZXJtZXQgZCdham91dGVyIGR1IHRleHRlIGF5YW50IGx1aS1tw6ptZSBkZXMgYmFsaXNlcywgZXRjLlxuICAgICAgICAgICAgXG4gICAgICAgIGlmKHJlcGxhY2UpXG4gICAgICAgICAgICBlbHRQYXJlbnQuaW5uZXJIVE1MPVwiXCI7XG4gICAgICAgIGVsdFBhcmVudC5hcHBlbmRDaGlsZChuZXdFbGVtZW50KTtcbiAgICB9ICAgIFxufSIsIi8vIENlIHNjcmlwdCBmb3Vybml0IGRlcyBmb25jdGlvbnMgdXRpbGlzw6llcyBzdXIgdG91dGVzIGxlcyBwYWdlcyBkdSBzaXRlXG5cbmV4cG9ydCBjb25zdCBoZWxsb0RldiA9ICgpID0+XG57XG4gICAgY29uc29sZS5sb2coXCIqKioqIEhlbGxvIGFtaSBkw6l2ZWxvcHBldXIgOi0pXFxuIExlIGNvZGUgZGUgV2lraUxlcm5pIGVzdCBsaWJyZSBldCBlc3QgbGlzaWJsZSBzdXIgZ2l0bGFiIDogXFxuIEJvbm5lIGxlY3R1cmUgOi0pIFxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmltcG9ydCB7ICBjaGVja0xvZ2luUm91dGUsIHRpbWVEaWZmZXJlbmNlTWF4LCB0aW1lRGlmZmVyZW5jZU1pbiwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvdXNlcnMuanNcIjtcblxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gUsOpY3Vww6hyZSBsZXMgZG9ubsOpZXMgZGUgY29uZmlndXJhdGlvbiBkZXMgdXRpbGlzYXRldXJzXG4vLyDDgCB0ZXJtZSwgdW4gZmljaGllciBzdGF0aXF1ZSBpbXBvcnRhYmxlIGNvbW1lIG1vZHVsZSBkZXZyYWl0IMOpdml0ZXIgdW5lIHJlcXXDqnRlIGFqYXhcbmV4cG9ydCBjb25zdCBnZXRDb25maWcgPSAgYXN5bmMgKCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrXCIvdXNlci9nZXRjb25maWdcIik7XG4gICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKEpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCkpO1xuICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgIHhoci5zZW5kKCk7XG4gICAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCBnZXRUaW1lRGlmZmVyZW5jZSA9ICgpID0+XG57XG4gICAgY29uc3QgdGltZUxvY2FsPW5ldyBEYXRlKCkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICBpZih0aW1lTG9jYWwgPiB0aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCB0aW1lRGlmZmVyZW5jZU1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSByZXR1cm4gdGltZUxvY2FsO1xufVxuXG4vLyBPbiBlbmzDqHZlIHZvbG9udGFpcmVtZW50IGxlcyAwL08gcG91ciDDqXZpdGVyIGxlcyBjb25mdXNpb25zICFcbi8vIEV0IG1pZXV4IHZhdXQgYXVzc2kgZMOpYnV0ZXIgZXQgZmluaXIgcGFyIHVuZSBsZXR0cmUgc2ltcGxlLlxuZXhwb3J0IGNvbnN0IGdldFBhc3N3b3JkID0gKG5iQ2FyTWluLCBuYkNhck1heCkgPT5cbntcbiAgICBjb25zdCBuYkNhcj1uYkNhck1pbitNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKG5iQ2FyTWF4LW5iQ2FyTWluKSk7XG4gICAgY29uc3QgbGV0dGVycz1cIkFCQ0RFRkdISUpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbnBxcnN0dXZ3eHl6XCI7XG4gICAgY29uc3Qgb3RoZXJzPVwiMTIzNDU2Nzg5IT8uKi1fJUAmw4nDgMOIw5nigqwkw4LDisObw45cIjtcbiAgICBsZXQgcGFzc3dvcmQ9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICBmb3IobGV0IGk9MTtpPChuYkNhci0xKTtpKyspXG4gICAge1xuICAgICAgICBpZigoaSAlIDIpID09PTEpXG4gICAgICAgICAgICBwYXNzd29yZCs9b3RoZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpvdGhlcnMubGVuZ3RoKV07XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldOyAgIFxuICAgIH1cbiAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTtcbiAgICByZXR1cm4gcGFzc3dvcmQ7XG59XG5cbi8vIEondXRpbGlzZSBsZSBzdG9ja2FnZSBsb2NhbCBkdSBuYXZpZ2F0ZXVyIHBvdXIgZW5yZWdpc3RyZXIgbGVzIGRvbm7DqWVzIHBlcm1ldHRhbnQgZGUgcmVjb25uYcOudHJlIGwndXRpbGlzYXRldXIgcGFyIGxhIHN1aXRlXG4vLyBTZXVsIGxlIHNlcnZldXIgcG91cnJhIHbDqXJpZmllciBxdWUgbGVzIGlkZW50aWZpYW50cyBzb250ICh0b3Vqb3VycykgdmFsaWRlcy5cbmV4cG9ydCBjb25zdCBzZXRTZXNzaW9uID0gKHVzZXJJZCwgdG9rZW4sIGR1cmF0aW9uVFMpID0+XG57XG4gICAgY29uc3Qgc3RvcmFnZVVzZXI9XG4gICAge1xuICAgICAgICBpZDogdXNlcklkLFxuICAgICAgICB0b2tlbjogdG9rZW4sXG4gICAgICAgIGR1cmF0aW9uOiBkdXJhdGlvblRTXG4gICAgfVxuICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHN0b3JhZ2VVc2VyKTtcbn1cblxuLy8gVsOpcmlmaWUgcXUnaWwgeSBhIGRlcyBkb25uw6llcyBsb2NhbGVzIGNvbmNlcm5hbnQgbGUgcsOpc3VsdGF0IGQndW4gcXVpelxuLy8gRXQgbGVzIGFqb3V0ZSBhdXggZG9ubsOpZXMgZW52b3nDqWVzIHBhciBsZXMgZm9ybXVsYWlyZXMgZCdpbnNjcmlwdGlvbi9jb25uZXhpb24gc2kgYydlc3QgbGUgY2FzXG5leHBvcnQgY29uc3QgY2hlY2tBbnN3ZXJEYXRhcyA9IChkYXRhcykgPT5cbntcbiAgICBjb25zdCBsYXN0QW5zd2VyPWdldExvY2FseShcImxhc3RBbnN3ZXJcIik7XG4gICAgaWYoIWlzRW1wdHkobGFzdEFuc3dlcikpXG4gICAge1xuICAgICAgICBjb25zdCBhbnN3ZXI9SlNPTi5wYXJzZShsYXN0QW5zd2VyKTtcbiAgICAgICAgaWYoIWlzRW1wdHkoYW5zd2VyLmR1cmF0aW9uKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJDb3JyZWN0QW5zd2VycykgJiYgIWlzRW1wdHkoYW5zd2VyLlF1ZXN0aW9ubmFpcmVJZCkgJiYgIWlzRW1wdHkoYW5zd2VyLm5iUXVlc3Rpb25zKSlcbiAgICAgICAge1xuICAgICAgICAgICAgZGF0YXMuZHVyYXRpb249YW5zd2VyLmR1cmF0aW9uO1xuICAgICAgICAgICAgZGF0YXMubmJDb3JyZWN0QW5zd2Vycz1hbnN3ZXIubmJDb3JyZWN0QW5zd2VycztcbiAgICAgICAgICAgIGRhdGFzLlF1ZXN0aW9ubmFpcmVJZD1hbnN3ZXIuUXVlc3Rpb25uYWlyZUlkO1xuICAgICAgICAgICAgZGF0YXMubmJRdWVzdGlvbnM9YW5zd2VyLm5iUXVlc3Rpb25zO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn1cblxuLy8gQ2V0dGUgZm9uY3Rpb24gdGVzdGUgbGEgY29ubmV4aW9uIGRlIGwndXRpbGlzYXRldXIgZCd1bmUgcGFnZVxuLy8gT24gcGV1dCBmb3VybmlzIHVuZSBsaXN0ZSBkZSBzdGF0dXRzIGFjY2VwdMOpcyAoc2kgdmlkZSA9IHRvdXMpLCBhaW5zaSBxdSd1bmUgdXJsIGRlIHJlZGlyZWN0aW9uIHNpIG5vbiBjb25uZWN0w6ksIHVuIG1lc3NhZ2UgZCdlcnJldXIgw6AgYWZmaWNoZXIgc3VyIGxhIHBhZ2UgZGUgZGVzdGluYXRpb24gZXQgbCd1cmwgc3VyIGxhcXVlbGxlIHJldmVuaXIgdW5lIGZvaXMgY29ubmVjdMOpXG5leHBvcnQgY29uc3QgY2hlY2tTZXNzaW9uID0gYXN5bmMgKHN0YXR1cz1bXSwgdXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT5cbiAgICB7XG4gICAgICAgIGNvbnN0IHVzZXJEYXRhcz1nZXRMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICBpZihpc0VtcHR5KHVzZXJEYXRhcykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgdXNlcj1KU09OLnBhcnNlKHVzZXJEYXRhcyk7XG4gICAgICAgICAgICBpZihpc0VtcHR5KHVzZXIuaWQpIHx8wqBpc0VtcHR5KHVzZXIudG9rZW4pIHx8IGlzRW1wdHkodXNlci5kdXJhdGlvbikgfHwgdXNlci5kdXJhdGlvbiA8IERhdGUubm93KCkpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK3VzZXJSb3V0ZXMrY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9c2l0ZVVybCtcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZih1cmxBY2NvdW50KT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtsYW5nXS5hY2NvdW50UGFnZSk7Ly8gcGFzc8OpZSBkaXJlY3RlbWVudCBpY2ksIGwnYW5jcmUgI3N1YnNjcmliZSBuZSBmb25jdGlvbm5lIHBhcyAhP1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihzdGF0dXMubGVuZ3RoIT09MCAmJiBzdGF0dXMuaW5kZXhPZihyZXNwb25zZS5zdGF0dXMpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG4vLyBDZXR0ZSBmb25jdGlvbiBzZXJ0IMOgIGxhIHByw6ljw6lkZW50ZSBlbiBjYXMgZGUgY29ubmV4aW9uIG5vbiB2YWxpZGVcbmNvbnN0IHJlZGlyZWN0VXNlciA9ICh1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIGlmKCFpc0VtcHR5KG1lc3NhZ2UpKVxuICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCBtZXNzYWdlKTtcbiAgICBpZighaXNFbXB0eSh1cmxXYW50ZWQpKVxuICAgICAgICBzYXZlTG9jYWx5KFwidXJsXCIsIHVybFdhbnRlZCk7XG4gICAgaWYoIWlzRW1wdHkodXJsUmVkaXJlY3Rpb24pKVxuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHVybFJlZGlyZWN0aW9uKTtcbn0iXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZm9ybXMuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VzZXJzLmpzIl0sIm5hbWVzIjpbInVzZXJzIiwicmVxdWlyZSIsInF1ZXN0aW9ubmFpcmVzIiwibW9kdWxlIiwiZXhwb3J0cyIsImFwaVVybCIsInNpdGVVcmwiLCJhZG1pbk5hbWUiLCJhZG1pbkVtYWlsIiwic2VuZGVyTmFtZSIsInNlbmRlckVtYWlsIiwiYWRtaW5MYW5nIiwidGhlbWUiLCJhdmFpbGFibGVMYW5ncyIsInNpdGVOYW1lIiwiYmVnaW5Db2RlR29kZmF0aGVyIiwiY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwicmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZSIsInRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzIiwidG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnMiLCJ0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXMiLCJ0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VycyIsInRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzIiwidG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzIiwiZnJlZUFjY291bnRUaW1pbmdJbkRheXMiLCJmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzIiwiYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXMiLCJpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXMiLCJuYlF1ZXN0aW9uc01pbiIsIm5iUXVlc3Rpb25zTWF4IiwibmJDaG9pY2VzTWF4IiwibmJOZXdRdWVzdGlvbm5haXJlcyIsImhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kIiwibnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWUiLCJtaW5TZWFyY2hRdWVzdGlvbm5haXJlcyIsIm5iSWxsdXN0cmF0aW9uc01pbiIsIm5iSWxsdXN0cmF0aW9uc01heCIsIm1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0IiwibWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uIiwiaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeCIsImlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4IiwibmJMaW5rc01pbiIsIm5iTGlua3NNYXgiLCJwYXNzd29yZCIsIm1pbmxlbmd0aCIsImRpckNhY2hlVXNlcnMiLCJkaXJDYWNoZVVzZXJzQW5zd2VycyIsImRpckNhY2hlUXVlc3Rpb25uYWlyZXMiLCJkaXJDYWNoZVF1ZXN0aW9ucyIsImRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyIsImRpckhUTUxRdWVzdGlvbm5haXJlIiwiZGlyV2ViUXVlc3Rpb25uYWlyZSIsInF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJnZXRRdWVzdGlvbm5haXJlUm91dGVzIiwicHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzIiwic2F2ZUFuc3dlcnNSb3V0ZSIsImdldFN0YXRzUXVlc3Rpb25uYWlyZXMiLCJzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSIsInNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSIsImdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXMiLCJyZWdlbmVyYXRlSFRNTCIsInF1ZXN0aW9uc1JvdXRlIiwidGFnc1NlYXJjaFJvdXRlIiwiZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyIiwiZ2V0UHJldmlvdXNBbnN3ZXJzIiwiZ2V0U3RhdHNBbnN3ZXJzIiwiZ2V0QWRtaW5TdGF0cyIsIlF1ZXN0aW9ubmFpcmUiLCJ0aXRsZSIsIm1heGxlbmd0aCIsInJlcXVpcmVkIiwic2x1ZyIsImludHJvZHVjdGlvbiIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwiUXVlc3Rpb24iLCJ0ZXh0IiwicmFuayIsIm1pbiIsImRlZmF1bHRWYWx1ZSIsIkNob2ljZSIsIm5iVGFnc01pbiIsIm5iVGFnc01heCIsImRpckNhY2hlVGFncyIsImRpckhUTUxUYWdzIiwiZGlyV2ViVGFncyIsIm5iUmFuZG9tUmVzdWx0cyIsInVzZXJSb3V0ZXMiLCJzdWJzY3JpYmVSb3V0ZSIsImdldEdvZGZhdGhlclJvdXRlIiwiY2hlY2tJZklzRW1haWxmcmVlUm91dGUiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJjaGVja0xvZ2luUm91dGUiLCJjb25uZWN0aW9uUm91dGUiLCJnZXRMb2dpbkxpbmtSb3V0ZSIsImNvbm5lY3Rpb25XaXRoTGlua1JvdXRlIiwiZ2V0VXNlckluZm9zIiwiY3JlYXRlVXNlclJvdXRlIiwidmFsaWRhdGVVc2VyUm91dGUiLCJ1cGRhdGVVc2VySW5mb3MiLCJzZWFyY2hVc2VyUm91dGUiLCJnZXRHb2RDaGlsZHMiLCJjaGVja05ld0xvZ2luTGlua1JvdXRlIiwiY2hlY2tEZWxldGVMaW5rUm91dGUiLCJnZXRQYXltZW50cyIsInVuc3Vic2NyaWJlUm91dGUiLCJuYW1lIiwiZW1haWwiLCJuZXdQYXNzd29yZCIsImNvZGVHb2RmYXRoZXIiLCJjZ3VPayIsInZhbHVlIiwidGltZURpZmZlcmVuY2VNaW4iLCJ0aW1lRGlmZmVyZW5jZU1heCIsInNpdGVIVE1MVGl0bGUiLCJzaXRlTWV0YURlc2NyaXB0aW9uIiwic2NyaXB0VGltaW5nSW5mbyIsInNjcmlwdFRpbWluZ0FsZXJ0Iiwic2VydmVyRXJyb3IiLCJzZXJ2ZXJFcnJvckFkbWluIiwibmVlZGVkUGFyYW1zIiwiYmFkVXJsIiwibm90VmFsaWRGb3JtYXQiLCJub3RBbGxvd2VkIiwibm90UmVxdWlyZWQiLCJ1cGRhdGVCdG5UeHQiLCJhZGRCdG5UeHQiLCJkZWxldGVCdG5UeHQiLCJhZGRPa01lc3NhZ2UiLCJ1cGRhdGVPa01lc3NhZ2UiLCJkZWxldGVPa01lc3NhZ2UiLCJmYWlsQXV0aCIsImZhaWxBdXRoSGVhZGVyIiwiZmFpbEF1dGhUb2tlbiIsImZhaWxBdXRoSWQiLCJmYWlsQXV0aENyb24iLCJwcmV2aW91c1BhZ2UiLCJuZXh0UGFnZSIsImFsZXJ0TmV3V2luZG93IiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rVHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lTGlua1R4dCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJhbHJlYWR5Q29ubmVjdGVkIiwibmVlZEJlQ29ubmVjdGVkIiwiY29ubmVjdGlvbk9rIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwidG9vTWFueUxvZ2luRmFpbHMiLCJiYWRQYXNzd29yZCIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua1R4dCIsIm1haWxMb2dpbkxpbmtCb2R5VHh0IiwibWFpbExvZ2luTGlua0JvZHlIVE1MIiwibWFpbExvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkT2tNZXNzYWdlIiwidXBkYXRlZE5lZWRHb29kRW1haWwiLCJ1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIiwibWFpbFVwZGF0ZUxvZ2luU3ViamVjdCIsIm1haWxVcGRhdGVMb2dpbkxpbmtUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlTGlua1R4dCIsIm1haWxEZWxldGVCb2R5VHh0IiwibWFpbERlbGV0ZUJvZHlIVE1MIiwibWFpbERlbGV0ZUxpbmtNZXNzYWdlIiwiZGVsZXRlRmFpbE1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua09rTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlIiwiY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZSIsImRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlIiwid2VsY29tZU1lc3NhZ2UiLCJieWVieWVNZXNzYWdlIiwiaW5mb3NVc2VyRm9yQWRtaW4iLCJpbmZvc0FkbWluR29kZmF0aGVyIiwiaW5mb3NBZG1pbk5iR29kQ2hpbGRzIiwiVG9vbCIsIm15VmFyIiwidW5kZWZpbmVkIiwidHJpbSIsIm15U3RyaW5nIiwiaXNFbXB0eSIsIm1heCIsImxlbmd0aCIsInN1YnN0cmluZyIsIm1hcE9iaiIsInJlcGxhY2VFbHRzIiwiUmVnRXhwIiwiT2JqZWN0Iiwia2V5cyIsImpvaW4iLCJyZXBsYWNlIiwibWF0Y2hlZCIsIk1hdGgiLCJjZWlsIiwiZmxvb3IiLCJyYW5kb20iLCJkYXRlU3RyaW5nIiwibGFuZyIsIm15RGF0ZSIsIkRhdGUiLCJteURheSIsImdldERhdGUiLCJteU1vdW50aCIsImdldE1vbnRoIiwibXlZZWFyIiwiZ2V0RnVsbFllYXIiLCJoZWFkTGlua3MiLCJhbmNob3IiLCJhdHRyaWJ1dGVzIiwiaHJlZiIsImlkIiwiZm9vdExpbmtzIiwicmVsIiwibWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2UiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzaXRlU2xvZ2FuIiwiaG9tZVRpdGxlMSIsImhvbWVQMSIsImhvbWVUaXRsZTIiLCJob21lUDIiLCJuZXdRdWVzdGlvbm5haXJlc1RpdGxlIiwibmV3UXVlc3Rpb25uYWlyZXNJbnRybyIsImV4cGxhbmF0aW9uVGl0bGUiLCJleHBsYW5hdGlvblR4dCIsIm5vSlNOb3RpZmljYXRpb24iLCJ0YWdzTGlzdFR4dCIsIm1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlIiwidmFsaWRhdGlvbkxpbmtQYWdlIiwibG9naW5MaW5rUGFnZSIsIm5ld0xvZ2luTGlua1BhZ2UiLCJkZWxldGVMaW5rUGFnZSIsInN0b3BNYWlsUGFnZSIsInVwZGF0ZUFjY291bnRQYWdlIiwiYWJvdXRQYWdlIiwiaG9tZVBhZ2VUeHQiLCJob21lQnRuQWJvdXRUeHQiLCJob21lQnRuU3Vic2NyaWJlVHh0IiwibmV3c0xpc3RUaXRsZSIsIm1haWxSZWNpcGllbnRUeHQiLCJjb25maWdUZW1wbGF0ZSIsImNvbmZpZ1VzZXJzIiwidHh0IiwidHh0VXNlcnMiLCJteUZvcm0iLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiZGl2UmVzcG9uc2UiLCJwYXNzd29yZElucHV0IiwicGFzc3dvcmRMaW5rIiwicGFzc3dvcmRIZWxwIiwiZW1haWxJbnB1dCIsImJ0blN1Ym1pdCIsImNvZGVHb2RmYXRoZXJJbnB1dCIsImhlbGxvRGV2IiwiaW5pdGlhbGlzZSIsImNoZWNrU2Vzc2lvbiIsImlzQ29ubmVjdGVkIiwic2F2ZUxvY2FseSIsIm1lc3NhZ2UiLCJjb2xvciIsInVzZXIiLCJnZXRMb2NhbHkiLCJob21lUGFnZSIsInN0YXR1cyIsIndpbmRvdyIsImxvY2F0aW9uIiwiYXNzaWduIiwic2V0QXR0cmlidXRlc1RvSW5wdXRzIiwic3R5bGUiLCJkaXNwbGF5IiwiYWRkRWxlbWVudCIsImNvbnNvbGUiLCJlcnJvciIsImFkZEV2ZW50TGlzdGVuZXIiLCJlIiwicHJldmVudERlZmF1bHQiLCJ0eXBlIiwiZ2V0UGFzc3dvcmQiLCJzZWxlY3QiLCJleGVjQ29tbWFuZCIsImlubmVySFRNTCIsImVtYWlsVmFsdWUiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwiZnJlZSIsInNldEF0dHJpYnV0ZSIsInJlbW92ZUF0dHJpYnV0ZSIsInNldFJlcXVlc3RIZWFkZXIiLCJkYXRhcyIsImVtYWlsVGVzdCIsInNlbmQiLCJzdHJpbmdpZnkiLCJjb2RlVmFsdWUiLCJjb2RlVGVzdCIsInJlbW92ZUxvY2FseSIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsImdldERhdGFzRnJvbUlucHV0cyIsInRpbWVEaWZmZXJlbmNlIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJjaGVja0Fuc3dlckRhdGFzIiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpIiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImxpbmsiLCJpbnB1dHNDb25mIiwiZWxlbWVudHMiLCJpZElucHV0IiwiaW5wdXRIVE1MIiwiYXR0cmlidXRlIiwiZm9ybURhdGEiLCJGb3JtRGF0YSIsImVudHJpZXMiLCJlbnRyaWUiLCJlbXB5Rm9ybSIsImNoZWNrZWQiLCJlbXB5QW5kSGlkZUZvcm0iLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9ubG9hZCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0IiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwidXJsUmVkaXJlY3Rpb24iLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJub3ciLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFD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aWJlLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3N1YnNjcmliZS5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIsLy8gaWRlbVxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMvLyBsaW1pdGUgbGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmRcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogV2lraXDDqWRpYSBlbiBxdWVzdGlvbnNcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgcmVjZXZleiBjaGFxdWUgam91ciBkZSBub3V2ZWF1eCBxdWl6cyBwb3VyIHRlc3RlciB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3Nlcy5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5vdEZvdW5kOiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwYXIgdW4gYXV0cmUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgdm90cmUgcHJlc3NlLXBhcGllci4gVm91cyBwb3V2ZXogbGUgcmVjb3BpZXIgKEN0cmwrVikgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJWb3VzIGRldmV6IGFjY2VwdGVyIGxlcyBDR1UgcG91ciBwb3V2b2lyIGNyw6llciB2b3RyZSBjb21wdGUuIFwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSBwYXJyYWluLlwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIHBhcnJhaW4gYSBiaWVuIMOpdMOpIHRyb3V2w6kgIVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjRIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGR1IHNpdGUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqShlKSBhdSBzaXRlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6koZSkgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJUcm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiTGUgbW90IGRlIHBhc3NlIG4nZXN0IHBhcyBsZSBib24uXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBuJ2VzdCBwbHVzIHZhbGFibGUuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWlscyA6IFwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCIuLi5cIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pZXJzIHF1aXpzXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJCbG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDksXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwibW9uLWNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSA8c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKik8L3NwYW4+LCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L3NwYW4+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgIVwiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6IFwiVGVzdGVyIFdpa2lMZXJuaSBncmF0dWl0ZW1lbnQuXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+U3VpdmFudCBsZXMgcXVlc3Rpb25zLCB1bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlcyBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIDxiPkMnZXN0IHRvdWpvdXJzIGxlIGNvbnRlbnUgZGUgbCdhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pIGNvbmNlcm5hbnQgbGVzIFxcXCJib25uZXNcXFwiIHLDqXBvbnNlczwvYj4uIE1haXMgbGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBuJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMsIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudDwvYj4uPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLiBDZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgPGI+dGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpejwvYj4gcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBHcsOiY2Ugw6AgY2UgY29tcHRlLCB2b3VzIHBvdXJyZXogYXVzc2kgPGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlYXV4IHF1aXpzPC9iPiBwb3VyIGNvbnRpbnVlciDDoCBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIi48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiTGVzIGRlcm5pw6hyZXMgZ3JhaW5lcyBkZSBzYXZvaXJcIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlc1wiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbn07IiwiLy8gLS0gR0VTVElPTiBEVSBGT1JNVUxBSVJFIFBFUk1FVFRBTlQgREUgQ1LDiUVSIFNPTiBDT01QVEVcblxuLy8vIEwndXRpbGlzYXRldXIgcGV1dCBhdm9pciByw6lwb25kdSDDoCB1biBxdWl6IGF2YW50IGQnYXJyaXZlciBzdXIgbGEgcGFnZSBkJ2luc2NyaXB0aW9uXG4vLy8gRGVzIGNlIGNhcyBpbCBmYXV0IGVucmVnaXN0cmVyIHNvbiByw6lzdWx0YXQgZW4gbcOqbWUgdGVtcHMgcXVlIGxlcyBpbmZvcm1hdGlvbnMgZGUgc29uIGNvbXB0ZVxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcbmNvbnN0IGNvbmZpZ1VzZXJzID0gcmVxdWlyZShcIi4uLy4uL2NvbmZpZy91c2Vyc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldERhdGFzRnJvbUlucHV0cywgc2V0QXR0cmlidXRlc1RvSW5wdXRzIH0gZnJvbSBcIi4vdG9vbHMvZm9ybXMuanNcIjtcbmltcG9ydCB7IGNoZWNrQW5zd2VyRGF0YXMsIGNoZWNrU2Vzc2lvbiwgZ2V0Q29uZmlnLCBnZXRQYXNzd29yZCwgZ2V0VGltZURpZmZlcmVuY2UgfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG4vLyBQcmluY2lwYXV4IMOpbMOpbWVudHMgZHUgRE9NIG1hbmlwdWzDqXMgOlxuY29uc3QgbXlGb3JtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3Vic2NyaXB0aW9uXCIpO1xuY29uc3QgZGl2UmVzcG9uc2U9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcbmNvbnN0IHBhc3N3b3JkSW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJwYXNzd29yZFwiKTtcbmNvbnN0IHBhc3N3b3JkTGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImdldFBhc3N3b3JkXCIpO1xuY29uc3QgcGFzc3dvcmRIZWxwPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicGFzc3dvcmRNZXNzYWdlXCIpO1xuY29uc3QgZW1haWxJbnB1dD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImVtYWlsXCIpO1xuY29uc3QgYnRuU3VibWl0PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwic3VibWl0RGF0YXNcIik7XG5jb25zdCBjb2RlR29kZmF0aGVySW5wdXQ9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2RlR29kZmF0aGVyXCIpO1xuXG5oZWxsb0RldigpO1xuXG4vLyBUZXN0IGRlIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyICsgYWZmaWNoYWdlIGZvcm11bGFpcmUgZCdpbnNjcmlwdGlvbi5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLmFscmVhZHlDb25uZWN0ZWQsIGNvbG9yOlwiaW5mb3JtYXRpb25cIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGhvbWVQYWdlPXVzZXIuc3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNldEF0dHJpYnV0ZXNUb0lucHV0cyhjb25maWdVc2VycywgbXlGb3JtKTtcbiAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwiYmxvY2tcIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTtcblxuLy8gR8OpbsOpcmF0ZXVyIGRlIG1vdCBkZSBwYXNzZSBcImFsw6lhdG9pcmVcIlxucGFzc3dvcmRMaW5rLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBmdW5jdGlvbihlKVxue1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICBwYXNzd29yZElucHV0LnR5cGU9XCJ0ZXh0XCI7XG4gICAgcGFzc3dvcmRJbnB1dC52YWx1ZT1nZXRQYXNzd29yZCg4LCAxMik7XG4gICAgLy8gY29waWUgZHUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXJcbiAgICBwYXNzd29yZElucHV0LnNlbGVjdCgpO1xuICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKFwiY29weVwiKTtcbiAgICBhZGRFbGVtZW50KHBhc3N3b3JkSGVscCwgXCJkaXZcIiwgdHh0VXNlcnMucGFzc3dvcmRDb3BpZWQsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pO1xufSk7XG5cbi8vIFRlc3Qgc2kgbCdlLW1haWwgc2Fpc2kgZXN0IGTDqWrDoCB1dGlsaXPDqSBwb3VyIHVuIGNvbXB0ZSBkw6lqw6AgZXhpc3RhbnQuXG4vLyBTaSBjJ2VzdCBsZSBjYXMsIGxhIHZhbGlkYXRpb24gZHUgZm9ybXVsYWlyZSBlc3QgYmxvcXXDqWUuXG5lbWFpbElucHV0LmFkZEV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBmdW5jdGlvbihlKVxue1xuICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiZW1haWxNZXNzYWdlXCIpLmlubmVySFRNTD1cIlwiOy8vIHBvdXIgc3VwcHJpbWVyIGwnw6l2ZW50dWVsIG1lc3NhZ2UgZCdlcnJldXIgZMOpasOgIGFmZmljaMOpXG59KTtcbmVtYWlsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgZnVuY3Rpb24oZSlcbntcbiAgICBjb25zdCBlbWFpbFZhbHVlPWVtYWlsSW5wdXQudmFsdWUudHJpbSgpO1xuICAgIGlmKGVtYWlsVmFsdWUhPT1cIlwiKVxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5jaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuZnJlZSE9PXVuZGVmaW5lZCAmJiByZXNwb25zZS5mcmVlID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJlbWFpbE1lc3NhZ2VcIiksIFwiZGl2XCIsIHR4dFVzZXJzLm5lZWRVbmlxdWVFbWFpbC5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgYnRuU3VibWl0LnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGJ0blN1Ym1pdC5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihcIkNvbnRlbnQtVHlwZVwiLCBcImFwcGxpY2F0aW9uL2pzb25cIik7XG4gICAgICAgIGNvbnN0IGRhdGFzPXsgZW1haWxUZXN0OmVtYWlsVmFsdWUgfTtcbiAgICAgICAgeGhyLnNlbmQoSlNPTi5zdHJpbmdpZnkoZGF0YXMpKTtcbiAgICB9XG59KTtcblxuLy8gVsOpcmlmaWNhdGlvbiBxdWUgbGUgY29kZSBkZSBwYXJyYWluYWdlIHNhaXNpIGVzdCB2YWxpZGUuXG4vLyBTaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLCBjZWxhIG4nZXN0IHBhcyBibG9xdWFudC5cbmNvZGVHb2RmYXRoZXJJbnB1dC5hZGRFdmVudExpc3RlbmVyKFwiZm9jdXNcIiwgZnVuY3Rpb24oZSlcbnsgICAvLyBvbiBlZmZhY2UgbCfDqXZlbnR1ZWwgbWVzc2FnZSBkJ2VycmV1ciBzaSBvbiByZXZpZW50IHN1ciBsZSBjaGFtcCBwb3VyIHJlY3RpZmllciBsZSB0aXJcbiAgICBhZGRFbGVtZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiY29kZUdvZGZhdGhlck1lc3NhZ2VcIiksIFwiaVwiLCB0eHQubm90UmVxdWlyZWQpO1xufSk7XG5jb2RlR29kZmF0aGVySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgZnVuY3Rpb24oZSlcbntcbiAgICBjb25zdCBjb2RlVmFsdWU9Y29kZUdvZGZhdGhlcklucHV0LnZhbHVlLnRyaW0oKTtcbiAgICBpZihjb2RlVmFsdWUhPT1cIlwiKVxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCBhcGlVcmwrY29uZmlnVXNlcnMudXNlclJvdXRlcytjb25maWdVc2Vycy5nZXRHb2RmYXRoZXJSb3V0ZSk7XG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwNClcbiAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImNvZGVHb2RmYXRoZXJNZXNzYWdlXCIpLCBcImRpdlwiLCB0eHRVc2Vycy5nb2RmYXRoZXJOb3RGb3VuZCwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgIGVsc2UgLy8gISEgw6AgcmV2b2lyIGNhciBjZWxhIHBldXQgcGVybWV0dHJlIGRlIHNhdm9pciBxdSd1bmUgYWRyZXNzZSBlLW1haWwgZXN0IHByw6lzZW50ZSBkYW5zIGxlIGJkXG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJjb2RlR29kZmF0aGVyTWVzc2FnZVwiKSwgXCJkaXZcIiwgdHh0VXNlcnMuZ29kZmF0aGVyRm91bmQsIFwiXCIsIFtcInN1Y2Nlc3NcIl0pOyAgICAgICAgICAgXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICBjb25zdCBkYXRhcz17IGNvZGVUZXN0OmNvZGVWYWx1ZSB9O1xuICAgICAgICB4aHIuc2VuZChKU09OLnN0cmluZ2lmeShkYXRhcykpO1xuICAgIH1cbn0pO1xuXG4vLyBUcmFpdGVtZW50IGRlIGwnZW52b2kgZGVzIGRvbm7DqWVzIGQnaW5zY3JpcHRpb24gOlxubXlGb3JtLmFkZEV2ZW50TGlzdGVuZXIoXCJzdWJtaXRcIiwgZnVuY3Rpb24oZSlcbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTsgICAgICAgIFxuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJQT1NUXCIsIGFwaVVybCtjb25maWdVc2Vycy51c2VyUm91dGVzK2NvbmZpZ1VzZXJzLnN1YnNjcmliZVJvdXRlKTtcbiAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAge1xuICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMSlcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIG15Rm9ybS5zdHlsZS5kaXNwbGF5PVwibm9uZVwiO1xuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UubWVzc2FnZSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcImxhc3RBbnN3ZXJcIik7Ly8gISBpbXBvcnRhbnQgcG91ciBuZSBwYXMgZW5yZWdpc3RlciBwbHVzaWV1cnMgZm9pcyBsZSByw6lzdWx0YXRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocmVzcG9uc2UuZXJyb3JzKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYoQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS5lcnJvcnMgPSB0eHQuc2VydmVyRXJyb3I7XG4gICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIiwgXCJhcHBsaWNhdGlvbi9qc29uXCIpO1xuICAgICAgICBsZXQgZGF0YXM9Z2V0RGF0YXNGcm9tSW5wdXRzKG15Rm9ybSk7XG4gICAgICAgIGlmKGRhdGFzKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy50aW1lRGlmZmVyZW5jZT1nZXRUaW1lRGlmZmVyZW5jZShjb25maWdVc2Vycyk7XG4gICAgICAgICAgICAvLyBzaSBsJ3V0aWxpc2F0ZXVyIGEgcHLDqWPDqWRlbWVudCByw6lwb25kdSDDoCB1biBxdWl6LCBqJ2Fqb3V0ZSBsZXMgaW5mb3MgZGUgc29uIHLDqXN1bHRhdCA6XG4gICAgICAgICAgICBkYXRhcz1jaGVja0Fuc3dlckRhdGFzKGRhdGFzKTtcbiAgICAgICAgICAgIHhoci5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGFzKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcbiAgICB9XG59KTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IHNlcmEgYmllbnTDtHQgbGlzaWJsZSBzdXIgR2l0bGFiLlxcbiBQb3VyIGxlcyBzdWdnZXN0aW9ucyBkJ2Ftw6lsaW9yYXRpb24gb3UgcXVlc3Rpb25zIDogZGV2QHdpbGlsZXJuaS5jb20gKioqKlwiKTtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGNvbnN0IHVwZGF0ZUFjY291bnRMaW5rID0gKHN0YXR1cywgY29uZmlnVGVtcGxhdGUpID0+XG57XG4gICAgY29uc3QgbGluaz1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFjY291bnRIZWFkTGlua1wiKTtcbiAgICBjb25zdCBob21lUGFnZT1zdGF0dXMrXCJIb21lUGFnZVwiO1xuICAgIGxpbmsuaHJlZj1cIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV07XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IHNldEF0dHJpYnV0ZXNUb0lucHV0cyA9IChpbnB1dHNDb25mLCBteUZvcm0pID0+XG57XG4gICAgZm9yKGxldCBpIGluIG15Rm9ybS5lbGVtZW50cylcbiAgICB7XG4gICAgICAgIGlmKCFpc0VtcHR5KG15Rm9ybS5lbGVtZW50c1tpXS5pZCkpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGxldCBpZElucHV0PW15Rm9ybS5lbGVtZW50c1tpXS5pZDtcbiAgICAgICAgICAgIGlmKGlucHV0c0NvbmZbaWRJbnB1dF0hPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0SFRNTD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZElucHV0KTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBhdHRyaWJ1dGUgaW4gaW5wdXRzQ29uZltpZElucHV0XSlcbiAgICAgICAgICAgICAgICAgICAgaW5wdXRIVE1MLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGlucHV0c0NvbmZbaWRJbnB1dF1bYXR0cmlidXRlXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbi8vIFLDqWN1cMOocmUgdG91dGVzIGxlcyB2YWxldXJzIGRlIGNoYW1wcyBlbiBvbWV0dGFudCBsZXMgY2hlY2tib3ggbm9uIGNvY2jDqWVzLCBldGMuXG5leHBvcnQgY29uc3QgZ2V0RGF0YXNGcm9tSW5wdXRzID0gKG15Rm9ybSkgPT5cbntcbiAgICBjb25zdCBkYXRhcz17fTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShteUZvcm0pO1xuICAgIGZvcihsZXQgZW50cmllIG9mIGZvcm1EYXRhLmVudHJpZXMoKSlcbiAgICAgICBkYXRhc1tlbnRyaWVbMF1dPWVudHJpZVsxXTtcbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIFZpZGUgdG91cyBsZXMgY2hhbXBzIGQndW4gZm9ybXVsYWlyZSwgeSBjb21wcmlzIGhpZGRlbiwgY2hlY2tib3gsIGV0Yy5cbi8vIFJldm9pciBwb3VyIGxlcyBzZWxlY3RcbmV4cG9ydCBjb25zdCBlbXB5Rm9ybSA9IChteUZvcm0pID0+XG57XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgRm9ybURhdGEobXlGb3JtKTtcbiAgICBmb3IobGV0IGVudHJpZSBvZiBmb3JtRGF0YS5lbnRyaWVzKCkpXG4gICAge1xuICAgICAgICBpZihteUZvcm0uZWxlbWVudHNbZW50cmllWzBdXS50eXBlPT1cImNoZWNrYm94XCIgfHwgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udHlwZT09XCJyYWRpb1wiKVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0uY2hlY2tlZD1mYWxzZTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbXlGb3JtLmVsZW1lbnRzW2VudHJpZVswXV0udmFsdWU9XCJcIjtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG4vLyBWaWRlIGV0IGNhY2hlIGxlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBlbXB5QW5kSGlkZUZvcm0gPSAobXlGb3JtKSA9Plxue1xuICAgIGVtcHlGb3JtKG15Rm9ybSk7XG4gICAgbXlGb3JtLnN0eWxlLmRpc3BsYXk9XCJub25lXCI7XG59IiwiaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgc2l0ZVVybCwgdGhlbWUgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICAvLyBtdWx0aXBsaWVyIHBhciAtMSwgY2FyIGMnZXN0IGNlIHF1J2lsIGZhdXQgXCJham91dGVyXCIgw6AgbCdoZXVyZSBVVEMgcG91ciByZXZlbmlyIGVuIGhldXJlIGxvY2FsZSBxdWkgbSdpbnTDqXJlc3NlIGV0IG5vbiBsJ2ludmVyc2VcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpKi0xO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gYydlc3QgbGUgdG9rZW4gcXVpIHNlcnQgw6AgdsOpcmlmaWVyIGxlIHN0YXR1dCDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmFjY291bnRQYWdlK1wiI3N1YnNjcmliZVwiKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file diff --git a/front/public/JS/subscribeValidation.app.js b/front/public/JS/subscribeValidation.app.js index 33dd172..0270ae7 100644 --- a/front/public/JS/subscribeValidation.app.js +++ b/front/public/JS/subscribeValidation.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -387,8 +391,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -411,6 +415,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
    En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
    Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -433,7 +438,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -444,20 +449,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

    Bonjour USER_NAME,

    Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

    Valider.

    ", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

    Bonjour USER_NAME,

    Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

    ", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
    Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

    Bonjour USER_NAME,

    Votre venez de valider votre inscription à NOM_SITE.

    Merci et à bientôt !

    ", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

    Bonjour USER_NAME,

    Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

    Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

    Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

    Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

    Pour ce faire, utilisez le lien ci-dessous.

    Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

    Bonjour USER_NAME,

    Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

    Merci et à bientôt !

    ", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -470,15 +478,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

    Bonjour USER_NAME,

    Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

    Valider.

    ", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

    Bonjour USER_NAME,

    Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

    ", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

    Bonjour USER_NAME,

    Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

    ", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

    Bonjour USER_NAME,

    Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

    ", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -486,8 +496,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

    Bonjour USER_NAME,

    Pour valider la suppression de votre compte, cliquez ici sans tarder.

    ", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

    Bonjour USER_NAME,

    Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

    ", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -601,7 +612,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -642,7 +654,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -705,7 +717,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
    Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

    Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

    Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

    Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
    Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

    Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
    Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
    De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
    Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
    Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
    Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

    (*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
    Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

    Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

    Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

    Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

    Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

    Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -925,7 +1039,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -1037,7 +1151,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1125,13 +1240,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1183,4 +1298,4 @@ var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwiY29uZmlnVGVtcGxhdGUiLCJ0eHQiLCJ0eHRVc2VycyIsImRpdlJlc3BvbnNlIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50QnlJZCIsImluaXRpYWxpc2UiLCJjaGVja1Nlc3Npb24iLCJpc0Nvbm5lY3RlZCIsInNhdmVMb2NhbHkiLCJtZXNzYWdlIiwiY29sb3IiLCJ1c2VyIiwiZ2V0TG9jYWx5IiwiaG9tZVBhZ2UiLCJzdGF0dXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsImFzc2lnbiIsImRhdGFzIiwiZ2V0VXJsUGFyYW1zIiwidCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIiwicmVzcG9uc2UiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJ1c2VySWQiLCJ0b2tlbiIsImVycm9ycyIsIkFycmF5IiwiaXNBcnJheSIsImFkZEVsZW1lbnQiLCJzZW5kIiwiY29uc29sZSIsImVycm9yIiwiaGVsbG9EZXYiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsInN0cmluZ2lmeSIsImpzb24iLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiY3JlYXRlRWxlbWVudCIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwibGluayIsInNlYXJjaCIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGVjb2RlVVJJIiwiZ2V0Q29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmxvYWQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsImdldFRpbWVEaWZmZXJlbmNlIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJnZXRQYXNzd29yZCIsIm5iQ2FyTWluIiwibmJDYXJNYXgiLCJuYkNhciIsImxldHRlcnMiLCJvdGhlcnMiLCJzZXRTZXNzaW9uIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsInVybFJlZGlyZWN0aW9uIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwibm93IiwiaXNWYWxpZCIsImxhbmd1YWdlIiwidGltZURpZmZlcmVuY2UiLCJuYkRheXNPayIsInVybEFjY291bnQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFF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LDZCQUFPLENBQUMsS0FBRCxDQUFQO0FBQ0g7QUFDSixtQkE1Q0Q7O0FBNkNBckQscUJBQUcsQ0FBQ3dELE9BQUosR0FBYztBQUFBLDJCQUFNRixNQUFNLENBQUN0RCxHQUFHLENBQUN5RCxVQUFMLENBQVo7QUFBQSxtQkFBZDs7QUFDQXpELHFCQUFHLENBQUNnQixJQUFKO0FBQ0g7QUFDSjtBQUNKLGFBdEVNLENBRmlCOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVovQixZQUFZO0FBQUE7QUFBQTtBQUFBLEdBQWxCLEMsQ0EwRVA7O0FBQ0EsSUFBTStGLFlBQVksR0FBRyxTQUFmQSxZQUFlLENBQUNILGNBQUQsRUFBaUJ6RixPQUFqQixFQUEwQjBGLFNBQTFCLEVBQ3JCO0FBQ0ksTUFBRyxDQUFDMUosMkRBQU8sQ0FBQ2dFLE9BQUQsQ0FBWCxFQUNJRCxvRUFBVSxDQUFDLFNBQUQsRUFBWUMsT0FBWixDQUFWO0FBQ0osTUFBRyxDQUFDaEUsMkRBQU8sQ0FBQzBKLFNBQUQsQ0FBWCxFQUNJM0Ysb0VBQVUsQ0FBQyxLQUFELEVBQVEyRixTQUFSLENBQVY7QUFDSixNQUFHLENBQUMxSiwyREFBTyxDQUFDeUosY0FBRCxDQUFYLEVBQ0luRixNQUFNLENBQUNDLFFBQVAsQ0FBZ0JDLE1BQWhCLENBQXVCaUYsY0FBdkI7QUFDUCxDQVJELEMiLCJmaWxlIjoiLi9KUy9zdWJzY3JpYmVWYWxpZGF0aW9uLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3N1YnNjcmliZVZhbGlkYXRpb24uanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIHNlbmRlckVtYWlsOiBcImJvbmpvdXJAd2lraWxlcm5pLmNvbVwiLFxuICAgIGFkbWluTGFuZzogXCJmclwiLFxuICAgIHRoZW1lOiBcImRlZmF1bHRcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJ3aWtpbGVybmlcIiwgLy8gY2FzZS1zZW5zaXRpdmUgYW5kIGNhbid0IGNvbnRhaW4gXCJAXCIgIVxuICAgIGNyb25UaW1pbmdBbGVydEluU2Vjb25kZTogMTIwLCAvLyBmb3IgbG9nc1xuICAgIHJlc3BvbnNlVGltaW5nQWxlcnRJblNlY29uZGU6IDMsIC8vIGlkZW1cbiAgICB0b2tlblNpZ251cFZhbGlkYXRpb25UaW1lSW5Ib3VyczogXCI0OGhcIiwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3plaXQvbXNcbiAgICB0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VyczogXCIyNGhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1heFRpbWVJbkRheXM6IFwiMTgwIGRheXNcIixcbiAgICB0b2tlbkxvZ2luQ2hhbmdpbmdUaW1lSW5Ib3VyczogXCIxaFwiLC8vIGZvciBlbWFpbCAmIHBhc3N3b3JkIGNoYW5naW5nXG4gICAgdG9rZW5EZWxldGVVc2VyVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXM6IFwiNyBkYXlzXCIsIC8vIHRva2VuIHNlbmQgd2l0aCBzdWJzY3JpcHRpb24ncyBlbWFpbHNcbiAgICBmcmVlQWNjb3VudFRpbWluZ0luRGF5czogMTAsXG4gICAgZnJlZUFjY291bnRFeHBpcmF0aW9uTm90aWZpY2F0aW9uSW5EYXlzOiA1LFxuICAgIGFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXM6IDE0LCAgICBcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICAvLyAtLSBxdWVzdGlvbnMgJiBjaG9pY2VzIDpcbiAgICBxdWVzdGlvbnNSb3V0ZTogXCIvcXVlc3Rpb24vXCIsXG4gICAgLy8gLS0gdGFncyA6XG4gICAgdGFnc1NlYXJjaFJvdXRlOiBcIi90YWdzL3NlYXJjaC9cIixcbiAgICAvLyAtLSBhbnN3ZXJzIDpcbiAgICBnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXI6IFwiL3dpdGhvdXRhbnN3ZXIvdXNlci9cIixcbiAgICBnZXRQcmV2aW91c0Fuc3dlcnM6IFwiL3VzZXIvYW5zd2Vycy9cIixcbiAgICBnZXRTdGF0c0Fuc3dlcnMgOiBcIi91c2VyL2Fud3N3ZXJzL3N0YXRzL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgUXVlc3Rpb25uYWlyZSA6XG4gICAge1xuICAgICAgICB0aXRsZTogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgc2x1ZzogeyBtYXhsZW5ndGg6IDE1MCB9LCAvLyBjaGFtcCByZXF1aXMgbWFpcyBjYWxjdWzDqSDDoCBwYXJ0aXIgZHUgdGl0cmUgcWQgdmlkZVxuICAgICAgICBpbnRyb2R1Y3Rpb246IHsgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXMgOiB7IG1pbmxlbmd0aDogMywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBRdWVzdGlvbiA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICByYW5rOiB7IHJlcXVpcmVkOiB0cnVlLCBtaW46MSwgZGVmYXVsdFZhbHVlOjEgfVxuICAgIH0sICAgICAgICAgIFxuICAgIENob2ljZSA6XG4gICAge1xuICAgICAgICB0ZXh0OiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgbmJRdWVzdGlvbnNNaW46IDEsXG4gICAgbmJRdWVzdGlvbnNNYXg6IDEwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIvLyBpZGVtXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvdXNlclwiOiBcIi4uL2xhbmcvZnIvdXNlci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL3VzZXIkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIHNpdGVIVE1MVGl0bGUgOiBcIldpa2lMZXJuaSA6IHF1J2FsbGV6LXZvdXMgYXBwcmVuZHJlIGF1am91cmQnaHVpID9cIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJDaGFxdWUgam91ciwgdGVzdGV6IHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmV6IGRlIG5vdXZlbGxlcyBjaG9zZXMgYXZlYyBXaWtpTGVybmkuXCIsXG4gICAgc2NyaXB0VGltaW5nSW5mbyA6IFwiRHVyw6llIGRlIGxhIHLDqXBvbnNlIDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzY3JpcHRUaW1pbmdBbGVydCA6IFwiKioqIFNjcmlwdCBsZW50IDogU0NSSVBUX1RJTUlORyBtaWxsaXNlY29uZGVzLCByb3V0ZSA6IFNDUklQVF9VUkxcIixcbiAgICBzZXJ2ZXJFcnJvciA6IFwiRMOpc29sw6kuIFVuZSBlcnJldXIgaW1wcsOpdnVlIGVzdCBzdXJ2ZW51ZS4gU2kgY2VsYSBwZXJzaXN0ZSwgbidow6lzaXRleiDDoCBwcsOpdmVuaXIgbCdhZG1pbmlzdHJhdGV1ciBkdSBzaXRlLlwiLFxuICAgIHNlcnZlckVycm9yQWRtaW4gOiBcIkJ1ZyBkZSBsJ2FwcGxpY2F0aW9uIDpcIixcbiAgICBuZWVkZWRQYXJhbXMgOiBcIkRlcyBwYXJhbcOodHJlcyBuw6ljZXNzYWlyZXMgbWFucXVhbnRzIHNvbnQgbWFucXVhbnRzLlwiLFxuICAgIGJhZFVybCA6IFwiVGVudGF0aXZlIGQnYWNjw6hzIMOgIHVuZSBwYWdlIG4nZXhpc3RhbnQgcGFzIDpcIixcbiAgICBub3RWYWxpZEZvcm1hdCA6IFwiRm9ybWF0IG5vbiB2YWxpZGUuXCIsXG4gICAgbm90QWxsb3dlZCA6IFwiVm91cyBuJ2F2ZXogcGFzIGxlcyBkcm9pdHMgbsOpY2Vzc2FpcmVzIHBvdXIgY2V0dGUgYWN0aW9uLlwiLFxuICAgIG5vdFJlcXVpcmVkIDogXCJGYWN1bHRhdGlmLlwiLFxuICAgIHVwZGF0ZUJ0blR4dDogXCJNb2RpZmllclwiLFxuICAgIGFkZEJ0blR4dDogXCJBam91dGVyXCIsXG4gICAgZGVsZXRlQnRuVHh0OiBcIlN1cHByaW1lclwiLFxuICAgIGFkZE9rTWVzc2FnZSA6IFwiTGVzIGRvbm7DqWVzIG9udCBiaWVuIMOpdMOpIGVucmVnaXN0csOpZXMuXCIsXG4gICAgdXBkYXRlT2tNZXNzYWdlIDogXCJMYSBtaXNlIMOgIGpvdXIgw6Agam91ciBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZSA6IFwiTGEgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBmYWlsQXV0aCA6IFwiRXJyZXVyIGQnYXV0aGVudGlmaWNhdGlvbi5cIixcbiAgICBmYWlsQXV0aEhlYWRlciA6IFwiQWJzZW5jZSBkZSBoZWFkZXIgQXV0aG9yaXphdGlvbi5cIixcbiAgICBmYWlsQXV0aFRva2VuIDogXCJUb2tlbiBpbnZhbGlkZSBvdSB1dGlsaXNhdGV1ciBub24gdHJvdXbDqS5cIixcbiAgICBmYWlsQXV0aElkIDogXCJJZGVudGlmaWFudCBub24gdmFsaWRlIDogXCIsXG4gICAgZmFpbEF1dGhDcm9uIDogXCJUZW50YXRpdmUgZGUgbGFuY2VtZW50IGQndW4gY3JvbiBzYW5zIGxlIGJvbiB0b2tlbi5cIixcbiAgICBwcmV2aW91c1BhZ2UgOiBcIlBhZ2UgcHLDqWPDqWRlbnRlXCIsXG4gICAgbmV4dFBhZ2UgOiBcIlBhZ2Ugc3VpdmFudGVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciBvw7kgdm91cyBsZSBzb3VoYWl0ZXIuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdmFsaWRlIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGNvbXB0ZVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvdHJlIGNvbXB0ZSwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aC48L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IHNhbnMgdGFyZGVyIHZvdXMgY29ubmVjdGVyIGNpLWRlc3NvdXMgcG91ciBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Wb3RyZSB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOiBMSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPjxwPjxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5WYWxpZGVyLjwvYT48L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCBcIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llIGNhciBlbGxlIG4nYSBwYXMgdW5lIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+LiBFbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdMOpIG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2YWxpZGVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgPGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPmNsaXF1ZXogaWNpPC9hPiBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmhtdFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG59OyIsIi8vIC0tIFBBR0UgUEVSTUVUVEFOVCBERSBWQUxJREVSIExBIENSw4lBVElPTiBERSBTT04gQ09NUFRFXG5cbi8vLyBVbiB0b2tlbiBlc3QgdHJhbnNtaXMgZW4gcGFyYW3DqHRyZSBkZSBsJ1VybC4gSWwgYSB1bmUgdmFsaWRpdMOpIGxpbWl0w6kgZGFucyBsZSB0ZW1wcy5cbi8vLyBTaSBsZSB0b2tlbiBuJ2VzdCBwYXMvcGx1cyB2YWxpZGUsIG9uIHJlZGlyaWdlIGwndXRpbGlzYXRldXIgdmVycyBsYSBwYWdlIGRlIGNvbm5leGlvbiBwb3VyIG9idGVuaXIgdW4gbm91dmVhdSBsaWVuLlxuLy8vIFNpIGxlIHRva2VuIGVzdCBvaywgb24gbCdpbmZvcm1lIHF1ZSB0b3V0IGVzdCBvayBldCBsdWkgcHJvcG9zZSBkZSBzZSBjb25uZWN0ZXIuXG4vLy8gU2kgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCB1bmUgc2Vzc2lvbiBhY3RpdmUgdmFsaWRlLCBjJ2VzdCBxdSdpbCBhIGTDqWrDoCBjbGlxdcOpIHN1ciBsZSBsaWVuLiBPbiBsZSByZWRpcmlnZSB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsLlxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gdGlyw6lzIGR1IGJhY2tlbmQgOlxuaW1wb3J0IHsgYXBpVXJsLCBhdmFpbGFibGVMYW5ncywgdGhlbWUgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2luc3RhbmNlLmpzXCI7XG5jb25zdCBsYW5nPWF2YWlsYWJsZUxhbmdzWzBdO1xuXG5pbXBvcnQgeyBjaGVja1N1YnNjcmliZVRva2VuUm91dGUsIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5jb25zdCBjb25maWdUZW1wbGF0ZSA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZXMgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgLy8gc2kgbCd1dGlsaXNhdGV1ciBlc3QgZMOpasOgIGNvbm5lY3TDqSwgcGFzIGxhIHBlaW5lIGQnYWxsZXIgKyBsb2luIDpcbiAgICAgICAgY29uc3QgaXNDb25uZWN0ZWQ9YXdhaXQgY2hlY2tTZXNzaW9uKCk7XG4gICAgICAgIGlmKGlzQ29ubmVjdGVkKVxuICAgICAgICB7XG4gICAgICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLmFscmVhZHlDb25uZWN0ZWQsIGNvbG9yOlwiaW5mb3JtYXRpb25cIiB9KTtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9Z2V0TG9jYWx5KFwidXNlclwiLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IGhvbWVQYWdlPXVzZXIuc3RhdHVzK1wiSG9tZVBhZ2VcIjsvLyBsb3JzIGRlIGxhIGNyw6lhdGlvbiwgc2V1bCBsZSBzdGF0dXQgJ3VzZXJcIiBlc3QgcG9zc2libGVcbiAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgaWYoZGF0YXMgJiYgZGF0YXMudCE9PXVuZGVmaW5lZClcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja1N1YnNjcmliZVRva2VuUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKClcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UodGhpcy5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UudXNlcklkICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS50b2tlbiAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgeyBtZXNzYWdlOiB0eHRVc2Vycy52YWxpZGF0aW9uTWVzc2FnZSwgY29sb3I6XCJzdWNjZXNzXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gNDA0KSAmJiByZXNwb25zZS5lcnJvcnMgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHR4dC5zZXJ2ZXJFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFVzZXJzLmJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdUZW1wbGF0ZS5jb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGNhdGNoKGUpXG4gICAge1xuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgfVxufVxuaW5pdGlhbGlzZSgpO1xuaGVsbG9EZXYoKTsiLCIvLyBGT05DVElPTlMgVVRJTEVTIEFVIFNUT0NLQUdFIExPQ0FMIChTRVNTSU9OLCBDT09LSUVTLCBJTkRFWERCLCBFVEMuKVxuLy8gUmV2ZW5pciBwb3VyIGfDqXJlciBsZSBjYXMgb8O5IGxvY2FsLnN0b3JhZ2Ugbidlc3QgcGFzIGNvbm51IHBvdXIgdXRpbGlzZXIgY29va2llXG4gICAgXG5leHBvcnQgY29uc3Qgc2F2ZUxvY2FseSA9IChuYW1lLCBkYXRhKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKG5hbWUsIEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldExvY2FseSA9IChuYW1lLCBqc29uPWZhbHNlKSA9Plxue1xuICAgIGlmKGpzb24pXG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpKTtcbiAgICBlbHNlXG4gICAgICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShuYW1lKTtcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUxvY2FseSA9IChuYW1lKSA9Plxue1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKG5hbWUpO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiBhc3NvY2lhbnQgbGVzIGF0dHJpYnV0cyBmb3VybmlzIMOgIHVuIGNoYW1wIGRlIGZvcm11bGFpcmVcbmV4cG9ydCBjb25zdCBhZGRFbGVtZW50ID0gKGVsdFBhcmVudCwgZWx0VHlwZSwgZWx0Q29udGVudD1cIlwiLCBlbHRJZD1cIlwiLCBlbHRDbGFzcz1bXSwgZWx0QXR0cmlidXRlcz17fSwgcmVwbGFjZT10cnVlKSA9Plxue1xuICAgIGlmKGlzRW1wdHkoZWx0VHlwZSkgfHwgaXNFbXB0eShlbHRQYXJlbnQpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgZWxzZVxuICAgIHtcbiAgICAgICAgY29uc3QgbmV3RWxlbWVudD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KGVsdFR5cGUpO1xuICAgICAgICBcbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0SWQpKS8vIHRlc3RlciBzaSBsJ2lkIG4nZXN0IHBhcyBkw6lqw6AgdXRpbGlzw6kgZGFucyBsZSBET00gP1xuICAgICAgICAgICAgbmV3RWxlbWVudC5pZD1lbHRJZDtcblxuICAgICAgICBpZihBcnJheS5pc0FycmF5KGVsdENsYXNzKSAmJiBlbHRDbGFzcy5sZW5ndGghPTApXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBlbHRDbGFzcylcbiAgICAgICAgICAgICAgICBuZXdFbGVtZW50LmNsYXNzTGlzdC5hZGQoZWx0Q2xhc3NbaV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodHlwZW9mIGVsdEF0dHJpYnV0ZXMgPT09IFwib2JqZWN0XCIpIC8vICEhIHRvdXMgbGVzIG9iamV0cyBuZSBzb250IHBhcyBva1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3IobGV0IGF0dHJpYnV0TmFtZSBpbiBlbHRBdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0TmFtZSwgZWx0QXR0cmlidXRlc1thdHRyaWJ1dE5hbWVdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKCFpc0VtcHR5KGVsdENvbnRlbnQpKVxuICAgICAgICAgICAgbmV3RWxlbWVudC5pbm5lckhUTUw9ZWx0Q29udGVudC5yZXBsYWNlKC9cXG4vZyxcIjxicj5cIik7Ly8gaW5uZXJIVE1MIHBlcm1ldCBkJ2Fqb3V0ZXIgZHUgdGV4dGUgYXlhbnQgbHVpLW3Dqm1lIGRlcyBiYWxpc2VzLCBldGMuXG4gICAgICAgICAgICBcbiAgICAgICAgaWYocmVwbGFjZSlcbiAgICAgICAgICAgIGVsdFBhcmVudC5pbm5lckhUTUw9XCJcIjtcbiAgICAgICAgZWx0UGFyZW50LmFwcGVuZENoaWxkKG5ld0VsZW1lbnQpO1xuICAgIH0gICAgXG59IiwiLy8gQ2Ugc2NyaXB0IGZvdXJuaXQgZGVzIGZvbmN0aW9ucyB1dGlsaXPDqWVzIHN1ciB0b3V0ZXMgbGVzIHBhZ2VzIGR1IHNpdGVcblxuZXhwb3J0IGNvbnN0IGhlbGxvRGV2ID0gKCkgPT5cbntcbiAgICBjb25zb2xlLmxvZyhcIioqKiogSGVsbG8gYW1pIGTDqXZlbG9wcGV1ciA6LSlcXG4gTGUgY29kZSBkZSBXaWtpTGVybmkgZXN0IGxpYnJlIGV0IGVzdCBsaXNpYmxlIHN1ciBnaXRsYWIgOiBcXG4gQm9ubmUgbGVjdHVyZSA6LSkgXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuaW1wb3J0IHsgIGNoZWNrTG9naW5Sb3V0ZSwgdGltZURpZmZlcmVuY2VNYXgsIHRpbWVEaWZmZXJlbmNlTWluLCB1c2VyUm91dGVzIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy91c2Vycy5qc1wiO1xuXG5pbXBvcnQgeyBnZXRMb2NhbHksIHJlbW92ZUxvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBSw6ljdXDDqHJlIGxlcyBkb25uw6llcyBkZSBjb25maWd1cmF0aW9uIGRlcyB1dGlsaXNhdGV1cnNcbi8vIMOAIHRlcm1lLCB1biBmaWNoaWVyIHN0YXRpcXVlIGltcG9ydGFibGUgY29tbWUgbW9kdWxlIGRldnJhaXQgw6l2aXRlciB1bmUgcmVxdcOqdGUgYWpheFxuZXhwb3J0IGNvbnN0IGdldENvbmZpZyA9ICBhc3luYyAoKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCtcIi91c2VyL2dldGNvbmZpZ1wiKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKCkgPT5cbntcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmKHRpbWVMb2NhbCA+IHRpbWVEaWZmZXJlbmNlTWF4IHx8IHRpbWVMb2NhbCA8IHRpbWVEaWZmZXJlbmNlTWluKVxuICAgICAgICByZXR1cm4gMDtcbiAgICBlbHNlIHJldHVybiB0aW1lTG9jYWw7XG59XG5cbi8vIE9uIGVubMOodmUgdm9sb250YWlyZW1lbnQgbGVzIDAvTyBwb3VyIMOpdml0ZXIgbGVzIGNvbmZ1c2lvbnMgIVxuLy8gRXQgbWlldXggdmF1dCBhdXNzaSBkw6lidXRlciBldCBmaW5pciBwYXIgdW5lIGxldHRyZSBzaW1wbGUuXG5leHBvcnQgY29uc3QgZ2V0UGFzc3dvcmQgPSAobmJDYXJNaW4sIG5iQ2FyTWF4KSA9Plxue1xuICAgIGNvbnN0IG5iQ2FyPW5iQ2FyTWluK01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSoobmJDYXJNYXgtbmJDYXJNaW4pKTtcbiAgICBjb25zdCBsZXR0ZXJzPVwiQUJDREVGR0hJSktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ucHFyc3R1dnd4eXpcIjtcbiAgICBjb25zdCBvdGhlcnM9XCIxMjM0NTY3ODkhPy4qLV8lQCbDicOAw4jDmeKCrCTDgsOKw5vDjlwiO1xuICAgIGxldCBwYXNzd29yZD1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIGZvcihsZXQgaT0xO2k8KG5iQ2FyLTEpO2krKylcbiAgICB7XG4gICAgICAgIGlmKChpICUgMikgPT09MSlcbiAgICAgICAgICAgIHBhc3N3b3JkKz1vdGhlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm90aGVycy5sZW5ndGgpXTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07ICAgXG4gICAgfVxuICAgIHBhc3N3b3JkKz1sZXR0ZXJzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpsZXR0ZXJzLmxlbmd0aCldO1xuICAgIHJldHVybiBwYXNzd29yZDtcbn1cblxuLy8gSid1dGlsaXNlIGxlIHN0b2NrYWdlIGxvY2FsIGR1IG5hdmlnYXRldXIgcG91ciBlbnJlZ2lzdHJlciBsZXMgZG9ubsOpZXMgcGVybWV0dGFudCBkZSByZWNvbm5hw650cmUgbCd1dGlsaXNhdGV1ciBwYXIgbGEgc3VpdGVcbi8vIFNldWwgbGUgc2VydmV1ciBwb3VycmEgdsOpcmlmaWVyIHF1ZSBsZXMgaWRlbnRpZmlhbnRzIHNvbnQgKHRvdWpvdXJzKSB2YWxpZGVzLlxuZXhwb3J0IGNvbnN0IHNldFNlc3Npb24gPSAodXNlcklkLCB0b2tlbiwgZHVyYXRpb25UUykgPT5cbntcbiAgICBjb25zdCBzdG9yYWdlVXNlcj1cbiAgICB7XG4gICAgICAgIGlkOiB1c2VySWQsXG4gICAgICAgIHRva2VuOiB0b2tlbixcbiAgICAgICAgZHVyYXRpb246IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoc3RhdHVzPVtdLCB1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKSA9Plxue1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxuICAgIHtcbiAgICAgICAgY29uc3QgdXNlckRhdGFzPWdldExvY2FseShcInVzZXJcIik7XG4gICAgICAgIGlmKGlzRW1wdHkodXNlckRhdGFzKSlcbiAgICAgICAge1xuICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCB1c2VyPUpTT04ucGFyc2UodXNlckRhdGFzKTtcbiAgICAgICAgICAgIGlmKGlzRW1wdHkodXNlci5pZCkgfHzCoGlzRW1wdHkodXNlci50b2tlbikgfHwgaXNFbXB0eSh1c2VyLmR1cmF0aW9uKSB8fCB1c2VyLmR1cmF0aW9uIDwgRGF0ZS5ub3coKSlcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICB4aHIub3BlbihcIkdFVFwiLCBhcGlVcmwrdXNlclJvdXRlcytjaGVja0xvZ2luUm91dGUrdXNlci50b2tlbik7XG4gICAgICAgICAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhoci5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS5pc1ZhbGlkICYmIHJlc3BvbnNlLmlkICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2UuaWQ9PT11c2VyLmlkKVxuICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubmFtZT1yZXNwb25zZS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIubGFuZ3VhZ2U9cmVzcG9uc2UubGFuZ3VhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci50aW1lRGlmZmVyZW5jZT1yZXNwb25zZS50aW1lRGlmZmVyZW5jZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnN0YXR1cz1yZXNwb25zZS5zdGF0dXM7Ly8gbGUgdG9rZW4gZXQgZGUgdG91dGUgZmHDp29uIHbDqXJpZmllciDDoCBjaGFxdWUgcmVxdcOqdGUgw6AgbCdBUElcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwidXNlclwiLCB1c2VyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaSBpbCBzJ2FnaXQgZCd1biBcInVzZXJcIiBldCBxdWUgc29uIGFib25uZW1lbnQgYSBleHBpcsOpLCBqZSBsZSByZWRpcmlnZSB2ZXJzIGxhIGNhaXNzZSA6LSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5zdGF0dXM9PT1cInVzZXJcIiAmJiByZXNwb25zZS5uYkRheXNPayA8PSAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXJsQWNjb3VudD1zaXRlVXJsK1wiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKHVybEFjY291bnQpPT09LTEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlW2xhbmddLmFjY291bnRQYWdlKTsvLyBwYXNzw6llIGRpcmVjdGVtZW50IGljaSwgbCdhbmNyZSAjc3Vic2NyaWJlIG5lIGZvbmN0aW9ubmUgcGFzICE/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHN0YXR1cy5sZW5ndGghPT0wICYmIHN0YXR1cy5pbmRleE9mKHJlc3BvbnNlLnN0YXR1cyk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIENldHRlIGZvbmN0aW9uIHNlcnQgw6AgbGEgcHLDqWPDqWRlbnRlIGVuIGNhcyBkZSBjb25uZXhpb24gbm9uIHZhbGlkZVxuY29uc3QgcmVkaXJlY3RVc2VyID0gKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgaWYoIWlzRW1wdHkobWVzc2FnZSkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIG1lc3NhZ2UpO1xuICAgIGlmKCFpc0VtcHR5KHVybFdhbnRlZCkpXG4gICAgICAgIHNhdmVMb2NhbHkoXCJ1cmxcIiwgdXJsV2FudGVkKTtcbiAgICBpZighaXNFbXB0eSh1cmxSZWRpcmVjdGlvbikpXG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odXJsUmVkaXJlY3Rpb24pO1xufSJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi4vdmlld3Mgc3luYyBeXFwuXFwvLipcXC5qcyQiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uLi92aWV3cy93aWtpbGVybmkvY29uZmlnL2ZyLmpzIiwid2VicGFjazovLy8uL3NyYy9zdWJzY3JpYmVWYWxpZGF0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9jbGllbnRzdG9yYWdlLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy9kb20uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2V2ZXJ5d2hlcmUuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL3VybC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXNlcnMuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInJlZ2VuZXJhdGVIVE1MIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5vdEZvdW5kIiwibmVlZE5hbWUiLCJuZWVkTm90VG9vTG9uZ05hbWUiLCJuZWVkRW1haWwiLCJuZWVkVW5pcXVlRW1haWwiLCJuZWVkTm90VG9vTG9uZ0VtYWlsIiwibmVlZFBhc3NXb3JkIiwibmVlZExvbmdQYXNzV29yZCIsInBhc3N3b3JkQ29waWVkIiwibmVlZFN0YXR1cyIsIm5lZWRMYW5ndWFnZSIsIm5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSIsIm5lZWRTTVRQIiwibmVlZFNNVFBOb3RGb3VuZCIsIm5lZWRLbm93TmV3c2xldHRlck9rIiwibmVlZFRpbWVEaWZmZXJlbmNlIiwibmVlZE1pblRpbWVEaWZmZXJlbmNlIiwibmVlZE1heFRpbWVEaWZmZXJlbmNlIiwibmVlZFVHQ09rIiwiZ29kZmF0aGVyTm90Rm91bmQiLCJnb2RmYXRoZXJGb3VuZCIsIm1haWxWYWxpZGF0aW9uTWVzc2FnZSIsIm1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QiLCJtYWlsVmFsaWRhdGlvbkxpbmtUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCIsInZhbGlkYXRpb25NZXNzYWdlIiwidmFsaWRhdGlvbk1lc3NhZ2VBZG1pbiIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZSIsInZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluIiwibWFpbFdlbGNvbWVTdWJqZWN0IiwibWFpbFdlbGNvbWVMaW5rVHh0IiwibWFpbFdlbGNvbWVCb2R5VHh0IiwibWFpbFdlbGNvbWVCb2R5SFRNTCIsIm1haWxUaGFua0dvZGZhdGhlclN1YmplY3QiLCJtYWlsVGhhbmtHb2RmYXRoZXJMaW5rVHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rVHh0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luTGlua1R4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlUeHQiLCJtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCIsIm1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyIiwidXBkYXRlZE5lZWRHb29kR29kZmF0aGVyIiwibWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlIiwidXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIiwiY3JlYXRpb25Pa01lc3NhZ2UiLCJtYWlsRGVsZXRlU3ViamVjdCIsIm1haWxEZWxldGVMaW5rVHh0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInRhZ3NMaXN0VHh0IiwibWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2UiLCJ2YWxpZGF0aW9uTGlua1BhZ2UiLCJsb2dpbkxpbmtQYWdlIiwibmV3TG9naW5MaW5rUGFnZSIsImRlbGV0ZUxpbmtQYWdlIiwic3RvcE1haWxQYWdlIiwidXBkYXRlQWNjb3VudFBhZ2UiLCJhYm91dFBhZ2UiLCJob21lUGFnZVR4dCIsImhvbWVCdG5BYm91dFR4dCIsImhvbWVCdG5TdWJzY3JpYmVUeHQiLCJuZXdzTGlzdFRpdGxlIiwibWFpbFJlY2lwaWVudFR4dCIsImNvbmZpZ1RlbXBsYXRlIiwidHh0IiwidHh0VXNlcnMiLCJkaXZSZXNwb25zZSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJpbml0aWFsaXNlIiwiY2hlY2tTZXNzaW9uIiwiaXNDb25uZWN0ZWQiLCJzYXZlTG9jYWx5IiwibWVzc2FnZSIsImNvbG9yIiwidXNlciIsImdldExvY2FseSIsImhvbWVQYWdlIiwic3RhdHVzIiwid2luZG93IiwibG9jYXRpb24iLCJhc3NpZ24iLCJkYXRhcyIsImdldFVybFBhcmFtcyIsInQiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsInJlc3BvbnNlIiwiSlNPTiIsInBhcnNlIiwicmVzcG9uc2VUZXh0IiwidXNlcklkIiwidG9rZW4iLCJlcnJvcnMiLCJBcnJheSIsImlzQXJyYXkiLCJhZGRFbGVtZW50Iiwic2VuZCIsImNvbnNvbGUiLCJlcnJvciIsImhlbGxvRGV2IiwiZGF0YSIsImxvY2FsU3RvcmFnZSIsInNldEl0ZW0iLCJzdHJpbmdpZnkiLCJqc29uIiwiZ2V0SXRlbSIsInJlbW92ZUxvY2FseSIsInJlbW92ZUl0ZW0iLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpIiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJsb2ciLCJ1cGRhdGVBY2NvdW50TGluayIsImxpbmsiLCJzZWFyY2giLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRlY29kZVVSSSIsImdldENvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25sb2FkIiwib25lcnJvciIsInN0YXR1c1RleHQiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwic2V0U2Vzc2lvbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJ1cmxSZWRpcmVjdGlvbiIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsIm5vdyIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50IiwiaW5kZXhPZiJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1CLEVBQUU7UUFDckk7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwyQkFBMkIsMEJBQTBCLEVBQUU7UUFDdkQsaUNBQWlDLGVBQWU7UUFDaEQ7UUFDQTtRQUNBOztRQUVBO1FBQ0Esc0RBQXNELCtEQUErRDs7UUFFckg7UUFDQTs7O1FBR0E7UUFDQTs7Ozs7Ozs7Ozs7Ozs7OztBQ2xGQSxJQUFNQSxLQUFLLEdBQUdDLG1CQUFPLENBQUMsbUNBQUQsQ0FBckI7O0FBQ0EsSUFBTUMsY0FB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RCxxQkFBRyxDQUFDd0QsT0FBSixHQUFjO0FBQUEsMkJBQU1GLE1BQU0sQ0FBQ3RELEdBQUcsQ0FBQ3lELFVBQUwsQ0FBWjtBQUFBLG1CQUFkOztBQUNBekQscUJBQUcsQ0FBQ2dCLElBQUo7QUFDSDtBQUNKO0FBQ0osYUF0RU0sQ0FGaUI7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsR0FBSDs7QUFBQSxrQkFBWi9CLFlBQVk7QUFBQTtBQUFBO0FBQUEsR0FBbEIsQyxDQTBFUDs7QUFDQSxJQUFNK0YsWUFBWSxHQUFHLFNBQWZBLFlBQWUsQ0FBQ0gsY0FBRCxFQUFpQnpGLE9BQWpCLEVBQTBCMEYsU0FBMUIsRUFDckI7QUFDSSxNQUFHLENBQUN4SywyREFBTyxDQUFDOEUsT0FBRCxDQUFYLEVBQ0lELG9FQUFVLENBQUMsU0FBRCxFQUFZQyxPQUFaLENBQVY7QUFDSixNQUFHLENBQUM5RSwyREFBTyxDQUFDd0ssU0FBRCxDQUFYLEVBQ0kzRixvRUFBVSxDQUFDLEtBQUQsRUFBUTJGLFNBQVIsQ0FBVjtBQUNKLE1BQUcsQ0FBQ3hLLDJEQUFPLENBQUN1SyxjQUFELENBQVgsRUFDSW5GLE1BQU0sQ0FBQ0MsUUFBUCxDQUFnQkMsTUFBaEIsQ0FBdUJpRixjQUF2QjtBQUNQLENBUkQsQyIsImZpbGUiOiIuL0pTL3N1YnNjcmliZVZhbGlkYXRpb24uYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvc3Vic2NyaWJlVmFsaWRhdGlvbi5qc1wiKTtcbiIsImNvbnN0IHVzZXJzID0gcmVxdWlyZShcIi4vdXNlcnNcIik7XG5jb25zdCBxdWVzdGlvbm5haXJlcyA9IHJlcXVpcmUoXCIuL3F1ZXN0aW9ubmFpcmVzXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9hcGlcIixcbiAgICBzaXRlVXJsOiBcImh0dHA6Ly9sb2NhbGhvc3Q6ODA4MFwiLFxuICAgIGFkbWluTmFtZTogXCJGYWJyaWNlXCIsXG4gICAgYWRtaW5FbWFpbDogXCJkZXZAd2lraWxlcm5pLmNvbVwiLFxuICAgIHNlbmRlck5hbWU6IFwiV2lraUxlcm5pIChsb2NhbClcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJ3aWtpbGVybmlcIiwgLy8gbGUgdGjDqG1lIHV0aWxpc8OpIChkYW5zIC92aWV3cykgcG91ciBnw6luw6lyZXIgbGVzIHBhZ2VzIEhUTUwuIENvbnRpZW50IHNlcyBwcm9wcmVzIGZpY2hpZXJzIGRlIGNvbmZpZ3VyYXRpb24uXG4gICAgYXZhaWxhYmxlTGFuZ3M6IFtcImZyXCJdLC8vIExhbmd1YWdlcyBpbiB3aGljaCB0aGUgc2l0ZSBpcyBhdmFpbGFibGUuIFRoZSBmaXJzdCBvbmUgaXMgdGhlIGRlZmF1bHQgb25lLlxuICAgIHNpdGVOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgYmVnaW5Db2RlR29kZmF0aGVyOiBcIldMXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCxcbiAgICBhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBpbmFjdGl2ZUFjY291bnRUaW1lVG9EZWxldGVJbkRheXM6IDE4MCxcbiAgICAvLyBRdWVzdGlvbm5haXJlczpcbiAgICBuYlF1ZXN0aW9uc01pbjogMSwgLy8gbWluaW11bSBudW1iZXIgb2YgcXVlc3Rpb25zIGZvciB0aGUgcXVlc3Rpb25uYWlyZSB0byBiZSBwdWJsaXNoYWJsZVxuICAgIG5iUXVlc3Rpb25zTWF4OiAyLCAvLyBpZiAwID0gbm90IG1heGltdW1cbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iTmV3UXVlc3Rpb25uYWlyZXM6IDEwLC8vIGZvciBSU1MsIGV0Yy5cbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVCZWdpbjoxLCAvLyBpbiB1c2VyIGxvY2FsIHRpbWVcbiAgICBob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQ6MjQsIC8vIGlkZW1cbiAgICBudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZTogNTAsIC8vIGZvciBtYXNzIG1haWxpbmdcbiAgICBtaW5TZWFyY2hRdWVzdGlvbm5haXJlczogMyxcbiAgICAvLyBJbGx1c3RyYXRpb25zOlxuICAgIG5iSWxsdXN0cmF0aW9uc01pbjogMCxcbiAgICBuYklsbHVzdHJhdGlvbnNNYXg6IDEsXG4gICAgbWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQ6IDEwMDAwMDAsLy8gcGFzIGNvbnRyw7Rsw6kgcG91ciBsJ2luc3RhbnQuIMOAIHJldm9pci5cbiAgICBtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb246IFsgXCJpbWFnZS9qcGdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2UvcG5nXCIsIFwiaW1hZ2UvZ2lmXCIsIFwiaW1hZ2UvcG5nXCIgXSxcbiAgICAvLyAtLSBVcGxvYWQgYW5kIHJlc2l6ZTpcbiAgICBpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4OiA0MDAsXG4gICAgaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHg6IDIwMCxcbiAgICAvLyBMaW5rczpcbiAgICBuYkxpbmtzTWluOiAxLFxuICAgIG5iTGlua3NNYXg6IDEsXG4gICAgLy8gw6Agc3VwcHJpbWVyIHF1YW5kIHRvdXMgbGVzIFwicmVxdWlyZVwiIMOgIGpvdXI6XG4gICAgbmJRdWVzdGlvbnNNaW46IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWluLFxuICAgIG5iUXVlc3Rpb25zTWF4OiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01heCxcbiAgICBuYkNob2ljZXNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iQ2hvaWNlc01heCxcbiAgICBwYXNzd29yZE1pbkxlbmd0aDogdXNlcnMucGFzc3dvcmQubWlubGVuZ3RoLFxuICAgIGRpckNhY2hlVXNlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnMsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnM6IHVzZXJzLmRpckNhY2hlVXNlcnNBbnN3ZXJzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbnM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlUXVlc3Rpb25zLFxuICAgIGRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckhUTUxRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJIVE1MUXVlc3Rpb25uYWlyZSxcbiAgICBkaXJXZWJRdWVzdGlvbm5haXJlOiBxdWVzdGlvbm5haXJlcy5kaXJXZWJRdWVzdGlvbm5haXJlXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbnsgICAgXG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1ZXN0aW9ubmFpcmVcIixcbiAgICBnZXRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9nZXRcIixcbiAgICBwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcHJldmlld1wiLFxuICAgIHB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3F1aXovXCIsXG4gICAgc2F2ZUFuc3dlcnNSb3V0ZTogXCIvYW5zd2VyL1wiLFxuICAgIGdldFN0YXRzUXVlc3Rpb25uYWlyZXMgOiBcIi9zdGF0cy9cIixcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlc1JvdXRlIDogXCIvc2VhcmNoXCIsXG4gICAgZ2V0UmFuZG9tUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL2dldHJhbmRvbVwiLFxuICAgIHNlYXJjaEFkbWluUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaGFkbWluXCIsXG4gICAgZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlczogXCIvZ2V0bGlzdG5leHRxdWVzdGlvbm5haXJlcy9cIixcbiAgICByZWdlbmVyYXRlSFRNTDogXCIvaHRtbHJlZ2VuZXJhdGVkXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAwLFxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJUYWdzTWluOiAwLFxuICAgIG5iVGFnc01heDogMCwgLy8gMCA9IG5vdCBtYXggICAgXG4gICAgLy8gSlNPTiBhbmQgSFRNTCBkaXJcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy9xdWVzdGlvbnNcIixcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzXCIsXG4gICAgZGlyQ2FjaGVUYWdzIDogXCJkYXRhcy9xdWVzdGlvbm5haXJlcy90YWdzXCIsICBcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZSA6IFwiZnJvbnQvcHVibGljL3F1aXpcIixcbiAgICBkaXJIVE1MVGFncyA6IFwiZnJvbnQvcHVibGljL3F1aXpzXCIsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZSA6IFwicXVpelwiLC8vcG91ciB1cmwgcGFnZVxuICAgIGRpcldlYlRhZ3MgOiBcInF1aXpzXCIsLy8gaWRlbVxuICAgIG5iUmFuZG9tUmVzdWx0cyA6IDMvLyBsaW1pdGUgbGVzIHLDqXN1bHRhdCBkdSBtb3RldXIgZGUgcmVjaGVyY2hlIHF1YW5kIGRlbWFuZGUgZGUgcsOpc3VsdGF0cyBhdSBoYXNhcmRcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICB1c2VyUm91dGVzOiBcIi91c2VyXCIsXG4gICAgc3Vic2NyaWJlUm91dGU6IFwiL3NpZ251cFwiLFxuICAgIGdldEdvZGZhdGhlclJvdXRlOiBcIi9nZXRnb2RmYXRoZXJpZFwiLFxuICAgIGNoZWNrSWZJc0VtYWlsZnJlZVJvdXRlOiBcIi9pc2VtYWlsZnJlZVwiLFxuICAgIGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZTogXCIvdmFsaWRhdGlvbi9cIixcbiAgICBjaGVja0xvZ2luUm91dGU6IFwiL2NoZWNrbG9naW4vXCIsXG4gICAgY29ubmVjdGlvblJvdXRlOiBcIi9sb2dpblwiLFxuICAgIGdldExvZ2luTGlua1JvdXRlOiBcIi9nZXRsb2dpbmxpbmtcIixcbiAgICBjb25uZWN0aW9uV2l0aExpbmtSb3V0ZTogXCIvY2hlY2tsb2dpbmxpbmtcIixcbiAgICBnZXRVc2VySW5mb3M6IFwiL2dldC9cIixcbiAgICBjcmVhdGVVc2VyUm91dGU6IFwiL2NyZWF0ZVwiLFxuICAgIHZhbGlkYXRlVXNlclJvdXRlOiBcIi92YWxpZGF0ZS9cIixcbiAgICB1cGRhdGVVc2VySW5mb3M6IFwiL21vZGlmeS9cIixcbiAgICBzZWFyY2hVc2VyUm91dGU6IFwiL3NlYXJjaC9cIixcbiAgICBnZXRHb2RDaGlsZHM6IFwiL2dldGdvZGNoaWxkcy9cIixcbiAgICBjaGVja05ld0xvZ2luTGlua1JvdXRlOiBcIi9jb25maXJtbmV3bG9naW4vXCIsXG4gICAgY2hlY2tEZWxldGVMaW5rUm91dGU6IFwiL2NvbmZpcm1kZWxldGUvXCIsXG4gICAgZ2V0UGF5bWVudHM6IFwiL3BheW1lbnQvZ2V0Zm9yb25ldXNlci9cIixcbiAgICB1bnN1YnNjcmliZVJvdXRlOiBcIi9zdWJzY3JpcHRpb24vc3RvcC9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIG5hbWU6IHsgbWF4bGVuZ3RoOiA3MCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBlbWFpbDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiwgcmVxdWlyZWQ6IHRydWUgfSwgLy8gaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYmNyeXB0I3NlY3VyaXR5LWlzc3Vlcy1hbmQtY29uY2VybnNcbiAgICBuZXdQYXNzd29yZDogeyBtaW5sZW5ndGg6IDgsIG1heGxlbmd0aDo3MiB9LFxuICAgIGNvZGVHb2RmYXRoZXI6IHsgbWF4bGVuZ3RoOiAyNTUgfSxcbiAgICBjZ3VPazogeyB2YWx1ZTogXCJ0cnVlXCIsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGltZURpZmZlcmVuY2VNaW46IC03MjAsXG4gICAgdGltZURpZmZlcmVuY2VNYXg6ODQwLFxuICAgIC8vIEpTT04gZGlyXG4gICAgZGlyQ2FjaGVVc2VycyA6IFwiZGF0YXMvdXNlcnNcIixcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VycyA6IFwiZGF0YXMvdXNlcnMvcXVlc3Rpb25uYWlyZXMvYW5zd2Vyc1wiXG59O1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogV2lraXDDqWRpYSBlbiBxdWVzdGlvbnNcIixcbiAgICBzaXRlTWV0YURlc2NyaXB0aW9uIDogXCJBdmVjIFdpa2lMZXJuaSwgcmVjZXZleiBjaGFxdWUgam91ciBkZSBub3V2ZWF1eCBxdWl6cyBwb3VyIHRlc3RlciB2b3MgY29ubmFpc3NhbmNlcyBldCBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3Nlcy5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGFsZXJ0TmV3V2luZG93OiBcIm5vdXZlbGxlIGZlbsOqdHJlXCIsXG4gICAgYnRuTGlua1RvUXVlc3Rpb25uYWlyZSA6IFwiQWxsZXIgYXUgcXVpeiAhXCIsXG4gICAgc3RhdHNBZG1pbiA6IFwiRHVyYW50IGxlcyBkZXJuacOocmVzIDI0aCA6IE5CX1VTRVJTXzI0SCBjb21wdGVzIG9udCDDqXTDqSBjcsOpw6lzLCBOQl9TVUJTQ1JJUFRJT05TXzI0SCB2YWxpZMOpcyBldCBOQl9VU0VSU19ERUxFVEVEXzI0SCBzdXBwcmltw6lzLiBOQl9BTlNXRVJTXzI0SCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5FbiB0b3V0LCBpbCB5IGEgOiBOQl9VU0VSU19UT1QgY29tcHRlcywgZG9udCBOQl9TVUJTQ1JJUFRJT05TX1RPVCB2YWxpZMOpcyBldCBOQl9TVUJTQ1JJUFRJT05TX1BSRU1JVU0gY29tcHRlcyBwcsOpbWl1bS4gTkJfQU5TV0VSU19UT1QgcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+UGFybWkgbGVzIE5CX1VTRVJTX0RFTEVURURfVE9UIGNvbXB0ZXMgc3VwcHJpbcOpcywgTkJfVVNFUlNfREVMRVRFRF9WQUxJREVEIGF2YWllbnQgdmFsaWTDqSBsZXVyIGNvbXB0ZSBldCBOQl9VU0VSU19ERUxFVEVEX1BSRU1JVU0gYXZhaWVudCBzb3VzY3JpdCB1biBjb21wdGUgcHLDqW1pdW0uXCJcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIG5vdEZvdW5kOiBcIkwndXRpbGlzYXRldXIgbidhIHBhcyDDqXTDqSB0cm91dsOpLlwiLFxuICAgIG5lZWROYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIuXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdOYW1lOiBcIk1lcmNpIGRlIGNob2lzaXIgdW4gbm9tIGQndXRpbGlzYXRldXIgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgNzAgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZEVtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB2b3RyZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBuZWVkVW5pcXVlRW1haWw6IFwiTCdhZHJlc3NlIGUtbWFpbCBxdWUgdm91cyBhdmV6IHNhaXNpZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwYXIgdW4gYXV0cmUgdXRpbGlzYXRldXIuIFNpIHZvdXMgYXZleiBkw6lqw6AgdW4gY29tcHRlLCA8YSBocmVmPScvI1VSTCc+Y2xpcXVlei1pY2kgcG91ciB2b3VzIGNvbm5lY3RlcjwvYT4uXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdW5lIGFkcmVzc2UgZS1tYWlsIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDI1NSBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlLlwiLFxuICAgIG5lZWRMb25nUGFzc1dvcmQgOiBcIk1lcmNpIGRlIGZvdXJuaXIgdW4gbW90IGRlIHBhc3NlIGQnYXUgbW9pbnMgTUlOX0xFTkdUSCBjYXJhY3TDqHJlcy5cIixcbiAgICBwYXNzd29yZENvcGllZDogXCJMZSBtb3QgZGUgcGFzc2UgZ8OpbsOpcsOpIGEgw6l0w6kgY29wacOpIGRhbnMgdm90cmUgcHJlc3NlLXBhcGllci4gVm91cyBwb3V2ZXogbGUgcmVjb3BpZXIgKEN0cmwrVikgb8O5IHZvdXMgbGUgc291aGFpdGV6LlwiLFxuICAgIG5lZWRTdGF0dXMgOiBcIklsIG1hbnF1ZSBsZSBzdGF0dXQuXCIsXG4gICAgbmVlZExhbmd1YWdlIDogXCJJbCBtYW5xdWUgbGUgY29kZSBsYW5ndWUuXCIsXG4gICAgbmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIDogXCJMYSBkYXRlIGRlIGRlcm5pw6hyZSBjb25uZXhpb24gbidlc3QgcGFzIHZhbGlkZS5cIixcbiAgICBuZWVkU01UUCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkU01UUE5vdEZvdW5kIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRLbm93TmV3c2xldHRlck9rIDogXCJJbCBmYXV0IHNhdm9pciBzaSBsJ3V0aWxpc2F0ZXVyIGFjY2VwdGUgb3UgcmVmdXNlIGRlIHJlY2V2b2lyIGxhIG5ld3NsZXR0ZXIuXCIsXG4gICAgbmVlZFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGNvbm5hw650cmUgbGUgbm9tYnJlIGRlIG1pbnV0ZXMgZHUgZMOpY2FsYWdlIGhvcmFpcmUuXCIsXG4gICAgbmVlZE1pblRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgZW5sZXZlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA3MjAuXCIsXG4gICAgbmVlZE1heFRpbWVEaWZmZXJlbmNlIDogXCJJbCBmYXV0IGZvdXJuaXIgdW4gbm9tYnJlIGRlIG1pbnV0ZXMgw6AgYWpvdXRlciDDoCBsJ2hldXJlIEdNVCBuZSBkw6lwYXNzYW50IHBhcyA4NDAuXCIsXG4gICAgbmVlZFVHQ09rIDogXCJWb3VzIGRldmV6IGFjY2VwdGVyIGxlcyBDR1UgcG91ciBwb3V2b2lyIGNyw6llciB2b3RyZSBjb21wdGUuIFwiLFxuICAgIGdvZGZhdGhlck5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIG4nYSDDqXTDqSB0cm91dsOpIHBvdXIgY2UgY29kZSBwYXJyYWluLlwiLFxuICAgIGdvZGZhdGhlckZvdW5kOiBcIlZvdHJlIHBhcnJhaW4gYSBiaWVuIMOpdMOpIHRyb3V2w6kgIVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBpbnNjcmlwdGlvbiBlc3QgYmllbiBlbnJlZ2lzdHLDqWUuXFxuUG91ciBsYSBmaW5hbGlzZXIsIG1lcmNpIGRlIGNsaXF1ZXIgZGFucyBsZXMgMjRIIHN1ciBsZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvblwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1R4dCA6IFwiVmFsaWRlciBtb24gY29tcHRlLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24sIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gY2ktZGVzc291cyBkYW5zIGxlcyAyNGguPC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICE8YnI+Vm91cyBwb3V2ZXogc2FucyB0YXJkZXIgdm91cyBjb25uZWN0ZXIgY2ktZGVzc291cyBwb3VyIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxXZWxjb21lQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgIVxcblxcblNpIHZvdXMgYXZleiBsYSBtb2luZHJlIHF1ZXN0aW9uIG91IHN1Z2dlc3Rpb24gY29uY2VybmFudCBOT01fU0lURSwgbidow6lzaXRleiBwYXMgw6AgbWUgY29udGFjdGVyIGVuIMOpY3JpdmFudCDDoCBFTUFJTC5cXG5cXG5KZSB2b3VzIGNvbnNlaWxsZSBkJ2FpbGxldXJzIGQnYWpvdXRlciBFTUFJTCDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGR1IHNpdGUgbidhcnJpdmVudCBlbiBcXFwic3BhbVxcXCIuXFxuXFxuUGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci5cXG5cXG5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIHN1aXZhbnQgOiBMSU5LX1VSTFxcblxcbkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3VzIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPjxicj5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgPGI+RU1BSUw8L2I+Ljxicj48YnI+SmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgPGI+RU1BSUw8L2I+IMOgIHZvdHJlIGNhcm5ldCBkJ2FkcmVzc2VzIHBvdXIgw6l2aXRlciBxdWUgbGVzIHByb2NoYWlucyBlbnZvaXMgZHUgc2l0ZSBuJ2Fycml2ZW50IGVuIDxpPnNwYW08L2k+Ljxicj48YnI+UGFyIGFpbGxldXJzLCBwb3VyIGfDqXJlciB2b3RyZSBhYm9ubmVtZW50LCBhY2PDqWRlciDDoCB2b3MgaW5mb3JtYXRpb25zIG91IGVuY29yZSBjaGVyY2hlciBwbHVzIGZhY2lsZW1lbnQgcGFybWkgbGVzIHF1aXpzIGR1IHNpdGUsIHZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSB1dGlsaXNhdGV1ci48YnI+PGJyPlBvdXIgY2UgZmFpcmUsIHV0aWxpc2V6IGxlIGxpZW4gY2ktZGVzc291cy48YnI+PGJyPkVuY29yZSBtZXJjaSBldCDDoCBiaWVudMO0dC5cIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IDogXCJNZXJjaSAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyTGlua1R4dCA6IFwiTWUgY29ubmVjdGVyIMOgIG1vbiBjb21wdGUuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuR3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS48L3A+PHA+TWVyY2kgZXQgw6AgYmllbnTDtHQgITwvcD5cIixcbiAgICBiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBjb25maXJtYXRpb24gbmUgc2VtYmxlIHBhcyB2YWxpZGUgb3UgYmllbiBpbCBhIGV4cGlyw6kuIFZvdXMgcG91dmV6IGVuIHJlY2V2b2lyIHVuIG5vdXZlYXUgPGEgaHJlZj0nI1VSTCc+ZW4gY2xpcXVhbnQgaWNpPC9hPi5cIixcbiAgICBlbWFpbE5vdEZvdW5kOiBcIkF1Y3VuIHV0aWxpc2F0ZXVyIHRyb3V2w6kgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC5cIixcbiAgICBhbHJlYWR5Q29ubmVjdGVkOiBcIlZvdXMgw6p0ZXMgZMOpasOgIGNvbm5lY3TDqShlKSBhdSBzaXRlICFcIixcbiAgICBuZWVkQmVDb25uZWN0ZWQ6IFwiVm91cyBkZXZleiDDqnRyZSBjb25uZWN0w6koZSkgcG91ciBhY2PDqWRlciDDoCBjZXR0ZSBwYWdlLlwiLFxuICAgIGNvbm5lY3Rpb25PazogXCJDb25uZXhpb24gcsOpdXNzaWUuXCIsXG4gICAgbmVlZENob29zZUxvZ2luV2F5OiBcIlZvdXMgZGV2ZXogc29pdCBzYWlzaXIgdm90cmUgbW90IGRlIHBhc3NlLCBzb2l0IGNvY2hlciBsYSBjYXNlIHZvdXMgcGVybWV0dGFudCBkZSByZWNldm9pciB1biBsaWVuIGRlIGNvbm5leGlvbiBwYXIgZS1tYWlsLlwiLFxuICAgIG5lZWRWYWxpZGF0aW9uVG9Mb2dpbiA6IFwiVm91cyBkZXZleiBkJ2Fib3JkIHZhbGlkZXIgdm90cmUgY29tcHRlIGF2YW50IGRlIHZvdXMgY29ubmVjdGVyLiBQb3VyIGNlIGZhaXJlLCB1biBsaWVuIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIHRvb01hbnlMb2dpbkZhaWxzIDogXCJUcm9wIGRlIHRlbnRhdGl2ZXMgZGUgY29ubmV4aW9uIGluZnJ1Y3R1ZXVzZXMgcG91ciBjZXR0ZSBhZHJlc3NlIGUtbWFpbC4gVm91cyBkZXZleiBhdHRlbmRyZSBNSU5VVEVTIG1pbnV0ZXMgcG91ciBlc3NheWVyIGRlIG5vdXZlYXUuXCIsXG4gICAgYmFkUGFzc3dvcmQ6IFwiTGUgbW90IGRlIHBhc3NlIG4nZXN0IHBhcyBsZSBib24uXCIsXG4gICAgbWFpbExvZ2luTGlua1N1YmplY3QgOiBcIlZvdHJlIGxpZW4gZGUgY29ubmV4aW9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtUeHQgOiBcIk1lIGNvbm5lY3Rlci5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsTG9naW5MaW5rQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1biBmb3JtYXQgY29ycmVjdC5cIixcbiAgICB1cGRhdGVkTmVlZFVuaXF1ZUVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIHNhaXNpZSAoTkVXX0VNQUlMKSBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llLCBjYXIgZWxsZSBlc3QgZMOpasOgIHV0aWxpc8OpZSBwb3VyIHVuIGF1dHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5TdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luTGlua1R4dCA6IFwiVmFsaWRlci5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rVHh0IDogXCJDb25maXJtZXIuXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciBjb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxEZWxldGVMaW5rTWVzc2FnZTogXCJWb3RyZSBkZW1hbmRlIGRlIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuIE1lcmNpIGRlIGNsaXF1ZXIgc2FucyB0YXJkZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsIHBvdXIgY29uZmlybWVyLlwiLFxuICAgIGRlbGV0ZU9rTWVzc2FnZTogXCJMJ3V0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuXCIsXG4gICAgZGVsZXRlRmFpbE1lc3NhZ2U6IFwiVGVudGF0aXZlIGRlIHN1cHByZXNzaW9uIGQndW4gdXRpbGlzYXRldXIgaW5leGlzdGFudCA6IFwiLFxuICAgIG1haWxEZWxldGVMaW5rT2tNZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLiBNZXJjaSBkJ2F2b2lyIHV0aWxpc8OpIG5vcyBzZXJ2aWNlcy5cIixcbiAgICBtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua0ZhaWxNZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgc3VwcHJlc3Npb24gbidlc3QgcGFzIHZhbGlkZSBvdSBhbG9ycyBpbCBuJ2VzdCBwbHVzIHZhbGFibGUuXCIsXG4gICAgY3JvbkRlbGV0ZVVudmFsaWRlZFVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgbm9uIHZhbGlkw6lzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIGRlbGV0ZUluYWN0aXZlVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBpbmFjdGlmcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICB3ZWxjb21lTWVzc2FnZTogXCJCaWVudmVudWUgI05BTUUgIVwiLFxuICAgIGJ5ZWJ5ZU1lc3NhZ2U6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgZMOpY29ubmV4aW9uIHMnZXN0IGJpZW4gZMOpcm91bMOpZS48YnI+w4AgYmllbnTDtHQgIVwiLFxuICAgIGluZm9zVXNlckZvckFkbWluOiBcIkNldCB1dGlsaXNhdGV1ciAoaWQ6IElEX1VTRVIpIGEgPGI+Y3LDqcOpIHNvbiBjb21wdGUgbGUgREFURV9DUkVBPC9iPiwgbGEgZGVybmnDqHJlIG1pc2Ugw6Agam91ciBkYXRhbnQgZHUgREFURV9VUERBVEUuPGJyPjxiPkRhdGUgZGUgc2EgZGVybmnDqHJlIGNvbm5leGlvbiA6IERBVEVfQ09OTkVDVElPTi48L2I+XCIsXG4gICAgaW5mb3NBZG1pbkdvZGZhdGhlcjogXCJDZXQgdXRpbGlzYXRldXIgYSDDqXTDqSBwYXJyYWluw6kgcGFyIFwiLFxuICAgIGluZm9zQWRtaW5OYkdvZENoaWxkczogXCJTZXMgI05CIGZpbGxldWlscyA6IFwiXG59OyIsIi8vIFF1ZWxxdWVzIGZvbmN0aW9ucyB1dGlsZXMgcG91ciBsZXMgY2hhw65uZXNcblxuY2xhc3MgVG9vbFxue1xuICAgIHN0YXRpYyBpc0VtcHR5KG15VmFyKVxuICAgIHtcbiAgICAgICAgaWYobXlWYXI9PT11bmRlZmluZWQgfHwgbXlWYXI9PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlWYXIrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlWYXI9bXlWYXIudHJpbSgpO1xuICAgICAgICAgICAgaWYobXlWYXI9PT1cIlwiKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBcbiAgICBzdGF0aWMgdHJpbUlmTm90TnVsbChteVN0cmluZylcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShteVN0cmluZykpXG4gICAgICAgICAgICBteVN0cmluZz1udWxsO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG5cbiAgICBzdGF0aWMgc2hvcnRlbklmTG9uZ2VyVGhhbihteVN0cmluZywgbWF4KVxuICAgIHtcbiAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gYXUgY2FzIG/DuSBjZWxhIG5lIHNlcmFpdCBwYXMgdW5lIGNoYcOubmUuLi5cbiAgICAgICBpZihteVN0cmluZy5sZW5ndGggPiBtYXgpXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy5zdWJzdHJpbmcoMCwgKG1heC0zKSkrXCIuLi5cIjtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzE1NjA0MTQwL3JlcGxhY2UtbXVsdGlwbGUtc3RyaW5ncy13aXRoLW11bHRpcGxlLW90aGVyLXN0cmluZ3NcbiAgICBzdGF0aWMgcmVwbGFjZUFsbChteVN0cmluZywgbWFwT2JqKVxuICAgIHtcbiAgICAgICAgY29uc3QgcmVwbGFjZUVsdHMgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKG1hcE9iaikuam9pbihcInxcIiksXCJnaVwiKTtcbiAgICAgICAgcmV0dXJuIG15U3RyaW5nLnJlcGxhY2UocmVwbGFjZUVsdHMsIChtYXRjaGVkKSA9PlxuICAgICAgICB7XG4gICAgICAgICAgICByZXR1cm4gbWFwT2JqW21hdGNoZWRdO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9mci9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9PYmpldHNfZ2xvYmF1eC9NYXRoL3JhbmRvbVxuICAgIHN0YXRpYyBnZXRSYW5kb21JbnQobWluLCBtYXgpXG4gICAge1xuICAgICAgICBtaW4gPSBNYXRoLmNlaWwobWluKTtcbiAgICAgICAgbWF4ID0gTWF0aC5mbG9vcihtYXgpO1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbikpICsgbWluO1xuICAgIH1cblxuICAgIC8vIMOgIGNvbXBsw6l0ZXIgOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYXRlX2Zvcm1hdF9ieV9jb3VudHJ5XG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZVN0cmluZywgbGFuZz1cImZyXCIpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkoZGF0ZVN0cmluZykpXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgbGV0IG15RGF0ZT1uZXcgRGF0ZShkYXRlU3RyaW5nKTtcbiAgICAgICAgbGV0IG15RGF5PW15RGF0ZS5nZXREYXRlKCkrXCJcIjtcbiAgICAgICAgaWYobXlEYXkubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15RGF5PVwiMFwiK215RGF5O1xuICAgICAgICBsZXQgbXlNb3VudGg9KG15RGF0ZS5nZXRNb250aCgpKzEpK1wiXCI7XG4gICAgICAgIGlmKG15TW91bnRoLmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteU1vdW50aD1cIjBcIitteU1vdW50aDtcbiAgICAgICAgbGV0IG15WWVhcj1teURhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgaWYobGFuZz09PVwiZnJcIilcbiAgICAgICAgICAgIHJldHVybiBteURheStcIi9cIitteU1vdW50aCtcIi9cIitteVllYXI7XG4gICAgICAgIGVsc2UgaWYgKGxhbmc9PT1cImZvcm1cIikvLyAyMDE0LTAyLTA5XG4gICAgICAgICAgICByZXR1cm4gbXlZZWFyK1wiLVwiK215TW91bnRoK1wiLVwiK215RGF5O1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXR1cm4gbXlNb3VudGgrXCIvXCIrbXlEYXkrXCIvXCIrbXlZZWFyO1xuICAgIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBUb29sOyIsInZhciBtYXAgPSB7XG5cdFwiLi9kZWZhdWx0L2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCIsXG5cdFwiLi93aWtpbGVybmkvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3Mvd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi92aWV3cyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC5qcyRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQWNjdWVpbFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXMgOlwiLFxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgaGVhZExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiUGFyY291cmlyXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9xdWl6cy9cIiwgaWQ6XCJpbmRleEhlYWRMaW5rXCIsIHRpdGxlOlwiTGVzIGRlcm5pZXJzIHF1aXpzXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNb24gY29tcHRlXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jb25uZXhpb24uaHRtbFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfVxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQmxvZ1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCJodHRwczovL2ZyYW1hc3BoZXJlLm9yZy9wZW9wbGUvN2U1NGI3YTBiNTMyMDEzODllZWYyYTAwMDAwNTM2MjVcIiwgdGl0bGU6XCJCbG9nIFdpa2lMZXJuaSBzdXIgZGlhc3BvcmEqXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDcsOpZGl0c1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY3JlZGl0cy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJNZW50aW9ucyBsw6lnYWxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvbWVudGlvbnMtbGVnYWxlcy5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiRG9ubsOpZXMgcGVyc29ubmVsbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9kb25uZWVzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNHViAmIENHVVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvQ0dWLUNHVS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfVxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNTaXRlSG9tZVBhZ2U6IDMsXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDksXG4gICAgbmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSA6IDMsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgdmFsaWRhdGlvbkxpbmtQYWdlIDogXCJ2YWxpZGF0aW9uLmh0bWw/dD1cIixcbiAgICBsb2dpbkxpbmtQYWdlIDogXCJsb2dpbi5odG1sP3Q9XCIsXG4gICAgbmV3TG9naW5MaW5rUGFnZSA6IFwibmV3bG9naW4uaHRtbD90PVwiLFxuICAgIGRlbGV0ZUxpbmtQYWdlIDogXCJhdXJldm9pci5odG1sP3Q9XCIsXG4gICAgc3RvcE1haWxQYWdlIDogXCJzdG9wLW1haWwuaHRtbD90PVwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgdXBkYXRlQWNjb3VudFBhZ2U6IFwibW9uLWNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBhYm91dFBhZ2U6IFwiYS1wcm9wb3MuaHRtbFwiLFxuICAgIGlsbHVzdHJhdGlvbkRpciA6IFwiL2ltZy9xdWl6cy9cIixcbiAgICBzaXRlU2xvZ2FuOiBcIkN1bHRpdm9ucyBub3RyZSBqYXJkaW4gIVwiLFxuICAgIGhvbWVQYWdlVHh0OiBcIlBhZ2UgZCdhY2N1ZWlsXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSwgdm91cyBhcHByZW5leiBjaGFxdWUgam91ciBkZSBub3V2ZWxsZXMgY2hvc2VzLjxicj5EZXMgYXJ0aWNsZXMgZGUgV2lraXDDqWRpYSBzb250IHPDqWxlY3Rpb25uw6lzIHBvdXIgdm91cyBldCBzb250IHN1aXZpcyBkJ3VuIHF1aXogdm91cyBwZXJtZXR0YW50IGRlIHRlc3RlciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudS48YnI+RGUgam91ciBlbiBqb3VyIGRlIG5vdXZlbGxlcyBncmFpbmVzIGRlIHNhdm9pciBzb250IGFpbnNpIHNlbcOpZXMgZGFucyB2b3RyZSBcXFwiamFyZGluXFxcIi5cIixcbiAgICBob21lVGl0bGUyOiBcIkxhIGN1bHR1cmUgZW4gbGliZXJ0w6lcIixcbiAgICBob21lUDI6IFwiVG91dCBjb21tZSBzdXIgV2lraXDDqWRpYSA8c3BhbiBjbGFzcz0ncG9zdHNjcmlwdHVtJz4oKik8L3NwYW4+LCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L3NwYW4+XCIsXG4gICAgaG9tZUJ0bkFib3V0VHh0OiBcIkVuIHNhdm9pciBwbHVzIHN1ciBXaWtpTGVybmkgIVwiLFxuICAgIGhvbWVCdG5TdWJzY3JpYmVUeHQ6IFwiVGVzdGVyIFdpa2lMZXJuaSBncmF0dWl0ZW1lbnQuXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+U3VpdmFudCBsZXMgcXVlc3Rpb25zLCB1bmUgb3UgcGx1c2lldXJzIHLDqXBvbnNlcyBwZXV2ZW50IMOqdHJlIGNvcnJlY3RlcyBldCBkb2l2ZW50IGRvbmMgw6p0cmUgY29jaMOpZXMuIDxiPkMnZXN0IHRvdWpvdXJzIGxlIGNvbnRlbnUgZGUgbCdhcnRpY2xlIFdpa2lww6lkaWEgcXVpIGZhaXQgZm9pIGNvbmNlcm5hbnQgbGVzIFxcXCJib25uZXNcXFwiIHLDqXBvbnNlczwvYj4uIE1haXMgbGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgcGV1dmVudCDDqXZvbHVlciwgZG9uYyBuJ2jDqXNpdGV6IHBhcyA8YSBocmVmPScvY29udGFjdC5odG1sJz7DoCBtZSBzaWduYWxlciB1bmUgZXJyZXVyPC9hPi48YnI+PGJyPlRvdXRlcyBsZXMgcsOpcG9uc2VzIHNlIHRyb3V2ZW50IGRhbnMgbCdhcnRpY2xlIHByb3Bvc8OpIMOgIGxhIGxlY3R1cmUuIDxiPlZvdXMgw6p0ZXMgaWNpIHBvdXIgYXBwcmVuZHJlIGRlIG5vdXZlbGxlcyBjaG9zZXMsIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudDwvYj4uPGJyPjxicj5RdWFuZCBsZSBzdWpldCBzJ3kgcHLDqnRlLCBuZSB2b3VzIMOpdG9ubmV6IHBhcyBzaSBjZXJ0YWluZXMgZGVzIHLDqXBvbnNlcyBwcm9wb3PDqWVzIHBldXZlbnQgw6p0cmUgdW4gcGV1IGTDqWNhbMOpZXMsIGFic3VyZGVzLi4uIE9uIHBldXQgYXBwcmVuZHJlIGF2ZWMgbGUgc291cmlyZSwgbm9uID8gOi0pPGJyPjxicj5VbmUgZm9pcyB2b3RyZSByw6lzdWx0YXQgb2J0ZW51LCBpbCB2b3VzIHNlcmEgcHJvcG9zw6kgZGUgY3LDqWVyIHVuIGNvbXB0ZSBwb3VyIGxlIHNhdXZlZ2FyZGVyLiBDZSBjb21wdGUgdm91cyBwZXJtZXR0cmEgZGUgPGI+dGVzdGVyIGRlIG5vdXZlYXUgY2UgcXVpejwvYj4gcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBHcsOiY2Ugw6AgY2UgY29tcHRlLCB2b3VzIHBvdXJyZXogYXVzc2kgPGI+cmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlYXV4IHF1aXpzPC9iPiBwb3VyIGNvbnRpbnVlciDDoCBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIi48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIG5ld3NMaXN0VGl0bGU6IFwiTGVzIGRlcm5pw6hyZXMgZ3JhaW5lcyBkZSBzYXZvaXJcIixcbiAgICB0YWdzTGlzdFR4dDogXCJQYXJjb3VyaXIgbGVzIHJ1YnJpcXVlc1wiLFxuICAgIG1haWxSZWNpcGllbnRUeHQ6IFwiTWVzc2FnZSBlbnZvecOpIMOgIDpcIixcbn07IiwiLy8gLS0gUEFHRSBQRVJNRVRUQU5UIERFIFZBTElERVIgTEEgQ1LDiUFUSU9OIERFIFNPTiBDT01QVEVcblxuLy8vIFVuIHRva2VuIGVzdCB0cmFuc21pcyBlbiBwYXJhbcOodHJlIGRlIGwnVXJsLiBJbCBhIHVuZSB2YWxpZGl0w6kgbGltaXTDqSBkYW5zIGxlIHRlbXBzLlxuLy8vIFNpIGxlIHRva2VuIG4nZXN0IHBhcy9wbHVzIHZhbGlkZSwgb24gcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ciB2ZXJzIGxhIHBhZ2UgZGUgY29ubmV4aW9uIHBvdXIgb2J0ZW5pciB1biBub3V2ZWF1IGxpZW4uXG4vLy8gU2kgbGUgdG9rZW4gZXN0IG9rLCBvbiBsJ2luZm9ybWUgcXVlIHRvdXQgZXN0IG9rIGV0IGx1aSBwcm9wb3NlIGRlIHNlIGNvbm5lY3Rlci5cbi8vLyBTaSBsJ3V0aWxpc2F0ZXVyIGEgZMOpasOgIHVuZSBzZXNzaW9uIGFjdGl2ZSB2YWxpZGUsIGMnZXN0IHF1J2lsIGEgZMOpasOgIGNsaXF1w6kgc3VyIGxlIGxpZW4uIE9uIGxlIHJlZGlyaWdlIHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWwuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiB0aXLDqXMgZHUgYmFja2VuZCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmltcG9ydCB7IGNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSwgdXNlclJvdXRlcyB9IGZyb20gXCIuLi8uLi9jb25maWcvdXNlcnMuanNcIjtcbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG4vLyBJbXBvcnRhdGlvbiBkZXMgZm9uY3Rpb25zIHV0aWxlcyBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vdG9vbHMvY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgYWRkRWxlbWVudCB9IGZyb20gXCIuL3Rvb2xzL2RvbS5qc1wiO1xuaW1wb3J0IHsgaGVsbG9EZXYgfSBmcm9tIFwiLi90b29scy9ldmVyeXdoZXJlLmpzXCI7XG5pbXBvcnQgeyBnZXRVcmxQYXJhbXMgfSBmcm9tIFwiLi90b29scy91cmwuanNcIjtcbmltcG9ydCB7IGNoZWNrU2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitsYW5nK1wiL3VzZXJcIik7XG5cbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcblxuY29uc3QgaW5pdGlhbGlzZSA9IGFzeW5jICgpID0+XG57XG4gICAgdHJ5XG4gICAge1xuICAgICAgICAvLyBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBkw6lqw6AgY29ubmVjdMOpLCBwYXMgbGEgcGVpbmUgZCdhbGxlciArIGxvaW4gOlxuICAgICAgICBjb25zdCBpc0Nvbm5lY3RlZD1hd2FpdCBjaGVja1Nlc3Npb24oKTtcbiAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgIHtcbiAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJtZXNzYWdlXCIsIHsgbWVzc2FnZTogdHh0VXNlcnMuYWxyZWFkeUNvbm5lY3RlZCwgY29sb3I6XCJpbmZvcm1hdGlvblwiIH0pO1xuICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgY29uc3QgaG9tZVBhZ2U9dXNlci5zdGF0dXMrXCJIb21lUGFnZVwiOy8vIGxvcnMgZGUgbGEgY3LDqWF0aW9uLCBzZXVsIGxlIHN0YXR1dCAndXNlclwiIGVzdCBwb3NzaWJsZVxuICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdUZW1wbGF0ZVtob21lUGFnZV0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgY29uc3QgZGF0YXM9Z2V0VXJsUGFyYW1zKCk7XG4gICAgICAgICAgICBpZihkYXRhcyAmJiBkYXRhcy50IT09dW5kZWZpbmVkKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZStkYXRhcy50KTtcbiAgICAgICAgICAgICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKVxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSBYTUxIdHRwUmVxdWVzdC5ET05FKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IDIwMCAmJiByZXNwb25zZS51c2VySWQgIT0gdW5kZWZpbmVkICYmIHJlc3BvbnNlLnRva2VuICE9IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLnZhbGlkYXRpb25NZXNzYWdlLCBjb2xvcjpcInN1Y2Nlc3NcIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKFwiL1wiK2NvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCh0aGlzLnN0YXR1cyA9PT0gMjAwIHx8IHRoaXMuc3RhdHVzID09PSA0MDQpICYmIHJlc3BvbnNlLmVycm9ycyAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzLmpvaW4oXCI8YnI+XCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5lcnJvcnMsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0VXNlcnMuYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ1RlbXBsYXRlLmNvbm5lY3Rpb25QYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7XG5oZWxsb0RldigpOyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/unsubscribe.app.js b/front/public/JS/unsubscribe.app.js index 4a27948..3f00f30 100644 --- a/front/public/JS/unsubscribe.app.js +++ b/front/public/JS/unsubscribe.app.js @@ -106,15 +106,15 @@ module.exports = (_module$exports = { siteUrl: "http://localhost:8080", adminName: "Fabrice", adminEmail: "dev@wikilerni.com", - senderName: "WikiLerni", + senderName: "WikiLerni (local)", senderEmail: "bonjour@wikilerni.com", adminLang: "fr", - theme: "default", + theme: "wikilerni", // le thème utilisé (dans /views) pour générer les pages HTML. Contient ses propres fichiers de configuration. availableLangs: ["fr"], // Languages in which the site is available. The first one is the default one. - siteName: "WikiLerni", - beginCodeGodfather: "wikilerni", + siteName: "WikiLerni (local)", + beginCodeGodfather: "WL", // case-sensitive and can't contain "@" ! cronTimingAlertInSeconde: 120, // for logs @@ -138,7 +138,7 @@ module.exports = (_module$exports = { // Questionnaires: nbQuestionsMin: 1, // minimum number of questions for the questionnaire to be publishable - nbQuestionsMax: 10, + nbQuestionsMax: 2, // if 0 = not maximum nbChoicesMax: 10, nbNewQuestionnaires: 10, @@ -182,8 +182,10 @@ module.exports = { saveAnswersRoute: "/answer/", getStatsQuestionnaires: "/stats/", searchQuestionnairesRoute: "/search", + getRandomQuestionnairesRoute: "/getrandom", searchAdminQuestionnairesRoute: "/searchadmin", getListNextQuestionnaires: "/getlistnextquestionnaires/", + regenerateHTML: "/htmlregenerated", // -- questions & choices : questionsRoute: "/question/", // -- tags : @@ -229,7 +231,7 @@ module.exports = { } }, nbQuestionsMin: 1, - nbQuestionsMax: 10, + nbQuestionsMax: 0, nbChoicesMax: 10, nbTagsMin: 0, nbTagsMax: 0, @@ -243,7 +245,9 @@ module.exports = { dirHTMLTags: "front/public/quizs", dirWebQuestionnaire: "quiz", //pour url page - dirWebTags: "quizs" // idem + dirWebTags: "quizs", + // idem + nbRandomResults: 3 // limite les résultat du moteur de recherche quand demande de résultats au hasard }; @@ -420,8 +424,8 @@ webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; /***/ (function(module, exports) { module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", + siteHTMLTitle: "WikiLerni : Wikipédia en questions", + siteMetaDescription: "Avec WikiLerni, recevez chaque jour de nouveaux quizs pour tester vos connaissances et apprendre de nouvelles choses.", scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", @@ -444,6 +448,7 @@ module.exports = { failAuthCron: "Tentative de lancement d'un cron sans le bon token.", previousPage: "Page précédente", nextPage: "Page suivante", + alertNewWindow: "nouvelle fenêtre", btnLinkToQuestionnaire: "Aller au quiz !", statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
    En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
    Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." }; @@ -468,17 +473,18 @@ module.exports = { unsubscriptionOk: "Votre demande a bien été prise en compte. Vous ne recevrez plus de messages venant du site, sauf pour vous signaler la fin de votre abonnement.
    N'hésitez pas à accéder à votre compte pour de nouveau autoriser certains envois.", unsubscriptionFail: "Si vous voyez ce message, c'est que votre lien de désabonnement ne fonctionne pas.
    Vous pouvez accéder à votre compte pour désactiver les envois manuellement.", allSubscriptionProcessed: "Tous les abonnés ont été traités pour le moment.", - mailNewQuestionnaireSubject: "Qu'allez-vous apprendre aujourd'hui ?", - mailNewQuestionnaireBodyTxt: "Bonjour USER_NAME,\n\nUn nouveau quiz vient de vous être proposé :\nQUESTIONNAIRE_URL\n\nBonne lecture !\n\nStopper les envois ?\nUNSUBSCRIBE_URL", - mailNewQuestionnaireBodyHTML: "

    Bonjour USER_NAME,

    MAIL_INTRODUCTION

    Stopper les envois.

    ", + mailStopMailLinkTxt: "Stopper les envois.", + mailNewQuestionnaireBodyTxt: "Bonjour USER_NAME,\n\nUn nouveau quiz vient de vous être proposé :\n\nQUESTIONNAIRE_URL\n\nBonne lecture !\n\nStopper les envois ?\nUNSUBSCRIBE_URL", noNewQuestionnaireForUser: "Aucun nouveau questionnaire trouvé pour un abonné : ", mailEndFreeTimeSubject: "Votre abonnement gratuit va expirer", - mailEndFreeTimeBodyTxt: "Bonjour USER_NAME,\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\nPour continuer à utiliser le site, vous pouvez souscrire à un abonnement dès aujourd'hui :\nLINK_URL", - mailEndFreeTimeBodyHTML: "

    Bonjour USER_NAME,

    Votre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours. Pour continuer à utiliser le site, vous pouvez souscrire à un abonnement dès aujourd'hui en cliquez ici sans tarder.

    ", + mailEndFreeTimeLinkTxt: "M'abonner.", + mailEndFreeTimeBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez sans attendre souscrire à un abonnement :\nLINK_URL", + mailEndFreeTimeBodyHTML: "

    Bonjour USER_NAME,

    Votre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.

    Pour continuer à utiliser le site, vous pouvez souscrire à un abonnement sans tarder en cliquant sur le lien ci-dessous.

    ", mailEndFreeTimeMessage: " relances envoyées.", mailExpirationSubject: "Votre abonnement va bientôt expirer", - mailExpirationBodyTxt: "Bonjour USER_NAME,\nVotre abonnement gratuit à SITE_NAME va expirer d'ici quelques jours.\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL", - mailExpirationBodyHTML: "

    Bonjour USER_NAME,

    Votre abonnement à SITE_NAME va expirer d'ici quelques jours.
    Pour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui en cliquant ici.

    ", + mailExpirationLinkTxt: "Prolonger mon abonnement.", + mailExpirationBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL", + mailExpirationBodyHTML: "

    Bonjour USER_NAME,

    Votre abonnement à SITE_NAME va expirer d'ici quelques jours.

    Pour continuer à utiliser SITE_NAME, vous pouvez le prolonger dès aujourd'hui en cliquant sur le lien ci-dessous.

    ", mailExpirationMessage: "FIRST premières et SECOND deuxièmes relances envoyées pour des abonnements expirant d'ici peu.", infosNbDays: "Votre abonnement est encore valable pendant NB_DAYS jours.
    Vous pouvez à tout moment prolonger votre abonnement en suivant les indications ci-dessous :", infosExpirated: "Votre abonnement a expiré, mais il vous reste encore quelques jours avant que votre compte et vos données ne soient complètement supprimées.
    Pour ce faire, suivez sans tarder les indications ci-dessous :", @@ -506,7 +512,7 @@ module.exports = { needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", needPassWord: "Merci de fournir un mot de passe.", needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", + passwordCopied: "Le mot de passe généré a été copié dans votre presse-papier. Vous pouvez le recopier (Ctrl+V) où vous le souhaitez.", needStatus: "Il manque le statut.", needLanguage: "Il manque le code langue.", needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", @@ -517,20 +523,23 @@ module.exports = { needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", + godfatherNotFound: "Aucun utilisateur n'a été trouvé pour ce code parrain.", godfatherFound: "Votre parrain a bien été trouvé !", mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

    Bonjour USER_NAME,

    Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

    Valider.

    ", + mailValidationLinkSubject: "Merci de valider votre inscription", + mailValidationLinkTxt: "Valider mon compte.", + mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre inscription, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", + mailValidationLinkSBodyHTML: "

    Bonjour USER_NAME,

    Pour valider votre inscription, merci de cliquer sur le lien ci-dessous dans les 24h.

    ", validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !
    Vous pouvez sans tarder vous connecter ci-dessous pour accéder à votre compte.", validationMessageAdmin: "Le compte a bien été validé.", validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

    Bonjour USER_NAME,

    Votre venez de valider votre inscription à NOM_SITE.

    Merci et à bientôt !

    ", + mailWelcomeLinkTxt: "Me connecter à mon compte.", + mailWelcomeBodyTxt: "Bonjour USER_NAME,\n\nVous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !\n\nSi vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.\n\nJe vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en \"spam\".\n\nPar ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.\n\nPour ce faire, utilisez le lien suivant : LINK_URL\n\nEncore merci et à bientôt.", + mailWelcomeBodyHTML: "

    Bonjour USER_NAME,

    Vous venez de valider votre inscription à NOM_SITE. Merci et bienvenue !

    Si vous avez la moindre question ou suggestion concernant NOM_SITE, n'hésitez pas à me contacter en écrivant à EMAIL.

    Je vous conseille d'ailleurs d'ajouter EMAIL à votre carnet d'adresses pour éviter que les prochains envois du site n'arrivent en spam.

    Par ailleurs, pour gérer votre abonnement, accéder à vos informations ou encore chercher plus facilement parmi les quizs du site, vous pouvez à tout moment vous connecter à votre compte utilisateur.

    Pour ce faire, utilisez le lien ci-dessous.

    Encore merci et à bientôt.", mailThankGodfatherSubject: "Merci !", + mailThankGodfatherLinkTxt: "Me connecter à mon compte.", mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", mailThankGodfatherBodyHTML: "

    Bonjour USER_NAME,

    Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

    Merci et à bientôt !

    ", badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", @@ -543,15 +552,17 @@ module.exports = { tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", badPassword: "Le mot de passe n'est pas le bon.", mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

    Bonjour USER_NAME,

    Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

    Valider.

    ", + mailLoginLinkTxt: "Me connecter.", + mailLoginLinkBodyTxt: "Bonjour USER_NAME,\n\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailLoginLinkBodyHTML: "

    Bonjour USER_NAME,

    Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

    ", mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", + updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas un format correct.", updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

    Bonjour USER_NAME,

    Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

    ", + mailUpdateLoginLinkTxt: "Valider.", + mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\n\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailUpdateLoginBodyHTML: "

    Bonjour USER_NAME,

    Pour valider vos nouveaux identifiants de connexion, cliquez sur le lien ci-dessous sans tarder.

    ", mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", @@ -559,8 +570,9 @@ module.exports = { updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

    Bonjour USER_NAME,

    Pour valider la suppression de votre compte, cliquez ici sans tarder.

    ", + mailDeleteLinkTxt: "Confirmer.", + mailDeleteBodyTxt: "Bonjour USER_NAME,\n\nPour confirmer la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", + mailDeleteBodyHTML: "

    Bonjour USER_NAME,

    Pour confirmer la suppression de votre compte, cliquez sur le lien ci-dessous sans tarder.

    ", mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", deleteOkMessage: "L'utilisateur a bien été supprimé.", deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", @@ -674,7 +686,8 @@ module.exports = Tool; /***/ (function(module, exports, __webpack_require__) { var map = { - "./default/config/fr.js": "../views/default/config/fr.js" + "./default/config/fr.js": "../views/default/config/fr.js", + "./wikilerni/config/fr.js": "../views/wikilerni/config/fr.js" }; @@ -715,7 +728,7 @@ module.exports = { }, { anchor: "Mon compte", attributes: { - href: "/connexion.hmt", + href: "/connexion.html", id: "accountHeadLink" } }, { @@ -778,7 +791,109 @@ module.exports = { newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", explanationTitle: "Vous découvrez WikiLerni ?", explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
    Puis vous afficher le quiz pour vérifier ce que vous en avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

    Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

    Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

    Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder.
    Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Et de recevoir régulièrement de nouvelles suggestions de lectures.

    Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", - noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript." + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + tagsListTxt: "Parcourir les rubriques :" +}; + +/***/ }), + +/***/ "../views/wikilerni/config/fr.js": +/*!***************************************!*\ + !*** ../views/wikilerni/config/fr.js ***! + \***************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = { + headLinks: [{ + anchor: "Contact", + attributes: { + href: "/contact.html", + rel: "nofollow" + } + }, { + anchor: "Parcourir", + attributes: { + href: "/quizs/", + id: "indexHeadLink", + title: "Les derniers quizs" + } + }, { + anchor: "Mon compte", + attributes: { + href: "/connexion.html", + id: "accountHeadLink" + } + }, { + anchor: "À propos", + attributes: { + href: "/a-propos.html" + } + }], + footLinks: [{ + anchor: "Blog", + attributes: { + href: "https://framasphere.org/people/7e54b7a0b53201389eef2a0000053625", + title: "Blog WikiLerni sur diaspora*" + } + }, { + anchor: "Crédits", + attributes: { + href: "/credits.html" + } + }, { + anchor: "Mentions légales", + attributes: { + href: "/mentions-legales.html", + rel: "nofollow" + } + }, { + anchor: "Données personnelles", + attributes: { + href: "/donnees.html" + } + }, { + anchor: "CGV & CGU", + attributes: { + href: "/CGV-CGU.html", + rel: "nofollow" + } + }], + maxQuestionnairesSiteHomePage: 3, + maxQuestionnairesByPage: 9, + nbQuestionnairesUserHomePage: 3, + userHomePage: "accueil.html", + adminHomePage: "admin.html", + managerHomePage: "gestion.html", + subscribePage: "inscription.html", + connectionPage: "connexion.html", + validationLinkPage: "validation.html?t=", + loginLinkPage: "login.html?t=", + newLoginLinkPage: "newlogin.html?t=", + deleteLinkPage: "aurevoir.html?t=", + stopMailPage: "stop-mail.html?t=", + accountPage: "compte.html", + updateAccountPage: "mon-compte.html", + questionnairesManagementPage: "gestion-quizs.html", + usersManagementPage: "gestion-utilisateurs.html", + aboutPage: "a-propos.html", + illustrationDir: "/img/quizs/", + siteSlogan: "Cultivons notre jardin !", + homePageTxt: "Page d'accueil", + homeTitle1: "De nature curieuse ?", + homeP1: "Avec WikiLerni, vous apprenez chaque jour de nouvelles choses.
    Des articles de Wikipédia sont sélectionnés pour vous et sont suivis d'un quiz vous permettant de tester ce que vous en avez retenu.
    De jour en jour de nouvelles graines de savoir sont ainsi semées dans votre \"jardin\".", + homeTitle2: "La culture en liberté", + homeP2: "Tout comme sur Wikipédia (*), le logiciel et le contenu partagé sur WikiLerni sont libres.
    Vous pouvez les utiliser, les modifier et les diffuser selon votre souhait.
    Sur WikiLerni, pas de publicité, ni de commercialisation de vos données personnelles.
    Vous pouvez venir y \"cultiver votre jardin\" en toute tranquillité.

    (*) Bien que partageant ses valeurs, WikiLerni est un projet indépendant de la fondation Wikipédia.", + homeBtnAboutTxt: "En savoir plus sur WikiLerni !", + homeBtnSubscribeTxt: "Tester WikiLerni gratuitement.", + newQuestionnairesTitle: "Les derniers quizs publiés sur WikiLerni", + newQuestionnairesIntro: "Liste des derniers quizs publiés sur WikiLerni.", + explanationTitle: "Vous découvrez WikiLerni ?", + explanationTxt: "Le principe est simple : vous commencez par lire l'article Wikipédia dont le lien vous est proposé.
    Puis vous afficher le quiz pour vérifier ce que vous avez retenu de votre lecture. Vous obtenez alors votre résultat immédiatement.

    Suivant les questions, une ou plusieurs réponses peuvent être correctes et doivent donc être cochées. C'est toujours le contenu de l'article Wikipédia qui fait foi concernant les \"bonnes\" réponses. Mais les articles de Wikipédia peuvent évoluer, donc n'hésitez pas à me signaler une erreur.

    Toutes les réponses se trouvent dans l'article proposé à la lecture. Vous êtes ici pour apprendre de nouvelles choses, mais libre à vous d'essayer d'y répondre immédiatement.

    Quand le sujet s'y prête, ne vous étonnez pas si certaines des réponses proposées peuvent être un peu décalées, absurdes... On peut apprendre avec le sourire, non ? :-)

    Une fois votre résultat obtenu, il vous sera proposé de créer un compte pour le sauvegarder. Ce compte vous permettra de tester de nouveau ce quiz pour vérifier ce que vous en avez retenu plusieurs jours, semaines, mois... Grâce à ce compte, vous pourrez aussi recevoir régulièrement de nouveaux quizs pour continuer à \"cultiver votre jardin\".

    Mais la création de ce compte est facultative et vous pouvez parcourir WikiLerni librement.", + noJSNotification: "Désolé, mais pour l'instant, l'utilisation de WikiLerni nécessite l'activation du JavaScript.", + newsListTitle: "Les dernières graines de savoir", + tagsListTxt: "Parcourir les rubriques", + mailRecipientTxt: "Message envoyé à :" }; /***/ }), @@ -872,7 +987,7 @@ __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "updateAccountLink", function() { return updateAccountLink; }); // Ce script fournit des fonctions utilisées sur toutes les pages du site var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); + console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et sera bientôt lisible sur Gitlab.\n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); return true; }; var updateAccountLink = function updateAccountLink(status, configTemplate) { @@ -984,7 +1099,8 @@ var getConfig = /*#__PURE__*/function () { }; }(); var getTimeDifference = function getTimeDifference() { - var timeLocal = new Date().getTimezoneOffset(); + // multiplier par -1, car c'est ce qu'il faut "ajouter" à l'heure UTC pour revenir en heure locale qui m'intéresse et non l'inverse + var timeLocal = new Date().getTimezoneOffset() * -1; if (timeLocal > _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMax"] || timeLocal < _config_users_js__WEBPACK_IMPORTED_MODULE_1__["timeDifferenceMin"]) return 0;else return timeLocal; }; // On enlève volontairement les 0/O pour éviter les confusions ! // Et mieux vaut aussi débuter et finir par une lettre simple. @@ -1072,13 +1188,13 @@ var checkSession = /*#__PURE__*/function () { user.name = response.name; user.language = response.language; user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API + user.status = response.status; // c'est le token qui sert à vérifier le statut à chaque requête à l'API Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_2__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate[lang].accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate[lang].accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? + var urlAccount = _config_instance_js__WEBPACK_IMPORTED_MODULE_0__["siteUrl"] + "/" + configTemplate.accountPage; + if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configTemplate.accountPage + "#subscribe"); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? resolve(true); } else { @@ -1232,4 +1348,4 @@ initialise(); /***/ }) /******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdW5zdWJzY3JpYmUuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRMaXN0TmV4dFF1ZXN0aW9ubmFpcmVzIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJuZWVkTnVtYmVyT2ZEYXlzIiwibmVlZEludGVnZXJOdW1iZXJPZkRheXMiLCJuZWVkTWluTnVtYmVyT2ZEYXlzIiwibmVlZE5vdFRvb0xvbmdEYXlzTGlzdCIsIm5lZWRWYWxpZERheXNMaXN0IiwibmVlZFVuaXF1ZURheXNMaXN0IiwibmVlZEtub3dJZk5vdGljZU9rIiwidW5zdWJzY3JpcHRpb25PayIsInVuc3Vic2NyaXB0aW9uRmFpbCIsImFsbFN1YnNjcmlwdGlvblByb2Nlc3NlZCIsIm1haWxOZXdRdWVzdGlvbm5haXJlU3ViamVjdCIsIm1haWxOZXdRdWVzdGlvbm5haXJlQm9keVR4dCIsIm1haWxOZXdRdWVzdGlvbm5haXJlQm9keUhUTUwiLCJub05ld1F1ZXN0aW9ubmFpcmVGb3JVc2VyIiwibWFpbEVuZEZyZWVUaW1lU3ViamVjdCIsIm1haWxFbmRGcmVlVGltZUJvZHlUeHQiLCJtYWlsRW5kRnJlZVRpbWVCb2R5SFRNTCIsIm1haWxFbmRGcmVlVGltZU1lc3NhZ2UiLCJtYWlsRXhwaXJhdGlvblN1YmplY3QiLCJtYWlsRXhwaXJhdGlvbkJvZHlUeHQiLCJtYWlsRXhwaXJhdGlvbkJvZHlIVE1MIiwibWFpbEV4cGlyYXRpb25NZXNzYWdlIiwiaW5mb3NOYkRheXMiLCJpbmZvc0V4cGlyYXRlZCIsImluZm9zTmJEYXlzQWRtaW4iLCJpbmZvc0V4cGlyYXRlZEFkbWluIiwiaXNOb3RWYWxpZGVkIiwiaW5mb3NQYXltZW50c0FkbWluIiwibm90Rm91bmQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZExhbmd1YWdlIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCIsImJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZSIsImVtYWlsTm90Rm91bmQiLCJhbHJlYWR5Q29ubmVjdGVkIiwibmVlZEJlQ29ubmVjdGVkIiwiY29ubmVjdGlvbk9rIiwibmVlZENob29zZUxvZ2luV2F5IiwibmVlZFZhbGlkYXRpb25Ub0xvZ2luIiwidG9vTWFueUxvZ2luRmFpbHMiLCJiYWRQYXNzd29yZCIsIm1haWxMb2dpbkxpbmtTdWJqZWN0IiwibWFpbExvZ2luTGlua0JvZHlUeHQiLCJtYWlsTG9naW5MaW5rQm9keUhUTUwiLCJtYWlsTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWRPa01lc3NhZ2UiLCJ1cGRhdGVkTmVlZEdvb2RFbWFpbCIsInVwZGF0ZWROZWVkVW5pcXVlRW1haWwiLCJtYWlsVXBkYXRlTG9naW5TdWJqZWN0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUJvZHlUeHQiLCJtYWlsRGVsZXRlQm9keUhUTUwiLCJtYWlsRGVsZXRlTGlua01lc3NhZ2UiLCJkZWxldGVGYWlsTWVzc2FnZSIsIm1haWxEZWxldGVMaW5rT2tNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZSIsIm1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2UiLCJjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlIiwiZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2UiLCJ3ZWxjb21lTWVzc2FnZSIsImJ5ZWJ5ZU1lc3NhZ2UiLCJpbmZvc1VzZXJGb3JBZG1pbiIsImluZm9zQWRtaW5Hb2RmYXRoZXIiLCJpbmZvc0FkbWluTmJHb2RDaGlsZHMiLCJUb29sIiwibXlWYXIiLCJ1bmRlZmluZWQiLCJ0cmltIiwibXlTdHJpbmciLCJpc0VtcHR5IiwibWF4IiwibGVuZ3RoIiwic3Vic3RyaW5nIiwibWFwT2JqIiwicmVwbGFjZUVsdHMiLCJSZWdFeHAiLCJPYmplY3QiLCJrZXlzIiwiam9pbiIsInJlcGxhY2UiLCJtYXRjaGVkIiwiTWF0aCIsImNlaWwiLCJmbG9vciIsInJhbmRvbSIsImRhdGVTdHJpbmciLCJsYW5nIiwibXlEYXRlIiwiRGF0ZSIsIm15RGF5IiwiZ2V0RGF0ZSIsIm15TW91bnRoIiwiZ2V0TW9udGgiLCJteVllYXIiLCJnZXRGdWxsWWVhciIsImhlYWRMaW5rcyIsImFuY2hvciIsImF0dHJpYnV0ZXMiLCJocmVmIiwiaWQiLCJmb290TGlua3MiLCJyZWwiLCJtYXhRdWVzdGlvbm5haXJlc0J5UGFnZSIsInVzZXJIb21lUGFnZSIsImFkbWluSG9tZVBhZ2UiLCJtYW5hZ2VySG9tZVBhZ2UiLCJzdWJzY3JpYmVQYWdlIiwiY29ubmVjdGlvblBhZ2UiLCJhY2NvdW50UGFnZSIsInF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2UiLCJ1c2Vyc01hbmFnZW1lbnRQYWdlIiwibmJRdWVzdGlvbm5haXJlc1VzZXJIb21lUGFnZSIsImlsbHVzdHJhdGlvbkRpciIsInNpdGVTbG9nYW4iLCJob21lVGl0bGUxIiwiaG9tZVAxIiwiaG9tZVRpdGxlMiIsImhvbWVQMiIsIm5ld1F1ZXN0aW9ubmFpcmVzVGl0bGUiLCJuZXdRdWVzdGlvbm5haXJlc0ludHJvIiwiZXhwbGFuYXRpb25UaXRsZSIsImV4cGxhbmF0aW9uVHh0Iiwibm9KU05vdGlmaWNhdGlvbiIsInNhdmVMb2NhbHkiLCJkYXRhIiwibG9jYWxTdG9yYWdlIiwic2V0SXRlbSIsIkpTT04iLCJzdHJpbmdpZnkiLCJnZXRMb2NhbHkiLCJqc29uIiwicGFyc2UiLCJnZXRJdGVtIiwicmVtb3ZlTG9jYWx5IiwicmVtb3ZlSXRlbSIsImFkZEVsZW1lbnQiLCJlbHRQYXJlbnQiLCJlbHRUeXBlIiwiZWx0Q29udGVudCIsImVsdElkIiwiZWx0Q2xhc3MiLCJlbHRBdHRyaWJ1dGVzIiwibmV3RWxlbWVudCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsIkFycmF5IiwiaXNBcnJheSIsImkiLCJjbGFzc0xpc3QiLCJhZGQiLCJhdHRyaWJ1dE5hbWUiLCJzZXRBdHRyaWJ1dGUiLCJpbm5lckhUTUwiLCJhcHBlbmRDaGlsZCIsImhlbGxvRGV2IiwiY29uc29sZSIsImxvZyIsInVwZGF0ZUFjY291bnRMaW5rIiwic3RhdHVzIiwiY29uZmlnVGVtcGxhdGUiLCJsaW5rIiwiZ2V0RWxlbWVudEJ5SWQiLCJob21lUGFnZSIsImdldFVybFBhcmFtcyIsImxvY2F0aW9uIiwic2VhcmNoIiwicGFyYW1ldGVycyIsInNwbGl0IiwicGFyYW0iLCJkYXRhcyIsImRlY29kZVVSSSIsImdldENvbmZpZyIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwieGhyIiwiWE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwib25sb2FkIiwicmVzcG9uc2VUZXh0Iiwib25lcnJvciIsInN0YXR1c1RleHQiLCJzZW5kIiwiZ2V0VGltZURpZmZlcmVuY2UiLCJ0aW1lTG9jYWwiLCJnZXRUaW1lem9uZU9mZnNldCIsImdldFBhc3N3b3JkIiwibmJDYXJNaW4iLCJuYkNhck1heCIsIm5iQ2FyIiwibGV0dGVycyIsIm90aGVycyIsInNldFNlc3Npb24iLCJ1c2VySWQiLCJ0b2tlbiIsImR1cmF0aW9uVFMiLCJzdG9yYWdlVXNlciIsImR1cmF0aW9uIiwiY2hlY2tBbnN3ZXJEYXRhcyIsImxhc3RBbnN3ZXIiLCJhbnN3ZXIiLCJuYkNvcnJlY3RBbnN3ZXJzIiwiUXVlc3Rpb25uYWlyZUlkIiwibmJRdWVzdGlvbnMiLCJjaGVja1Nlc3Npb24iLCJ1cmxSZWRpcmVjdGlvbiIsIm1lc3NhZ2UiLCJ1cmxXYW50ZWQiLCJ1c2VyRGF0YXMiLCJyZWRpcmVjdFVzZXIiLCJ1c2VyIiwibm93IiwicmVzcG9uc2UiLCJpc1ZhbGlkIiwibGFuZ3VhZ2UiLCJ0aW1lRGlmZmVyZW5jZSIsIm5iRGF5c09rIiwidXJsQWNjb3VudCIsIndpbmRvdyIsImluZGV4T2YiLCJhc3NpZ24iLCJjb25maWdGcm9udEVuZCIsInR4dCIsInR4dFVzZXJzIiwidHh0U3Vic2NyaXB0aW9ucyIsImRpdlJlc3BvbnNlIiwiY29uZmlnIiwiaW5pdGlhbGlzZSIsInQiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSJdLCJtYXBwaW5ncyI6IjtRQUFBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBOzs7UUFHQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMENBQTBDLGdDQUFnQztRQUMxRTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLHdEQUF3RCxrQkFBa0I7UUFDMUU7UUFDQSxpREFBaUQsY0FBYztRQUMvRDs7UUFFQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EseUNBQXlDLGlDQUFpQztRQUMxRSxnSEFBZ0gsbUJBQW1C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QUFDckYsSUFBSSxDQUFDSSxLQUFMLENBQVcsS0FBS2dELFlBQWhCLENBQWI7QUFDQSx3QkFBSSxLQUFLckIsTUFBTCxLQUFnQixHQUFoQixJQUF1QnNELFFBQVEsQ0FBQ04sT0FBVCxJQUFvQjVJLFNBQS9DLEVBQ0lxRSxnRUFBVSxDQUFDMEYsV0FBRCxFQUFjLEdBQWQsRUFBbUJiLFFBQVEsQ0FBQ04sT0FBVCxDQUFpQi9ILE9BQWpCLENBQXlCLE1BQXpCLEVBQWlDOEksY0FBYyxDQUFDakgsV0FBaEQsQ0FBbkIsRUFBaUYsRUFBakYsRUFBcUYsQ0FBQyxTQUFELENBQXJGLENBQVYsQ0FESixLQUdJMkIsZ0VBQVUsQ0FBQzBGLFdBQUQsRUFBYyxHQUFkLEVBQW1CRCxnQkFBZ0IsQ0FBQy9QLGtCQUFqQixDQUFvQzhHLE9BQXBDLENBQTRDLE1BQTVDLEVBQW9EOEksY0FBYyxDQUFDakgsV0FBbkUsQ0FBbkIsRUFBb0csRUFBcEcsRUFBd0csQ0FBQyxPQUFELENBQXhHLENBQVY7QUFDUDtBQUNKLGlCQVZEOztBQVdBbUUsbUJBQUcsQ0FBQ08sSUFBSjtBQUNIO0FBQ0o7QUEzQlU7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUErQlgvQyw0RUFBVSxDQUFDMEYsV0FBRCxFQUFjLEdBQWQsRUFBbUJILEdBQUcsQ0FBQzNSLFdBQXZCLEVBQW9DLEVBQXBDLEVBQXdDLENBQUMsT0FBRCxDQUF4QyxDQUFWOztBQS9CVztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxHQUFIOztBQUFBLGtCQUFWZ1MsVUFBVTtBQUFBO0FBQUE7QUFBQSxHQUFoQjs7QUFrQ0FBLFVBQVUsRyIsImZpbGUiOiIuL0pTL3Vuc3Vic2NyaWJlLmFwcC5qcyIsInNvdXJjZXNDb250ZW50IjpbIiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cblxuIFx0Ly8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4gXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhfX3dlYnBhY2tfcmVxdWlyZV9fLnMgPSBcIi4vc3JjL3Vuc3Vic2NyaWJlLmpzXCIpO1xuIiwiY29uc3QgdXNlcnMgPSByZXF1aXJlKFwiLi91c2Vyc1wiKTtcbmNvbnN0IHF1ZXN0aW9ubmFpcmVzID0gcmVxdWlyZShcIi4vcXVlc3Rpb25uYWlyZXNcIik7XG5cbm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBhcGlVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwL2FwaVwiLFxuICAgIHNpdGVVcmw6IFwiaHR0cDovL2xvY2FsaG9zdDo4MDgwXCIsXG4gICAgYWRtaW5OYW1lOiBcIkZhYnJpY2VcIixcbiAgICBhZG1pbkVtYWlsOiBcImRldkB3aWtpbGVybmkuY29tXCIsXG4gICAgc2VuZGVyTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBzZW5kZXJFbWFpbDogXCJib25qb3VyQHdpa2lsZXJuaS5jb21cIixcbiAgICBhZG1pbkxhbmc6IFwiZnJcIixcbiAgICB0aGVtZTogXCJkZWZhdWx0XCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmlcIixcbiAgICBiZWdpbkNvZGVHb2RmYXRoZXI6IFwid2lraWxlcm5pXCIsIC8vIGNhc2Utc2Vuc2l0aXZlIGFuZCBjYW4ndCBjb250YWluIFwiQFwiICFcbiAgICBjcm9uVGltaW5nQWxlcnRJblNlY29uZGU6IDEyMCwgLy8gZm9yIGxvZ3NcbiAgICByZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAzLCAvLyBpZGVtXG4gICAgdG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnM6IFwiNDhoXCIsIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96ZWl0L21zXG4gICAgdG9rZW5Mb2dpbkxpbmtUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWluVGltZUluSG91cnM6IFwiMjRoXCIsXG4gICAgdG9rZW5Db25uZXhpb25NYXhUaW1lSW5EYXlzOiBcIjE4MCBkYXlzXCIsXG4gICAgdG9rZW5Mb2dpbkNoYW5naW5nVGltZUluSG91cnM6IFwiMWhcIiwvLyBmb3IgZW1haWwgJiBwYXNzd29yZCBjaGFuZ2luZ1xuICAgIHRva2VuRGVsZXRlVXNlclRpbWVJbkhvdXJzOiBcIjFoXCIsXG4gICAgdG9rZW5VbnN1YnNjcmliZUxpbmtUaW1lSW5EYXlzOiBcIjcgZGF5c1wiLCAvLyB0b2tlbiBzZW5kIHdpdGggc3Vic2NyaXB0aW9uJ3MgZW1haWxzXG4gICAgZnJlZUFjY291bnRUaW1pbmdJbkRheXM6IDEwLFxuICAgIGZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5czogNSxcbiAgICBhY2NvdW50RXhwaXJhdGlvbkZpcnN0Tm90aWZpY2F0aW9uSW5EYXlzOiAxNCwgICAgXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMTAsIC8vIGlmIDAgPSBub3QgbWF4aW11bVxuICAgIG5iQ2hvaWNlc01heDogMTAsXG4gICAgbmJOZXdRdWVzdGlvbm5haXJlczogMTAsLy8gZm9yIFJTUywgZXRjLlxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUJlZ2luOjEsIC8vIGluIHVzZXIgbG9jYWwgdGltZVxuICAgIGhvdXJHaXZlTmV3UXVlc3Rpb25uYWlyZUVuZDoyNCwgLy8gaWRlbVxuICAgIG51bWJlck5ld1F1ZXN0aW9ubmFpcmVBdFNhbWVUaW1lOiA1MCwgLy8gZm9yIG1hc3MgbWFpbGluZ1xuICAgIG1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzOiAzLFxuICAgIC8vIElsbHVzdHJhdGlvbnM6XG4gICAgbmJJbGx1c3RyYXRpb25zTWluOiAwLFxuICAgIG5iSWxsdXN0cmF0aW9uc01heDogMSxcbiAgICBtYXhJbGx1c3RyYXRpb25TaXplaW5PY3RldDogMTAwMDAwMCwvLyBwYXMgY29udHLDtGzDqSBwb3VyIGwnaW5zdGFudC4gw4AgcmV2b2lyLlxuICAgIG1pbWVUeXBlc0ZvcklsbHVzdHJhdGlvbjogWyBcImltYWdlL2pwZ1wiLCBcImltYWdlL2pwZWdcIiwgXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9naWZcIiwgXCJpbWFnZS9wbmdcIiBdLFxuICAgIC8vIC0tIFVwbG9hZCBhbmQgcmVzaXplOlxuICAgIGlsbHVzdHJhdGlvbnNXaWR0aE1heEluUHg6IDQwMCxcbiAgICBpbGx1c3RyYXRpb25zTWluaWF0dXJlc1dpZHRoTWF4SW5QeDogMjAwLFxuICAgIC8vIExpbmtzOlxuICAgIG5iTGlua3NNaW46IDEsXG4gICAgbmJMaW5rc01heDogMSxcbiAgICAvLyDDoCBzdXBwcmltZXIgcXVhbmQgdG91cyBsZXMgXCJyZXF1aXJlXCIgw6Agam91cjpcbiAgICBuYlF1ZXN0aW9uc01pbjogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNaW4sXG4gICAgbmJRdWVzdGlvbnNNYXg6IHF1ZXN0aW9ubmFpcmVzLm5iUXVlc3Rpb25zTWF4LFxuICAgIG5iQ2hvaWNlc01heDogcXVlc3Rpb25uYWlyZXMubmJDaG9pY2VzTWF4LFxuICAgIHBhc3N3b3JkTWluTGVuZ3RoOiB1c2Vycy5wYXNzd29yZC5taW5sZW5ndGgsXG4gICAgZGlyQ2FjaGVVc2VyczogdXNlcnMuZGlyQ2FjaGVVc2VycyxcbiAgICBkaXJDYWNoZVVzZXJzQW5zd2VyczogdXNlcnMuZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMsXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9uczogcXVlc3Rpb25uYWlyZXMuZGlyQ2FjaGVRdWVzdGlvbnMsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXMsXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpckhUTUxRdWVzdGlvbm5haXJlLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmU6IHF1ZXN0aW9ubmFpcmVzLmRpcldlYlF1ZXN0aW9ubmFpcmVcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxueyAgICBcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgcXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVlc3Rpb25uYWlyZVwiLFxuICAgIGdldFF1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL2dldFwiLFxuICAgIHByZXZpZXdRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9wcmV2aWV3XCIsXG4gICAgcHVibGlzaGVkUXVlc3Rpb25uYWlyZVJvdXRlczogXCIvcXVpei9cIixcbiAgICBzYXZlQW5zd2Vyc1JvdXRlOiBcIi9hbnN3ZXIvXCIsXG4gICAgZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyA6IFwiL3N0YXRzL1wiLFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hcIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgLy8gLS0gcXVlc3Rpb25zICYgY2hvaWNlcyA6XG4gICAgcXVlc3Rpb25zUm91dGU6IFwiL3F1ZXN0aW9uL1wiLFxuICAgIC8vIC0tIHRhZ3MgOlxuICAgIHRhZ3NTZWFyY2hSb3V0ZTogXCIvdGFncy9zZWFyY2gvXCIsXG4gICAgLy8gLS0gYW5zd2VycyA6XG4gICAgZ2V0UXVlc3Rpb25uYWlyZXNXaXRob3V0QW5zd2VyOiBcIi93aXRob3V0YW5zd2VyL3VzZXIvXCIsXG4gICAgZ2V0UHJldmlvdXNBbnN3ZXJzOiBcIi91c2VyL2Fuc3dlcnMvXCIsXG4gICAgZ2V0U3RhdHNBbnN3ZXJzIDogXCIvdXNlci9hbndzd2Vycy9zdGF0cy9cIixcbiAgICBnZXRBZG1pblN0YXRzOiBcIi9nZXRhZG1pbnN0YXRzL1wiLFxuICAgIC8vIGZvcm1zIDogw6AgY29tcGzDqXRlciBhdmVjIHZhbGV1cnMgcGFyIGTDqWZhdXQsIGV0Yy4gY2YgbW9kw6hsZVxuICAgIFF1ZXN0aW9ubmFpcmUgOlxuICAgIHtcbiAgICAgICAgdGl0bGU6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHNsdWc6IHsgbWF4bGVuZ3RoOiAxNTAgfSwgLy8gY2hhbXAgcmVxdWlzIG1haXMgY2FsY3Vsw6kgw6AgcGFydGlyIGR1IHRpdHJlIHFkIHZpZGVcbiAgICAgICAgaW50cm9kdWN0aW9uOiB7IHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LFxuICAgIHNlYXJjaFF1ZXN0aW9ubmFpcmVzIDogeyBtaW5sZW5ndGg6IDMsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgUXVlc3Rpb24gOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAgICAgcmFuazogeyByZXF1aXJlZDogdHJ1ZSwgbWluOjEsIGRlZmF1bHRWYWx1ZToxIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBDaG9pY2UgOlxuICAgIHtcbiAgICAgICAgdGV4dDogeyBtYXhsZW5ndGg6IDI1NSwgcmVxdWlyZWQ6IHRydWUgfVxuICAgIH0sICAgICAgICAgIFxuICAgIG5iUXVlc3Rpb25zTWluOiAxLFxuICAgIG5iUXVlc3Rpb25zTWF4OiAxMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLy8gaWRlbVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgLy8gQVBJJ3JvdXRlcyAoYWZ0ZXIgXCJhcGlVcmxcIiBkZWZpbmVkIGluIGluc3RhbmNlLmpzKVxuICAgIHVzZXJSb3V0ZXM6IFwiL3VzZXJcIixcbiAgICBzdWJzY3JpYmVSb3V0ZTogXCIvc2lnbnVwXCIsXG4gICAgZ2V0R29kZmF0aGVyUm91dGU6IFwiL2dldGdvZGZhdGhlcmlkXCIsXG4gICAgY2hlY2tJZklzRW1haWxmcmVlUm91dGU6IFwiL2lzZW1haWxmcmVlXCIsXG4gICAgY2hlY2tTdWJzY3JpYmVUb2tlblJvdXRlOiBcIi92YWxpZGF0aW9uL1wiLFxuICAgIGNoZWNrTG9naW5Sb3V0ZTogXCIvY2hlY2tsb2dpbi9cIixcbiAgICBjb25uZWN0aW9uUm91dGU6IFwiL2xvZ2luXCIsXG4gICAgZ2V0TG9naW5MaW5rUm91dGU6IFwiL2dldGxvZ2lubGlua1wiLFxuICAgIGNvbm5lY3Rpb25XaXRoTGlua1JvdXRlOiBcIi9jaGVja2xvZ2lubGlua1wiLFxuICAgIGdldFVzZXJJbmZvczogXCIvZ2V0L1wiLFxuICAgIGNyZWF0ZVVzZXJSb3V0ZTogXCIvY3JlYXRlXCIsXG4gICAgdmFsaWRhdGVVc2VyUm91dGU6IFwiL3ZhbGlkYXRlL1wiLFxuICAgIHVwZGF0ZVVzZXJJbmZvczogXCIvbW9kaWZ5L1wiLFxuICAgIHNlYXJjaFVzZXJSb3V0ZTogXCIvc2VhcmNoL1wiLFxuICAgIGdldEdvZENoaWxkczogXCIvZ2V0Z29kY2hpbGRzL1wiLFxuICAgIGNoZWNrTmV3TG9naW5MaW5rUm91dGU6IFwiL2NvbmZpcm1uZXdsb2dpbi9cIixcbiAgICBjaGVja0RlbGV0ZUxpbmtSb3V0ZTogXCIvY29uZmlybWRlbGV0ZS9cIixcbiAgICBnZXRQYXltZW50czogXCIvcGF5bWVudC9nZXRmb3JvbmV1c2VyL1wiLFxuICAgIHVuc3Vic2NyaWJlUm91dGU6IFwiL3N1YnNjcmlwdGlvbi9zdG9wL1wiLFxuICAgIGdldEFkbWluU3RhdHM6IFwiL2dldGFkbWluc3RhdHMvXCIsXG4gICAgLy8gZm9ybXMgOiDDoCBjb21wbMOpdGVyIGF2ZWMgdmFsZXVycyBwYXIgZMOpZmF1dCwgZXRjLiBjZiBtb2TDqGxlXG4gICAgbmFtZTogeyBtYXhsZW5ndGg6IDcwLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGVtYWlsOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHBhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyLCByZXF1aXJlZDogdHJ1ZSB9LCAvLyBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9iY3J5cHQjc2VjdXJpdHktaXNzdWVzLWFuZC1jb25jZXJuc1xuICAgIG5ld1Bhc3N3b3JkOiB7IG1pbmxlbmd0aDogOCwgbWF4bGVuZ3RoOjcyIH0sXG4gICAgY29kZUdvZGZhdGhlcjogeyBtYXhsZW5ndGg6IDI1NSB9LFxuICAgIGNndU9rOiB7IHZhbHVlOiBcInRydWVcIiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0aW1lRGlmZmVyZW5jZU1pbjogLTcyMCxcbiAgICB0aW1lRGlmZmVyZW5jZU1heDo4NDAsXG4gICAgLy8gSlNPTiBkaXJcbiAgICBkaXJDYWNoZVVzZXJzIDogXCJkYXRhcy91c2Vyc1wiLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlcy9hbnN3ZXJzXCJcbn07XG4iLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvZ2VuZXJhbFwiOiBcIi4uL2xhbmcvZnIvZ2VuZXJhbC5qc1wiXG59O1xuXG5cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0KHJlcSkge1xuXHR2YXIgaWQgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKTtcblx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oaWQpO1xufVxuZnVuY3Rpb24gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSkge1xuXHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKG1hcCwgcmVxKSkge1xuXHRcdHZhciBlID0gbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIiArIHJlcSArIFwiJ1wiKTtcblx0XHRlLmNvZGUgPSAnTU9EVUxFX05PVF9GT1VORCc7XG5cdFx0dGhyb3cgZTtcblx0fVxuXHRyZXR1cm4gbWFwW3JlcV07XG59XG53ZWJwYWNrQ29udGV4dC5rZXlzID0gZnVuY3Rpb24gd2VicGFja0NvbnRleHRLZXlzKCkge1xuXHRyZXR1cm4gT2JqZWN0LmtleXMobWFwKTtcbn07XG53ZWJwYWNrQ29udGV4dC5yZXNvbHZlID0gd2VicGFja0NvbnRleHRSZXNvbHZlO1xubW9kdWxlLmV4cG9ydHMgPSB3ZWJwYWNrQ29udGV4dDtcbndlYnBhY2tDb250ZXh0LmlkID0gXCIuLi9sYW5nIHN5bmMgcmVjdXJzaXZlIF5cXFxcLlxcXFwvLipcXFxcL2dlbmVyYWwkXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3N1YnNjcmlwdGlvblwiOiBcIi4uL2xhbmcvZnIvc3Vic2NyaXB0aW9uLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvc3Vic2NyaXB0aW9uJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBuZWVkTnVtYmVyT2ZEYXlzIDogXCJJbCBmYXV0IHVuIG5vbWJyZSBkZSBqb3VycyBwb3VyIGwnYWJvbm5lbWVudC5cIixcbiAgICBuZWVkSW50ZWdlck51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBkb2l0IMOqdHJlIHVuIG5vbWJyZSBlbnRpZXIuXCIsXG4gICAgbmVlZE1pbk51bWJlck9mRGF5cyA6IFwiTGUgbm9tYnJlIGRlIGpvdXJzIGRlIGwnYWJvbm5lbWVudCBuZSBwZXV0IMOqdHJlIG7DqWdhdGlmICFcIixcbiAgICBuZWVkTm90VG9vTG9uZ0RheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQgKHRyb3AgbG9uZ3VlKS5cIixcbiAgICBuZWVkVmFsaWREYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0LiBDYXJhY3TDqHJlIG5vbiB2YWxpZGUgOiBcIixcbiAgICBuZWVkVW5pcXVlRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdC4gRG91YmxvbiA6IFwiLFxuICAgIG5lZWRLbm93SWZOb3RpY2VPayA6IFwiSWwgbWFucXVlIGwnaW5mb3JtYXRpb24gc3VyIGwnYWNjZXB0YXRpb24gb3Ugbm9uIGRlIHJlY2V2b2lyIGRlcyBub3RpZmljYXRpb25zLlwiLFxuICAgIHVuc3Vic2NyaXB0aW9uT2sgOiBcIlZvdHJlIGRlbWFuZGUgYSBiaWVuIMOpdMOpIHByaXNlIGVuIGNvbXB0ZS4gVm91cyBuZSByZWNldnJleiBwbHVzIGRlIG1lc3NhZ2VzIHZlbmFudCBkdSBzaXRlLCBzYXVmIHBvdXIgdm91cyBzaWduYWxlciBsYSBmaW4gZGUgdm90cmUgYWJvbm5lbWVudC48YnI+Tidow6lzaXRleiBwYXMgPGEgaHJlZj0nLyNVUkwnPsOgIGFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkZSBub3V2ZWF1IGF1dG9yaXNlciBjZXJ0YWlucyBlbnZvaXMuXCIsXG4gICAgdW5zdWJzY3JpcHRpb25GYWlsIDogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBsaWVuIGRlIGTDqXNhYm9ubmVtZW50IG5lIGZvbmN0aW9ubmUgcGFzLjxicj5Wb3VzIHBvdXZleiA8YSBocmVmPScvI1VSTCc+YWNjw6lkZXIgw6Agdm90cmUgY29tcHRlPC9hPiBwb3VyIGTDqXNhY3RpdmVyIGxlcyBlbnZvaXMgbWFudWVsbGVtZW50LlwiLFxuICAgIGFsbFN1YnNjcmlwdGlvblByb2Nlc3NlZCA6IFwiVG91cyBsZXMgYWJvbm7DqXMgb250IMOpdMOpIHRyYWl0w6lzIHBvdXIgbGUgbW9tZW50LlwiLFxuICAgIG1haWxOZXdRdWVzdGlvbm5haXJlU3ViamVjdCA6IFwiUXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIG1haWxOZXdRdWVzdGlvbm5haXJlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuVW4gbm91dmVhdSBxdWl6IHZpZW50IGRlIHZvdXMgw6p0cmUgcHJvcG9zw6kgOlxcblFVRVNUSU9OTkFJUkVfVVJMXFxuXFxuQm9ubmUgbGVjdHVyZSAhXFxuXFxuU3RvcHBlciBsZXMgZW52b2lzID9cXG5VTlNVQlNDUklCRV9VUkxcIixcbiAgICBtYWlsTmV3UXVlc3Rpb25uYWlyZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz5NQUlMX0lOVFJPRFVDVElPTjx1bD48bGk+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiIHRpdGxlPVxcXCJMSU5LX1RJVExFXFxcIj5MaXJlIGwnYXJ0aWNsZS48L2E+PC9saT48bGk+PGEgaHJlZj1cXFwiUVVFU1RJT05OQUlSRV9VUkxcXFwiPkFsbGV6IGF1IHF1aXouPC9hPjwvbGk+PC91bD48cD48YSBocmVmPVxcXCJVTlNVQlNDUklCRV9VUkxcXFwiPlN0b3BwZXIgbGVzIGVudm9pcy48L2E+PC9wPlwiLFxuICAgIG5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIgOiBcIkF1Y3VuIG5vdXZlYXUgcXVlc3Rpb25uYWlyZSB0cm91dsOpIHBvdXIgdW4gYWJvbm7DqSA6IFwiLFxuICAgIG1haWxFbmRGcmVlVGltZVN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IHZhIGV4cGlyZXJcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVCb2R5VHh0OiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy5cXG5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBzb3VzY3JpcmUgw6AgdW4gYWJvbm5lbWVudCBkw6hzIGF1am91cmQnaHVpIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFbmRGcmVlVGltZUJvZHlIVE1MOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIGFib25uZW1lbnQgZ3JhdHVpdCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy4gUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc291c2NyaXJlIMOgIHVuIGFib25uZW1lbnQgZMOocyBhdWpvdXJkJ2h1aSBlbiA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVNZXNzYWdlOiBcIiByZWxhbmNlcyBlbnZvecOpZXMuXCIsXG4gICAgbWFpbEV4cGlyYXRpb25TdWJqZWN0OiBcIlZvdHJlIGFib25uZW1lbnQgdmEgYmllbnTDtHQgZXhwaXJlclwiLFxuICAgIG1haWxFeHBpcmF0aW9uQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuXFxuUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogbGUgcHJvbG9uZ2VyIGTDqHMgYXVqb3VyZCdodWkgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbEV4cGlyYXRpb25Cb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLjxicj5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBsZSBwcm9sb25nZXIgZMOocyBhdWpvdXJkJ2h1aSBlbiA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVhbnQgaWNpPC9hPi48L3A+XCIsXG4gICAgbWFpbEV4cGlyYXRpb25NZXNzYWdlOiBcIkZJUlNUIHByZW1pw6hyZXMgZXQgU0VDT05EIGRldXhpw6htZXMgcmVsYW5jZXMgZW52b3nDqWVzIHBvdXIgZGVzIGFib25uZW1lbnRzIGV4cGlyYW50IGQnaWNpIHBldS5cIixcbiAgICBpbmZvc05iRGF5czogXCJWb3RyZSBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+Ljxicj5Wb3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCBwcm9sb25nZXIgdm90cmUgYWJvbm5lbWVudCBlbiBzdWl2YW50IGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc0V4cGlyYXRlZDogXCJWb3RyZSBhYm9ubmVtZW50IGEgZXhwaXLDqSwgbWFpcyBpbCB2b3VzIHJlc3RlIGVuY29yZSBxdWVscXVlcyBqb3VycyBhdmFudCBxdWUgdm90cmUgY29tcHRlIGV0IHZvcyBkb25uw6llcyBuZSBzb2llbnQgY29tcGzDqHRlbWVudCBzdXBwcmltw6llcy48YnI+UG91ciBjZSBmYWlyZSwgc3VpdmV6IHNhbnMgdGFyZGVyIGxlcyBpbmRpY2F0aW9ucyBjaS1kZXNzb3VzIDpcIixcbiAgICBpbmZvc05iRGF5c0FkbWluOiBcIkNldCBhYm9ubmVtZW50IGVzdCBlbmNvcmUgdmFsYWJsZSA8Yj5wZW5kYW50IE5CX0RBWVMgam91cnM8L2I+LlwiLFxuICAgIGluZm9zRXhwaXJhdGVkQWRtaW46IFwiQ2V0IGFib25uZW1lbnQgYSBleHBpcsOpLlwiLCAgXG4gICAgaXNOb3RWYWxpZGVkIDogXCJDZXQgdXRpbGlzYXRldXIgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLjxicj5Wb3VzIHBvdXZleiBsZSBmYWlyZSDDoCBzYSBwbGFjZSA8YSBocmVmPScjdmFsaWRhdGlvbk9rJz5lbiBjb2NoYW50IGxhIGNhc2UgaW5kaXF1w6llPC9hPiBldCBlbnJlZ2lzdHJhbnQuXCIsXG4gICAgaW5mb3NQYXltZW50c0FkbWluIDogXCJEQVRFX1BBWU1FTlQgOiBwYWllbWVudCBkZSBBTU9VTlQg4oKsIGF1IG5vbSBkZSBDTElFTlRfTkFNRS5cIixcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbm90Rm91bmQ6IFwiTCd1dGlsaXNhdGV1ciBuJ2EgcGFzIMOpdMOpIHRyb3V2w6kuXCIsXG4gICAgbmVlZE5hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ci5cIixcbiAgICBuZWVkTm90VG9vTG9uZ05hbWU6IFwiTWVyY2kgZGUgY2hvaXNpciB1biBub20gZCd1dGlsaXNhdGV1ciBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSA3MCBjYXJhY3TDqHJlcy5cIixcbiAgICBuZWVkRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHZvdHJlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIG5lZWRVbmlxdWVFbWFpbDogXCJMJ2FkcmVzc2UgZS1tYWlsIHF1ZSB2b3VzIGF2ZXogc2Fpc2llIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBhciB1biBhdXRyZSB1dGlsaXNhdGV1ci4gU2kgdm91cyBhdmV6IGTDqWrDoCB1biBjb21wdGUsIDxhIGhyZWY9Jy8jVVJMJz5jbGlxdWV6LWljaSBwb3VyIHZvdXMgY29ubmVjdGVyPC9hPi5cIixcbiAgICBuZWVkTm90VG9vTG9uZ0VtYWlsOiBcIk1lcmNpIGRlIHNhaXNpciB1bmUgYWRyZXNzZSBlLW1haWwgbmUgY29tcHRhbnQgcGFzIHBsdXMgZGUgMjU1IGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UuXCIsXG4gICAgbmVlZExvbmdQYXNzV29yZCA6IFwiTWVyY2kgZGUgZm91cm5pciB1biBtb3QgZGUgcGFzc2UgZCdhdSBtb2lucyBNSU5fTEVOR1RIIGNhcmFjdMOocmVzLlwiLFxuICAgIHBhc3N3b3JkQ29waWVkOiBcIkxlIG1vdCBkZSBwYXNzZSBnw6luw6lyw6kgYSDDqXTDqSBjb3Bpw6kgZGFucyBsZSBwcmVzc2UtcGFwaWVyLiBWb3VzIHBvdXZleiBsZSByZWNvcGllciBvw7kgdm91cyBsZSBzb3VoYWl0ZXIuXCIsXG4gICAgbmVlZFN0YXR1cyA6IFwiSWwgbWFucXVlIGxlIHN0YXR1dC5cIixcbiAgICBuZWVkTGFuZ3VhZ2UgOiBcIklsIG1hbnF1ZSBsZSBjb2RlIGxhbmd1ZS5cIixcbiAgICBuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUgOiBcIkxhIGRhdGUgZGUgZGVybmnDqHJlIGNvbm5leGlvbiBuJ2VzdCBwYXMgdmFsaWRlLlwiLFxuICAgIG5lZWRTTVRQIDogXCJJbCBtYW5xdWUgbGUgc2VydmV1ciBTTVRQLlwiLFxuICAgIG5lZWRTTVRQTm90Rm91bmQgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZEtub3dOZXdzbGV0dGVyT2sgOiBcIklsIGZhdXQgc2F2b2lyIHNpIGwndXRpbGlzYXRldXIgYWNjZXB0ZSBvdSByZWZ1c2UgZGUgcmVjZXZvaXIgbGEgbmV3c2xldHRlci5cIixcbiAgICBuZWVkVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgY29ubmHDrnRyZSBsZSBub21icmUgZGUgbWludXRlcyBkdSBkw6ljYWxhZ2UgaG9yYWlyZS5cIixcbiAgICBuZWVkTWluVGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBlbmxldmVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDcyMC5cIixcbiAgICBuZWVkTWF4VGltZURpZmZlcmVuY2UgOiBcIklsIGZhdXQgZm91cm5pciB1biBub21icmUgZGUgbWludXRlcyDDoCBham91dGVyIMOgIGwnaGV1cmUgR01UIG5lIGTDqXBhc3NhbnQgcGFzIDg0MC5cIixcbiAgICBuZWVkVUdDT2sgOiBcIlZvdXMgZGV2ZXogYWNjZXB0ZXIgbGVzIENHVSBwb3VyIHBvdXZvaXIgY3LDqWVyIHZvdHJlIGNvbXB0ZS4gXCIsXG4gICAgZ29kZmF0aGVyTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdmFsaWRlIHRyb3V2w6kgcG91ciBjZSBjb2RlIHBhcnJhaW4uXCIsXG4gICAgZ29kZmF0aGVyRm91bmQ6IFwiVm90cmUgcGFycmFpbiBhIGJpZW4gw6l0w6kgdHJvdXbDqSAhXCIsXG4gICAgbWFpbFZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGluc2NyaXB0aW9uIGVzdCBiaWVuIGVucmVnaXN0csOpZS5cXG5Qb3VyIGxhIGZpbmFsaXNlciwgbWVyY2kgZGUgY2xpcXVlciBkYW5zIGxlcyAyNEggc3VyIGxlIGxpZW4gZGUgY29uZmlybWF0aW9uIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IDogXCJNZXJjaSBkZSB2YWxpZGVyIHZvdHJlIGNvbXB0ZVwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvdHJlIGNvbXB0ZSwgbWVyY2kgZGUgY2xpcXVlciBzdXIgbGUgbGllbiBzdWl2YW50IGRhbnMgbGVzIDI0aC48L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IHNhbnMgdGFyZGVyIHZvdXMgY29ubmVjdGVyIGNpLWRlc3NvdXMgcG91ciBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Wb3RyZSB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlclN1YmplY3QgOiBcIk1lcmNpICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5HcsOiY2Ugw6Agdm91cyB1biBub3V2ZWwgdXRpbGlzYXRldXIgKEVNQUlMKSB2aWVudCBkZSBzJ2luc2NyaXJlIHN1ciBOT01fU0lURS5cXG5NZXJjaSBldCDDoCBiaWVudMO0dCAhXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLjwvcD48cD5NZXJjaSBldCDDoCBiaWVudMO0dCAhPC9wPlwiLFxuICAgIGJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIGNvbmZpcm1hdGlvbiBuZSBzZW1ibGUgcGFzIHZhbGlkZSBvdSBiaWVuIGlsIGEgZXhwaXLDqS4gVm91cyBwb3V2ZXogZW4gcmVjZXZvaXIgdW4gbm91dmVhdSA8YSBocmVmPScjVVJMJz5lbiBjbGlxdWFudCBpY2k8L2E+LlwiLFxuICAgIGVtYWlsTm90Rm91bmQ6IFwiQXVjdW4gdXRpbGlzYXRldXIgdHJvdXbDqSBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLlwiLFxuICAgIGFscmVhZHlDb25uZWN0ZWQ6IFwiVm91cyDDqnRlcyBkw6lqw6AgY29ubmVjdMOpKGUpIGF1IHNpdGUgIVwiLFxuICAgIG5lZWRCZUNvbm5lY3RlZDogXCJWb3VzIGRldmV6IMOqdHJlIGNvbm5lY3TDqShlKSBwb3VyIGFjY8OpZGVyIMOgIGNldHRlIHBhZ2UuXCIsXG4gICAgY29ubmVjdGlvbk9rOiBcIkNvbm5leGlvbiByw6l1c3NpZS5cIixcbiAgICBuZWVkQ2hvb3NlTG9naW5XYXk6IFwiVm91cyBkZXZleiBzb2l0IHNhaXNpciB2b3RyZSBtb3QgZGUgcGFzc2UsIHNvaXQgY29jaGVyIGxhIGNhc2Ugdm91cyBwZXJtZXR0YW50IGRlIHJlY2V2b2lyIHVuIGxpZW4gZGUgY29ubmV4aW9uIHBhciBlLW1haWwuXCIsXG4gICAgbmVlZFZhbGlkYXRpb25Ub0xvZ2luIDogXCJWb3VzIGRldmV6IGQnYWJvcmQgdmFsaWRlciB2b3RyZSBjb21wdGUgYXZhbnQgZGUgdm91cyBjb25uZWN0ZXIuIFBvdXIgY2UgZmFpcmUsIHVuIGxpZW4gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwuXCIsXG4gICAgdG9vTWFueUxvZ2luRmFpbHMgOiBcIlRyb3AgZGUgdGVudGF0aXZlcyBkZSBjb25uZXhpb24gaW5mcnVjdHVldXNlcyBwb3VyIGNldHRlIGFkcmVzc2UgZS1tYWlsLiBWb3VzIGRldmV6IGF0dGVuZHJlIE1JTlVURVMgbWludXRlcyBwb3VyIGVzc2F5ZXIgZGUgbm91dmVhdS5cIixcbiAgICBiYWRQYXNzd29yZDogXCJMZSBtb3QgZGUgcGFzc2Ugbidlc3QgcGFzIGxlIGJvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rU3ViamVjdCA6IFwiVm90cmUgbGllbiBkZSBjb25uZXhpb24uXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOiBMSU5LX1VSTFwiLFxuICAgIG1haWxMb2dpbkxpbmtCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6PC9wPjxwPjxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5WYWxpZGVyLjwvYT48L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCBcIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llIGNhciBlbGxlIG4nYSBwYXMgdW5lIGZvcm1hdCBjb3JyZWN0LlwiLFxuICAgIHVwZGF0ZWROZWVkVW5pcXVlRW1haWwgOiBcIk1haXMgbGEgbm91dmVsbGUgYWRyZXNzZSBlLW1haWwgc2Fpc2llIChORVdfRU1BSUwpIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUsIGNhciBlbGxlIGVzdCBkw6lqw6AgdXRpbGlzw6llIHBvdXIgdW4gYXV0cmUgY29tcHRlLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpblN1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cy5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsVXBkYXRlTG9naW5Cb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+LiBFbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdMOpIG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2YWxpZGVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxEZWxldGVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgPGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPmNsaXF1ZXogaWNpPC9hPiBzYW5zIHRhcmRlci48L3A+XCIsXG4gICAgbWFpbERlbGV0ZUxpbmtNZXNzYWdlOiBcIlZvdHJlIGRlbWFuZGUgZGUgc3VwcHJlc3Npb24gYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS4gTWVyY2kgZGUgY2xpcXVlciBzYW5zIHRhcmRlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHBhciBlLW1haWwgcG91ciBjb25maXJtZXIuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlOiBcIkwndXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS5cIixcbiAgICBkZWxldGVGYWlsTWVzc2FnZTogXCJUZW50YXRpdmUgZGUgc3VwcHJlc3Npb24gZCd1biB1dGlsaXNhdGV1ciBpbmV4aXN0YW50IDogXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtPa01lc3NhZ2U6IFwiVm90cmUgY29tcHRlIGEgYmllbiDDqXTDqSBzdXBwcmltw6kuIE1lcmNpIGQnYXZvaXIgdXRpbGlzw6kgbm9zIHNlcnZpY2VzLlwiLFxuICAgIG1haWxEZWxldGVMaW5rQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVMaW5rRmFpbE1lc3NhZ2U6IFwiVm90cmUgbGllbiBkZSBzdXBwcmVzc2lvbiBuJ2VzdCBwYXMgdmFsaWRlIG91IGFsb3JzIGlsIG4nZXN0IHBsdXMgdmFsYWJsZS5cIixcbiAgICBjcm9uRGVsZXRlVW52YWxpZGVkVXNlcnNNZXNzYWdlOiBcIiBjb21wdGVzIHV0aWxpc2F0ZXVycyBub24gdmFsaWTDqXMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgZGVsZXRlSW5hY3RpdmVVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIGluYWN0aWZzIG9udCDDqXTDqSBzdXBwcmltw6lzLlwiLFxuICAgIHdlbGNvbWVNZXNzYWdlOiBcIkJpZW52ZW51ZSAjTkFNRSAhXCIsXG4gICAgYnllYnllTWVzc2FnZTogXCJTaSB2b3VzIHZveWV6IGNlIG1lc3NhZ2UsIGMnZXN0IHF1ZSB2b3RyZSBkw6ljb25uZXhpb24gcydlc3QgYmllbiBkw6lyb3Vsw6llLjxicj7DgCBiaWVudMO0dCAhXCIsXG4gICAgaW5mb3NVc2VyRm9yQWRtaW46IFwiQ2V0IHV0aWxpc2F0ZXVyIChpZDogSURfVVNFUikgYSA8Yj5jcsOpw6kgc29uIGNvbXB0ZSBsZSBEQVRFX0NSRUE8L2I+LCBsYSBkZXJuacOocmUgbWlzZSDDoCBqb3VyIGRhdGFudCBkdSBEQVRFX1VQREFURS48YnI+PGI+RGF0ZSBkZSBzYSBkZXJuacOocmUgY29ubmV4aW9uIDogREFURV9DT05ORUNUSU9OLjwvYj5cIixcbiAgICBpbmZvc0FkbWluR29kZmF0aGVyOiBcIkNldCB1dGlsaXNhdGV1ciBhIMOpdMOpIHBhcnJhaW7DqSBwYXIgXCIsXG4gICAgaW5mb3NBZG1pbk5iR29kQ2hpbGRzOiBcIlNlcyAjTkIgZmlsbGV1aWxzIDogXCJcbn07IiwiLy8gUXVlbHF1ZXMgZm9uY3Rpb25zIHV0aWxlcyBwb3VyIGxlcyBjaGHDrm5lc1xuXG5jbGFzcyBUb29sXG57XG4gICAgc3RhdGljIGlzRW1wdHkobXlWYXIpXG4gICAge1xuICAgICAgICBpZihteVZhcj09PXVuZGVmaW5lZCB8fCBteVZhcj09PW51bGwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVZhcis9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVZhcj1teVZhci50cmltKCk7XG4gICAgICAgICAgICBpZihteVZhcj09PVwiXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFxuICAgIHN0YXRpYyB0cmltSWZOb3ROdWxsKG15U3RyaW5nKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KG15U3RyaW5nKSlcbiAgICAgICAgICAgIG15U3RyaW5nPW51bGw7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgbXlTdHJpbmcrPVwiXCI7Ly8gc2kgYXV0cmUgY2hvc2UgcXUndW5lIGNoYcOubmUgZW52b3nDqS4uLlxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcudHJpbSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cblxuICAgIHN0YXRpYyBzaG9ydGVuSWZMb25nZXJUaGFuKG15U3RyaW5nLCBtYXgpXG4gICAge1xuICAgICAgICBteVN0cmluZys9XCJcIjsvLyBhdSBjYXMgb8O5IGNlbGEgbmUgc2VyYWl0IHBhcyB1bmUgY2hhw65uZS4uLlxuICAgICAgIGlmKG15U3RyaW5nLmxlbmd0aCA+IG1heClcbiAgICAgICAgICAgIG15U3RyaW5nPW15U3RyaW5nLnN1YnN0cmluZygwLCAobWF4LTMpKStcIi4uLlwiO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmc7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTU2MDQxNDAvcmVwbGFjZS1tdWx0aXBsZS1zdHJpbmdzLXdpdGgtbXVsdGlwbGUtb3RoZXItc3RyaW5nc1xuICAgIHN0YXRpYyByZXBsYWNlQWxsKG15U3RyaW5nLCBtYXBPYmopXG4gICAge1xuICAgICAgICBjb25zdCByZXBsYWNlRWx0cyA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwT2JqKS5qb2luKFwifFwiKSxcImdpXCIpO1xuICAgICAgICByZXR1cm4gbXlTdHJpbmcucmVwbGFjZShyZXBsYWNlRWx0cywgKG1hdGNoZWQpID0+XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiBtYXBPYmpbbWF0Y2hlZF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIHNvdXJjZSA6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09iamV0c19nbG9iYXV4L01hdGgvcmFuZG9tXG4gICAgc3RhdGljIGdldFJhbmRvbUludChtaW4sIG1heClcbiAgICB7XG4gICAgICAgIG1pbiA9IE1hdGguY2VpbChtaW4pO1xuICAgICAgICBtYXggPSBNYXRoLmZsb29yKG1heCk7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4IC0gbWluKSkgKyBtaW47XG4gICAgfVxuXG4gICAgLy8gw6AgY29tcGzDqXRlciA6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhdGVfZm9ybWF0X2J5X2NvdW50cnlcbiAgICBzdGF0aWMgZGF0ZUZvcm1hdChkYXRlU3RyaW5nLCBsYW5nPVwiZnJcIilcbiAgICB7XG4gICAgICAgIGlmKFRvb2wuaXNFbXB0eShkYXRlU3RyaW5nKSlcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBsZXQgbXlEYXRlPW5ldyBEYXRlKGRhdGVTdHJpbmcpO1xuICAgICAgICBsZXQgbXlEYXk9bXlEYXRlLmdldERhdGUoKStcIlwiO1xuICAgICAgICBpZihteURheS5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlEYXk9XCIwXCIrbXlEYXk7XG4gICAgICAgIGxldCBteU1vdW50aD0obXlEYXRlLmdldE1vbnRoKCkrMSkrXCJcIjtcbiAgICAgICAgaWYobXlNb3VudGgubGVuZ3RoPT09MSlcbiAgICAgICAgICAgIG15TW91bnRoPVwiMFwiK215TW91bnRoO1xuICAgICAgICBsZXQgbXlZZWFyPW15RGF0ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgICBpZihsYW5nPT09XCJmclwiKVxuICAgICAgICAgICAgcmV0dXJuIG15RGF5K1wiL1wiK215TW91bnRoK1wiL1wiK215WWVhcjtcbiAgICAgICAgZWxzZSBpZiAobGFuZz09PVwiZm9ybVwiKS8vIDIwMTQtMDItMDlcbiAgICAgICAgICAgIHJldHVybiBteVllYXIrXCItXCIrbXlNb3VudGgrXCItXCIrbXlEYXk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHJldHVybiBteU1vdW50aCtcIi9cIitteURheStcIi9cIitteVllYXI7XG4gICAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFRvb2w7IiwidmFyIG1hcCA9IHtcblx0XCIuL2RlZmF1bHQvY29uZmlnL2ZyLmpzXCI6IFwiLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmhtdFwiLCBpZDogXCJhY2NvdW50SGVhZExpbmtcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIsOAIHByb3Bvc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvYS1wcm9wb3MuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ29udGFjdFwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29udGFjdC5odG1sXCIgfSB9LFxuICAgIF0sXG4gICAgZm9vdExpbmtzOlxuICAgIFtcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDLkcuVS5cIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NndS5odG1sXCIsIHJlbDogXCJub2ZvbGxvd1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlYuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3YuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgXSxcbiAgICBtYXhRdWVzdGlvbm5haXJlc0J5UGFnZTogMTAsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lVGl0bGUxOiBcIkRlIG5hdHVyZSBjdXJpZXVzZSA/XCIsXG4gICAgaG9tZVAxOiBcIkF2ZWMgV2lraUxlcm5pIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgKCopLCBsZSBsb2dpY2llbCBldCBsZSBjb250ZW51IHBhcnRhZ8OpIHN1ciBXaWtpTGVybmkgc29udCBsaWJyZXMuPGJyPlZvdXMgcG91dmV6IGxlcyB1dGlsaXNlciwgbGVzIG1vZGlmaWVyIGV0IGxlcyBkaWZmdXNlciBzZWxvbiB2b3RyZSBzb3VoYWl0Ljxicj5TdXIgV2lraUxlcm5pLCBwYXMgZGUgcHVibGljaXTDqSwgbmkgZGUgY29tbWVyY2lhbGlzYXRpb24gZGUgdm9zIGRvbm7DqWVzIHBlcnNvbm5lbGxlcy48YnI+Vm91cyBwb3V2ZXogdmVuaXIgeSBcXFwiY3VsdGl2ZXIgdm90cmUgamFyZGluXFxcIiBlbiB0b3V0ZSB0cmFucXVpbGxpdMOpLjxicj48YnI+PHNtYWxsPjxlbT4oKikgQmllbiBxdWUgcGFydGFnZWFudCBzZXMgdmFsZXVycywgV2lraUxlcm5pIGVzdCB1biBwcm9qZXQgaW5kw6lwZW5kYW50IGRlIGxhIGZvbmRhdGlvbiBXaWtpcMOpZGlhLjwvZW0+PC9zbWFsbD5cIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc1RpdGxlOiBcIkxlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pXCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNJbnRybzogXCJMaXN0ZSBkZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaS5cIixcbiAgICBleHBsYW5hdGlvblRpdGxlOiBcIlZvdXMgZMOpY291dnJleiBXaWtpTGVybmkgP1wiLFxuICAgIGV4cGxhbmF0aW9uVHh0OiBcIkxlIHByaW5jaXBlIGVzdCBzaW1wbGUgOiB2b3VzIGNvbW1lbmNleiBwYXIgbGlyZSBsJ2FydGljbGUgV2lraXDDqWRpYSBkb250IGxlIGxpZW4gdm91cyBlc3QgcHJvcG9zw6kuPGJyPlB1aXMgdm91cyBhZmZpY2hlciBsZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IGRlIHZvdHJlIGxlY3R1cmUuIFZvdXMgb2J0ZW5leiBhbG9ycyB2b3RyZSByw6lzdWx0YXQgaW1tw6lkaWF0ZW1lbnQuPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzPC9iPiwgbWFpcyBsaWJyZSDDoCB2b3VzIGQnZXNzYXllciBkJ3kgcsOpcG9uZHJlIGltbcOpZGlhdGVtZW50Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci48YnI+Q2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIHRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUgcGx1c2lldXJzIGpvdXJzLCBzZW1haW5lcywgbW9pcy4uLiBFdCBkZSByZWNldm9pciByw6lndWxpw6hyZW1lbnQgZGUgbm91dmVsbGVzIHN1Z2dlc3Rpb25zIGRlIGxlY3R1cmVzLjxicj48YnI+TWFpcyA8Yj5sYSBjcsOpYXRpb24gZGUgY2UgY29tcHRlIGVzdCBmYWN1bHRhdGl2ZTwvYj4gZXQgPGEgaHJlZj0nL3F1aXpzLycgdGl0bGU9J0xlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyc+dm91cyBwb3V2ZXogcGFyY291cmlyIFdpa2lMZXJuaSBsaWJyZW1lbnQ8L2E+LlwiLFxuICAgIG5vSlNOb3RpZmljYXRpb246IFwiRMOpc29sw6ksIG1haXMgcG91ciBsJ2luc3RhbnQsIGwndXRpbGlzYXRpb24gZGUgV2lraUxlcm5pIG7DqWNlc3NpdGUgbCdhY3RpdmF0aW9uIGR1IEphdmFTY3JpcHQuXCIsXG59OyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgZXN0IGxpc2libGUgc3VyIGdpdGxhYiA6IFxcbiBCb25uZSBsZWN0dXJlIDotKSBcXG4gUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVBY2NvdW50TGluayA9IChzdGF0dXMsIGNvbmZpZ1RlbXBsYXRlKSA9Plxue1xuICAgIGNvbnN0IGxpbms9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhY2NvdW50SGVhZExpbmtcIik7XG4gICAgY29uc3QgaG9tZVBhZ2U9c3RhdHVzK1wiSG9tZVBhZ2VcIjtcbiAgICBsaW5rLmhyZWY9XCIvXCIrY29uZmlnVGVtcGxhdGVbaG9tZVBhZ2VdO1xufSIsImltcG9ydCB7IGlzRW1wdHkgfSBmcm9tIFwiLi4vLi4vLi4vdG9vbHMvbWFpblwiO1xuXG4vLyBGb25jdGlvbiByw6ljdXDDqXJhbnQgbGVzIHBhcmFtw6h0cmVzIHBhc3PDqXMgcGFyIGwndXJsXG5leHBvcnQgY29uc3QgZ2V0VXJsUGFyYW1zID0gKCkgPT5cbntcbiAgICBpZihpc0VtcHR5KGxvY2F0aW9uLnNlYXJjaCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHBhcmFtZXRlcnMgPSBsb2NhdGlvbi5zZWFyY2guc3Vic3RyaW5nKDEpLnNwbGl0KFwiJlwiKTtcbiAgICBpZighQXJyYXkuaXNBcnJheShwYXJhbWV0ZXJzKSB8fCBwYXJhbWV0ZXJzLmxlbmd0aD09PTApXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgXG4gICAgbGV0IHBhcmFtLCBkYXRhcz17fTtcbiAgICBmb3IobGV0IGkgaW4gcGFyYW1ldGVycylcbiAgICB7XG4gICAgICAgIHBhcmFtID0gcGFyYW1ldGVyc1tpXS5zcGxpdChcIj1cIik7XG4gICAgICAgIGlmKHBhcmFtLmxlbmd0aD09PTIpXG4gICAgICAgICAgICBkYXRhc1twYXJhbVswXV09ZGVjb2RlVVJJKHBhcmFtWzFdKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufSIsImltcG9ydCB7IGFwaVVybCwgYXZhaWxhYmxlTGFuZ3MsIHNpdGVVcmwsIHRoZW1lIH0gZnJvbSBcIi4uLy4uLy4uL2NvbmZpZy9pbnN0YW5jZS5qc1wiO1xuY29uc3QgbGFuZz1hdmFpbGFibGVMYW5nc1swXTtcblxuY29uc3QgY29uZmlnVGVtcGxhdGUgPSByZXF1aXJlKFwiLi4vLi4vLi4vdmlld3MvXCIrdGhlbWUrXCIvY29uZmlnL1wiK2xhbmcrXCIuanNcIik7XG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBsZSB0b2tlbiBldCBkZSB0b3V0ZSBmYcOnb24gdsOpcmlmaWVyIMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGVbbGFuZ10uYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGVbbGFuZ10uYWNjb3VudFBhZ2UpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIFBFUk1FVFRBTlQgREUgU0UgRMOJQk9OTkVSIERFIFRPVVMgTEVTIEVOVk9JU1xuXG4vLy8gVW4gdG9rZW4gZXN0IHRyYW5zbWlzIGVuIHBhcmFtw6h0cmUgZGUgbCdVcmwuIElsIGEgdW5lIHZhbGlkaXTDqSBsaW1pdMOpIGRhbnMgbGUgdGVtcHMuIFNpIGxlIHRva2VuIGVzdCBvaywgaWwgbidlc3QgcGFzIG7DqWNlc3NhaXJlIGQnw6p0cmUgY29ubmVjdMOpLlxuLy8vIERhbnMgbGUgY2FzIG/DuSBpbCBuJ2VzdCBwbHVzIHZhbGlkZSwgb24gcGV1dCBwcm9wb3NlciDDoCBsJ3V0aWxpc2F0ZXVyIGRlIHNlIGNvbm5lY3RlciDDoCBzb24gY29tcHRlIHBvdXIgc2UgZMOpc2Fib25uZXIuXG4vLy8gU2kgbGUgdG9rZW4gZXN0IG9rLCBvbiB2YWxpZGUgZW5yZWdpc3RyZW1lbnQgbGUgZMOpc2Fib25uZW1lbnQgZXQgYWZmaWNoZSB1biBtZXNzYWdlIGRlIGNvbmZpcm1hdGlvblxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuY29uc3QgdHh0U3Vic2NyaXB0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvc3Vic2NyaXB0aW9uXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmxldCBjb25maWc7XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHsgXG4gICAgICAgICAgICBjb25zdCBkYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy51bnN1YnNjcmliZVJvdXRlK2RhdGFzLnQpO1xuICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ0Zyb250RW5kLmFjY291bnRQYWdlKSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpcHRpb25GYWlsLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ0Zyb250RW5kLmFjY291bnRQYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2NvbmZpZy9pbnN0YW5jZS5qcyIsIndlYnBhY2s6Ly8vLi4vY29uZmlnL3F1ZXN0aW9ubmFpcmVzLmpzIiwid2VicGFjazovLy8uLi9jb25maWcvdXNlcnMuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3N1YnNjcmlwdGlvbiQiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC91c2VyJCIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci9nZW5lcmFsLmpzIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL3N1YnNjcmlwdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi4vbGFuZy9mci91c2VyLmpzIiwid2VicGFjazovLy8uLi90b29scy9tYWluLmpzIiwid2VicGFjazovLy8uLi92aWV3cyBzeW5jIF5cXC5cXC8uKlxcLmpzJCIsIndlYnBhY2s6Ly8vLi4vdmlld3MvZGVmYXVsdC9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdW5zdWJzY3JpYmUuanMiXSwibmFtZXMiOlsidXNlcnMiLCJyZXF1aXJlIiwicXVlc3Rpb25uYWlyZXMiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBpVXJsIiwic2l0ZVVybCIsImFkbWluTmFtZSIsImFkbWluRW1haWwiLCJzZW5kZXJOYW1lIiwic2VuZGVyRW1haWwiLCJhZG1pbkxhbmciLCJ0aGVtZSIsImF2YWlsYWJsZUxhbmdzIiwic2l0ZU5hbWUiLCJiZWdpbkNvZGVHb2RmYXRoZXIiLCJjcm9uVGltaW5nQWxlcnRJblNlY29uZGUiLCJyZXNwb25zZVRpbWluZ0FsZXJ0SW5TZWNvbmRlIiwidG9rZW5TaWdudXBWYWxpZGF0aW9uVGltZUluSG91cnMiLCJ0b2tlbkxvZ2luTGlua1RpbWVJbkhvdXJzIiwidG9rZW5Db25uZXhpb25NaW5UaW1lSW5Ib3VycyIsInRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5cyIsInRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzIiwidG9rZW5EZWxldGVVc2VyVGltZUluSG91cnMiLCJ0b2tlblVuc3Vic2NyaWJlTGlua1RpbWVJbkRheXMiLCJmcmVlQWNjb3VudFRpbWluZ0luRGF5cyIsImZyZWVBY2NvdW50RXhwaXJhdGlvbk5vdGlmaWNhdGlvbkluRGF5cyIsImFjY291bnRFeHBpcmF0aW9uRmlyc3ROb3RpZmljYXRpb25JbkRheXMiLCJhY2NvdW50RXhwaXJhdGlvblNlY29uZE5vdGlmaWNhdGlvbkluRGF5cyIsImluYWN0aXZlQWNjb3VudFRpbWVUb0RlbGV0ZUluRGF5cyIsIm5iUXVlc3Rpb25zTWluIiwibmJRdWVzdGlvbnNNYXgiLCJuYkNob2ljZXNNYXgiLCJuYk5ld1F1ZXN0aW9ubmFpcmVzIiwiaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW4iLCJob3VyR2l2ZU5ld1F1ZXN0aW9ubmFpcmVFbmQiLCJudW1iZXJOZXdRdWVzdGlvbm5haXJlQXRTYW1lVGltZSIsIm1pblNlYXJjaFF1ZXN0aW9ubmFpcmVzIiwibmJJbGx1c3RyYXRpb25zTWluIiwibmJJbGx1c3RyYXRpb25zTWF4IiwibWF4SWxsdXN0cmF0aW9uU2l6ZWluT2N0ZXQiLCJtaW1lVHlwZXNGb3JJbGx1c3RyYXRpb24iLCJpbGx1c3RyYXRpb25zV2lkdGhNYXhJblB4IiwiaWxsdXN0cmF0aW9uc01pbmlhdHVyZXNXaWR0aE1heEluUHgiLCJuYkxpbmtzTWluIiwibmJMaW5rc01heCIsInBhc3N3b3JkIiwibWlubGVuZ3RoIiwiZGlyQ2FjaGVVc2VycyIsImRpckNhY2hlVXNlcnNBbnN3ZXJzIiwiZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyIsImRpckNhY2hlUXVlc3Rpb25zIiwiZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIiwiZGlySFRNTFF1ZXN0aW9ubmFpcmUiLCJkaXJXZWJRdWVzdGlvbm5haXJlIiwicXVlc3Rpb25uYWlyZVJvdXRlcyIsImdldFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJwcmV2aWV3UXVlc3Rpb25uYWlyZVJvdXRlcyIsInB1Ymxpc2hlZFF1ZXN0aW9ubmFpcmVSb3V0ZXMiLCJzYXZlQW5zd2Vyc1JvdXRlIiwiZ2V0U3RhdHNRdWVzdGlvbm5haXJlcyIsInNlYXJjaFF1ZXN0aW9ubmFpcmVzUm91dGUiLCJnZXRSYW5kb21RdWVzdGlvbm5haXJlc1JvdXRlIiwic2VhcmNoQWRtaW5RdWVzdGlvbm5haXJlc1JvdXRlIiwiZ2V0TGlzdE5leHRRdWVzdGlvbm5haXJlcyIsInJlZ2VuZXJhdGVIVE1MIiwicXVlc3Rpb25zUm91dGUiLCJ0YWdzU2VhcmNoUm91dGUiLCJnZXRRdWVzdGlvbm5haXJlc1dpdGhvdXRBbnN3ZXIiLCJnZXRQcmV2aW91c0Fuc3dlcnMiLCJnZXRTdGF0c0Fuc3dlcnMiLCJnZXRBZG1pblN0YXRzIiwiUXVlc3Rpb25uYWlyZSIsInRpdGxlIiwibWF4bGVuZ3RoIiwicmVxdWlyZWQiLCJzbHVnIiwiaW50cm9kdWN0aW9uIiwic2VhcmNoUXVlc3Rpb25uYWlyZXMiLCJRdWVzdGlvbiIsInRleHQiLCJyYW5rIiwibWluIiwiZGVmYXVsdFZhbHVlIiwiQ2hvaWNlIiwibmJUYWdzTWluIiwibmJUYWdzTWF4IiwiZGlyQ2FjaGVUYWdzIiwiZGlySFRNTFRhZ3MiLCJkaXJXZWJUYWdzIiwibmJSYW5kb21SZXN1bHRzIiwidXNlclJvdXRlcyIsInN1YnNjcmliZVJvdXRlIiwiZ2V0R29kZmF0aGVyUm91dGUiLCJjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZSIsImNoZWNrU3Vic2NyaWJlVG9rZW5Sb3V0ZSIsImNoZWNrTG9naW5Sb3V0ZSIsImNvbm5lY3Rpb25Sb3V0ZSIsImdldExvZ2luTGlua1JvdXRlIiwiY29ubmVjdGlvbldpdGhMaW5rUm91dGUiLCJnZXRVc2VySW5mb3MiLCJjcmVhdGVVc2VyUm91dGUiLCJ2YWxpZGF0ZVVzZXJSb3V0ZSIsInVwZGF0ZVVzZXJJbmZvcyIsInNlYXJjaFVzZXJSb3V0ZSIsImdldEdvZENoaWxkcyIsImNoZWNrTmV3TG9naW5MaW5rUm91dGUiLCJjaGVja0RlbGV0ZUxpbmtSb3V0ZSIsImdldFBheW1lbnRzIiwidW5zdWJzY3JpYmVSb3V0ZSIsIm5hbWUiLCJlbWFpbCIsIm5ld1Bhc3N3b3JkIiwiY29kZUdvZGZhdGhlciIsImNndU9rIiwidmFsdWUiLCJ0aW1lRGlmZmVyZW5jZU1pbiIsInRpbWVEaWZmZXJlbmNlTWF4Iiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYWxlcnROZXdXaW5kb3ciLCJidG5MaW5rVG9RdWVzdGlvbm5haXJlIiwic3RhdHNBZG1pbiIsIm5lZWROdW1iZXJPZkRheXMiLCJuZWVkSW50ZWdlck51bWJlck9mRGF5cyIsIm5lZWRNaW5OdW1iZXJPZkRheXMiLCJuZWVkTm90VG9vTG9uZ0RheXNMaXN0IiwibmVlZFZhbGlkRGF5c0xpc3QiLCJuZWVkVW5pcXVlRGF5c0xpc3QiLCJuZWVkS25vd0lmTm90aWNlT2siLCJ1bnN1YnNjcmlwdGlvbk9rIiwidW5zdWJzY3JpcHRpb25GYWlsIiwiYWxsU3Vic2NyaXB0aW9uUHJvY2Vzc2VkIiwibWFpbFN0b3BNYWlsTGlua1R4dCIsIm1haWxOZXdRdWVzdGlvbm5haXJlQm9keVR4dCIsIm5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIiLCJtYWlsRW5kRnJlZVRpbWVTdWJqZWN0IiwibWFpbEVuZEZyZWVUaW1lTGlua1R4dCIsIm1haWxFbmRGcmVlVGltZUJvZHlUeHQiLCJtYWlsRW5kRnJlZVRpbWVCb2R5SFRNTCIsIm1haWxFbmRGcmVlVGltZU1lc3NhZ2UiLCJtYWlsRXhwaXJhdGlvblN1YmplY3QiLCJtYWlsRXhwaXJhdGlvbkxpbmtUeHQiLCJtYWlsRXhwaXJhdGlvbkJvZHlUeHQiLCJtYWlsRXhwaXJhdGlvbkJvZHlIVE1MIiwibWFpbEV4cGlyYXRpb25NZXNzYWdlIiwiaW5mb3NOYkRheXMiLCJpbmZvc0V4cGlyYXRlZCIsImluZm9zTmJEYXlzQWRtaW4iLCJpbmZvc0V4cGlyYXRlZEFkbWluIiwiaXNOb3RWYWxpZGVkIiwiaW5mb3NQYXltZW50c0FkbWluIiwibm90Rm91bmQiLCJuZWVkTmFtZSIsIm5lZWROb3RUb29Mb25nTmFtZSIsIm5lZWRFbWFpbCIsIm5lZWRVbmlxdWVFbWFpbCIsIm5lZWROb3RUb29Mb25nRW1haWwiLCJuZWVkUGFzc1dvcmQiLCJuZWVkTG9uZ1Bhc3NXb3JkIiwicGFzc3dvcmRDb3BpZWQiLCJuZWVkU3RhdHVzIiwibmVlZExhbmd1YWdlIiwibmVlZFZhbGlkTGFzdENvbm5lY3Rpb25EYXRlIiwibmVlZFNNVFAiLCJuZWVkU01UUE5vdEZvdW5kIiwibmVlZEtub3dOZXdzbGV0dGVyT2siLCJuZWVkVGltZURpZmZlcmVuY2UiLCJuZWVkTWluVGltZURpZmZlcmVuY2UiLCJuZWVkTWF4VGltZURpZmZlcmVuY2UiLCJuZWVkVUdDT2siLCJnb2RmYXRoZXJOb3RGb3VuZCIsImdvZGZhdGhlckZvdW5kIiwibWFpbFZhbGlkYXRpb25NZXNzYWdlIiwibWFpbFZhbGlkYXRpb25MaW5rU3ViamVjdCIsIm1haWxWYWxpZGF0aW9uTGlua1R4dCIsIm1haWxWYWxpZGF0aW9uTGlua1NCb2R5VHh0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIiwidmFsaWRhdGlvbk1lc3NhZ2UiLCJ2YWxpZGF0aW9uTWVzc2FnZUFkbWluIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlIiwidmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlQWRtaW4iLCJtYWlsV2VsY29tZVN1YmplY3QiLCJtYWlsV2VsY29tZUxpbmtUeHQiLCJtYWlsV2VsY29tZUJvZHlUeHQiLCJtYWlsV2VsY29tZUJvZHlIVE1MIiwibWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCIsIm1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQiLCJtYWlsVGhhbmtHb2RmYXRoZXJCb2R5VHh0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keUhUTUwiLCJiYWRMaW5rVmFsaWRhdGlvbk1lc3NhZ2UiLCJlbWFpbE5vdEZvdW5kIiwiYWxyZWFkeUNvbm5lY3RlZCIsIm5lZWRCZUNvbm5lY3RlZCIsImNvbm5lY3Rpb25PayIsIm5lZWRDaG9vc2VMb2dpbldheSIsIm5lZWRWYWxpZGF0aW9uVG9Mb2dpbiIsInRvb01hbnlMb2dpbkZhaWxzIiwiYmFkUGFzc3dvcmQiLCJtYWlsTG9naW5MaW5rU3ViamVjdCIsIm1haWxMb2dpbkxpbmtUeHQiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5MaW5rVHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keVR4dCIsIm1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIiwibWFpbFVwZGF0ZUxvZ2luTGlua01lc3NhZ2UiLCJ1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXIiLCJ1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIiLCJtYWlsVXBkYXRlTG9naW5Pa01lc3NhZ2UiLCJ1cGRhdGVkRmFpbGVkR29kZmF0aGVyTm90Rm91bmQiLCJjcmVhdGlvbk9rTWVzc2FnZSIsIm1haWxEZWxldGVTdWJqZWN0IiwibWFpbERlbGV0ZUxpbmtUeHQiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiaGVhZExpbmtzIiwiYW5jaG9yIiwiYXR0cmlidXRlcyIsImhyZWYiLCJpZCIsImZvb3RMaW5rcyIsInJlbCIsIm1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlIiwidXNlckhvbWVQYWdlIiwiYWRtaW5Ib21lUGFnZSIsIm1hbmFnZXJIb21lUGFnZSIsInN1YnNjcmliZVBhZ2UiLCJjb25uZWN0aW9uUGFnZSIsImFjY291bnRQYWdlIiwicXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZSIsInVzZXJzTWFuYWdlbWVudFBhZ2UiLCJuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIiwiaWxsdXN0cmF0aW9uRGlyIiwic2l0ZVNsb2dhbiIsImhvbWVUaXRsZTEiLCJob21lUDEiLCJob21lVGl0bGUyIiwiaG9tZVAyIiwibmV3UXVlc3Rpb25uYWlyZXNUaXRsZSIsIm5ld1F1ZXN0aW9ubmFpcmVzSW50cm8iLCJleHBsYW5hdGlvblRpdGxlIiwiZXhwbGFuYXRpb25UeHQiLCJub0pTTm90aWZpY2F0aW9uIiwidGFnc0xpc3RUeHQiLCJtYXhRdWVzdGlvbm5haXJlc1NpdGVIb21lUGFnZSIsInZhbGlkYXRpb25MaW5rUGFnZSIsImxvZ2luTGlua1BhZ2UiLCJuZXdMb2dpbkxpbmtQYWdlIiwiZGVsZXRlTGlua1BhZ2UiLCJzdG9wTWFpbFBhZ2UiLCJ1cGRhdGVBY2NvdW50UGFnZSIsImFib3V0UGFnZSIsImhvbWVQYWdlVHh0IiwiaG9tZUJ0bkFib3V0VHh0IiwiaG9tZUJ0blN1YnNjcmliZVR4dCIsIm5ld3NMaXN0VGl0bGUiLCJtYWlsUmVjaXBpZW50VHh0Iiwic2F2ZUxvY2FseSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldExvY2FseSIsImpzb24iLCJwYXJzZSIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiYWRkRWxlbWVudCIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiQXJyYXkiLCJpc0FycmF5IiwiaSIsImNsYXNzTGlzdCIsImFkZCIsImF0dHJpYnV0TmFtZSIsInNldEF0dHJpYnV0ZSIsImlubmVySFRNTCIsImFwcGVuZENoaWxkIiwiaGVsbG9EZXYiLCJjb25zb2xlIiwibG9nIiwidXBkYXRlQWNjb3VudExpbmsiLCJzdGF0dXMiLCJjb25maWdUZW1wbGF0ZSIsImxpbmsiLCJnZXRFbGVtZW50QnlJZCIsImhvbWVQYWdlIiwiZ2V0VXJsUGFyYW1zIiwibG9jYXRpb24iLCJzZWFyY2giLCJwYXJhbWV0ZXJzIiwic3BsaXQiLCJwYXJhbSIsImRhdGFzIiwiZGVjb2RlVVJJIiwiZ2V0Q29uZmlnIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsIm9wZW4iLCJvbmxvYWQiLCJyZXNwb25zZVRleHQiLCJvbmVycm9yIiwic3RhdHVzVGV4dCIsInNlbmQiLCJnZXRUaW1lRGlmZmVyZW5jZSIsInRpbWVMb2NhbCIsImdldFRpbWV6b25lT2Zmc2V0IiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwic2V0U2Vzc2lvbiIsInVzZXJJZCIsInRva2VuIiwiZHVyYXRpb25UUyIsInN0b3JhZ2VVc2VyIiwiZHVyYXRpb24iLCJjaGVja0Fuc3dlckRhdGFzIiwibGFzdEFuc3dlciIsImFuc3dlciIsIm5iQ29ycmVjdEFuc3dlcnMiLCJRdWVzdGlvbm5haXJlSWQiLCJuYlF1ZXN0aW9ucyIsImNoZWNrU2Vzc2lvbiIsInVybFJlZGlyZWN0aW9uIiwibWVzc2FnZSIsInVybFdhbnRlZCIsInVzZXJEYXRhcyIsInJlZGlyZWN0VXNlciIsInVzZXIiLCJub3ciLCJyZXNwb25zZSIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50Iiwid2luZG93IiwiaW5kZXhPZiIsImFzc2lnbiIsImNvbmZpZ0Zyb250RW5kIiwidHh0IiwidHh0VXNlcnMiLCJ0eHRTdWJzY3JpcHRpb25zIiwiZGl2UmVzcG9uc2UiLCJjb25maWciLCJpbml0aWFsaXNlIiwidCIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJET05FIl0sIm1hcHBpbmdzIjoiO1FBQUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7OztRQUdBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBO1FBQ0E7UUFDQSwwQ0FBMEMsZ0NBQWdDO1FBQzFFO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0Esd0RBQXdELGtCQUFrQjtRQUMxRTtRQUNBLGlEQUFpRCxjQUFjO1FBQy9EOztRQUVBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQSx5Q0FBeUMsaUNBQWlDO1FBQzFFLGdIQUFnSCxtQkFBbUIsRUFBRTtRQUNySTtRQUNBOztRQUVBO1FBQ0E7UUFDQTtRQUNBLDJCQUEyQiwwQkFBMEIsRUFBRTtRQUN2RCxpQ0FBaUMsZUFBZTtRQUNoRDtRQUNBO1FBQ0E7O1FBRUE7UUFDQSxzREFBc0QsK0RBQStEOztRQUVySDtRQUNBOzs7UUFHQTtRQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FDbEZBLElBQU1BLEtBQUssR0FBR0MsbUJBQU8sQ0FBQyxtQ0FBRCxDQUFyQjs7QUFDQSxJQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMscURBQUQsQ0FBOUI7O0FBRUFFLE1BQU0sQ0FBQ0MsT0FBUDtBQUVJQyxRQUFNLEVBQUUsMkJBRlo7QUFHSUMsU0FBTyxFQUFFLHVCQUhiO0FBSUlDLFdBQVMsRUFBRSxTQUpmO0FBS0lDLFlBQVUsRUFBRSxtQkFMaEI7QUFNSUMsWUFBVSxF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LENBQUNJLEtBQUwsQ0FBVyxLQUFLZ0QsWUFBaEIsQ0FBYjtBQUNBLHdCQUFJLEtBQUtyQixNQUFMLEtBQWdCLEdBQWhCLElBQXVCc0QsUUFBUSxDQUFDTixPQUFULElBQW9CMUosU0FBL0MsRUFDSW1GLGdFQUFVLENBQUMwRixXQUFELEVBQWMsR0FBZCxFQUFtQmIsUUFBUSxDQUFDTixPQUFULENBQWlCN0ksT0FBakIsQ0FBeUIsTUFBekIsRUFBaUM0SixjQUFjLENBQUMvSCxXQUFoRCxDQUFuQixFQUFpRixFQUFqRixFQUFxRixDQUFDLFNBQUQsQ0FBckYsQ0FBVixDQURKLEtBR0l5QyxnRUFBVSxDQUFDMEYsV0FBRCxFQUFjLEdBQWQsRUFBbUJELGdCQUFnQixDQUFDcFIsa0JBQWpCLENBQW9DcUgsT0FBcEMsQ0FBNEMsTUFBNUMsRUFBb0Q0SixjQUFjLENBQUMvSCxXQUFuRSxDQUFuQixFQUFvRyxFQUFwRyxFQUF3RyxDQUFDLE9BQUQsQ0FBeEcsQ0FBVjtBQUNQO0FBQ0osaUJBVkQ7O0FBV0FpRixtQkFBRyxDQUFDTyxJQUFKO0FBQ0g7QUFDSjtBQTNCVTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQStCWC9DLDRFQUFVLENBQUMwRixXQUFELEVBQWMsR0FBZCxFQUFtQkgsR0FBRyxDQUFDalQsV0FBdkIsRUFBb0MsRUFBcEMsRUFBd0MsQ0FBQyxPQUFELENBQXhDLENBQVY7O0FBL0JXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVZzVCxVQUFVO0FBQUE7QUFBQTtBQUFBLEdBQWhCOztBQWtDQUEsVUFBVSxHIiwiZmlsZSI6Ii4vSlMvdW5zdWJzY3JpYmUuYXBwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pIHtcbiBcdFx0XHRyZXR1cm4gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0uZXhwb3J0cztcbiBcdFx0fVxuIFx0XHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuIFx0XHR2YXIgbW9kdWxlID0gaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0gPSB7XG4gXHRcdFx0aTogbW9kdWxlSWQsXG4gXHRcdFx0bDogZmFsc2UsXG4gXHRcdFx0ZXhwb3J0czoge31cbiBcdFx0fTtcblxuIFx0XHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cbiBcdFx0bW9kdWxlc1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cbiBcdFx0Ly8gRmxhZyB0aGUgbW9kdWxlIGFzIGxvYWRlZFxuIFx0XHRtb2R1bGUubCA9IHRydWU7XG5cbiBcdFx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcbiBcdFx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xuIFx0fVxuXG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBtb2R1bGVzO1xuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZSBjYWNoZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5jID0gaW5zdGFsbGVkTW9kdWxlcztcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZ2V0dGVyIH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSBmdW5jdGlvbihleHBvcnRzKSB7XG4gXHRcdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuIFx0XHR9XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG4gXHR9O1xuXG4gXHQvLyBjcmVhdGUgYSBmYWtlIG5hbWVzcGFjZSBvYmplY3RcbiBcdC8vIG1vZGUgJiAxOiB2YWx1ZSBpcyBhIG1vZHVsZSBpZCwgcmVxdWlyZSBpdFxuIFx0Ly8gbW9kZSAmIDI6IG1lcmdlIGFsbCBwcm9wZXJ0aWVzIG9mIHZhbHVlIGludG8gdGhlIG5zXG4gXHQvLyBtb2RlICYgNDogcmV0dXJuIHZhbHVlIHdoZW4gYWxyZWFkeSBucyBvYmplY3RcbiBcdC8vIG1vZGUgJiA4fDE6IGJlaGF2ZSBsaWtlIHJlcXVpcmVcbiBcdF9fd2VicGFja19yZXF1aXJlX18udCA9IGZ1bmN0aW9uKHZhbHVlLCBtb2RlKSB7XG4gXHRcdGlmKG1vZGUgJiAxKSB2YWx1ZSA9IF9fd2VicGFja19yZXF1aXJlX18odmFsdWUpO1xuIFx0XHRpZihtb2RlICYgOCkgcmV0dXJuIHZhbHVlO1xuIFx0XHRpZigobW9kZSAmIDQpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuIFx0XHR2YXIgbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLnIobnMpO1xuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkobnMsICdkZWZhdWx0JywgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdmFsdWUgfSk7XG4gXHRcdGlmKG1vZGUgJiAyICYmIHR5cGVvZiB2YWx1ZSAhPSAnc3RyaW5nJykgZm9yKHZhciBrZXkgaW4gdmFsdWUpIF9fd2VicGFja19yZXF1aXJlX18uZChucywga2V5LCBmdW5jdGlvbihrZXkpIHsgcmV0dXJuIHZhbHVlW2tleV07IH0uYmluZChudWxsLCBrZXkpKTtcbiBcdFx0cmV0dXJuIG5zO1xuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCJcIjtcblxuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IFwiLi9zcmMvdW5zdWJzY3JpYmUuanNcIik7XG4iLCJjb25zdCB1c2VycyA9IHJlcXVpcmUoXCIuL3VzZXJzXCIpO1xuY29uc3QgcXVlc3Rpb25uYWlyZXMgPSByZXF1aXJlKFwiLi9xdWVzdGlvbm5haXJlc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGFwaVVybDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgc2l0ZVVybDogXCJodHRwOi8vbG9jYWxob3N0OjgwODBcIixcbiAgICBhZG1pbk5hbWU6IFwiRmFicmljZVwiLFxuICAgIGFkbWluRW1haWw6IFwiZGV2QHdpa2lsZXJuaS5jb21cIixcbiAgICBzZW5kZXJOYW1lOiBcIldpa2lMZXJuaSAobG9jYWwpXCIsXG4gICAgc2VuZGVyRW1haWw6IFwiYm9uam91ckB3aWtpbGVybmkuY29tXCIsXG4gICAgYWRtaW5MYW5nOiBcImZyXCIsXG4gICAgdGhlbWU6IFwid2lraWxlcm5pXCIsIC8vIGxlIHRow6htZSB1dGlsaXPDqSAoZGFucyAvdmlld3MpIHBvdXIgZ8OpbsOpcmVyIGxlcyBwYWdlcyBIVE1MLiBDb250aWVudCBzZXMgcHJvcHJlcyBmaWNoaWVycyBkZSBjb25maWd1cmF0aW9uLlxuICAgIGF2YWlsYWJsZUxhbmdzOiBbXCJmclwiXSwvLyBMYW5ndWFnZXMgaW4gd2hpY2ggdGhlIHNpdGUgaXMgYXZhaWxhYmxlLiBUaGUgZmlyc3Qgb25lIGlzIHRoZSBkZWZhdWx0IG9uZS5cbiAgICBzaXRlTmFtZTogXCJXaWtpTGVybmkgKGxvY2FsKVwiLFxuICAgIGJlZ2luQ29kZUdvZGZhdGhlcjogXCJXTFwiLCAvLyBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FuJ3QgY29udGFpbiBcIkBcIiAhXG4gICAgY3JvblRpbWluZ0FsZXJ0SW5TZWNvbmRlOiAxMjAsIC8vIGZvciBsb2dzXG4gICAgcmVzcG9uc2VUaW1pbmdBbGVydEluU2Vjb25kZTogMywgLy8gaWRlbVxuICAgIHRva2VuU2lnbnVwVmFsaWRhdGlvblRpbWVJbkhvdXJzOiBcIjQ4aFwiLCAvLyBodHRwczovL2dpdGh1Yi5jb20vemVpdC9tc1xuICAgIHRva2VuTG9naW5MaW5rVGltZUluSG91cnM6IFwiMWhcIixcbiAgICB0b2tlbkNvbm5leGlvbk1pblRpbWVJbkhvdXJzOiBcIjI0aFwiLFxuICAgIHRva2VuQ29ubmV4aW9uTWF4VGltZUluRGF5czogXCIxODAgZGF5c1wiLFxuICAgIHRva2VuTG9naW5DaGFuZ2luZ1RpbWVJbkhvdXJzOiBcIjFoXCIsLy8gZm9yIGVtYWlsICYgcGFzc3dvcmQgY2hhbmdpbmdcbiAgICB0b2tlbkRlbGV0ZVVzZXJUaW1lSW5Ib3VyczogXCIxaFwiLFxuICAgIHRva2VuVW5zdWJzY3JpYmVMaW5rVGltZUluRGF5czogXCI3IGRheXNcIiwgLy8gdG9rZW4gc2VuZCB3aXRoIHN1YnNjcmlwdGlvbidzIGVtYWlsc1xuICAgIGZyZWVBY2NvdW50VGltaW5nSW5EYXlzOiAxMCxcbiAgICBmcmVlQWNjb3VudEV4cGlyYXRpb25Ob3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgYWNjb3VudEV4cGlyYXRpb25GaXJzdE5vdGlmaWNhdGlvbkluRGF5czogMTQsXG4gICAgYWNjb3VudEV4cGlyYXRpb25TZWNvbmROb3RpZmljYXRpb25JbkRheXM6IDUsXG4gICAgaW5hY3RpdmVBY2NvdW50VGltZVRvRGVsZXRlSW5EYXlzOiAxODAsXG4gICAgLy8gUXVlc3Rpb25uYWlyZXM6XG4gICAgbmJRdWVzdGlvbnNNaW46IDEsIC8vIG1pbmltdW0gbnVtYmVyIG9mIHF1ZXN0aW9ucyBmb3IgdGhlIHF1ZXN0aW9ubmFpcmUgdG8gYmUgcHVibGlzaGFibGVcbiAgICBuYlF1ZXN0aW9uc01heDogMiwgLy8gaWYgMCA9IG5vdCBtYXhpbXVtXG4gICAgbmJDaG9pY2VzTWF4OiAxMCxcbiAgICBuYk5ld1F1ZXN0aW9ubmFpcmVzOiAxMCwvLyBmb3IgUlNTLCBldGMuXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlQmVnaW46MSwgLy8gaW4gdXNlciBsb2NhbCB0aW1lXG4gICAgaG91ckdpdmVOZXdRdWVzdGlvbm5haXJlRW5kOjI0LCAvLyBpZGVtXG4gICAgbnVtYmVyTmV3UXVlc3Rpb25uYWlyZUF0U2FtZVRpbWU6IDUwLCAvLyBmb3IgbWFzcyBtYWlsaW5nXG4gICAgbWluU2VhcmNoUXVlc3Rpb25uYWlyZXM6IDMsXG4gICAgLy8gSWxsdXN0cmF0aW9uczpcbiAgICBuYklsbHVzdHJhdGlvbnNNaW46IDAsXG4gICAgbmJJbGx1c3RyYXRpb25zTWF4OiAxLFxuICAgIG1heElsbHVzdHJhdGlvblNpemVpbk9jdGV0OiAxMDAwMDAwLC8vIHBhcyBjb250csO0bMOpIHBvdXIgbCdpbnN0YW50LiDDgCByZXZvaXIuXG4gICAgbWltZVR5cGVzRm9ySWxsdXN0cmF0aW9uOiBbIFwiaW1hZ2UvanBnXCIsIFwiaW1hZ2UvanBlZ1wiLCBcImltYWdlL3BuZ1wiLCBcImltYWdlL2dpZlwiLCBcImltYWdlL3BuZ1wiIF0sXG4gICAgLy8gLS0gVXBsb2FkIGFuZCByZXNpemU6XG4gICAgaWxsdXN0cmF0aW9uc1dpZHRoTWF4SW5QeDogNDAwLFxuICAgIGlsbHVzdHJhdGlvbnNNaW5pYXR1cmVzV2lkdGhNYXhJblB4OiAyMDAsXG4gICAgLy8gTGlua3M6XG4gICAgbmJMaW5rc01pbjogMSxcbiAgICBuYkxpbmtzTWF4OiAxLFxuICAgIC8vIMOgIHN1cHByaW1lciBxdWFuZCB0b3VzIGxlcyBcInJlcXVpcmVcIiDDoCBqb3VyOlxuICAgIG5iUXVlc3Rpb25zTWluOiBxdWVzdGlvbm5haXJlcy5uYlF1ZXN0aW9uc01pbixcbiAgICBuYlF1ZXN0aW9uc01heDogcXVlc3Rpb25uYWlyZXMubmJRdWVzdGlvbnNNYXgsXG4gICAgbmJDaG9pY2VzTWF4OiBxdWVzdGlvbm5haXJlcy5uYkNob2ljZXNNYXgsXG4gICAgcGFzc3dvcmRNaW5MZW5ndGg6IHVzZXJzLnBhc3N3b3JkLm1pbmxlbmd0aCxcbiAgICBkaXJDYWNoZVVzZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzLFxuICAgIGRpckNhY2hlVXNlcnNBbnN3ZXJzOiB1c2Vycy5kaXJDYWNoZVVzZXJzQW5zd2VycyxcbiAgICBkaXJDYWNoZVF1ZXN0aW9ubmFpcmVzOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ubmFpcmVzLFxuICAgIGRpckNhY2hlUXVlc3Rpb25zOiBxdWVzdGlvbm5haXJlcy5kaXJDYWNoZVF1ZXN0aW9ucyxcbiAgICBkaXJDYWNoZVVzZXJzUXVlc3Rpb25uYWlyZXM6IHF1ZXN0aW9ubmFpcmVzLmRpckNhY2hlVXNlcnNRdWVzdGlvbm5haXJlcyxcbiAgICBkaXJIVE1MUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlySFRNTFF1ZXN0aW9ubmFpcmUsXG4gICAgZGlyV2ViUXVlc3Rpb25uYWlyZTogcXVlc3Rpb25uYWlyZXMuZGlyV2ViUXVlc3Rpb25uYWlyZVxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57ICAgIFxuICAgIC8vIEFQSSdyb3V0ZXMgKGFmdGVyIFwiYXBpVXJsXCIgZGVmaW5lZCBpbiBpbnN0YW5jZS5qcylcbiAgICBxdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWVzdGlvbm5haXJlXCIsXG4gICAgZ2V0UXVlc3Rpb25uYWlyZVJvdXRlczogXCIvZ2V0XCIsXG4gICAgcHJldmlld1F1ZXN0aW9ubmFpcmVSb3V0ZXM6IFwiL3ByZXZpZXdcIixcbiAgICBwdWJsaXNoZWRRdWVzdGlvbm5haXJlUm91dGVzOiBcIi9xdWl6L1wiLFxuICAgIHNhdmVBbnN3ZXJzUm91dGU6IFwiL2Fuc3dlci9cIixcbiAgICBnZXRTdGF0c1F1ZXN0aW9ubmFpcmVzIDogXCIvc3RhdHMvXCIsXG4gICAgc2VhcmNoUXVlc3Rpb25uYWlyZXNSb3V0ZSA6IFwiL3NlYXJjaFwiLFxuICAgIGdldFJhbmRvbVF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9nZXRyYW5kb21cIixcbiAgICBzZWFyY2hBZG1pblF1ZXN0aW9ubmFpcmVzUm91dGUgOiBcIi9zZWFyY2hhZG1pblwiLFxuICAgIGdldExpc3ROZXh0UXVlc3Rpb25uYWlyZXM6IFwiL2dldGxpc3RuZXh0cXVlc3Rpb25uYWlyZXMvXCIsXG4gICAgcmVnZW5lcmF0ZUhUTUw6IFwiL2h0bWxyZWdlbmVyYXRlZFwiLFxuICAgIC8vIC0tIHF1ZXN0aW9ucyAmIGNob2ljZXMgOlxuICAgIHF1ZXN0aW9uc1JvdXRlOiBcIi9xdWVzdGlvbi9cIixcbiAgICAvLyAtLSB0YWdzIDpcbiAgICB0YWdzU2VhcmNoUm91dGU6IFwiL3RhZ3Mvc2VhcmNoL1wiLFxuICAgIC8vIC0tIGFuc3dlcnMgOlxuICAgIGdldFF1ZXN0aW9ubmFpcmVzV2l0aG91dEFuc3dlcjogXCIvd2l0aG91dGFuc3dlci91c2VyL1wiLFxuICAgIGdldFByZXZpb3VzQW5zd2VyczogXCIvdXNlci9hbnN3ZXJzL1wiLFxuICAgIGdldFN0YXRzQW5zd2VycyA6IFwiL3VzZXIvYW53c3dlcnMvc3RhdHMvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBRdWVzdGlvbm5haXJlIDpcbiAgICB7XG4gICAgICAgIHRpdGxlOiB7IG1heGxlbmd0aDogMjU1LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgICAgICBzbHVnOiB7IG1heGxlbmd0aDogMTUwIH0sIC8vIGNoYW1wIHJlcXVpcyBtYWlzIGNhbGN1bMOpIMOgIHBhcnRpciBkdSB0aXRyZSBxZCB2aWRlXG4gICAgICAgIGludHJvZHVjdGlvbjogeyByZXF1aXJlZDogdHJ1ZSB9XG4gICAgfSxcbiAgICBzZWFyY2hRdWVzdGlvbm5haXJlcyA6IHsgbWlubGVuZ3RoOiAzLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIFF1ZXN0aW9uIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgICAgIHJhbms6IHsgcmVxdWlyZWQ6IHRydWUsIG1pbjoxLCBkZWZhdWx0VmFsdWU6MSB9XG4gICAgfSwgICAgICAgICAgXG4gICAgQ2hvaWNlIDpcbiAgICB7XG4gICAgICAgIHRleHQ6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH1cbiAgICB9LCAgICAgICAgICBcbiAgICBuYlF1ZXN0aW9uc01pbjogMSxcbiAgICBuYlF1ZXN0aW9uc01heDogMCxcbiAgICBuYkNob2ljZXNNYXg6IDEwLFxuICAgIG5iVGFnc01pbjogMCxcbiAgICBuYlRhZ3NNYXg6IDAsIC8vIDAgPSBub3QgbWF4ICAgIFxuICAgIC8vIEpTT04gYW5kIEhUTUwgZGlyXG4gICAgZGlyQ2FjaGVRdWVzdGlvbm5haXJlcyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXNcIixcbiAgICBkaXJDYWNoZVF1ZXN0aW9ucyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvcXVlc3Rpb25zXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc1F1ZXN0aW9ubmFpcmVzIDogXCJkYXRhcy91c2Vycy9xdWVzdGlvbm5haXJlc1wiLFxuICAgIGRpckNhY2hlVGFncyA6IFwiZGF0YXMvcXVlc3Rpb25uYWlyZXMvdGFnc1wiLCAgXG4gICAgZGlySFRNTFF1ZXN0aW9ubmFpcmUgOiBcImZyb250L3B1YmxpYy9xdWl6XCIsXG4gICAgZGlySFRNTFRhZ3MgOiBcImZyb250L3B1YmxpYy9xdWl6c1wiLFxuICAgIGRpcldlYlF1ZXN0aW9ubmFpcmUgOiBcInF1aXpcIiwvL3BvdXIgdXJsIHBhZ2VcbiAgICBkaXJXZWJUYWdzIDogXCJxdWl6c1wiLC8vIGlkZW1cbiAgICBuYlJhbmRvbVJlc3VsdHMgOiAzLy8gbGltaXRlIGxlcyByw6lzdWx0YXQgZHUgbW90ZXVyIGRlIHJlY2hlcmNoZSBxdWFuZCBkZW1hbmRlIGRlIHLDqXN1bHRhdHMgYXUgaGFzYXJkXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICAvLyBBUEkncm91dGVzIChhZnRlciBcImFwaVVybFwiIGRlZmluZWQgaW4gaW5zdGFuY2UuanMpXG4gICAgdXNlclJvdXRlczogXCIvdXNlclwiLFxuICAgIHN1YnNjcmliZVJvdXRlOiBcIi9zaWdudXBcIixcbiAgICBnZXRHb2RmYXRoZXJSb3V0ZTogXCIvZ2V0Z29kZmF0aGVyaWRcIixcbiAgICBjaGVja0lmSXNFbWFpbGZyZWVSb3V0ZTogXCIvaXNlbWFpbGZyZWVcIixcbiAgICBjaGVja1N1YnNjcmliZVRva2VuUm91dGU6IFwiL3ZhbGlkYXRpb24vXCIsXG4gICAgY2hlY2tMb2dpblJvdXRlOiBcIi9jaGVja2xvZ2luL1wiLFxuICAgIGNvbm5lY3Rpb25Sb3V0ZTogXCIvbG9naW5cIixcbiAgICBnZXRMb2dpbkxpbmtSb3V0ZTogXCIvZ2V0bG9naW5saW5rXCIsXG4gICAgY29ubmVjdGlvbldpdGhMaW5rUm91dGU6IFwiL2NoZWNrbG9naW5saW5rXCIsXG4gICAgZ2V0VXNlckluZm9zOiBcIi9nZXQvXCIsXG4gICAgY3JlYXRlVXNlclJvdXRlOiBcIi9jcmVhdGVcIixcbiAgICB2YWxpZGF0ZVVzZXJSb3V0ZTogXCIvdmFsaWRhdGUvXCIsXG4gICAgdXBkYXRlVXNlckluZm9zOiBcIi9tb2RpZnkvXCIsXG4gICAgc2VhcmNoVXNlclJvdXRlOiBcIi9zZWFyY2gvXCIsXG4gICAgZ2V0R29kQ2hpbGRzOiBcIi9nZXRnb2RjaGlsZHMvXCIsXG4gICAgY2hlY2tOZXdMb2dpbkxpbmtSb3V0ZTogXCIvY29uZmlybW5ld2xvZ2luL1wiLFxuICAgIGNoZWNrRGVsZXRlTGlua1JvdXRlOiBcIi9jb25maXJtZGVsZXRlL1wiLFxuICAgIGdldFBheW1lbnRzOiBcIi9wYXltZW50L2dldGZvcm9uZXVzZXIvXCIsXG4gICAgdW5zdWJzY3JpYmVSb3V0ZTogXCIvc3Vic2NyaXB0aW9uL3N0b3AvXCIsXG4gICAgZ2V0QWRtaW5TdGF0czogXCIvZ2V0YWRtaW5zdGF0cy9cIixcbiAgICAvLyBmb3JtcyA6IMOgIGNvbXBsw6l0ZXIgYXZlYyB2YWxldXJzIHBhciBkw6lmYXV0LCBldGMuIGNmIG1vZMOobGVcbiAgICBuYW1lOiB7IG1heGxlbmd0aDogNzAsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZW1haWw6IHsgbWF4bGVuZ3RoOiAyNTUsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgcGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIsIHJlcXVpcmVkOiB0cnVlIH0sIC8vIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2JjcnlwdCNzZWN1cml0eS1pc3N1ZXMtYW5kLWNvbmNlcm5zXG4gICAgbmV3UGFzc3dvcmQ6IHsgbWlubGVuZ3RoOiA4LCBtYXhsZW5ndGg6NzIgfSxcbiAgICBjb2RlR29kZmF0aGVyOiB7IG1heGxlbmd0aDogMjU1IH0sXG4gICAgY2d1T2s6IHsgdmFsdWU6IFwidHJ1ZVwiLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRpbWVEaWZmZXJlbmNlTWluOiAtNzIwLFxuICAgIHRpbWVEaWZmZXJlbmNlTWF4Ojg0MCxcbiAgICAvLyBKU09OIGRpclxuICAgIGRpckNhY2hlVXNlcnMgOiBcImRhdGFzL3VzZXJzXCIsXG4gICAgZGlyQ2FjaGVVc2Vyc0Fuc3dlcnMgOiBcImRhdGFzL3VzZXJzL3F1ZXN0aW9ubmFpcmVzL2Fuc3dlcnNcIlxufTtcbiIsInZhciBtYXAgPSB7XG5cdFwiLi9mci9nZW5lcmFsXCI6IFwiLi4vbGFuZy9mci9nZW5lcmFsLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvZ2VuZXJhbCRcIjsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZnIvc3Vic2NyaXB0aW9uXCI6IFwiLi4vbGFuZy9mci9zdWJzY3JpcHRpb24uanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9zdWJzY3JpcHRpb24kXCI7IiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL3VzZXJcIjogXCIuLi9sYW5nL2ZyL3VzZXIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC91c2VyJFwiOyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBzaXRlSFRNTFRpdGxlIDogXCJXaWtpTGVybmkgOiBXaWtpcMOpZGlhIGVuIHF1ZXN0aW9uc1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkF2ZWMgV2lraUxlcm5pLCByZWNldmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlYXV4IHF1aXpzIHBvdXIgdGVzdGVyIHZvcyBjb25uYWlzc2FuY2VzIGV0IGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzLlwiLFxuICAgIHNjcmlwdFRpbWluZ0luZm8gOiBcIkR1csOpZSBkZSBsYSByw6lwb25zZSA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2NyaXB0VGltaW5nQWxlcnQgOiBcIioqKiBTY3JpcHQgbGVudCA6IFNDUklQVF9USU1JTkcgbWlsbGlzZWNvbmRlcywgcm91dGUgOiBTQ1JJUFRfVVJMXCIsXG4gICAgc2VydmVyRXJyb3IgOiBcIkTDqXNvbMOpLiBVbmUgZXJyZXVyIGltcHLDqXZ1ZSBlc3Qgc3VydmVudWUuIFNpIGNlbGEgcGVyc2lzdGUsIG4naMOpc2l0ZXogw6AgcHLDqXZlbmlyIGwnYWRtaW5pc3RyYXRldXIgZHUgc2l0ZS5cIixcbiAgICBzZXJ2ZXJFcnJvckFkbWluIDogXCJCdWcgZGUgbCdhcHBsaWNhdGlvbiA6XCIsXG4gICAgbmVlZGVkUGFyYW1zIDogXCJEZXMgcGFyYW3DqHRyZXMgbsOpY2Vzc2FpcmVzIG1hbnF1YW50cyBzb250IG1hbnF1YW50cy5cIixcbiAgICBiYWRVcmwgOiBcIlRlbnRhdGl2ZSBkJ2FjY8OocyDDoCB1bmUgcGFnZSBuJ2V4aXN0YW50IHBhcyA6XCIsXG4gICAgbm90VmFsaWRGb3JtYXQgOiBcIkZvcm1hdCBub24gdmFsaWRlLlwiLFxuICAgIG5vdEFsbG93ZWQgOiBcIlZvdXMgbidhdmV6IHBhcyBsZXMgZHJvaXRzIG7DqWNlc3NhaXJlcyBwb3VyIGNldHRlIGFjdGlvbi5cIixcbiAgICBub3RSZXF1aXJlZCA6IFwiRmFjdWx0YXRpZi5cIixcbiAgICB1cGRhdGVCdG5UeHQ6IFwiTW9kaWZpZXJcIixcbiAgICBhZGRCdG5UeHQ6IFwiQWpvdXRlclwiLFxuICAgIGRlbGV0ZUJ0blR4dDogXCJTdXBwcmltZXJcIixcbiAgICBhZGRPa01lc3NhZ2UgOiBcIkxlcyBkb25uw6llcyBvbnQgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWVzLlwiLFxuICAgIHVwZGF0ZU9rTWVzc2FnZSA6IFwiTGEgbWlzZSDDoCBqb3VyIMOgIGpvdXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpZS5cIixcbiAgICBkZWxldGVPa01lc3NhZ2UgOiBcIkxhIHN1cHByZXNzaW9uIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZmFpbEF1dGggOiBcIkVycmV1ciBkJ2F1dGhlbnRpZmljYXRpb24uXCIsXG4gICAgZmFpbEF1dGhIZWFkZXIgOiBcIkFic2VuY2UgZGUgaGVhZGVyIEF1dGhvcml6YXRpb24uXCIsXG4gICAgZmFpbEF1dGhUb2tlbiA6IFwiVG9rZW4gaW52YWxpZGUgb3UgdXRpbGlzYXRldXIgbm9uIHRyb3V2w6kuXCIsXG4gICAgZmFpbEF1dGhJZCA6IFwiSWRlbnRpZmlhbnQgbm9uIHZhbGlkZSA6IFwiLFxuICAgIGZhaWxBdXRoQ3JvbiA6IFwiVGVudGF0aXZlIGRlIGxhbmNlbWVudCBkJ3VuIGNyb24gc2FucyBsZSBib24gdG9rZW4uXCIsXG4gICAgcHJldmlvdXNQYWdlIDogXCJQYWdlIHByw6ljw6lkZW50ZVwiLFxuICAgIG5leHRQYWdlIDogXCJQYWdlIHN1aXZhbnRlXCIsXG4gICAgYWxlcnROZXdXaW5kb3c6IFwibm91dmVsbGUgZmVuw6p0cmVcIixcbiAgICBidG5MaW5rVG9RdWVzdGlvbm5haXJlIDogXCJBbGxlciBhdSBxdWl6ICFcIixcbiAgICBzdGF0c0FkbWluIDogXCJEdXJhbnQgbGVzIGRlcm5pw6hyZXMgMjRoIDogTkJfVVNFUlNfMjRIIGNvbXB0ZXMgb250IMOpdMOpIGNyw6nDqXMsIE5CX1NVQlNDUklQVElPTlNfMjRIIHZhbGlkw6lzIGV0IE5CX1VTRVJTX0RFTEVURURfMjRIIHN1cHByaW3DqXMuIE5CX0FOU1dFUlNfMjRIIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPkVuIHRvdXQsIGlsIHkgYSA6IE5CX1VTRVJTX1RPVCBjb21wdGVzLCBkb250IE5CX1NVQlNDUklQVElPTlNfVE9UIHZhbGlkw6lzIGV0IE5CX1NVQlNDUklQVElPTlNfUFJFTUlVTSBjb21wdGVzIHByw6ltaXVtLiBOQl9BTlNXRVJTX1RPVCByw6lwb25zZXMgYXV4IHF1aXpzIG9udCDDqXTDqSBlbnJlZ2lzdHLDqWVzLjxicj5QYXJtaSBsZXMgTkJfVVNFUlNfREVMRVRFRF9UT1QgY29tcHRlcyBzdXBwcmltw6lzLCBOQl9VU0VSU19ERUxFVEVEX1ZBTElERUQgYXZhaWVudCB2YWxpZMOpIGxldXIgY29tcHRlIGV0IE5CX1VTRVJTX0RFTEVURURfUFJFTUlVTSBhdmFpZW50IHNvdXNjcml0IHVuIGNvbXB0ZSBwcsOpbWl1bS5cIlxufTsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgbmVlZE51bWJlck9mRGF5cyA6IFwiSWwgZmF1dCB1biBub21icmUgZGUgam91cnMgcG91ciBsJ2Fib25uZW1lbnQuXCIsXG4gICAgbmVlZEludGVnZXJOdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgZG9pdCDDqnRyZSB1biBub21icmUgZW50aWVyLlwiLFxuICAgIG5lZWRNaW5OdW1iZXJPZkRheXMgOiBcIkxlIG5vbWJyZSBkZSBqb3VycyBkZSBsJ2Fib25uZW1lbnQgbmUgcGV1dCDDqnRyZSBuw6lnYXRpZiAhXCIsXG4gICAgbmVlZE5vdFRvb0xvbmdEYXlzTGlzdCA6IFwiTGEgbGlzdGUgZGUgam91cnMgc8OpbGVjdGlvbm7DqXMgbidhIHBhcyBsZSBib24gZm9ybWF0ICh0cm9wIGxvbmd1ZSkuXCIsXG4gICAgbmVlZFZhbGlkRGF5c0xpc3QgOiBcIkxhIGxpc3RlIGRlIGpvdXJzIHPDqWxlY3Rpb25uw6lzIG4nYSBwYXMgbGUgYm9uIGZvcm1hdC4gQ2FyYWN0w6hyZSBub24gdmFsaWRlIDogXCIsXG4gICAgbmVlZFVuaXF1ZURheXNMaXN0IDogXCJMYSBsaXN0ZSBkZSBqb3VycyBzw6lsZWN0aW9ubsOpcyBuJ2EgcGFzIGxlIGJvbiBmb3JtYXQuIERvdWJsb24gOiBcIixcbiAgICBuZWVkS25vd0lmTm90aWNlT2sgOiBcIklsIG1hbnF1ZSBsJ2luZm9ybWF0aW9uIHN1ciBsJ2FjY2VwdGF0aW9uIG91IG5vbiBkZSByZWNldm9pciBkZXMgbm90aWZpY2F0aW9ucy5cIixcbiAgICB1bnN1YnNjcmlwdGlvbk9rIDogXCJWb3RyZSBkZW1hbmRlIGEgYmllbiDDqXTDqSBwcmlzZSBlbiBjb21wdGUuIFZvdXMgbmUgcmVjZXZyZXogcGx1cyBkZSBtZXNzYWdlcyB2ZW5hbnQgZHUgc2l0ZSwgc2F1ZiBwb3VyIHZvdXMgc2lnbmFsZXIgbGEgZmluIGRlIHZvdHJlIGFib25uZW1lbnQuPGJyPk4naMOpc2l0ZXogcGFzIDxhIGhyZWY9Jy8jVVJMJz7DoCBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGU8L2E+IHBvdXIgZGUgbm91dmVhdSBhdXRvcmlzZXIgY2VydGFpbnMgZW52b2lzLlwiLFxuICAgIHVuc3Vic2NyaXB0aW9uRmFpbCA6IFwiU2kgdm91cyB2b3lleiBjZSBtZXNzYWdlLCBjJ2VzdCBxdWUgdm90cmUgbGllbiBkZSBkw6lzYWJvbm5lbWVudCBuZSBmb25jdGlvbm5lIHBhcy48YnI+Vm91cyBwb3V2ZXogPGEgaHJlZj0nLyNVUkwnPmFjY8OpZGVyIMOgIHZvdHJlIGNvbXB0ZTwvYT4gcG91ciBkw6lzYWN0aXZlciBsZXMgZW52b2lzIG1hbnVlbGxlbWVudC5cIixcbiAgICBhbGxTdWJzY3JpcHRpb25Qcm9jZXNzZWQgOiBcIlRvdXMgbGVzIGFib25uw6lzIG9udCDDqXTDqSB0cmFpdMOpcyBwb3VyIGxlIG1vbWVudC5cIixcbiAgICBtYWlsU3RvcE1haWxMaW5rVHh0IDogXCJTdG9wcGVyIGxlcyBlbnZvaXMuXCIsXG4gICAgbWFpbE5ld1F1ZXN0aW9ubmFpcmVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5VbiBub3V2ZWF1IHF1aXogdmllbnQgZGUgdm91cyDDqnRyZSBwcm9wb3PDqSA6XFxuXFxuUVVFU1RJT05OQUlSRV9VUkxcXG5cXG5Cb25uZSBsZWN0dXJlICFcXG5cXG5TdG9wcGVyIGxlcyBlbnZvaXMgP1xcblVOU1VCU0NSSUJFX1VSTFwiLFxuICAgIG5vTmV3UXVlc3Rpb25uYWlyZUZvclVzZXIgOiBcIkF1Y3VuIG5vdXZlYXUgcXVlc3Rpb25uYWlyZSB0cm91dsOpIHBvdXIgdW4gYWJvbm7DqSA6IFwiLFxuICAgIG1haWxFbmRGcmVlVGltZVN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCBncmF0dWl0IHZhIGV4cGlyZXJcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVMaW5rVHh0IDogXCJNJ2Fib25uZXIuXCIsXG4gICAgbWFpbEVuZEZyZWVUaW1lQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuXFxuXFxuUG91ciBjb250aW51ZXIgw6AgdXRpbGlzZXIgbGUgc2l0ZSwgdm91cyBwb3V2ZXogc2FucyBhdHRlbmRyZSBzb3VzY3JpcmUgw6AgdW4gYWJvbm5lbWVudCA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRW5kRnJlZVRpbWVCb2R5SFRNTDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Wb3RyZSBhYm9ubmVtZW50IGdyYXR1aXQgw6AgU0lURV9OQU1FIHZhIGV4cGlyZXIgZCdpY2kgcXVlbHF1ZXMgam91cnMuPGJyPjxicj5Qb3VyIGNvbnRpbnVlciDDoCB1dGlsaXNlciBsZSBzaXRlLCB2b3VzIHBvdXZleiBzb3VzY3JpcmUgw6AgdW4gYWJvbm5lbWVudCBzYW5zIHRhcmRlciBlbiBjbGlxdWFudCBzdXIgbGUgbGllbiBjaS1kZXNzb3VzLjwvcD5cIixcbiAgICBtYWlsRW5kRnJlZVRpbWVNZXNzYWdlOiBcIiByZWxhbmNlcyBlbnZvecOpZXMuXCIsXG5cbiAgICBtYWlsRXhwaXJhdGlvblN1YmplY3Q6IFwiVm90cmUgYWJvbm5lbWVudCB2YSBiaWVudMO0dCBleHBpcmVyXCIsXG4gICAgbWFpbEV4cGlyYXRpb25MaW5rVHh0IDogXCJQcm9sb25nZXIgbW9uIGFib25uZW1lbnQuXCIsICAgIFxuICAgIG1haWxFeHBpcmF0aW9uQm9keVR4dDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Wb3RyZSBhYm9ubmVtZW50IMOgIFNJVEVfTkFNRSB2YSBleHBpcmVyIGQnaWNpIHF1ZWxxdWVzIGpvdXJzLlxcblxcblBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIGxlIHNpdGUsIHZvdXMgcG91dmV6IGxlIHByb2xvbmdlciBkw6hzIGF1am91cmQnaHVpIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxFeHBpcmF0aW9uQm9keUhUTUw6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm90cmUgYWJvbm5lbWVudCDDoCBTSVRFX05BTUUgdmEgZXhwaXJlciBkJ2ljaSBxdWVscXVlcyBqb3Vycy48YnI+PGJyPlBvdXIgY29udGludWVyIMOgIHV0aWxpc2VyIFNJVEVfTkFNRSwgdm91cyBwb3V2ZXogbGUgcHJvbG9uZ2VyIGTDqHMgYXVqb3VyZCdodWkgZW4gY2xpcXVhbnQgc3VyIGxlIGxpZW4gY2ktZGVzc291cy48L3A+XCIsXG5cbiAgICBtYWlsRXhwaXJhdGlvbk1lc3NhZ2U6IFwiRklSU1QgcHJlbWnDqHJlcyBldCBTRUNPTkQgZGV1eGnDqG1lcyByZWxhbmNlcyBlbnZvecOpZXMgcG91ciBkZXMgYWJvbm5lbWVudHMgZXhwaXJhbnQgZCdpY2kgcGV1LlwiLFxuICAgIGluZm9zTmJEYXlzOiBcIlZvdHJlIGFib25uZW1lbnQgZXN0IGVuY29yZSB2YWxhYmxlIDxiPnBlbmRhbnQgTkJfREFZUyBqb3VyczwvYj4uPGJyPlZvdXMgcG91dmV6IMOgIHRvdXQgbW9tZW50IHByb2xvbmdlciB2b3RyZSBhYm9ubmVtZW50IGVuIHN1aXZhbnQgbGVzIGluZGljYXRpb25zIGNpLWRlc3NvdXMgOlwiLFxuICAgIGluZm9zRXhwaXJhdGVkOiBcIlZvdHJlIGFib25uZW1lbnQgYSBleHBpcsOpLCBtYWlzIGlsIHZvdXMgcmVzdGUgZW5jb3JlIHF1ZWxxdWVzIGpvdXJzIGF2YW50IHF1ZSB2b3RyZSBjb21wdGUgZXQgdm9zIGRvbm7DqWVzIG5lIHNvaWVudCBjb21wbMOodGVtZW50IHN1cHByaW3DqWVzLjxicj5Qb3VyIGNlIGZhaXJlLCBzdWl2ZXogc2FucyB0YXJkZXIgbGVzIGluZGljYXRpb25zIGNpLWRlc3NvdXMgOlwiLFxuICAgIGluZm9zTmJEYXlzQWRtaW46IFwiQ2V0IGFib25uZW1lbnQgZXN0IGVuY29yZSB2YWxhYmxlIDxiPnBlbmRhbnQgTkJfREFZUyBqb3VyczwvYj4uXCIsXG4gICAgaW5mb3NFeHBpcmF0ZWRBZG1pbjogXCJDZXQgYWJvbm5lbWVudCBhIGV4cGlyw6kuXCIsICBcbiAgICBpc05vdFZhbGlkZWQgOiBcIkNldCB1dGlsaXNhdGV1ciBuJ2EgcGFzIGVuY29yZSB2YWxpZMOpIHNvbiBjb21wdGUuPGJyPlZvdXMgcG91dmV6IGxlIGZhaXJlIMOgIHNhIHBsYWNlIDxhIGhyZWY9JyN2YWxpZGF0aW9uT2snPmVuIGNvY2hhbnQgbGEgY2FzZSBpbmRpcXXDqWU8L2E+IGV0IGVucmVnaXN0cmFudC5cIixcbiAgICBpbmZvc1BheW1lbnRzQWRtaW4gOiBcIkRBVEVfUEFZTUVOVCA6IHBhaWVtZW50IGRlIEFNT1VOVCDigqwgYXUgbm9tIGRlIENMSUVOVF9OQU1FLlwiLFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIHZvdHJlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIChDdHJsK1YpIG/DuSB2b3VzIGxlIHNvdWhhaXRlei5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciBuJ2Egw6l0w6kgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb25cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtUeHQgOiBcIlZhbGlkZXIgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsVmFsaWRhdGlvbkxpbmtTQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1NCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+UG91ciB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIGNpLWRlc3NvdXMgZGFucyBsZXMgMjRoLjwvcD5cIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgdmllbnQgYmllbiBkJ8OqdHJlIHZhbGlkw6kuIE1lcmNpIGV0IGJpZW52ZW51ZSAhPGJyPlZvdXMgcG91dmV6IHNhbnMgdGFyZGVyIHZvdXMgY29ubmVjdGVyIGNpLWRlc3NvdXMgcG91ciBhY2PDqWRlciDDoCB2b3RyZSBjb21wdGUuXCIsXG4gICAgdmFsaWRhdGlvbk1lc3NhZ2VBZG1pbjogXCJMZSBjb21wdGUgYSBiaWVuIMOpdMOpIHZhbGlkw6kuXCIsXG4gICAgdmFsaWRhdGlvbkFscmVhZHlNZXNzYWdlOiBcIklsIHNlbWJsZSBxdWUgdm91cyBheWV6IGTDqWrDoCB2YWxpZMOpIHZvdHJlIGNvbXB0ZS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbjogXCJDZSBjb21wdGUgYSBkw6lqw6Agw6l0w6kgdmFsaWTDqS5cIixcbiAgICBtYWlsV2VsY29tZVN1YmplY3QgOiBcIkJpZW52ZW51ZSAhXCIsXG4gICAgbWFpbFdlbGNvbWVMaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIgw6AgbW9uIGNvbXB0ZS5cIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblZvdXMgdmVuZXogZGUgdmFsaWRlciB2b3RyZSBpbnNjcmlwdGlvbiDDoCBOT01fU0lURS4gTWVyY2kgZXQgYmllbnZlbnVlICFcXG5cXG5TaSB2b3VzIGF2ZXogbGEgbW9pbmRyZSBxdWVzdGlvbiBvdSBzdWdnZXN0aW9uIGNvbmNlcm5hbnQgTk9NX1NJVEUsIG4naMOpc2l0ZXogcGFzIMOgIG1lIGNvbnRhY3RlciBlbiDDqWNyaXZhbnQgw6AgRU1BSUwuXFxuXFxuSmUgdm91cyBjb25zZWlsbGUgZCdhaWxsZXVycyBkJ2Fqb3V0ZXIgRU1BSUwgw6Agdm90cmUgY2FybmV0IGQnYWRyZXNzZXMgcG91ciDDqXZpdGVyIHF1ZSBsZXMgcHJvY2hhaW5zIGVudm9pcyBkdSBzaXRlIG4nYXJyaXZlbnQgZW4gXFxcInNwYW1cXFwiLlxcblxcblBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlcyBxdWl6cyBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuXFxuXFxuUG91ciBjZSBmYWlyZSwgdXRpbGlzZXogbGUgbGllbiBzdWl2YW50IDogTElOS19VUkxcXG5cXG5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQuXCIsXG4gICAgbWFpbFdlbGNvbWVCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+Vm91cyB2ZW5leiBkZSB2YWxpZGVyIHZvdHJlIGluc2NyaXB0aW9uIMOgIE5PTV9TSVRFLiBNZXJjaSBldCBiaWVudmVudWUgITxicj48YnI+U2kgdm91cyBhdmV6IGxhIG1vaW5kcmUgcXVlc3Rpb24gb3Ugc3VnZ2VzdGlvbiBjb25jZXJuYW50IE5PTV9TSVRFLCBuJ2jDqXNpdGV6IHBhcyDDoCBtZSBjb250YWN0ZXIgZW4gw6ljcml2YW50IMOgIDxiPkVNQUlMPC9iPi48YnI+PGJyPkplIHZvdXMgY29uc2VpbGxlIGQnYWlsbGV1cnMgZCdham91dGVyIDxiPkVNQUlMPC9iPiDDoCB2b3RyZSBjYXJuZXQgZCdhZHJlc3NlcyBwb3VyIMOpdml0ZXIgcXVlIGxlcyBwcm9jaGFpbnMgZW52b2lzIGR1IHNpdGUgbidhcnJpdmVudCBlbiA8aT5zcGFtPC9pPi48YnI+PGJyPlBhciBhaWxsZXVycywgcG91ciBnw6lyZXIgdm90cmUgYWJvbm5lbWVudCwgYWNjw6lkZXIgw6Agdm9zIGluZm9ybWF0aW9ucyBvdSBlbmNvcmUgY2hlcmNoZXIgcGx1cyBmYWNpbGVtZW50IHBhcm1pIGxlcyBxdWl6cyBkdSBzaXRlLCB2b3VzIHBvdXZleiDDoCB0b3V0IG1vbWVudCB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUgdXRpbGlzYXRldXIuPGJyPjxicj5Qb3VyIGNlIGZhaXJlLCB1dGlsaXNleiBsZSBsaWVuIGNpLWRlc3NvdXMuPGJyPjxicj5FbmNvcmUgbWVyY2kgZXQgw6AgYmllbnTDtHQuXCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckxpbmtUeHQgOiBcIk1lIGNvbm5lY3RlciDDoCBtb24gY29tcHRlLlwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rVHh0IDogXCJNZSBjb25uZWN0ZXIuXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdm91cyBjb25uZWN0ZXIgw6Agdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+XCIsXG4gICAgbWFpbExvZ2luTGlua01lc3NhZ2UgOiBcIlVuIGxpZW4gZGUgY29ubmV4aW9uIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSBlLW1haWwuIE5lIHRhcmRleiBwYXMgw6AgbCd1dGlsaXNlciwgY2FyIGlsIG4nZXN0IHZhbGFibGUgcXVlIGR1cmFudCBcIixcbiAgICB1cGRhdGVkT2tNZXNzYWdlOiBcIlZvcyBpbmZvcm1hdGlvbnMgb250IGJpZW4gw6l0w6kgbWlzZXMgw6Agam91ci5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBuJ2EgcHUgw6p0cmUgZW5yZWdpc3Ryw6llIGNhciBlbGxlIG4nYSBwYXMgdW4gZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtUeHQgOiBcIlZhbGlkZXIuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuXFxuUG91ciB2YWxpZGVyIHZvcyBub3V2ZWF1eCBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZTogXCJDZXBlbmRhbnQsIHZvdXMgYXZleiBtb2RpZmnDqSBhdSBtb2lucyB1biBkZSB2b3MgaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiAoZW1haWwgZXQvb3UgbW90IGRlIHBhc3NlKSBldCA8Yj52b3VzIGRldmV6IGNsaXF1ZXIgc3VyIGxlIGxpZW4gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmVzIGVudm95w6kgc3VyIHZvdHJlIGFkcmVzc2UgKE5FV19FTUFJTCkgcG91ciB2YWxpZGVyIGNlIGNoYW5nZW1lbnQ8L2I+LiBFbiBhdHRlbmRhbnQsIG1lcmNpIGRlIGNvbnRpbnVlciDDoCB1dGlsaXNlciB2b3MgYW5jaWVucyBpZGVudGlmaWFudHMuXCIsXG4gICAgdXBkYXRlZE5lZWRWYWxpZGF0ZWRVc2VyOiBcIkwndXRpbGlzYXRldXIgcXVlIHZvdXMgc291aGFpdMOpIG1vZGlmaWVyIG4nZXhpc3RlIHBhcy9wbHVzIG91IG4nYSBwYXMgZW5jb3JlIHZhbGlkw6kgc29uIGNvbXB0ZS5cIixcbiAgICB1cGRhdGVkTmVlZEdvb2RHb2RmYXRoZXIgOiBcIk1haXMgbGUgbm91dmVhdSBjb2RlIHBhcnJhaW4gbidhIHB1IMOqdHJlIHJldGVudSwgY2FyIGlsIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gY29tcHRlIHV0aWxpc2F0ZXVyIG91IMOgIGwndXRpbGlzYXRldXIgbHVpLW3Dqm1lLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZTogXCJMYSBtaXNlIMOgIGpvdXIgZGUgdm9zIGlkZW50aWZpYW50cyBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIHVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCA6IFwiTCdpZGVudGlmaWFudCBmb3VybmkgcG91ciBsZSBwYXJyYWluIG5lIGNvcnJlc3BvbmQgw6AgYXVjdW4gdXRpbGlzYXRldXIuXCIsXG4gICAgY3JlYXRpb25Pa01lc3NhZ2U6IFwiTGUgbm91dmVsIHV0aWxpc2F0ZXVyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqS5cIixcbiAgICBtYWlsRGVsZXRlU3ViamVjdCA6IFwiQ29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZS5cIixcbiAgICBtYWlsRGVsZXRlTGlua1R4dCA6IFwiQ29uZmlybWVyLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5cXG5Qb3VyIGNvbmZpcm1lciBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6XFxuTElOS19VUkxcIixcbiAgICBtYWlsRGVsZXRlQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlBvdXIgY29uZmlybWVyIGxhIHN1cHByZXNzaW9uIGRlIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBjaS1kZXNzb3VzIHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJ2YXIgbWFwID0ge1xuXHRcIi4vZGVmYXVsdC9jb25maWcvZnIuanNcIjogXCIuLi92aWV3cy9kZWZhdWx0L2NvbmZpZy9mci5qc1wiLFxuXHRcIi4vd2lraWxlcm5pL2NvbmZpZy9mci5qc1wiOiBcIi4uL3ZpZXdzL3dpa2lsZXJuaS9jb25maWcvZnIuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vdmlld3Mgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwuanMkXCI7IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkFjY3VlaWxcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiIH0gfSxcbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNyw6lkaXRzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jcmVkaXRzLmh0bWxcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIk1lbnRpb25zIGzDqWdhbGVzXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9tZW50aW9ucy1sZWdhbGVzLmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJEb25uw6llcyBwZXJzb25uZWxsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2Rvbm5lZXMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQy5HLlUuXCIsIGF0dHJpYnV0ZXM6IHsgaHJlZjpcIi9jZ3UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkMuRy5WLlwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY2d2Lmh0bWxcIiwgcmVsOiBcIm5vZm9sbG93XCIgfSB9LFxuICAgIF0sXG4gICAgbWF4UXVlc3Rpb25uYWlyZXNCeVBhZ2U6IDEwLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIGFjY291bnRQYWdlOiBcImNvbXB0ZS5odG1sXCIsXG4gICAgcXVlc3Rpb25uYWlyZXNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXF1aXpzLmh0bWxcIixcbiAgICB1c2Vyc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tdXRpbGlzYXRldXJzLmh0bWxcIixcbiAgICBuYlF1ZXN0aW9ubmFpcmVzVXNlckhvbWVQYWdlIDogMTAsXG4gICAgaWxsdXN0cmF0aW9uRGlyIDogXCIvaW1nL3F1aXpzL1wiLFxuICAgIHNpdGVTbG9nYW46IFwiQ3VsdGl2b25zIG5vdHJlIGphcmRpbiAhXCIsXG4gICAgaG9tZVRpdGxlMTogXCJEZSBuYXR1cmUgY3VyaWV1c2UgP1wiLFxuICAgIGhvbWVQMTogXCJBdmVjIFdpa2lMZXJuaSB2b3VzIGFwcHJlbmV6IGNoYXF1ZSBqb3VyIGRlIG5vdXZlbGxlcyBjaG9zZXMuPGJyPkRlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHNvbnQgc8OpbGVjdGlvbm7DqXMgcG91ciB2b3VzIGV0IHNvbnQgc3VpdmlzIGQndW4gcXVpeiB2b3VzIHBlcm1ldHRhbnQgZGUgdGVzdGVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51Ljxicj5EZSBqb3VyIGVuIGpvdXIgZGUgbm91dmVsbGVzIGdyYWluZXMgZGUgc2F2b2lyIHNvbnQgYWluc2kgc2Vtw6llcyBkYW5zIHZvdHJlIFxcXCJqYXJkaW5cXFwiLlwiLFxuICAgIGhvbWVUaXRsZTI6IFwiTGEgY3VsdHVyZSBlbiBsaWJlcnTDqVwiLFxuICAgIGhvbWVQMjogXCJUb3V0IGNvbW1lIHN1ciBXaWtpcMOpZGlhICgqKSwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzbWFsbD48ZW0+KCopIEJpZW4gcXVlIHBhcnRhZ2VhbnQgc2VzIHZhbGV1cnMsIFdpa2lMZXJuaSBlc3QgdW4gcHJvamV0IGluZMOpcGVuZGFudCBkZSBsYSBmb25kYXRpb24gV2lraXDDqWRpYS48L2VtPjwvc21hbGw+XCIsXG4gICAgbmV3UXVlc3Rpb25uYWlyZXNUaXRsZTogXCJMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMgc3VyIFdpa2lMZXJuaVwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzSW50cm86IFwiTGlzdGUgZGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmkuXCIsXG4gICAgZXhwbGFuYXRpb25UaXRsZTogXCJWb3VzIGTDqWNvdXZyZXogV2lraUxlcm5pID9cIixcbiAgICBleHBsYW5hdGlvblR4dDogXCJMZSBwcmluY2lwZSBlc3Qgc2ltcGxlIDogdm91cyBjb21tZW5jZXogcGFyIGxpcmUgbCdhcnRpY2xlIFdpa2lww6lkaWEgZG9udCBsZSBsaWVuIHZvdXMgZXN0IHByb3Bvc8OpLjxicj5QdWlzIHZvdXMgYWZmaWNoZXIgbGUgcXVpeiBwb3VyIHbDqXJpZmllciBjZSBxdWUgdm91cyBlbiBhdmV6IHJldGVudSBkZSB2b3RyZSBsZWN0dXJlLiBWb3VzIG9idGVuZXogYWxvcnMgdm90cmUgcsOpc3VsdGF0IGltbcOpZGlhdGVtZW50Ljxicj48YnI+VG91dGVzIGxlcyByw6lwb25zZXMgc2UgdHJvdXZlbnQgZGFucyBsJ2FydGljbGUgcHJvcG9zw6kgw6AgbGEgbGVjdHVyZS4gPGI+Vm91cyDDqnRlcyBpY2kgcG91ciBhcHByZW5kcmUgZGUgbm91dmVsbGVzIGNob3NlczwvYj4sIG1haXMgbGlicmUgw6Agdm91cyBkJ2Vzc2F5ZXIgZCd5IHLDqXBvbmRyZSBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlF1YW5kIGxlIHN1amV0IHMneSBwcsOqdGUsIG5lIHZvdXMgw6l0b25uZXogcGFzIHNpIGNlcnRhaW5lcyBkZXMgcsOpcG9uc2VzIHByb3Bvc8OpZXMgcGV1dmVudCDDqnRyZSB1biBwZXUgZMOpY2Fsw6llcywgYWJzdXJkZXMuLi4gT24gcGV1dCBhcHByZW5kcmUgYXZlYyBsZSBzb3VyaXJlLCBub24gPyA6LSk8YnI+PGJyPlVuZSBmb2lzIHZvdHJlIHLDqXN1bHRhdCBvYnRlbnUsIGlsIHZvdXMgc2VyYSBwcm9wb3PDqSBkZSBjcsOpZXIgdW4gY29tcHRlIHBvdXIgbGUgc2F1dmVnYXJkZXIuPGJyPkNlIGNvbXB0ZSB2b3VzIHBlcm1ldHRyYSBkZSB0ZXN0ZXIgZGUgbm91dmVhdSBjZSBxdWl6IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gRXQgZGUgcmVjZXZvaXIgcsOpZ3VsacOocmVtZW50IGRlIG5vdXZlbGxlcyBzdWdnZXN0aW9ucyBkZSBsZWN0dXJlcy48YnI+PGJyPk1haXMgPGI+bGEgY3LDqWF0aW9uIGRlIGNlIGNvbXB0ZSBlc3QgZmFjdWx0YXRpdmU8L2I+IGV0IDxhIGhyZWY9Jy9xdWl6cy8nIHRpdGxlPSdMZXMgZGVybmllcnMgcXVpenMgcHVibGnDqXMnPnZvdXMgcG91dmV6IHBhcmNvdXJpciBXaWtpTGVybmkgbGlicmVtZW50PC9hPi5cIixcbiAgICBub0pTTm90aWZpY2F0aW9uOiBcIkTDqXNvbMOpLCBtYWlzIHBvdXIgbCdpbnN0YW50LCBsJ3V0aWxpc2F0aW9uIGRlIFdpa2lMZXJuaSBuw6ljZXNzaXRlIGwnYWN0aXZhdGlvbiBkdSBKYXZhU2NyaXB0LlwiLFxuICAgIHRhZ3NMaXN0VHh0OiBcIlBhcmNvdXJpciBsZXMgcnVicmlxdWVzIDpcIixcbn07IiwibW9kdWxlLmV4cG9ydHMgPVxue1xuICAgIGhlYWRMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkNvbnRhY3RcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NvbnRhY3QuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIlBhcmNvdXJpclwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvcXVpenMvXCIsIGlkOlwiaW5kZXhIZWFkTGlua1wiLCB0aXRsZTpcIkxlcyBkZXJuaWVycyBxdWl6c1wiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTW9uIGNvbXB0ZVwiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvY29ubmV4aW9uLmh0bWxcIiwgaWQ6IFwiYWNjb3VudEhlYWRMaW5rXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCLDgCBwcm9wb3NcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2EtcHJvcG9zLmh0bWxcIiB9IH1cbiAgICBdLFxuICAgIGZvb3RMaW5rczpcbiAgICBbXG4gICAgICAgIHsgYW5jaG9yOiBcIkJsb2dcIiwgYXR0cmlidXRlczogeyBocmVmOlwiaHR0cHM6Ly9mcmFtYXNwaGVyZS5vcmcvcGVvcGxlLzdlNTRiN2EwYjUzMjAxMzg5ZWVmMmEwMDAwMDUzNjI1XCIsIHRpdGxlOlwiQmxvZyBXaWtpTGVybmkgc3VyIGRpYXNwb3JhKlwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiQ3LDqWRpdHNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL2NyZWRpdHMuaHRtbFwiIH0gfSxcbiAgICAgICAgeyBhbmNob3I6IFwiTWVudGlvbnMgbMOpZ2FsZXNcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL21lbnRpb25zLWxlZ2FsZXMuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH0sXG4gICAgICAgIHsgYW5jaG9yOiBcIkRvbm7DqWVzIHBlcnNvbm5lbGxlc1wiLCBhdHRyaWJ1dGVzOiB7IGhyZWY6XCIvZG9ubmVlcy5odG1sXCIgfSB9LFxuICAgICAgICB7IGFuY2hvcjogXCJDR1YgJiBDR1VcIiwgYXR0cmlidXRlczogeyBocmVmOlwiL0NHVi1DR1UuaHRtbFwiLCByZWw6IFwibm9mb2xsb3dcIiB9IH1cbiAgICBdLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzU2l0ZUhvbWVQYWdlOiAzLFxuICAgIG1heFF1ZXN0aW9ubmFpcmVzQnlQYWdlOiA5LFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAzLFxuICAgIHVzZXJIb21lUGFnZSA6IFwiYWNjdWVpbC5odG1sXCIsXG4gICAgYWRtaW5Ib21lUGFnZSA6IFwiYWRtaW4uaHRtbFwiLFxuICAgIG1hbmFnZXJIb21lUGFnZSA6IFwiZ2VzdGlvbi5odG1sXCIsXG4gICAgc3Vic2NyaWJlUGFnZSA6IFwiaW5zY3JpcHRpb24uaHRtbFwiLFxuICAgIGNvbm5lY3Rpb25QYWdlIDogXCJjb25uZXhpb24uaHRtbFwiLFxuICAgIHZhbGlkYXRpb25MaW5rUGFnZSA6IFwidmFsaWRhdGlvbi5odG1sP3Q9XCIsXG4gICAgbG9naW5MaW5rUGFnZSA6IFwibG9naW4uaHRtbD90PVwiLFxuICAgIG5ld0xvZ2luTGlua1BhZ2UgOiBcIm5ld2xvZ2luLmh0bWw/dD1cIixcbiAgICBkZWxldGVMaW5rUGFnZSA6IFwiYXVyZXZvaXIuaHRtbD90PVwiLFxuICAgIHN0b3BNYWlsUGFnZSA6IFwic3RvcC1tYWlsLmh0bWw/dD1cIixcbiAgICBhY2NvdW50UGFnZTogXCJjb21wdGUuaHRtbFwiLFxuICAgIHVwZGF0ZUFjY291bnRQYWdlOiBcIm1vbi1jb21wdGUuaHRtbFwiLFxuICAgIHF1ZXN0aW9ubmFpcmVzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi1xdWl6cy5odG1sXCIsXG4gICAgdXNlcnNNYW5hZ2VtZW50UGFnZTogXCJnZXN0aW9uLXV0aWxpc2F0ZXVycy5odG1sXCIsXG4gICAgYWJvdXRQYWdlOiBcImEtcHJvcG9zLmh0bWxcIixcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCIsXG4gICAgc2l0ZVNsb2dhbjogXCJDdWx0aXZvbnMgbm90cmUgamFyZGluICFcIixcbiAgICBob21lUGFnZVR4dDogXCJQYWdlIGQnYWNjdWVpbFwiLFxuICAgIGhvbWVUaXRsZTE6IFwiRGUgbmF0dXJlIGN1cmlldXNlID9cIixcbiAgICBob21lUDE6IFwiQXZlYyBXaWtpTGVybmksIHZvdXMgYXBwcmVuZXogY2hhcXVlIGpvdXIgZGUgbm91dmVsbGVzIGNob3Nlcy48YnI+RGVzIGFydGljbGVzIGRlIFdpa2lww6lkaWEgc29udCBzw6lsZWN0aW9ubsOpcyBwb3VyIHZvdXMgZXQgc29udCBzdWl2aXMgZCd1biBxdWl6IHZvdXMgcGVybWV0dGFudCBkZSB0ZXN0ZXIgY2UgcXVlIHZvdXMgZW4gYXZleiByZXRlbnUuPGJyPkRlIGpvdXIgZW4gam91ciBkZSBub3V2ZWxsZXMgZ3JhaW5lcyBkZSBzYXZvaXIgc29udCBhaW5zaSBzZW3DqWVzIGRhbnMgdm90cmUgXFxcImphcmRpblxcXCIuXCIsXG4gICAgaG9tZVRpdGxlMjogXCJMYSBjdWx0dXJlIGVuIGxpYmVydMOpXCIsXG4gICAgaG9tZVAyOiBcIlRvdXQgY29tbWUgc3VyIFdpa2lww6lkaWEgPHNwYW4gY2xhc3M9J3Bvc3RzY3JpcHR1bSc+KCopPC9zcGFuPiwgbGUgbG9naWNpZWwgZXQgbGUgY29udGVudSBwYXJ0YWfDqSBzdXIgV2lraUxlcm5pIHNvbnQgbGlicmVzLjxicj5Wb3VzIHBvdXZleiBsZXMgdXRpbGlzZXIsIGxlcyBtb2RpZmllciBldCBsZXMgZGlmZnVzZXIgc2Vsb24gdm90cmUgc291aGFpdC48YnI+U3VyIFdpa2lMZXJuaSwgcGFzIGRlIHB1YmxpY2l0w6ksIG5pIGRlIGNvbW1lcmNpYWxpc2F0aW9uIGRlIHZvcyBkb25uw6llcyBwZXJzb25uZWxsZXMuPGJyPlZvdXMgcG91dmV6IHZlbmlyIHkgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIgZW4gdG91dGUgdHJhbnF1aWxsaXTDqS48YnI+PGJyPjxzcGFuIGNsYXNzPSdwb3N0c2NyaXB0dW0nPigqKSBCaWVuIHF1ZSBwYXJ0YWdlYW50IHNlcyB2YWxldXJzLCBXaWtpTGVybmkgZXN0IHVuIHByb2pldCBpbmTDqXBlbmRhbnQgZGUgbGEgZm9uZGF0aW9uIFdpa2lww6lkaWEuPC9zcGFuPlwiLFxuICAgIGhvbWVCdG5BYm91dFR4dDogXCJFbiBzYXZvaXIgcGx1cyBzdXIgV2lraUxlcm5pICFcIixcbiAgICBob21lQnRuU3Vic2NyaWJlVHh0OiBcIlRlc3RlciBXaWtpTGVybmkgZ3JhdHVpdGVtZW50LlwiLFxuICAgIG5ld1F1ZXN0aW9ubmFpcmVzVGl0bGU6IFwiTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzIHN1ciBXaWtpTGVybmlcIixcbiAgICBuZXdRdWVzdGlvbm5haXJlc0ludHJvOiBcIkxpc3RlIGRlcyBkZXJuaWVycyBxdWl6cyBwdWJsacOpcyBzdXIgV2lraUxlcm5pLlwiLFxuICAgIGV4cGxhbmF0aW9uVGl0bGU6IFwiVm91cyBkw6ljb3V2cmV6IFdpa2lMZXJuaSA/XCIsXG4gICAgZXhwbGFuYXRpb25UeHQ6IFwiTGUgcHJpbmNpcGUgZXN0IHNpbXBsZSA6IHZvdXMgY29tbWVuY2V6IHBhciBsaXJlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIGRvbnQgbGUgbGllbiB2b3VzIGVzdCBwcm9wb3PDqS48YnI+UHVpcyB2b3VzIGFmZmljaGVyIGxlIHF1aXogcG91ciB2w6lyaWZpZXIgY2UgcXVlIHZvdXMgYXZleiByZXRlbnUgZGUgdm90cmUgbGVjdHVyZS4gVm91cyBvYnRlbmV6IGFsb3JzIHZvdHJlIHLDqXN1bHRhdCBpbW3DqWRpYXRlbWVudC48YnI+PGJyPlN1aXZhbnQgbGVzIHF1ZXN0aW9ucywgdW5lIG91IHBsdXNpZXVycyByw6lwb25zZXMgcGV1dmVudCDDqnRyZSBjb3JyZWN0ZXMgZXQgZG9pdmVudCBkb25jIMOqdHJlIGNvY2jDqWVzLiA8Yj5DJ2VzdCB0b3Vqb3VycyBsZSBjb250ZW51IGRlIGwnYXJ0aWNsZSBXaWtpcMOpZGlhIHF1aSBmYWl0IGZvaSBjb25jZXJuYW50IGxlcyBcXFwiYm9ubmVzXFxcIiByw6lwb25zZXM8L2I+LiBNYWlzIGxlcyBhcnRpY2xlcyBkZSBXaWtpcMOpZGlhIHBldXZlbnQgw6l2b2x1ZXIsIGRvbmMgbidow6lzaXRleiBwYXMgPGEgaHJlZj0nL2NvbnRhY3QuaHRtbCc+w6AgbWUgc2lnbmFsZXIgdW5lIGVycmV1cjwvYT4uPGJyPjxicj5Ub3V0ZXMgbGVzIHLDqXBvbnNlcyBzZSB0cm91dmVudCBkYW5zIGwnYXJ0aWNsZSBwcm9wb3PDqSDDoCBsYSBsZWN0dXJlLiA8Yj5Wb3VzIMOqdGVzIGljaSBwb3VyIGFwcHJlbmRyZSBkZSBub3V2ZWxsZXMgY2hvc2VzLCBtYWlzIGxpYnJlIMOgIHZvdXMgZCdlc3NheWVyIGQneSByw6lwb25kcmUgaW1tw6lkaWF0ZW1lbnQ8L2I+Ljxicj48YnI+UXVhbmQgbGUgc3VqZXQgcyd5IHByw6p0ZSwgbmUgdm91cyDDqXRvbm5leiBwYXMgc2kgY2VydGFpbmVzIGRlcyByw6lwb25zZXMgcHJvcG9zw6llcyBwZXV2ZW50IMOqdHJlIHVuIHBldSBkw6ljYWzDqWVzLCBhYnN1cmRlcy4uLiBPbiBwZXV0IGFwcHJlbmRyZSBhdmVjIGxlIHNvdXJpcmUsIG5vbiA/IDotKTxicj48YnI+VW5lIGZvaXMgdm90cmUgcsOpc3VsdGF0IG9idGVudSwgaWwgdm91cyBzZXJhIHByb3Bvc8OpIGRlIGNyw6llciB1biBjb21wdGUgcG91ciBsZSBzYXV2ZWdhcmRlci4gQ2UgY29tcHRlIHZvdXMgcGVybWV0dHJhIGRlIDxiPnRlc3RlciBkZSBub3V2ZWF1IGNlIHF1aXo8L2I+IHBvdXIgdsOpcmlmaWVyIGNlIHF1ZSB2b3VzIGVuIGF2ZXogcmV0ZW51IHBsdXNpZXVycyBqb3Vycywgc2VtYWluZXMsIG1vaXMuLi4gR3LDomNlIMOgIGNlIGNvbXB0ZSwgdm91cyBwb3VycmV6IGF1c3NpIDxiPnJlY2V2b2lyIHLDqWd1bGnDqHJlbWVudCBkZSBub3V2ZWF1eCBxdWl6czwvYj4gcG91ciBjb250aW51ZXIgw6AgXFxcImN1bHRpdmVyIHZvdHJlIGphcmRpblxcXCIuPGJyPjxicj5NYWlzIDxiPmxhIGNyw6lhdGlvbiBkZSBjZSBjb21wdGUgZXN0IGZhY3VsdGF0aXZlPC9iPiBldCA8YSBocmVmPScvcXVpenMvJyB0aXRsZT0nTGVzIGRlcm5pZXJzIHF1aXpzIHB1Ymxpw6lzJz52b3VzIHBvdXZleiBwYXJjb3VyaXIgV2lraUxlcm5pIGxpYnJlbWVudDwvYT4uXCIsXG4gICAgbm9KU05vdGlmaWNhdGlvbjogXCJEw6lzb2zDqSwgbWFpcyBwb3VyIGwnaW5zdGFudCwgbCd1dGlsaXNhdGlvbiBkZSBXaWtpTGVybmkgbsOpY2Vzc2l0ZSBsJ2FjdGl2YXRpb24gZHUgSmF2YVNjcmlwdC5cIixcbiAgICBuZXdzTGlzdFRpdGxlOiBcIkxlcyBkZXJuacOocmVzIGdyYWluZXMgZGUgc2F2b2lyXCIsXG4gICAgdGFnc0xpc3RUeHQ6IFwiUGFyY291cmlyIGxlcyBydWJyaXF1ZXNcIixcbiAgICBtYWlsUmVjaXBpZW50VHh0OiBcIk1lc3NhZ2UgZW52b3nDqSDDoCA6XCIsXG59OyIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgc2VyYSBiaWVudMO0dCBsaXNpYmxlIHN1ciBHaXRsYWIuXFxuIFBvdXIgbGVzIHN1Z2dlc3Rpb25zIGQnYW3DqWxpb3JhdGlvbiBvdSBxdWVzdGlvbnMgOiBkZXZAd2lsaWxlcm5pLmNvbSAqKioqXCIpO1xuICAgIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgY29uc3QgdXBkYXRlQWNjb3VudExpbmsgPSAoc3RhdHVzLCBjb25maWdUZW1wbGF0ZSkgPT5cbntcbiAgICBjb25zdCBsaW5rPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYWNjb3VudEhlYWRMaW5rXCIpO1xuICAgIGNvbnN0IGhvbWVQYWdlPXN0YXR1cytcIkhvbWVQYWdlXCI7XG4gICAgbGluay5ocmVmPVwiL1wiK2NvbmZpZ1RlbXBsYXRlW2hvbWVQYWdlXTtcbn0iLCJpbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSBcIi4uLy4uLy4uL3Rvb2xzL21haW5cIjtcblxuLy8gRm9uY3Rpb24gcsOpY3Vww6lyYW50IGxlcyBwYXJhbcOodHJlcyBwYXNzw6lzIHBhciBsJ3VybFxuZXhwb3J0IGNvbnN0IGdldFVybFBhcmFtcyA9ICgpID0+XG57XG4gICAgaWYoaXNFbXB0eShsb2NhdGlvbi5zZWFyY2gpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICBjb25zdCBwYXJhbWV0ZXJzID0gbG9jYXRpb24uc2VhcmNoLnN1YnN0cmluZygxKS5zcGxpdChcIiZcIik7XG4gICAgaWYoIUFycmF5LmlzQXJyYXkocGFyYW1ldGVycykgfHwgcGFyYW1ldGVycy5sZW5ndGg9PT0wKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIFxuICAgIGxldCBwYXJhbSwgZGF0YXM9e307XG4gICAgZm9yKGxldCBpIGluIHBhcmFtZXRlcnMpXG4gICAge1xuICAgICAgICBwYXJhbSA9IHBhcmFtZXRlcnNbaV0uc3BsaXQoXCI9XCIpO1xuICAgICAgICBpZihwYXJhbS5sZW5ndGg9PT0yKVxuICAgICAgICAgICAgZGF0YXNbcGFyYW1bMF1dPWRlY29kZVVSSShwYXJhbVsxXSk7XG4gICAgfVxuICAgIHJldHVybiBkYXRhcztcbn0iLCJpbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCBzaXRlVXJsLCB0aGVtZSB9IGZyb20gXCIuLi8uLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5cbmNvbnN0IGNvbmZpZ1RlbXBsYXRlID0gcmVxdWlyZShcIi4uLy4uLy4uL3ZpZXdzL1wiK3RoZW1lK1wiL2NvbmZpZy9cIitsYW5nK1wiLmpzXCIpO1xuXG5pbXBvcnQgeyAgY2hlY2tMb2dpblJvdXRlLCB0aW1lRGlmZmVyZW5jZU1heCwgdGltZURpZmZlcmVuY2VNaW4sIHVzZXJSb3V0ZXMgfSBmcm9tIFwiLi4vLi4vLi4vY29uZmlnL3VzZXJzLmpzXCI7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK1wiL3VzZXIvZ2V0Y29uZmlnXCIpO1xuICAgICAgICB4aHIub25sb2FkID0gKCkgPT4gcmVzb2x2ZShKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpKTtcbiAgICAgICAgeGhyLm9uZXJyb3IgPSAoKSA9PiByZWplY3QoeGhyLnN0YXR1c1RleHQpO1xuICAgICAgICB4aHIuc2VuZCgpO1xuICAgIH0pO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0VGltZURpZmZlcmVuY2UgPSAoKSA9Plxue1xuICAgIC8vIG11bHRpcGxpZXIgcGFyIC0xLCBjYXIgYydlc3QgY2UgcXUnaWwgZmF1dCBcImFqb3V0ZXJcIiDDoCBsJ2hldXJlIFVUQyBwb3VyIHJldmVuaXIgZW4gaGV1cmUgbG9jYWxlIHF1aSBtJ2ludMOpcmVzc2UgZXQgbm9uIGwnaW52ZXJzZVxuICAgIGNvbnN0IHRpbWVMb2NhbD1uZXcgRGF0ZSgpLmdldFRpbWV6b25lT2Zmc2V0KCkqLTE7XG4gICAgaWYodGltZUxvY2FsID4gdGltZURpZmZlcmVuY2VNYXggfHwgdGltZUxvY2FsIDwgdGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbjogZHVyYXRpb25UU1xuICAgIH1cbiAgICBzYXZlTG9jYWx5KFwidXNlclwiLCBzdG9yYWdlVXNlcik7XG59XG5cbi8vIFbDqXJpZmllIHF1J2lsIHkgYSBkZXMgZG9ubsOpZXMgbG9jYWxlcyBjb25jZXJuYW50IGxlIHLDqXN1bHRhdCBkJ3VuIHF1aXpcbi8vIEV0IGxlcyBham91dGUgYXV4IGRvbm7DqWVzIGVudm95w6llcyBwYXIgbGVzIGZvcm11bGFpcmVzIGQnaW5zY3JpcHRpb24vY29ubmV4aW9uIHNpIGMnZXN0IGxlIGNhc1xuZXhwb3J0IGNvbnN0IGNoZWNrQW5zd2VyRGF0YXMgPSAoZGF0YXMpID0+XG57XG4gICAgY29uc3QgbGFzdEFuc3dlcj1nZXRMb2NhbHkoXCJsYXN0QW5zd2VyXCIpO1xuICAgIGlmKCFpc0VtcHR5KGxhc3RBbnN3ZXIpKVxuICAgIHtcbiAgICAgICAgY29uc3QgYW5zd2VyPUpTT04ucGFyc2UobGFzdEFuc3dlcik7XG4gICAgICAgIGlmKCFpc0VtcHR5KGFuc3dlci5kdXJhdGlvbikgJiYgIWlzRW1wdHkoYW5zd2VyLm5iQ29ycmVjdEFuc3dlcnMpICYmICFpc0VtcHR5KGFuc3dlci5RdWVzdGlvbm5haXJlSWQpICYmICFpc0VtcHR5KGFuc3dlci5uYlF1ZXN0aW9ucykpXG4gICAgICAgIHtcbiAgICAgICAgICAgIGRhdGFzLmR1cmF0aW9uPWFuc3dlci5kdXJhdGlvbjtcbiAgICAgICAgICAgIGRhdGFzLm5iQ29ycmVjdEFuc3dlcnM9YW5zd2VyLm5iQ29ycmVjdEFuc3dlcnM7XG4gICAgICAgICAgICBkYXRhcy5RdWVzdGlvbm5haXJlSWQ9YW5zd2VyLlF1ZXN0aW9ubmFpcmVJZDtcbiAgICAgICAgICAgIGRhdGFzLm5iUXVlc3Rpb25zPWFuc3dlci5uYlF1ZXN0aW9ucztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59XG5cbi8vIENldHRlIGZvbmN0aW9uIHRlc3RlIGxhIGNvbm5leGlvbiBkZSBsJ3V0aWxpc2F0ZXVyIGQndW5lIHBhZ2Vcbi8vIE9uIHBldXQgZm91cm5pcyB1bmUgbGlzdGUgZGUgc3RhdHV0cyBhY2NlcHTDqXMgKHNpIHZpZGUgPSB0b3VzKSwgYWluc2kgcXUndW5lIHVybCBkZSByZWRpcmVjdGlvbiBzaSBub24gY29ubmVjdMOpLCB1biBtZXNzYWdlIGQnZXJyZXVyIMOgIGFmZmljaGVyIHN1ciBsYSBwYWdlIGRlIGRlc3RpbmF0aW9uIGV0IGwndXJsIHN1ciBsYXF1ZWxsZSByZXZlbmlyIHVuZSBmb2lzIGNvbm5lY3TDqVxuZXhwb3J0IGNvbnN0IGNoZWNrU2Vzc2lvbiA9IGFzeW5jIChzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGFwaVVybCt1c2VyUm91dGVzK2NoZWNrTG9naW5Sb3V0ZSt1c2VyLnRva2VuKTtcbiAgICAgICAgICAgICAgICB4aHIub25sb2FkID0gKCkgPT5cbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoeGhyLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLmlzVmFsaWQgJiYgcmVzcG9uc2UuaWQgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXNwb25zZS5pZD09PXVzZXIuaWQpXG4gICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5uYW1lPXJlc3BvbnNlLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5sYW5ndWFnZT1yZXNwb25zZS5sYW5ndWFnZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLnRpbWVEaWZmZXJlbmNlPXJlc3BvbnNlLnRpbWVEaWZmZXJlbmNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIuc3RhdHVzPXJlc3BvbnNlLnN0YXR1czsvLyBjJ2VzdCBsZSB0b2tlbiBxdWkgc2VydCDDoCB2w6lyaWZpZXIgbGUgc3RhdHV0IMOgIGNoYXF1ZSByZXF1w6p0ZSDDoCBsJ0FQSVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVMb2NhbHkoXCJ1c2VyXCIsIHVzZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpIGlsIHMnYWdpdCBkJ3VuIFwidXNlclwiIGV0IHF1ZSBzb24gYWJvbm5lbWVudCBhIGV4cGlyw6ksIGplIGxlIHJlZGlyaWdlIHZlcnMgbGEgY2Fpc3NlIDotKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLnN0YXR1cz09PVwidXNlclwiICYmIHJlc3BvbnNlLm5iRGF5c09rIDw9IDApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1cmxBY2NvdW50PXNpdGVVcmwrXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnVGVtcGxhdGUuYWNjb3VudFBhZ2UrXCIjc3Vic2NyaWJlXCIpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIFBFUk1FVFRBTlQgREUgU0UgRMOJQk9OTkVSIERFIFRPVVMgTEVTIEVOVk9JU1xuXG4vLy8gVW4gdG9rZW4gZXN0IHRyYW5zbWlzIGVuIHBhcmFtw6h0cmUgZGUgbCdVcmwuIElsIGEgdW5lIHZhbGlkaXTDqSBsaW1pdMOpIGRhbnMgbGUgdGVtcHMuIFNpIGxlIHRva2VuIGVzdCBvaywgaWwgbidlc3QgcGFzIG7DqWNlc3NhaXJlIGQnw6p0cmUgY29ubmVjdMOpLlxuLy8vIERhbnMgbGUgY2FzIG/DuSBpbCBuJ2VzdCBwbHVzIHZhbGlkZSwgb24gcGV1dCBwcm9wb3NlciDDoCBsJ3V0aWxpc2F0ZXVyIGRlIHNlIGNvbm5lY3RlciDDoCBzb24gY29tcHRlIHBvdXIgc2UgZMOpc2Fib25uZXIuXG4vLy8gU2kgbGUgdG9rZW4gZXN0IG9rLCBvbiB2YWxpZGUgZW5yZWdpc3RyZW1lbnQgbGUgZMOpc2Fib25uZW1lbnQgZXQgYWZmaWNoZSB1biBtZXNzYWdlIGRlIGNvbmZpcm1hdGlvblxuXG4vLyBGaWNoaWVyIGRlIGNvbmZpZ3VyYXRpb24gY8O0dMOpIGNsaWVudCA6XG5pbXBvcnQgeyBhcGlVcmwsIGF2YWlsYWJsZUxhbmdzLCB0aGVtZSB9IGZyb20gXCIuLi8uLi9jb25maWcvaW5zdGFuY2UuanNcIjtcbmNvbnN0IGxhbmc9YXZhaWxhYmxlTGFuZ3NbMF07XG5jb25zdCBjb25maWdGcm9udEVuZCA9IHJlcXVpcmUoXCIuLi8uLi92aWV3cy9cIit0aGVtZStcIi9jb25maWcvXCIrbGFuZytcIi5qc1wiKTtcblxuLy8gSW1wb3J0YXRpb24gZGVzIGZvbmN0aW9ucyB1dGlsZSBhdSBzY3JpcHQgOlxuaW1wb3J0IHsgZ2V0TG9jYWx5LCByZW1vdmVMb2NhbHksIHNhdmVMb2NhbHkgfSBmcm9tIFwiLi90b29scy9jbGllbnRzdG9yYWdlLmpzXCI7XG5pbXBvcnQgeyBhZGRFbGVtZW50IH0gZnJvbSBcIi4vdG9vbHMvZG9tLmpzXCI7XG5pbXBvcnQgeyBoZWxsb0RldiB9IGZyb20gXCIuL3Rvb2xzL2V2ZXJ5d2hlcmUuanNcIjtcbmltcG9ydCB7IGdldFVybFBhcmFtcyB9IGZyb20gXCIuL3Rvb2xzL3VybC5qc1wiO1xuaW1wb3J0IHsgY2hlY2tTZXNzaW9uLCBnZXRDb25maWcsIHNldFNlc3Npb24gfSBmcm9tIFwiLi90b29scy91c2Vycy5qc1wiO1xuXG4vLyBEaWN0aW9ubmFpcmVzIDpcbmNvbnN0IHR4dCA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvZ2VuZXJhbFwiKTtcbmNvbnN0IHR4dFVzZXJzID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrbGFuZytcIi91c2VyXCIpO1xuY29uc3QgdHh0U3Vic2NyaXB0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi9sYW5nL1wiK2xhbmcrXCIvc3Vic2NyaXB0aW9uXCIpO1xuXG5jb25zdCBkaXZSZXNwb25zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwicmVzcG9uc2VcIik7XG5cbmhlbGxvRGV2KCk7XG5cbmxldCBjb25maWc7XG5jb25zdCBpbml0aWFsaXNlID0gYXN5bmMgKCkgPT5cbntcbiAgICB0cnlcbiAgICB7XG4gICAgICAgIGNvbmZpZyA9IGF3YWl0IGdldENvbmZpZygpO1xuICAgICAgICBpZighY29uZmlnKVxuICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICBlbHNlXG4gICAgICAgIHsgXG4gICAgICAgICAgICBjb25zdCBkYXRhcz1nZXRVcmxQYXJhbXMoKTtcbiAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgY29uc3QgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG4gICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy51bnN1YnNjcmliZVJvdXRlK2RhdGFzLnQpO1xuICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWFkeVN0YXRlID09IFhNTEh0dHBSZXF1ZXN0LkRPTkUpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXNwb25zZT1KU09OLnBhcnNlKHRoaXMucmVzcG9uc2VUZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwICYmIHJlc3BvbnNlLm1lc3NhZ2UgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCByZXNwb25zZS5tZXNzYWdlLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ0Zyb250RW5kLmFjY291bnRQYWdlKSwgXCJcIiwgW1wic3VjY2Vzc1wiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFN1YnNjcmlwdGlvbnMudW5zdWJzY3JpcHRpb25GYWlsLnJlcGxhY2UoXCIjVVJMXCIsIGNvbmZpZ0Zyb250RW5kLmFjY291bnRQYWdlKSwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHhoci5zZW5kKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2F0Y2goZSlcbiAgICB7XG4gICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHQuc2VydmVyRXJyb3IsIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICB9XG59XG5pbml0aWFsaXNlKCk7Il0sInNvdXJjZVJvb3QiOiIifQ== \ No newline at end of file diff --git a/front/public/JS/validation.app.js b/front/public/JS/validation.app.js deleted file mode 100644 index 8e33f60..0000000 --- a/front/public/JS/validation.app.js +++ /dev/null @@ -1,868 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = "./src/validation.js"); -/******/ }) -/************************************************************************/ -/******/ ({ - -/***/ "../lang sync recursive ^\\.\\/.*\\/general$": -/*!**************************************!*\ - !*** ../lang sync ^\.\/.*\/general$ ***! - \**************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./fr/general": "../lang/fr/general.js" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/general$"; - -/***/ }), - -/***/ "../lang sync recursive ^\\.\\/.*\\/user$": -/*!***********************************!*\ - !*** ../lang sync ^\.\/.*\/user$ ***! - \***********************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./fr/user": "../lang/fr/user.js" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "../lang sync recursive ^\\.\\/.*\\/user$"; - -/***/ }), - -/***/ "../lang/fr/general.js": -/*!*****************************!*\ - !*** ../lang/fr/general.js ***! - \*****************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - siteHTMLTitle: "WikiLerni : qu'allez-vous apprendre aujourd'hui ?", - siteMetaDescription: "Chaque jour, testez vos connaissances et apprenez de nouvelles choses avec WikiLerni.", - scriptTimingInfo: "Durée de la réponse : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", - scriptTimingAlert: "*** Script lent : SCRIPT_TIMING millisecondes, route : SCRIPT_URL", - serverError: "Désolé. Une erreur imprévue est survenue. Si cela persiste, n'hésitez à prévenir l'administrateur du site.", - serverErrorAdmin: "Bug de l'application :", - neededParams: "Des paramètres nécessaires manquants sont manquants.", - badUrl: "Tentative d'accès à une page n'existant pas :", - notValidFormat: "Format non valide.", - notAllowed: "Vous n'avez pas les droits nécessaires pour cette action.", - notRequired: "Facultatif.", - updateBtnTxt: "Modifier", - addBtnTxt: "Ajouter", - deleteBtnTxt: "Supprimer", - addOkMessage: "Les données ont bien été enregistrées.", - updateOkMessage: "La mise à jour à jour a bien été enregistrée.", - deleteOkMessage: "La suppression a bien été enregistrée.", - failAuth: "Erreur d'authentification.", - failAuthHeader: "Absence de header Authorization.", - failAuthToken: "Token invalide ou utilisateur non trouvé.", - failAuthId: "Identifiant non valide : ", - failAuthCron: "Tentative de lancement d'un cron sans le bon token.", - previousPage: "Page précédente", - nextPage: "Page suivante", - btnLinkToQuestionnaire: "Aller au quiz !", - statsAdmin: "Durant les dernières 24h : NB_USERS_24H comptes ont été créés, NB_SUBSCRIPTIONS_24H validés et NB_USERS_DELETED_24H supprimés. NB_ANSWERS_24H réponses aux quizs ont été enregistrées.
    En tout, il y a : NB_USERS_TOT comptes, dont NB_SUBSCRIPTIONS_TOT validés et NB_SUBSCRIPTIONS_PREMIUM comptes prémium. NB_ANSWERS_TOT réponses aux quizs ont été enregistrées.
    Parmi les NB_USERS_DELETED_TOT comptes supprimés, NB_USERS_DELETED_VALIDED avaient validé leur compte et NB_USERS_DELETED_PREMIUM avaient souscrit un compte prémium." -}; - -/***/ }), - -/***/ "../lang/fr/user.js": -/*!**************************!*\ - !*** ../lang/fr/user.js ***! - \**************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - notFound: "L'utilisateur n'a pas été trouvé.", - needName: "Merci de choisir un nom d'utilisateur.", - needNotTooLongName: "Merci de choisir un nom d'utilisateur ne comptant pas plus de 70 caractères.", - needEmail: "Merci de saisir votre adresse e-mail.", - needUniqueEmail: "L'adresse e-mail que vous avez saisie est déjà utilisée par un autre utilisateur. Si vous avez déjà un compte, cliquez-ici pour vous connecter.", - needNotTooLongEmail: "Merci de saisir une adresse e-mail ne comptant pas plus de 255 caractères.", - needPassWord: "Merci de fournir un mot de passe.", - needLongPassWord: "Merci de fournir un mot de passe d'au moins MIN_LENGTH caractères.", - passwordCopied: "Le mot de passe généré a été copié dans le presse-papier. Vous pouvez le recopier où vous le souhaiter.", - needStatus: "Il manque le statut.", - needLanguage: "Il manque le code langue.", - needValidLastConnectionDate: "La date de dernière connexion n'est pas valide.", - needSMTP: "Il manque le serveur SMTP.", - needSMTPNotFound: "Il manque le serveur SMTP.", - needKnowNewsletterOk: "Il faut savoir si l'utilisateur accepte ou refuse de recevoir la newsletter.", - needTimeDifference: "Il faut connaître le nombre de minutes du décalage horaire.", - needMinTimeDifference: "Il faut fournir un nombre de minutes à enlever à l'heure GMT ne dépassant pas 720.", - needMaxTimeDifference: "Il faut fournir un nombre de minutes à ajouter à l'heure GMT ne dépassant pas 840.", - needUGCOk: "Vous devez accepter les CGU pour pouvoir créer votre compte. ", - godfatherNotFound: "Aucun utilisateur valide trouvé pour ce code parrain.", - godfatherFound: "Votre parrain a bien été trouvé !", - mailValidationMessage: "Votre inscription est bien enregistrée.\nPour la finaliser, merci de cliquer dans les 24H sur le lien de confirmation qui vient de vous être envoyé par e-mail.", - mailValidationLinkSubject: "Merci de valider votre compte", - mailValidationLinkSBodyTxt: "Bonjour USER_NAME,\n\nPour valider votre compte, merci de cliquer sur le lien suivant dans les 24h :\nLINK_URL", - mailValidationLinkSBodyHTML: "

    Bonjour USER_NAME,

    Pour valider votre compte, merci de cliquer sur le lien suivant dans les 24h.

    Valider.

    ", - validationMessage: "Votre compte vient bien d'être validé. Merci et bienvenue !", - validationMessageAdmin: "Le compte a bien été validé.", - validationAlreadyMessage: "Il semble que vous ayez déjà validé votre compte.", - validationAlreadyMessageAdmin: "Ce compte a déjà été validé.", - mailWelcomeSubject: "Bienvenue !", - mailWelcomeBodyTxt: "Bonjour USER_NAME,\nVotre venez de valider votre inscription à NOM_SITE.\nMerci et à bientôt !", - mailWelcomeBodyHTML: "

    Bonjour USER_NAME,

    Votre venez de valider votre inscription à NOM_SITE.

    Merci et à bientôt !

    ", - mailThankGodfatherSubject: "Merci !", - mailThankGodfatherBodyTxt: "Bonjour USER_NAME,\nGrâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.\nMerci et à bientôt !", - mailThankGodfatherBodyHTML: "

    Bonjour USER_NAME,

    Grâce à vous un nouvel utilisateur (EMAIL) vient de s'inscrire sur NOM_SITE.

    Merci et à bientôt !

    ", - badLinkValidationMessage: "Votre lien de confirmation ne semble pas valide ou bien il a expiré. Vous pouvez en recevoir un nouveau en cliquant ici.", - emailNotFound: "Aucun utilisateur trouvé pour cette adresse e-mail.", - alreadyConnected: "Vous êtes déjà connecté(e) au site !", - needBeConnected: "Vous devez être connecté(e) pour accéder à cette page.", - connectionOk: "Connexion réussie.", - needChooseLoginWay: "Vous devez soit saisir votre mot de passe, soit cocher la case vous permettant de recevoir un lien de connexion par e-mail.", - needValidationToLogin: "Vous devez d'abord valider votre compte avant de vous connecter. Pour ce faire, un lien vient de vous être envoyé par e-mail.", - tooManyLoginFails: "Trop de tentatives de connexion infructueuses pour cette adresse e-mail. Vous devez attendre MINUTES minutes pour essayer de nouveau.", - badPassword: "Le mot de passe n'est pas le bon.", - mailLoginLinkSubject: "Votre lien de connexion.", - mailLoginLinkBodyTxt: "Bonjour USER_NAME,\nPour vous connecter à votre compte, cliquez sur le lien suivant sans tarder : LINK_URL", - mailLoginLinkBodyHTML: "

    Bonjour USER_NAME,

    Pour vous connecter à votre compte, cliquez sur le lien suivant sans tarder :

    Valider.

    ", - mailLoginLinkMessage: "Un lien de connexion vient de vous être envoyé sur votre adresse e-mail. Ne tardez pas à l'utiliser, car il n'est valable que durant ", - updatedOkMessage: "Vos informations ont bien été mises à jour.", - updatedNeedGoodEmail: "Mais la nouvelle adresse e-mail n'a pu être enregistrée car elle n'a pas une format correct.", - updatedNeedUniqueEmail: "Mais la nouvelle adresse e-mail saisie (NEW_EMAIL) n'a pu être enregistrée, car elle est déjà utilisée pour un autre compte.", - mailUpdateLoginSubject: "Merci de valider vos nouveaux identifiants.", - mailUpdateLoginBodyTxt: "Bonjour USER_NAME,\nPour valider vos nouveaux identifiants de connexion, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailUpdateLoginBodyHTML: "

    Bonjour USER_NAME,

    Pour valider vos nouveaux identifiants de connexion, cliquez ici sans tarder.

    ", - mailUpdateLoginLinkMessage: "Cependant, vous avez modifié au moins un de vos identifiants de connexion (email et/ou mot de passe) et vous devez cliquer sur le lien qui vient de vous êtres envoyé sur votre adresse (NEW_EMAIL) pour valider ce changement. En attendant, merci de continuer à utiliser vos anciens identifiants.", - updatedNeedValidatedUser: "L'utilisateur que vous souhaité modifier n'existe pas/plus ou n'a pas encore validé son compte.", - updatedNeedGoodGodfather: "Mais le nouveau code parrain n'a pu être retenu, car il ne correspond à aucun compte utilisateur ou à l'utilisateur lui-même.", - mailUpdateLoginOkMessage: "La mise à jour de vos identifiants a bien été enregistrée.", - updatedFailedGodfatherNotFound: "L'identifiant fourni pour le parrain ne correspond à aucun utilisateur.", - creationOkMessage: "Le nouvel utilisateur a bien été enregistré.", - mailDeleteSubject: "Confirmer la suppression de votre compte.", - mailDeleteBodyTxt: "Bonjour USER_NAME,\nPour valider la suppression de votre compte, cliquez sur le lien suivant sans tarder :\nLINK_URL", - mailDeleteBodyHTML: "

    Bonjour USER_NAME,

    Pour valider la suppression de votre compte, cliquez ici sans tarder.

    ", - mailDeleteLinkMessage: "Votre demande de suppression a bien été enregistrée. Merci de cliquer sans tarder sur le lien qui vient de vous être envoyé par e-mail pour confirmer.", - deleteOkMessage: "L'utilisateur a bien été supprimé.", - deleteFailMessage: "Tentative de suppression d'un utilisateur inexistant : ", - mailDeleteLinkOkMessage: "Votre compte a bien été supprimé. Merci d'avoir utilisé nos services.", - mailDeleteLinkAlreadyMessage: "Il semble que vous ayez déjà validé la suppression de votre compte.", - mailDeleteLinkFailMessage: "Votre lien de suppression n'est pas valide ou alors il n'est plus valable.", - cronDeleteUnvalidedUsersMessage: " comptes utilisateurs non validés ont été supprimés.", - deleteInactiveUsersMessage: " comptes utilisateurs inactifs ont été supprimés.", - welcomeMessage: "Bienvenue #NAME !", - byebyeMessage: "Si vous voyez ce message, c'est que votre déconnexion s'est bien déroulée.
    À bientôt !", - infosUserForAdmin: "Cet utilisateur (id: ID_USER) a créé son compte le DATE_CREA, la dernière mise à jour datant du DATE_UPDATE.
    Date de sa dernière connexion : DATE_CONNECTION.", - infosAdminGodfather: "Cet utilisateur a été parrainé par ", - infosAdminNbGodChilds: "Ses #NB filleuils : " -}; - -/***/ }), - -/***/ "../tools/main.js": -/*!************************!*\ - !*** ../tools/main.js ***! - \************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } - -function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } - -// Quelques fonctions utiles pour les chaînes -var Tool = /*#__PURE__*/function () { - function Tool() { - _classCallCheck(this, Tool); - } - - _createClass(Tool, null, [{ - key: "isEmpty", - value: function isEmpty(myVar) { - if (myVar === undefined || myVar === null) return true;else { - myVar += ""; // si autre chose qu'une chaîne envoyé... - - myVar = myVar.trim(); - if (myVar === "") return true;else return false; - } - } - }, { - key: "trimIfNotNull", - value: function trimIfNotNull(myString) { - if (Tool.isEmpty(myString)) myString = null;else { - myString += ""; // si autre chose qu'une chaîne envoyé... - - myString = myString.trim(); - } - return myString; - } - }, { - key: "shortenIfLongerThan", - value: function shortenIfLongerThan(myString, max) { - myString += ""; // au cas où cela ne serait pas une chaîne... - - if (myString.length > max) myString = myString.substring(0, max - 3) + "..."; - return myString; - } // source : https://stackoverflow.com/questions/15604140/replace-multiple-strings-with-multiple-other-strings - - }, { - key: "replaceAll", - value: function replaceAll(myString, mapObj) { - var replaceElts = new RegExp(Object.keys(mapObj).join("|"), "gi"); - return myString.replace(replaceElts, function (matched) { - return mapObj[matched]; - }); - } // source : https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Math/random - - }, { - key: "getRandomInt", - value: function getRandomInt(min, max) { - min = Math.ceil(min); - max = Math.floor(max); - return Math.floor(Math.random() * (max - min)) + min; - } // à compléter : https://en.wikipedia.org/wiki/Date_format_by_country - - }, { - key: "dateFormat", - value: function dateFormat(dateString) { - var lang = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : "fr"; - if (Tool.isEmpty(dateString)) return ""; - var myDate = new Date(dateString); - var myDay = myDate.getDate() + ""; - if (myDay.length === 1) myDay = "0" + myDay; - var myMounth = myDate.getMonth() + 1 + ""; - if (myMounth.length === 1) myMounth = "0" + myMounth; - var myYear = myDate.getFullYear(); - if (lang === "fr") return myDay + "/" + myMounth + "/" + myYear;else if (lang === "form") // 2014-02-09 - return myYear + "-" + myMounth + "-" + myDay;else return myMounth + "/" + myDay + "/" + myYear; - } - }]); - - return Tool; -}(); - -module.exports = Tool; - -/***/ }), - -/***/ "./src/config/general.js": -/*!*******************************!*\ - !*** ./src/config/general.js ***! - \*******************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - apiUrl: "http://localhost:3000/api", - usersGetConfigUrl: "/user/getconfig", - lang: "fr", - userHomePage: "accueil.html", - adminHomePage: "admin.html", - managerHomePage: "gestion.html", - subscribePage: "inscription.html", - connectionPage: "connexion.html", - accountPage: "compte.html", - questionnairesManagementPage: "gestion-quizs.html", - usersManagementPage: "gestion-utilisateurs.html", - nbQuestionnairesUserHomePage: 10, - illustrationDir: "/img/quizs/" -}; // à terme fusionner avec les déclarations backend concernant le front, tout étant saisi dans l'admin - -/***/ }), - -/***/ "./src/tools/clientstorage.js": -/*!************************************!*\ - !*** ./src/tools/clientstorage.js ***! - \************************************/ -/*! exports provided: saveLocaly, getLocaly, removeLocaly */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "saveLocaly", function() { return saveLocaly; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getLocaly", function() { return getLocaly; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeLocaly", function() { return removeLocaly; }); -// FONCTIONS UTILES AU STOCKAGE LOCAL (SESSION, COOKIES, INDEXDB, ETC.) -// Revenir pour gérer le cas où local.storage n'est pas connu pour utiliser cookie -var saveLocaly = function saveLocaly(name, data) { - localStorage.setItem(name, JSON.stringify(data)); -}; -var getLocaly = function getLocaly(name) { - var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - if (json) return JSON.parse(localStorage.getItem(name));else return localStorage.getItem(name); -}; -var removeLocaly = function removeLocaly(name) { - localStorage.removeItem(name); -}; - -/***/ }), - -/***/ "./src/tools/dom.js": -/*!**************************!*\ - !*** ./src/tools/dom.js ***! - \**************************/ -/*! exports provided: addElement */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addElement", function() { return addElement; }); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); -function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } - - // Fonction associant les attributs fournis à un champ de formulaire - -var addElement = function addElement(eltParent, eltType) { - var eltContent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : ""; - var eltId = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ""; - var eltClass = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; - var eltAttributes = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : {}; - var replace = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : true; - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltType) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltParent)) return false;else { - var newElement = document.createElement(eltType); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltId)) // tester si l'id n'est pas déjà utilisé dans le DOM ? - newElement.id = eltId; - - if (Array.isArray(eltClass) && eltClass.length != 0) { - for (var i in eltClass) { - newElement.classList.add(eltClass[i]); - } - } - - if (_typeof(eltAttributes) === "object") // !! tous les objets ne sont pas ok - { - for (var attributName in eltAttributes) { - newElement.setAttribute(attributName, eltAttributes[attributName]); - } - } - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(eltContent)) newElement.innerHTML = eltContent.replace(/\n/g, "
    "); // innerHTML permet d'ajouter du texte ayant lui-même des balises, etc. - - if (replace) eltParent.innerHTML = ""; - eltParent.appendChild(newElement); - } -}; - -/***/ }), - -/***/ "./src/tools/everywhere.js": -/*!*********************************!*\ - !*** ./src/tools/everywhere.js ***! - \*********************************/ -/*! exports provided: helloDev */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "helloDev", function() { return helloDev; }); -// Ce script fournit des fonctions utilisées sur toutes les pages du site -var helloDev = function helloDev() { - console.log("**** Hello ami développeur :-)\n Le code de WikiLerni est libre et est lisible sur gitlab : \n Bonne lecture :-) \n Pour les suggestions d'amélioration ou questions : dev@wililerni.com ****"); - return true; -}; - -/***/ }), - -/***/ "./src/tools/url.js": -/*!**************************!*\ - !*** ./src/tools/url.js ***! - \**************************/ -/*! exports provided: getUrlParams */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getUrlParams", function() { return getUrlParams; }); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_0__); - // Fonction récupérant les paramètres passés par l'url - -var getUrlParams = function getUrlParams() { - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_0__["isEmpty"])(location.search)) return false; - var parameters = location.search.substring(1).split("&"); - if (!Array.isArray(parameters) || parameters.length === 0) return false; - var param, - datas = {}; - - for (var i in parameters) { - param = parameters[i].split("="); - if (param.length === 2) datas[param[0]] = decodeURI(param[1]); - } - - return datas; -}; - -/***/ }), - -/***/ "./src/tools/users.js": -/*!****************************!*\ - !*** ./src/tools/users.js ***! - \****************************/ -/*! exports provided: getConfig, getTimeDifference, getPassword, setSession, checkAnswerDatas, checkSession */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getConfig", function() { return getConfig; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getTimeDifference", function() { return getTimeDifference; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "getPassword", function() { return getPassword; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setSession", function() { return setSession; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkAnswerDatas", function() { return checkAnswerDatas; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "checkSession", function() { return checkSession; }); -/* harmony import */ var _clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./clientstorage.js */ "./src/tools/clientstorage.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../tools/main */ "../tools/main.js"); -/* harmony import */ var _tools_main__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_tools_main__WEBPACK_IMPORTED_MODULE_1__); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -var configFrontEnd = __webpack_require__(/*! ../config/general */ "./src/config/general.js"); - - - // Récupère les données de configuration des utilisateurs -// À terme, un fichier statique importable comme module devrait éviter une requête ajax - -var getConfig = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - return _context.abrupt("return", new Promise(function (resolve, reject) { - var xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + configFrontEnd.usersGetConfigUrl); - - xhr.onload = function () { - return resolve(JSON.parse(xhr.responseText)); - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - })); - - case 1: - case "end": - return _context.stop(); - } - } - }, _callee); - })); - - return function getConfig() { - return _ref.apply(this, arguments); - }; -}(); -var getTimeDifference = function getTimeDifference(config) { - var timeLocal = new Date().getTimezoneOffset(); - if (timeLocal > config.timeDifferenceMax || timeLocal < config.timeDifferenceMin) return 0;else return timeLocal; -}; // On enlève volontairement les 0/O pour éviter les confusions ! -// Et mieux vaut aussi débuter et finir par une lettre simple. - -var getPassword = function getPassword(nbCarMin, nbCarMax) { - var nbCar = nbCarMin + Math.floor(Math.random() * (nbCarMax - nbCarMin)); - var letters = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz"; - var others = "123456789!?.*-_%@&ÉÀÈÙ€$ÂÊÛÎ"; - var password = letters[Math.floor(Math.random() * letters.length)]; - - for (var i = 1; i < nbCar - 1; i++) { - if (i % 2 === 1) password += others[Math.floor(Math.random() * others.length)];else password += letters[Math.floor(Math.random() * letters.length)]; - } - - password += letters[Math.floor(Math.random() * letters.length)]; - return password; -}; // J'utilise le stockage local du navigateur pour enregistrer les données permettant de reconnaître l'utilisateur par la suite -// Seul le serveur pourra vérifier que les identifiants sont (toujours) valides. - -var setSession = function setSession(userId, token, durationTS) { - var storageUser = { - id: userId, - token: token, - duration: durationTS - }; - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", storageUser); -}; // Vérifie qu'il y a des données locales concernant le résultat d'un quiz -// Et les ajoute aux données envoyées par les formulaires d'inscription/connexion si c'est le cas - -var checkAnswerDatas = function checkAnswerDatas(datas) { - var lastAnswer = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("lastAnswer"); - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(lastAnswer)) { - var answer = JSON.parse(lastAnswer); - - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.duration) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbCorrectAnswers) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.QuestionnaireId) && !Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(answer.nbQuestions)) { - datas.duration = answer.duration; - datas.nbCorrectAnswers = answer.nbCorrectAnswers; - datas.QuestionnaireId = answer.QuestionnaireId; - datas.nbQuestions = answer.nbQuestions; - } - } - - return datas; -}; // Cette fonction teste la connexion de l'utilisateur d'une page -// On peut fournis une liste de statuts acceptés (si vide = tous), ainsi qu'une url de redirection si non connecté, un message d'erreur à afficher sur la page de destination et l'url sur laquelle revenir une fois connecté - -var checkSession = /*#__PURE__*/function () { - var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(config) { - var status, - urlRedirection, - message, - urlWanted, - _args2 = arguments; - return regeneratorRuntime.wrap(function _callee2$(_context2) { - while (1) { - switch (_context2.prev = _context2.next) { - case 0: - status = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : []; - urlRedirection = _args2.length > 2 ? _args2[2] : undefined; - message = _args2.length > 3 ? _args2[3] : undefined; - urlWanted = _args2.length > 4 ? _args2[4] : undefined; - return _context2.abrupt("return", new Promise(function (resolve, reject) { - var userDatas = Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("user"); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(userDatas)) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else { - var user = JSON.parse(userDatas); - - if (Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.id) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.token) || Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(user.duration) || user.duration < Date.now()) { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else { - var xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + config.userRoutes + config.checkLoginRoute + user.token); - - xhr.onload = function () { - var response = JSON.parse(xhr.responseText); - - if (xhr.status === 200 && response.isValid && response.id != undefined) { - if (response.id === user.id) { - user.name = response.name; - user.language = response.language; - user.timeDifference = response.timeDifference; - user.status = response.status; // le token et de toute façon vérifier à chaque requête à l'API - - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("user", user); // si il s'agit d'un "user" et que son abonnement a expiré, je le redirige vers la caisse :-) - - if (response.status === "user" && response.nbDaysOk <= 0) { - var urlAccount = config.siteUrl + "/" + configFrontEnd.accountPage; - if (window.location.href.indexOf(urlAccount) === -1) window.location.assign("/" + configFrontEnd.accountPage); // passée directement ici, l'ancre #subscribe ne fonctionne pas !? - - resolve(true); - } else { - if (status.length !== 0 && status.indexOf(response.status) === -1) { - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } else resolve(true); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - } else { - Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["removeLocaly"])("user"); - redirectUser(urlRedirection, message, urlWanted); - resolve(false); - } - }; - - xhr.onerror = function () { - return reject(xhr.statusText); - }; - - xhr.send(); - } - } - })); - - case 5: - case "end": - return _context2.stop(); - } - } - }, _callee2); - })); - - return function checkSession(_x) { - return _ref2.apply(this, arguments); - }; -}(); // Cette fonction sert à la précédente en cas de connexion non valide - -var redirectUser = function redirectUser(urlRedirection, message, urlWanted) { - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(message)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", message); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlWanted)) Object(_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("url", urlWanted); - if (!Object(_tools_main__WEBPACK_IMPORTED_MODULE_1__["isEmpty"])(urlRedirection)) window.location.assign(urlRedirection); -}; - -/***/ }), - -/***/ "./src/validation.js": -/*!***************************!*\ - !*** ./src/validation.js ***! - \***************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/clientstorage.js */ "./src/tools/clientstorage.js"); -/* harmony import */ var _tools_dom_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tools/dom.js */ "./src/tools/dom.js"); -/* harmony import */ var _tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./tools/everywhere.js */ "./src/tools/everywhere.js"); -/* harmony import */ var _tools_url_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./tools/url.js */ "./src/tools/url.js"); -/* harmony import */ var _tools_users_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./tools/users.js */ "./src/tools/users.js"); -function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } } - -function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; } - -// -- GESTION DE LA PAGE PERMETTANT DE VALIDER LA CRÉATION DE SON COMPTE -/// Un token est transmis en paramètre de l'Url. Il a une validité limité dans le temps. -/// Dans ce cas, on peut rediriger l'utilisateur vers la page de connexion pour obtenir un nouveau lien de validation -/// Si le token est ok, on crée une session de courte durée et redirige l'utilisateur vers sa page d'accueil -/// Si l'utilisateur a déjà une session active valide, c'est qu'il a déjà cliqué sur le lien. On le redirige également vers sa page d'accueil. -// Fichier de configuration côté client : -var configFrontEnd = __webpack_require__(/*! ./config/general */ "./src/config/general.js"); // Importation des fonctions utile au script : - - - - - - - // Dictionnaires : - -var txt = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/general$")("./" + configFrontEnd.lang + "/general"); - -var txtUsers = __webpack_require__("../lang sync recursive ^\\.\\/.*\\/user$")("./" + configFrontEnd.lang + "/user"); - -var divResponse = document.getElementById("response"); -Object(_tools_everywhere_js__WEBPACK_IMPORTED_MODULE_2__["helloDev"])(); -var config; - -var initialise = /*#__PURE__*/function () { - var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() { - var isConnected, user, homePage, datas, xhr; - return regeneratorRuntime.wrap(function _callee$(_context) { - while (1) { - switch (_context.prev = _context.next) { - case 0: - _context.prev = 0; - _context.next = 3; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["getConfig"])(); - - case 3: - config = _context.sent; - - if (config) { - _context.next = 8; - break; - } - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - _context.next = 12; - break; - - case 8: - _context.next = 10; - return Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["checkSession"])(config); - - case 10: - isConnected = _context.sent; - - if (isConnected) { - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", { - message: txtUsers.alreadyConnected, - color: "information" - }); // pour l'afficher sur la page suivante - - user = Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["getLocaly"])("user", true); - homePage = user.status + "HomePage"; // ne devrait pouvoir être que user ici - - window.location.assign("/" + configFrontEnd[homePage]); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.alreadyConnected, "", ["information"]); // au cas où blocage redirection - } else { - datas = Object(_tools_url_js__WEBPACK_IMPORTED_MODULE_3__["getUrlParams"])(); - - if (datas && datas.t !== undefined) { - xhr = new XMLHttpRequest(); - xhr.open("GET", configFrontEnd.apiUrl + config.userRoutes + config.checkSubscribeTokenRoute + datas.t); - - xhr.onreadystatechange = function () { - if (this.readyState == XMLHttpRequest.DONE) { - var response = JSON.parse(this.responseText); - - if (this.status === 200 && response.userId != undefined && response.token != undefined) { - var connexionMaxTime = Date.now() + parseInt(config.connexionMinTimeInHours, 10) * 3600 * 1000; - Object(_tools_users_js__WEBPACK_IMPORTED_MODULE_4__["setSession"])(response.userId, response.token, connexionMaxTime); - Object(_tools_clientstorage_js__WEBPACK_IMPORTED_MODULE_0__["saveLocaly"])("message", { - message: txtUsers.validationMessage, - color: "success" - }); // pour l'afficher sur la page suivante - - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.validationMessage, "", ["success"]); // au cas où blocage redirection - - window.location.assign("/" + configFrontEnd.userHomePage); // que user possible lors de la création - } else if ((this.status === 200 || this.status === 404) && response.errors != undefined) { - if (Array.isArray(response.errors)) response.errors = response.errors.join("
    ");else response.errors = txt.serverError; - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", response.errors, "", ["error"]); - } else Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txtUsers.badLinkValidationMessage.replace("#URL", configFrontEnd.connectionPage), "", ["error"]); - } - }; - - xhr.send(); - } - } - - case 12: - _context.next = 17; - break; - - case 14: - _context.prev = 14; - _context.t0 = _context["catch"](0); - Object(_tools_dom_js__WEBPACK_IMPORTED_MODULE_1__["addElement"])(divResponse, "p", txt.serverError, "", ["error"]); - - case 17: - case "end": - return _context.stop(); - } - } - }, _callee, null, [[0, 14]]); - })); - - return function initialise() { - return _ref.apply(this, arguments); - }; -}(); - -initialise(); - -/***/ }) - -/******/ }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcgc3luYyBeXFwuXFwvLipcXC9nZW5lcmFsJCIsIndlYnBhY2s6Ly8vLi4vbGFuZyBzeW5jIF5cXC5cXC8uKlxcL3VzZXIkIiwid2VicGFjazovLy8uLi9sYW5nL2ZyL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4uL2xhbmcvZnIvdXNlci5qcyIsIndlYnBhY2s6Ly8vLi4vdG9vbHMvbWFpbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29uZmlnL2dlbmVyYWwuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3Rvb2xzL2RvbS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvZXZlcnl3aGVyZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdG9vbHMvdXJsLmpzIiwid2VicGFjazovLy8uL3NyYy90b29scy91c2Vycy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdmFsaWRhdGlvbi5qcyJdLCJuYW1lcyI6WyJtb2R1bGUiLCJleHBvcnRzIiwic2l0ZUhUTUxUaXRsZSIsInNpdGVNZXRhRGVzY3JpcHRpb24iLCJzY3JpcHRUaW1pbmdJbmZvIiwic2NyaXB0VGltaW5nQWxlcnQiLCJzZXJ2ZXJFcnJvciIsInNlcnZlckVycm9yQWRtaW4iLCJuZWVkZWRQYXJhbXMiLCJiYWRVcmwiLCJub3RWYWxpZEZvcm1hdCIsIm5vdEFsbG93ZWQiLCJub3RSZXF1aXJlZCIsInVwZGF0ZUJ0blR4dCIsImFkZEJ0blR4dCIsImRlbGV0ZUJ0blR4dCIsImFkZE9rTWVzc2FnZSIsInVwZGF0ZU9rTWVzc2FnZSIsImRlbGV0ZU9rTWVzc2FnZSIsImZhaWxBdXRoIiwiZmFpbEF1dGhIZWFkZXIiLCJmYWlsQXV0aFRva2VuIiwiZmFpbEF1dGhJZCIsImZhaWxBdXRoQ3JvbiIsInByZXZpb3VzUGFnZSIsIm5leHRQYWdlIiwiYnRuTGlua1RvUXVlc3Rpb25uYWlyZSIsInN0YXRzQWRtaW4iLCJub3RGb3VuZCIsIm5lZWROYW1lIiwibmVlZE5vdFRvb0xvbmdOYW1lIiwibmVlZEVtYWlsIiwibmVlZFVuaXF1ZUVtYWlsIiwibmVlZE5vdFRvb0xvbmdFbWFpbCIsIm5lZWRQYXNzV29yZCIsIm5lZWRMb25nUGFzc1dvcmQiLCJwYXNzd29yZENvcGllZCIsIm5lZWRTdGF0dXMiLCJuZWVkTGFuZ3VhZ2UiLCJuZWVkVmFsaWRMYXN0Q29ubmVjdGlvbkRhdGUiLCJuZWVkU01UUCIsIm5lZWRTTVRQTm90Rm91bmQiLCJuZWVkS25vd05ld3NsZXR0ZXJPayIsIm5lZWRUaW1lRGlmZmVyZW5jZSIsIm5lZWRNaW5UaW1lRGlmZmVyZW5jZSIsIm5lZWRNYXhUaW1lRGlmZmVyZW5jZSIsIm5lZWRVR0NPayIsImdvZGZhdGhlck5vdEZvdW5kIiwiZ29kZmF0aGVyRm91bmQiLCJtYWlsVmFsaWRhdGlvbk1lc3NhZ2UiLCJtYWlsVmFsaWRhdGlvbkxpbmtTdWJqZWN0IiwibWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQiLCJtYWlsVmFsaWRhdGlvbkxpbmtTQm9keUhUTUwiLCJ2YWxpZGF0aW9uTWVzc2FnZSIsInZhbGlkYXRpb25NZXNzYWdlQWRtaW4iLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2UiLCJ2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2VBZG1pbiIsIm1haWxXZWxjb21lU3ViamVjdCIsIm1haWxXZWxjb21lQm9keVR4dCIsIm1haWxXZWxjb21lQm9keUhUTUwiLCJtYWlsVGhhbmtHb2RmYXRoZXJTdWJqZWN0IiwibWFpbFRoYW5rR29kZmF0aGVyQm9keVR4dCIsIm1haWxUaGFua0dvZGZhdGhlckJvZHlIVE1MIiwiYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlIiwiZW1haWxOb3RGb3VuZCIsImFscmVhZHlDb25uZWN0ZWQiLCJuZWVkQmVDb25uZWN0ZWQiLCJjb25uZWN0aW9uT2siLCJuZWVkQ2hvb3NlTG9naW5XYXkiLCJuZWVkVmFsaWRhdGlvblRvTG9naW4iLCJ0b29NYW55TG9naW5GYWlscyIsImJhZFBhc3N3b3JkIiwibWFpbExvZ2luTGlua1N1YmplY3QiLCJtYWlsTG9naW5MaW5rQm9keVR4dCIsIm1haWxMb2dpbkxpbmtCb2R5SFRNTCIsIm1haWxMb2dpbkxpbmtNZXNzYWdlIiwidXBkYXRlZE9rTWVzc2FnZSIsInVwZGF0ZWROZWVkR29vZEVtYWlsIiwidXBkYXRlZE5lZWRVbmlxdWVFbWFpbCIsIm1haWxVcGRhdGVMb2dpblN1YmplY3QiLCJtYWlsVXBkYXRlTG9naW5Cb2R5VHh0IiwibWFpbFVwZGF0ZUxvZ2luQm9keUhUTUwiLCJtYWlsVXBkYXRlTG9naW5MaW5rTWVzc2FnZSIsInVwZGF0ZWROZWVkVmFsaWRhdGVkVXNlciIsInVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciIsIm1haWxVcGRhdGVMb2dpbk9rTWVzc2FnZSIsInVwZGF0ZWRGYWlsZWRHb2RmYXRoZXJOb3RGb3VuZCIsImNyZWF0aW9uT2tNZXNzYWdlIiwibWFpbERlbGV0ZVN1YmplY3QiLCJtYWlsRGVsZXRlQm9keVR4dCIsIm1haWxEZWxldGVCb2R5SFRNTCIsIm1haWxEZWxldGVMaW5rTWVzc2FnZSIsImRlbGV0ZUZhaWxNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtPa01lc3NhZ2UiLCJtYWlsRGVsZXRlTGlua0FscmVhZHlNZXNzYWdlIiwibWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZSIsImNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2UiLCJkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZSIsIndlbGNvbWVNZXNzYWdlIiwiYnllYnllTWVzc2FnZSIsImluZm9zVXNlckZvckFkbWluIiwiaW5mb3NBZG1pbkdvZGZhdGhlciIsImluZm9zQWRtaW5OYkdvZENoaWxkcyIsIlRvb2wiLCJteVZhciIsInVuZGVmaW5lZCIsInRyaW0iLCJteVN0cmluZyIsImlzRW1wdHkiLCJtYXgiLCJsZW5ndGgiLCJzdWJzdHJpbmciLCJtYXBPYmoiLCJyZXBsYWNlRWx0cyIsIlJlZ0V4cCIsIk9iamVjdCIsImtleXMiLCJqb2luIiwicmVwbGFjZSIsIm1hdGNoZWQiLCJtaW4iLCJNYXRoIiwiY2VpbCIsImZsb29yIiwicmFuZG9tIiwiZGF0ZVN0cmluZyIsImxhbmciLCJteURhdGUiLCJEYXRlIiwibXlEYXkiLCJnZXREYXRlIiwibXlNb3VudGgiLCJnZXRNb250aCIsIm15WWVhciIsImdldEZ1bGxZZWFyIiwiYXBpVXJsIiwidXNlcnNHZXRDb25maWdVcmwiLCJ1c2VySG9tZVBhZ2UiLCJhZG1pbkhvbWVQYWdlIiwibWFuYWdlckhvbWVQYWdlIiwic3Vic2NyaWJlUGFnZSIsImNvbm5lY3Rpb25QYWdlIiwiYWNjb3VudFBhZ2UiLCJxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlIiwidXNlcnNNYW5hZ2VtZW50UGFnZSIsIm5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UiLCJpbGx1c3RyYXRpb25EaXIiLCJzYXZlTG9jYWx5IiwibmFtZSIsImRhdGEiLCJsb2NhbFN0b3JhZ2UiLCJzZXRJdGVtIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldExvY2FseSIsImpzb24iLCJwYXJzZSIsImdldEl0ZW0iLCJyZW1vdmVMb2NhbHkiLCJyZW1vdmVJdGVtIiwiYWRkRWxlbWVudCIsImVsdFBhcmVudCIsImVsdFR5cGUiLCJlbHRDb250ZW50IiwiZWx0SWQiLCJlbHRDbGFzcyIsImVsdEF0dHJpYnV0ZXMiLCJuZXdFbGVtZW50IiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaWQiLCJBcnJheSIsImlzQXJyYXkiLCJpIiwiY2xhc3NMaXN0IiwiYWRkIiwiYXR0cmlidXROYW1lIiwic2V0QXR0cmlidXRlIiwiaW5uZXJIVE1MIiwiYXBwZW5kQ2hpbGQiLCJoZWxsb0RldiIsImNvbnNvbGUiLCJsb2ciLCJnZXRVcmxQYXJhbXMiLCJsb2NhdGlvbiIsInNlYXJjaCIsInBhcmFtZXRlcnMiLCJzcGxpdCIsInBhcmFtIiwiZGF0YXMiLCJkZWNvZGVVUkkiLCJjb25maWdGcm9udEVuZCIsInJlcXVpcmUiLCJnZXRDb25maWciLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsIm9ubG9hZCIsInJlc3BvbnNlVGV4dCIsIm9uZXJyb3IiLCJzdGF0dXNUZXh0Iiwic2VuZCIsImdldFRpbWVEaWZmZXJlbmNlIiwiY29uZmlnIiwidGltZUxvY2FsIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJ0aW1lRGlmZmVyZW5jZU1heCIsInRpbWVEaWZmZXJlbmNlTWluIiwiZ2V0UGFzc3dvcmQiLCJuYkNhck1pbiIsIm5iQ2FyTWF4IiwibmJDYXIiLCJsZXR0ZXJzIiwib3RoZXJzIiwicGFzc3dvcmQiLCJzZXRTZXNzaW9uIiwidXNlcklkIiwidG9rZW4iLCJkdXJhdGlvblRTIiwic3RvcmFnZVVzZXIiLCJkdXJhdGlvbiIsImNoZWNrQW5zd2VyRGF0YXMiLCJsYXN0QW5zd2VyIiwiYW5zd2VyIiwibmJDb3JyZWN0QW5zd2VycyIsIlF1ZXN0aW9ubmFpcmVJZCIsIm5iUXVlc3Rpb25zIiwiY2hlY2tTZXNzaW9uIiwic3RhdHVzIiwidXJsUmVkaXJlY3Rpb24iLCJtZXNzYWdlIiwidXJsV2FudGVkIiwidXNlckRhdGFzIiwicmVkaXJlY3RVc2VyIiwidXNlciIsIm5vdyIsInVzZXJSb3V0ZXMiLCJjaGVja0xvZ2luUm91dGUiLCJyZXNwb25zZSIsImlzVmFsaWQiLCJsYW5ndWFnZSIsInRpbWVEaWZmZXJlbmNlIiwibmJEYXlzT2siLCJ1cmxBY2NvdW50Iiwic2l0ZVVybCIsIndpbmRvdyIsImhyZWYiLCJpbmRleE9mIiwiYXNzaWduIiwidHh0IiwidHh0VXNlcnMiLCJkaXZSZXNwb25zZSIsImdldEVsZW1lbnRCeUlkIiwiaW5pdGlhbGlzZSIsImlzQ29ubmVjdGVkIiwiY29sb3IiLCJob21lUGFnZSIsInQiLCJjaGVja1N1YnNjcmliZVRva2VuUm91dGUiLCJvbnJlYWR5c3RhdGVjaGFuZ2UiLCJyZWFkeVN0YXRlIiwiRE9ORSIsImNvbm5leGlvbk1h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QVUsQ0FBQzhGLFdBQUQsRUFBYyxHQUFkLEVBQW1CRCxRQUFRLENBQUM5TCx3QkFBVCxDQUFrQ3VELE9BQWxDLENBQTBDLE1BQTFDLEVBQWtEeUUsY0FBYyxDQUFDbEQsY0FBakUsQ0FBbkIsRUFBcUcsRUFBckcsRUFBeUcsQ0FBQyxPQUFELENBQXpHLENBQVY7QUFDUDtBQUNKLGlCQXhCRDs7QUF5QkF3RCxtQkFBRyxDQUFDTyxJQUFKO0FBQ0g7QUFDSjs7QUFyRE07QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQTBEWDVDLDRFQUFVLENBQUM4RixXQUFELEVBQWMsR0FBZCxFQUFtQkYsR0FBRyxDQUFDdFAsV0FBdkIsRUFBb0MsRUFBcEMsRUFBd0MsQ0FBQyxPQUFELENBQXhDLENBQVY7O0FBMURXO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEdBQUg7O0FBQUEsa0JBQVYwUCxVQUFVO0FBQUE7QUFBQTtBQUFBLEdBQWhCOztBQTZEQUEsVUFBVSxHIiwiZmlsZSI6Ii4vSlMvdmFsaWRhdGlvbi5hcHAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBnZXR0ZXIgfSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uciA9IGZ1bmN0aW9uKGV4cG9ydHMpIHtcbiBcdFx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG4gXHRcdH1cbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbiBcdH07XG5cbiBcdC8vIGNyZWF0ZSBhIGZha2UgbmFtZXNwYWNlIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDE6IHZhbHVlIGlzIGEgbW9kdWxlIGlkLCByZXF1aXJlIGl0XG4gXHQvLyBtb2RlICYgMjogbWVyZ2UgYWxsIHByb3BlcnRpZXMgb2YgdmFsdWUgaW50byB0aGUgbnNcbiBcdC8vIG1vZGUgJiA0OiByZXR1cm4gdmFsdWUgd2hlbiBhbHJlYWR5IG5zIG9iamVjdFxuIFx0Ly8gbW9kZSAmIDh8MTogYmVoYXZlIGxpa2UgcmVxdWlyZVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy50ID0gZnVuY3Rpb24odmFsdWUsIG1vZGUpIHtcbiBcdFx0aWYobW9kZSAmIDEpIHZhbHVlID0gX193ZWJwYWNrX3JlcXVpcmVfXyh2YWx1ZSk7XG4gXHRcdGlmKG1vZGUgJiA4KSByZXR1cm4gdmFsdWU7XG4gXHRcdGlmKChtb2RlICYgNCkgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAmJiB2YWx1ZS5fX2VzTW9kdWxlKSByZXR1cm4gdmFsdWU7XG4gXHRcdHZhciBucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18ucihucyk7XG4gXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShucywgJ2RlZmF1bHQnLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2YWx1ZSB9KTtcbiBcdFx0aWYobW9kZSAmIDIgJiYgdHlwZW9mIHZhbHVlICE9ICdzdHJpbmcnKSBmb3IodmFyIGtleSBpbiB2YWx1ZSkgX193ZWJwYWNrX3JlcXVpcmVfXy5kKG5zLCBrZXksIGZ1bmN0aW9uKGtleSkgeyByZXR1cm4gdmFsdWVba2V5XTsgfS5iaW5kKG51bGwsIGtleSkpO1xuIFx0XHRyZXR1cm4gbnM7XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gXCIuL3NyYy92YWxpZGF0aW9uLmpzXCIpO1xuIiwidmFyIG1hcCA9IHtcblx0XCIuL2ZyL2dlbmVyYWxcIjogXCIuLi9sYW5nL2ZyL2dlbmVyYWwuanNcIlxufTtcblxuXG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dChyZXEpIHtcblx0dmFyIGlkID0gd2VicGFja0NvbnRleHRSZXNvbHZlKHJlcSk7XG5cdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKGlkKTtcbn1cbmZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpIHtcblx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhtYXAsIHJlcSkpIHtcblx0XHR2YXIgZSA9IG5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIgKyByZXEgKyBcIidcIik7XG5cdFx0ZS5jb2RlID0gJ01PRFVMRV9OT1RfRk9VTkQnO1xuXHRcdHRocm93IGU7XG5cdH1cblx0cmV0dXJuIG1hcFtyZXFdO1xufVxud2VicGFja0NvbnRleHQua2V5cyA9IGZ1bmN0aW9uIHdlYnBhY2tDb250ZXh0S2V5cygpIHtcblx0cmV0dXJuIE9iamVjdC5rZXlzKG1hcCk7XG59O1xud2VicGFja0NvbnRleHQucmVzb2x2ZSA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZTtcbm1vZHVsZS5leHBvcnRzID0gd2VicGFja0NvbnRleHQ7XG53ZWJwYWNrQ29udGV4dC5pZCA9IFwiLi4vbGFuZyBzeW5jIHJlY3Vyc2l2ZSBeXFxcXC5cXFxcLy4qXFxcXC9nZW5lcmFsJFwiOyIsInZhciBtYXAgPSB7XG5cdFwiLi9mci91c2VyXCI6IFwiLi4vbGFuZy9mci91c2VyLmpzXCJcbn07XG5cblxuZnVuY3Rpb24gd2VicGFja0NvbnRleHQocmVxKSB7XG5cdHZhciBpZCA9IHdlYnBhY2tDb250ZXh0UmVzb2x2ZShyZXEpO1xuXHRyZXR1cm4gX193ZWJwYWNrX3JlcXVpcmVfXyhpZCk7XG59XG5mdW5jdGlvbiB3ZWJwYWNrQ29udGV4dFJlc29sdmUocmVxKSB7XG5cdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8obWFwLCByZXEpKSB7XG5cdFx0dmFyIGUgPSBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiICsgcmVxICsgXCInXCIpO1xuXHRcdGUuY29kZSA9ICdNT0RVTEVfTk9UX0ZPVU5EJztcblx0XHR0aHJvdyBlO1xuXHR9XG5cdHJldHVybiBtYXBbcmVxXTtcbn1cbndlYnBhY2tDb250ZXh0LmtleXMgPSBmdW5jdGlvbiB3ZWJwYWNrQ29udGV4dEtleXMoKSB7XG5cdHJldHVybiBPYmplY3Qua2V5cyhtYXApO1xufTtcbndlYnBhY2tDb250ZXh0LnJlc29sdmUgPSB3ZWJwYWNrQ29udGV4dFJlc29sdmU7XG5tb2R1bGUuZXhwb3J0cyA9IHdlYnBhY2tDb250ZXh0O1xud2VicGFja0NvbnRleHQuaWQgPSBcIi4uL2xhbmcgc3luYyByZWN1cnNpdmUgXlxcXFwuXFxcXC8uKlxcXFwvdXNlciRcIjsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgc2l0ZUhUTUxUaXRsZSA6IFwiV2lraUxlcm5pIDogcXUnYWxsZXotdm91cyBhcHByZW5kcmUgYXVqb3VyZCdodWkgP1wiLFxuICAgIHNpdGVNZXRhRGVzY3JpcHRpb24gOiBcIkNoYXF1ZSBqb3VyLCB0ZXN0ZXogdm9zIGNvbm5haXNzYW5jZXMgZXQgYXBwcmVuZXogZGUgbm91dmVsbGVzIGNob3NlcyBhdmVjIFdpa2lMZXJuaS5cIixcbiAgICBzY3JpcHRUaW1pbmdJbmZvIDogXCJEdXLDqWUgZGUgbGEgcsOpcG9uc2UgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNjcmlwdFRpbWluZ0FsZXJ0IDogXCIqKiogU2NyaXB0IGxlbnQgOiBTQ1JJUFRfVElNSU5HIG1pbGxpc2Vjb25kZXMsIHJvdXRlIDogU0NSSVBUX1VSTFwiLFxuICAgIHNlcnZlckVycm9yIDogXCJEw6lzb2zDqS4gVW5lIGVycmV1ciBpbXByw6l2dWUgZXN0IHN1cnZlbnVlLiBTaSBjZWxhIHBlcnNpc3RlLCBuJ2jDqXNpdGV6IMOgIHByw6l2ZW5pciBsJ2FkbWluaXN0cmF0ZXVyIGR1IHNpdGUuXCIsXG4gICAgc2VydmVyRXJyb3JBZG1pbiA6IFwiQnVnIGRlIGwnYXBwbGljYXRpb24gOlwiLFxuICAgIG5lZWRlZFBhcmFtcyA6IFwiRGVzIHBhcmFtw6h0cmVzIG7DqWNlc3NhaXJlcyBtYW5xdWFudHMgc29udCBtYW5xdWFudHMuXCIsXG4gICAgYmFkVXJsIDogXCJUZW50YXRpdmUgZCdhY2PDqHMgw6AgdW5lIHBhZ2UgbidleGlzdGFudCBwYXMgOlwiLFxuICAgIG5vdFZhbGlkRm9ybWF0IDogXCJGb3JtYXQgbm9uIHZhbGlkZS5cIixcbiAgICBub3RBbGxvd2VkIDogXCJWb3VzIG4nYXZleiBwYXMgbGVzIGRyb2l0cyBuw6ljZXNzYWlyZXMgcG91ciBjZXR0ZSBhY3Rpb24uXCIsXG4gICAgbm90UmVxdWlyZWQgOiBcIkZhY3VsdGF0aWYuXCIsXG4gICAgdXBkYXRlQnRuVHh0OiBcIk1vZGlmaWVyXCIsXG4gICAgYWRkQnRuVHh0OiBcIkFqb3V0ZXJcIixcbiAgICBkZWxldGVCdG5UeHQ6IFwiU3VwcHJpbWVyXCIsXG4gICAgYWRkT2tNZXNzYWdlIDogXCJMZXMgZG9ubsOpZXMgb250IGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llcy5cIixcbiAgICB1cGRhdGVPa01lc3NhZ2UgOiBcIkxhIG1pc2Ugw6Agam91ciDDoCBqb3VyIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgZGVsZXRlT2tNZXNzYWdlIDogXCJMYSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLlwiLFxuICAgIGZhaWxBdXRoIDogXCJFcnJldXIgZCdhdXRoZW50aWZpY2F0aW9uLlwiLFxuICAgIGZhaWxBdXRoSGVhZGVyIDogXCJBYnNlbmNlIGRlIGhlYWRlciBBdXRob3JpemF0aW9uLlwiLFxuICAgIGZhaWxBdXRoVG9rZW4gOiBcIlRva2VuIGludmFsaWRlIG91IHV0aWxpc2F0ZXVyIG5vbiB0cm91dsOpLlwiLFxuICAgIGZhaWxBdXRoSWQgOiBcIklkZW50aWZpYW50IG5vbiB2YWxpZGUgOiBcIixcbiAgICBmYWlsQXV0aENyb24gOiBcIlRlbnRhdGl2ZSBkZSBsYW5jZW1lbnQgZCd1biBjcm9uIHNhbnMgbGUgYm9uIHRva2VuLlwiLFxuICAgIHByZXZpb3VzUGFnZSA6IFwiUGFnZSBwcsOpY8OpZGVudGVcIixcbiAgICBuZXh0UGFnZSA6IFwiUGFnZSBzdWl2YW50ZVwiLFxuICAgIGJ0bkxpbmtUb1F1ZXN0aW9ubmFpcmUgOiBcIkFsbGVyIGF1IHF1aXogIVwiLFxuICAgIHN0YXRzQWRtaW4gOiBcIkR1cmFudCBsZXMgZGVybmnDqHJlcyAyNGggOiBOQl9VU0VSU18yNEggY29tcHRlcyBvbnQgw6l0w6kgY3LDqcOpcywgTkJfU1VCU0NSSVBUSU9OU18yNEggdmFsaWTDqXMgZXQgTkJfVVNFUlNfREVMRVRFRF8yNEggc3VwcHJpbcOpcy4gTkJfQU5TV0VSU18yNEggcsOpcG9uc2VzIGF1eCBxdWl6cyBvbnQgw6l0w6kgZW5yZWdpc3Ryw6llcy48YnI+RW4gdG91dCwgaWwgeSBhIDogTkJfVVNFUlNfVE9UIGNvbXB0ZXMsIGRvbnQgTkJfU1VCU0NSSVBUSU9OU19UT1QgdmFsaWTDqXMgZXQgTkJfU1VCU0NSSVBUSU9OU19QUkVNSVVNIGNvbXB0ZXMgcHLDqW1pdW0uIE5CX0FOU1dFUlNfVE9UIHLDqXBvbnNlcyBhdXggcXVpenMgb250IMOpdMOpIGVucmVnaXN0csOpZXMuPGJyPlBhcm1pIGxlcyBOQl9VU0VSU19ERUxFVEVEX1RPVCBjb21wdGVzIHN1cHByaW3DqXMsIE5CX1VTRVJTX0RFTEVURURfVkFMSURFRCBhdmFpZW50IHZhbGlkw6kgbGV1ciBjb21wdGUgZXQgTkJfVVNFUlNfREVMRVRFRF9QUkVNSVVNIGF2YWllbnQgc291c2NyaXQgdW4gY29tcHRlIHByw6ltaXVtLlwiXG59OyIsIm1vZHVsZS5leHBvcnRzID1cbntcbiAgICBub3RGb3VuZDogXCJMJ3V0aWxpc2F0ZXVyIG4nYSBwYXMgw6l0w6kgdHJvdXbDqS5cIixcbiAgICBuZWVkTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyLlwiLFxuICAgIG5lZWROb3RUb29Mb25nTmFtZTogXCJNZXJjaSBkZSBjaG9pc2lyIHVuIG5vbSBkJ3V0aWxpc2F0ZXVyIG5lIGNvbXB0YW50IHBhcyBwbHVzIGRlIDcwIGNhcmFjdMOocmVzLlwiLFxuICAgIG5lZWRFbWFpbDogXCJNZXJjaSBkZSBzYWlzaXIgdm90cmUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgbmVlZFVuaXF1ZUVtYWlsOiBcIkwnYWRyZXNzZSBlLW1haWwgcXVlIHZvdXMgYXZleiBzYWlzaWUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcGFyIHVuIGF1dHJlIHV0aWxpc2F0ZXVyLiBTaSB2b3VzIGF2ZXogZMOpasOgIHVuIGNvbXB0ZSwgPGEgaHJlZj0nLyNVUkwnPmNsaXF1ZXotaWNpIHBvdXIgdm91cyBjb25uZWN0ZXI8L2E+LlwiLFxuICAgIG5lZWROb3RUb29Mb25nRW1haWw6IFwiTWVyY2kgZGUgc2Fpc2lyIHVuZSBhZHJlc3NlIGUtbWFpbCBuZSBjb21wdGFudCBwYXMgcGx1cyBkZSAyNTUgY2FyYWN0w6hyZXMuXCIsXG4gICAgbmVlZFBhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZS5cIixcbiAgICBuZWVkTG9uZ1Bhc3NXb3JkIDogXCJNZXJjaSBkZSBmb3VybmlyIHVuIG1vdCBkZSBwYXNzZSBkJ2F1IG1vaW5zIE1JTl9MRU5HVEggY2FyYWN0w6hyZXMuXCIsXG4gICAgcGFzc3dvcmRDb3BpZWQ6IFwiTGUgbW90IGRlIHBhc3NlIGfDqW7DqXLDqSBhIMOpdMOpIGNvcGnDqSBkYW5zIGxlIHByZXNzZS1wYXBpZXIuIFZvdXMgcG91dmV6IGxlIHJlY29waWVyIG/DuSB2b3VzIGxlIHNvdWhhaXRlci5cIixcbiAgICBuZWVkU3RhdHVzIDogXCJJbCBtYW5xdWUgbGUgc3RhdHV0LlwiLFxuICAgIG5lZWRMYW5ndWFnZSA6IFwiSWwgbWFucXVlIGxlIGNvZGUgbGFuZ3VlLlwiLFxuICAgIG5lZWRWYWxpZExhc3RDb25uZWN0aW9uRGF0ZSA6IFwiTGEgZGF0ZSBkZSBkZXJuacOocmUgY29ubmV4aW9uIG4nZXN0IHBhcyB2YWxpZGUuXCIsXG4gICAgbmVlZFNNVFAgOiBcIklsIG1hbnF1ZSBsZSBzZXJ2ZXVyIFNNVFAuXCIsXG4gICAgbmVlZFNNVFBOb3RGb3VuZCA6IFwiSWwgbWFucXVlIGxlIHNlcnZldXIgU01UUC5cIixcbiAgICBuZWVkS25vd05ld3NsZXR0ZXJPayA6IFwiSWwgZmF1dCBzYXZvaXIgc2kgbCd1dGlsaXNhdGV1ciBhY2NlcHRlIG91IHJlZnVzZSBkZSByZWNldm9pciBsYSBuZXdzbGV0dGVyLlwiLFxuICAgIG5lZWRUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBjb25uYcOudHJlIGxlIG5vbWJyZSBkZSBtaW51dGVzIGR1IGTDqWNhbGFnZSBob3JhaXJlLlwiLFxuICAgIG5lZWRNaW5UaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGVubGV2ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgNzIwLlwiLFxuICAgIG5lZWRNYXhUaW1lRGlmZmVyZW5jZSA6IFwiSWwgZmF1dCBmb3VybmlyIHVuIG5vbWJyZSBkZSBtaW51dGVzIMOgIGFqb3V0ZXIgw6AgbCdoZXVyZSBHTVQgbmUgZMOpcGFzc2FudCBwYXMgODQwLlwiLFxuICAgIG5lZWRVR0NPayA6IFwiVm91cyBkZXZleiBhY2NlcHRlciBsZXMgQ0dVIHBvdXIgcG91dm9pciBjcsOpZXIgdm90cmUgY29tcHRlLiBcIixcbiAgICBnb2RmYXRoZXJOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB2YWxpZGUgdHJvdXbDqSBwb3VyIGNlIGNvZGUgcGFycmFpbi5cIixcbiAgICBnb2RmYXRoZXJGb3VuZDogXCJWb3RyZSBwYXJyYWluIGEgYmllbiDDqXTDqSB0cm91dsOpICFcIixcbiAgICBtYWlsVmFsaWRhdGlvbk1lc3NhZ2U6IFwiVm90cmUgaW5zY3JpcHRpb24gZXN0IGJpZW4gZW5yZWdpc3Ryw6llLlxcblBvdXIgbGEgZmluYWxpc2VyLCBtZXJjaSBkZSBjbGlxdWVyIGRhbnMgbGVzIDI0SCBzdXIgbGUgbGllbiBkZSBjb25maXJtYXRpb24gcXVpIHZpZW50IGRlIHZvdXMgw6p0cmUgZW52b3nDqSBwYXIgZS1tYWlsLlwiLFxuICAgIG1haWxWYWxpZGF0aW9uTGlua1N1YmplY3QgOiBcIk1lcmNpIGRlIHZhbGlkZXIgdm90cmUgY29tcHRlXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblxcblBvdXIgdmFsaWRlciB2b3RyZSBjb21wdGUsIG1lcmNpIGRlIGNsaXF1ZXIgc3VyIGxlIGxpZW4gc3VpdmFudCBkYW5zIGxlcyAyNGggOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbFZhbGlkYXRpb25MaW5rU0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm90cmUgY29tcHRlLCBtZXJjaSBkZSBjbGlxdWVyIHN1ciBsZSBsaWVuIHN1aXZhbnQgZGFucyBsZXMgMjRoLjwvcD48cD48YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+VmFsaWRlci48L2E+PC9wPlwiLFxuICAgIHZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGNvbXB0ZSB2aWVudCBiaWVuIGQnw6p0cmUgdmFsaWTDqS4gTWVyY2kgZXQgYmllbnZlbnVlICFcIixcbiAgICB2YWxpZGF0aW9uTWVzc2FnZUFkbWluOiBcIkxlIGNvbXB0ZSBhIGJpZW4gw6l0w6kgdmFsaWTDqS5cIixcbiAgICB2YWxpZGF0aW9uQWxyZWFkeU1lc3NhZ2U6IFwiSWwgc2VtYmxlIHF1ZSB2b3VzIGF5ZXogZMOpasOgIHZhbGlkw6kgdm90cmUgY29tcHRlLlwiLFxuICAgIHZhbGlkYXRpb25BbHJlYWR5TWVzc2FnZUFkbWluOiBcIkNlIGNvbXB0ZSBhIGTDqWrDoCDDqXTDqSB2YWxpZMOpLlwiLFxuICAgIG1haWxXZWxjb21lU3ViamVjdCA6IFwiQmllbnZlbnVlICFcIixcbiAgICBtYWlsV2VsY29tZUJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuXFxuTWVyY2kgZXQgw6AgYmllbnTDtHQgIVwiLFxuICAgIG1haWxXZWxjb21lQm9keUhUTUwgOiBcIjxoMz5Cb25qb3VyIFVTRVJfTkFNRSw8L2gzPjxwPlZvdHJlIHZlbmV6IGRlIHZhbGlkZXIgdm90cmUgaW5zY3JpcHRpb24gw6AgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgbWFpbFRoYW5rR29kZmF0aGVyU3ViamVjdCA6IFwiTWVyY2kgIVwiLFxuICAgIG1haWxUaGFua0dvZGZhdGhlckJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcbkdyw6JjZSDDoCB2b3VzIHVuIG5vdXZlbCB1dGlsaXNhdGV1ciAoRU1BSUwpIHZpZW50IGRlIHMnaW5zY3JpcmUgc3VyIE5PTV9TSVRFLlxcbk1lcmNpIGV0IMOgIGJpZW50w7R0ICFcIixcbiAgICBtYWlsVGhhbmtHb2RmYXRoZXJCb2R5SFRNTCA6IFwiPGgzPkJvbmpvdXIgVVNFUl9OQU1FLDwvaDM+PHA+R3LDomNlIMOgIHZvdXMgdW4gbm91dmVsIHV0aWxpc2F0ZXVyIChFTUFJTCkgdmllbnQgZGUgcydpbnNjcmlyZSBzdXIgTk9NX1NJVEUuPC9wPjxwPk1lcmNpIGV0IMOgIGJpZW50w7R0ICE8L3A+XCIsXG4gICAgYmFkTGlua1ZhbGlkYXRpb25NZXNzYWdlOiBcIlZvdHJlIGxpZW4gZGUgY29uZmlybWF0aW9uIG5lIHNlbWJsZSBwYXMgdmFsaWRlIG91IGJpZW4gaWwgYSBleHBpcsOpLiBWb3VzIHBvdXZleiBlbiByZWNldm9pciB1biBub3V2ZWF1IDxhIGhyZWY9JyNVUkwnPmVuIGNsaXF1YW50IGljaTwvYT4uXCIsXG4gICAgZW1haWxOb3RGb3VuZDogXCJBdWN1biB1dGlsaXNhdGV1ciB0cm91dsOpIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuXCIsXG4gICAgYWxyZWFkeUNvbm5lY3RlZDogXCJWb3VzIMOqdGVzIGTDqWrDoCBjb25uZWN0w6koZSkgYXUgc2l0ZSAhXCIsXG4gICAgbmVlZEJlQ29ubmVjdGVkOiBcIlZvdXMgZGV2ZXogw6p0cmUgY29ubmVjdMOpKGUpIHBvdXIgYWNjw6lkZXIgw6AgY2V0dGUgcGFnZS5cIixcbiAgICBjb25uZWN0aW9uT2s6IFwiQ29ubmV4aW9uIHLDqXVzc2llLlwiLFxuICAgIG5lZWRDaG9vc2VMb2dpbldheTogXCJWb3VzIGRldmV6IHNvaXQgc2Fpc2lyIHZvdHJlIG1vdCBkZSBwYXNzZSwgc29pdCBjb2NoZXIgbGEgY2FzZSB2b3VzIHBlcm1ldHRhbnQgZGUgcmVjZXZvaXIgdW4gbGllbiBkZSBjb25uZXhpb24gcGFyIGUtbWFpbC5cIixcbiAgICBuZWVkVmFsaWRhdGlvblRvTG9naW4gOiBcIlZvdXMgZGV2ZXogZCdhYm9yZCB2YWxpZGVyIHZvdHJlIGNvbXB0ZSBhdmFudCBkZSB2b3VzIGNvbm5lY3Rlci4gUG91ciBjZSBmYWlyZSwgdW4gbGllbiB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbC5cIixcbiAgICB0b29NYW55TG9naW5GYWlscyA6IFwiVHJvcCBkZSB0ZW50YXRpdmVzIGRlIGNvbm5leGlvbiBpbmZydWN0dWV1c2VzIHBvdXIgY2V0dGUgYWRyZXNzZSBlLW1haWwuIFZvdXMgZGV2ZXogYXR0ZW5kcmUgTUlOVVRFUyBtaW51dGVzIHBvdXIgZXNzYXllciBkZSBub3V2ZWF1LlwiLFxuICAgIGJhZFBhc3N3b3JkOiBcIkxlIG1vdCBkZSBwYXNzZSBuJ2VzdCBwYXMgbGUgYm9uLlwiLFxuICAgIG1haWxMb2dpbkxpbmtTdWJqZWN0IDogXCJWb3RyZSBsaWVuIGRlIGNvbm5leGlvbi5cIixcbiAgICBtYWlsTG9naW5MaW5rQm9keVR4dCA6IFwiQm9uam91ciBVU0VSX05BTUUsXFxuUG91ciB2b3VzIGNvbm5lY3RlciDDoCB2b3RyZSBjb21wdGUsIGNsaXF1ZXogc3VyIGxlIGxpZW4gc3VpdmFudCBzYW5zIHRhcmRlciA6IExJTktfVVJMXCIsXG4gICAgbWFpbExvZ2luTGlua0JvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZvdXMgY29ubmVjdGVyIMOgIHZvdHJlIGNvbXB0ZSwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDo8L3A+PHA+PGEgaHJlZj1cXFwiTElOS19VUkxcXFwiPlZhbGlkZXIuPC9hPjwvcD5cIixcbiAgICBtYWlsTG9naW5MaW5rTWVzc2FnZSA6IFwiVW4gbGllbiBkZSBjb25uZXhpb24gdmllbnQgZGUgdm91cyDDqnRyZSBlbnZvecOpIHN1ciB2b3RyZSBhZHJlc3NlIGUtbWFpbC4gTmUgdGFyZGV6IHBhcyDDoCBsJ3V0aWxpc2VyLCBjYXIgaWwgbidlc3QgdmFsYWJsZSBxdWUgZHVyYW50IFwiLFxuICAgIHVwZGF0ZWRPa01lc3NhZ2U6IFwiVm9zIGluZm9ybWF0aW9ucyBvbnQgYmllbiDDqXTDqSBtaXNlcyDDoCBqb3VyLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEVtYWlsIDogXCJNYWlzIGxhIG5vdXZlbGxlIGFkcmVzc2UgZS1tYWlsIG4nYSBwdSDDqnRyZSBlbnJlZ2lzdHLDqWUgY2FyIGVsbGUgbidhIHBhcyB1bmUgZm9ybWF0IGNvcnJlY3QuXCIsXG4gICAgdXBkYXRlZE5lZWRVbmlxdWVFbWFpbCA6IFwiTWFpcyBsYSBub3V2ZWxsZSBhZHJlc3NlIGUtbWFpbCBzYWlzaWUgKE5FV19FTUFJTCkgbidhIHB1IMOqdHJlIGVucmVnaXN0csOpZSwgY2FyIGVsbGUgZXN0IGTDqWrDoCB1dGlsaXPDqWUgcG91ciB1biBhdXRyZSBjb21wdGUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luU3ViamVjdCA6IFwiTWVyY2kgZGUgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzLlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlUeHQgOiBcIkJvbmpvdXIgVVNFUl9OQU1FLFxcblBvdXIgdmFsaWRlciB2b3Mgbm91dmVhdXggaWRlbnRpZmlhbnRzIGRlIGNvbm5leGlvbiwgY2xpcXVleiBzdXIgbGUgbGllbiBzdWl2YW50IHNhbnMgdGFyZGVyIDpcXG5MSU5LX1VSTFwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgdm9zIG5vdXZlYXV4IGlkZW50aWZpYW50cyBkZSBjb25uZXhpb24sIDxhIGhyZWY9XFxcIkxJTktfVVJMXFxcIj5jbGlxdWV6IGljaTwvYT4gc2FucyB0YXJkZXIuPC9wPlwiLFxuICAgIG1haWxVcGRhdGVMb2dpbkxpbmtNZXNzYWdlOiBcIkNlcGVuZGFudCwgdm91cyBhdmV6IG1vZGlmacOpIGF1IG1vaW5zIHVuIGRlIHZvcyBpZGVudGlmaWFudHMgZGUgY29ubmV4aW9uIChlbWFpbCBldC9vdSBtb3QgZGUgcGFzc2UpIGV0IDxiPnZvdXMgZGV2ZXogY2xpcXVlciBzdXIgbGUgbGllbiBxdWkgdmllbnQgZGUgdm91cyDDqnRyZXMgZW52b3nDqSBzdXIgdm90cmUgYWRyZXNzZSAoTkVXX0VNQUlMKSBwb3VyIHZhbGlkZXIgY2UgY2hhbmdlbWVudDwvYj4uIEVuIGF0dGVuZGFudCwgbWVyY2kgZGUgY29udGludWVyIMOgIHV0aWxpc2VyIHZvcyBhbmNpZW5zIGlkZW50aWZpYW50cy5cIixcbiAgICB1cGRhdGVkTmVlZFZhbGlkYXRlZFVzZXI6IFwiTCd1dGlsaXNhdGV1ciBxdWUgdm91cyBzb3VoYWl0w6kgbW9kaWZpZXIgbidleGlzdGUgcGFzL3BsdXMgb3UgbidhIHBhcyBlbmNvcmUgdmFsaWTDqSBzb24gY29tcHRlLlwiLFxuICAgIHVwZGF0ZWROZWVkR29vZEdvZGZhdGhlciA6IFwiTWFpcyBsZSBub3V2ZWF1IGNvZGUgcGFycmFpbiBuJ2EgcHUgw6p0cmUgcmV0ZW51LCBjYXIgaWwgbmUgY29ycmVzcG9uZCDDoCBhdWN1biBjb21wdGUgdXRpbGlzYXRldXIgb3Ugw6AgbCd1dGlsaXNhdGV1ciBsdWktbcOqbWUuXCIsXG4gICAgbWFpbFVwZGF0ZUxvZ2luT2tNZXNzYWdlOiBcIkxhIG1pc2Ugw6Agam91ciBkZSB2b3MgaWRlbnRpZmlhbnRzIGEgYmllbiDDqXTDqSBlbnJlZ2lzdHLDqWUuXCIsXG4gICAgdXBkYXRlZEZhaWxlZEdvZGZhdGhlck5vdEZvdW5kIDogXCJMJ2lkZW50aWZpYW50IGZvdXJuaSBwb3VyIGxlIHBhcnJhaW4gbmUgY29ycmVzcG9uZCDDoCBhdWN1biB1dGlsaXNhdGV1ci5cIixcbiAgICBjcmVhdGlvbk9rTWVzc2FnZTogXCJMZSBub3V2ZWwgdXRpbGlzYXRldXIgYSBiaWVuIMOpdMOpIGVucmVnaXN0csOpLlwiLFxuICAgIG1haWxEZWxldGVTdWJqZWN0IDogXCJDb25maXJtZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLlwiLFxuICAgIG1haWxEZWxldGVCb2R5VHh0IDogXCJCb25qb3VyIFVTRVJfTkFNRSxcXG5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCBjbGlxdWV6IHN1ciBsZSBsaWVuIHN1aXZhbnQgc2FucyB0YXJkZXIgOlxcbkxJTktfVVJMXCIsXG4gICAgbWFpbERlbGV0ZUJvZHlIVE1MIDogXCI8aDM+Qm9uam91ciBVU0VSX05BTUUsPC9oMz48cD5Qb3VyIHZhbGlkZXIgbGEgc3VwcHJlc3Npb24gZGUgdm90cmUgY29tcHRlLCA8YSBocmVmPVxcXCJMSU5LX1VSTFxcXCI+Y2xpcXVleiBpY2k8L2E+IHNhbnMgdGFyZGVyLjwvcD5cIixcbiAgICBtYWlsRGVsZXRlTGlua01lc3NhZ2U6IFwiVm90cmUgZGVtYW5kZSBkZSBzdXBwcmVzc2lvbiBhIGJpZW4gw6l0w6kgZW5yZWdpc3Ryw6llLiBNZXJjaSBkZSBjbGlxdWVyIHNhbnMgdGFyZGVyIHN1ciBsZSBsaWVuIHF1aSB2aWVudCBkZSB2b3VzIMOqdHJlIGVudm95w6kgcGFyIGUtbWFpbCBwb3VyIGNvbmZpcm1lci5cIixcbiAgICBkZWxldGVPa01lc3NhZ2U6IFwiTCd1dGlsaXNhdGV1ciBhIGJpZW4gw6l0w6kgc3VwcHJpbcOpLlwiLFxuICAgIGRlbGV0ZUZhaWxNZXNzYWdlOiBcIlRlbnRhdGl2ZSBkZSBzdXBwcmVzc2lvbiBkJ3VuIHV0aWxpc2F0ZXVyIGluZXhpc3RhbnQgOiBcIixcbiAgICBtYWlsRGVsZXRlTGlua09rTWVzc2FnZTogXCJWb3RyZSBjb21wdGUgYSBiaWVuIMOpdMOpIHN1cHByaW3DqS4gTWVyY2kgZCdhdm9pciB1dGlsaXPDqSBub3Mgc2VydmljZXMuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtBbHJlYWR5TWVzc2FnZTogXCJJbCBzZW1ibGUgcXVlIHZvdXMgYXlleiBkw6lqw6AgdmFsaWTDqSBsYSBzdXBwcmVzc2lvbiBkZSB2b3RyZSBjb21wdGUuXCIsXG4gICAgbWFpbERlbGV0ZUxpbmtGYWlsTWVzc2FnZTogXCJWb3RyZSBsaWVuIGRlIHN1cHByZXNzaW9uIG4nZXN0IHBhcyB2YWxpZGUgb3UgYWxvcnMgaWwgbidlc3QgcGx1cyB2YWxhYmxlLlwiLFxuICAgIGNyb25EZWxldGVVbnZhbGlkZWRVc2Vyc01lc3NhZ2U6IFwiIGNvbXB0ZXMgdXRpbGlzYXRldXJzIG5vbiB2YWxpZMOpcyBvbnQgw6l0w6kgc3VwcHJpbcOpcy5cIixcbiAgICBkZWxldGVJbmFjdGl2ZVVzZXJzTWVzc2FnZTogXCIgY29tcHRlcyB1dGlsaXNhdGV1cnMgaW5hY3RpZnMgb250IMOpdMOpIHN1cHByaW3DqXMuXCIsXG4gICAgd2VsY29tZU1lc3NhZ2U6IFwiQmllbnZlbnVlICNOQU1FICFcIixcbiAgICBieWVieWVNZXNzYWdlOiBcIlNpIHZvdXMgdm95ZXogY2UgbWVzc2FnZSwgYydlc3QgcXVlIHZvdHJlIGTDqWNvbm5leGlvbiBzJ2VzdCBiaWVuIGTDqXJvdWzDqWUuPGJyPsOAIGJpZW50w7R0ICFcIixcbiAgICBpbmZvc1VzZXJGb3JBZG1pbjogXCJDZXQgdXRpbGlzYXRldXIgKGlkOiBJRF9VU0VSKSBhIDxiPmNyw6nDqSBzb24gY29tcHRlIGxlIERBVEVfQ1JFQTwvYj4sIGxhIGRlcm5pw6hyZSBtaXNlIMOgIGpvdXIgZGF0YW50IGR1IERBVEVfVVBEQVRFLjxicj48Yj5EYXRlIGRlIHNhIGRlcm5pw6hyZSBjb25uZXhpb24gOiBEQVRFX0NPTk5FQ1RJT04uPC9iPlwiLFxuICAgIGluZm9zQWRtaW5Hb2RmYXRoZXI6IFwiQ2V0IHV0aWxpc2F0ZXVyIGEgw6l0w6kgcGFycmFpbsOpIHBhciBcIixcbiAgICBpbmZvc0FkbWluTmJHb2RDaGlsZHM6IFwiU2VzICNOQiBmaWxsZXVpbHMgOiBcIlxufTsiLCIvLyBRdWVscXVlcyBmb25jdGlvbnMgdXRpbGVzIHBvdXIgbGVzIGNoYcOubmVzXG5cbmNsYXNzIFRvb2xcbntcbiAgICBzdGF0aWMgaXNFbXB0eShteVZhcilcbiAgICB7XG4gICAgICAgIGlmKG15VmFyPT09dW5kZWZpbmVkIHx8IG15VmFyPT09bnVsbClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIG15VmFyKz1cIlwiOy8vIHNpIGF1dHJlIGNob3NlIHF1J3VuZSBjaGHDrm5lIGVudm95w6kuLi5cbiAgICAgICAgICAgIG15VmFyPW15VmFyLnRyaW0oKTtcbiAgICAgICAgICAgIGlmKG15VmFyPT09XCJcIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgc3RhdGljIHRyaW1JZk5vdE51bGwobXlTdHJpbmcpXG4gICAge1xuICAgICAgICBpZihUb29sLmlzRW1wdHkobXlTdHJpbmcpKVxuICAgICAgICAgICAgbXlTdHJpbmc9bnVsbDtcbiAgICAgICAgZWxzZVxuICAgICAgICB7XG4gICAgICAgICAgICBteVN0cmluZys9XCJcIjsvLyBzaSBhdXRyZSBjaG9zZSBxdSd1bmUgY2hhw65uZSBlbnZvecOpLi4uXG4gICAgICAgICAgICBteVN0cmluZz1teVN0cmluZy50cmltKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG15U3RyaW5nO1xuICAgIH1cblxuXG4gICAgc3RhdGljIHNob3J0ZW5JZkxvbmdlclRoYW4obXlTdHJpbmcsIG1heClcbiAgICB7XG4gICAgICAgIG15U3RyaW5nKz1cIlwiOy8vIGF1IGNhcyBvw7kgY2VsYSBuZSBzZXJhaXQgcGFzIHVuZSBjaGHDrm5lLi4uXG4gICAgICAgaWYobXlTdHJpbmcubGVuZ3RoID4gbWF4KVxuICAgICAgICAgICAgbXlTdHJpbmc9bXlTdHJpbmcuc3Vic3RyaW5nKDAsIChtYXgtMykpK1wiLi4uXCI7XG4gICAgICAgIHJldHVybiBteVN0cmluZztcbiAgICB9XG5cbiAgICAvLyBzb3VyY2UgOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNTYwNDE0MC9yZXBsYWNlLW11bHRpcGxlLXN0cmluZ3Mtd2l0aC1tdWx0aXBsZS1vdGhlci1zdHJpbmdzXG4gICAgc3RhdGljIHJlcGxhY2VBbGwobXlTdHJpbmcsIG1hcE9iailcbiAgICB7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VFbHRzID0gbmV3IFJlZ0V4cChPYmplY3Qua2V5cyhtYXBPYmopLmpvaW4oXCJ8XCIpLFwiZ2lcIik7XG4gICAgICAgIHJldHVybiBteVN0cmluZy5yZXBsYWNlKHJlcGxhY2VFbHRzLCAobWF0Y2hlZCkgPT5cbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIG1hcE9ialttYXRjaGVkXTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlIDogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZnIvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvT2JqZXRzX2dsb2JhdXgvTWF0aC9yYW5kb21cbiAgICBzdGF0aWMgZ2V0UmFuZG9tSW50KG1pbiwgbWF4KVxuICAgIHtcbiAgICAgICAgbWluID0gTWF0aC5jZWlsKG1pbik7XG4gICAgICAgIG1heCA9IE1hdGguZmxvb3IobWF4KTtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pKSArIG1pbjtcbiAgICB9XG5cbiAgICAvLyDDoCBjb21wbMOpdGVyIDogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRGF0ZV9mb3JtYXRfYnlfY291bnRyeVxuICAgIHN0YXRpYyBkYXRlRm9ybWF0KGRhdGVTdHJpbmcsIGxhbmc9XCJmclwiKVxuICAgIHtcbiAgICAgICAgaWYoVG9vbC5pc0VtcHR5KGRhdGVTdHJpbmcpKVxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIGxldCBteURhdGU9bmV3IERhdGUoZGF0ZVN0cmluZyk7XG4gICAgICAgIGxldCBteURheT1teURhdGUuZ2V0RGF0ZSgpK1wiXCI7XG4gICAgICAgIGlmKG15RGF5Lmxlbmd0aD09PTEpXG4gICAgICAgICAgICBteURheT1cIjBcIitteURheTtcbiAgICAgICAgbGV0IG15TW91bnRoPShteURhdGUuZ2V0TW9udGgoKSsxKStcIlwiO1xuICAgICAgICBpZihteU1vdW50aC5sZW5ndGg9PT0xKVxuICAgICAgICAgICAgbXlNb3VudGg9XCIwXCIrbXlNb3VudGg7XG4gICAgICAgIGxldCBteVllYXI9bXlEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIGlmKGxhbmc9PT1cImZyXCIpXG4gICAgICAgICAgICByZXR1cm4gbXlEYXkrXCIvXCIrbXlNb3VudGgrXCIvXCIrbXlZZWFyO1xuICAgICAgICBlbHNlIGlmIChsYW5nPT09XCJmb3JtXCIpLy8gMjAxNC0wMi0wOVxuICAgICAgICAgICAgcmV0dXJuIG15WWVhcitcIi1cIitteU1vdW50aCtcIi1cIitteURheTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmV0dXJuIG15TW91bnRoK1wiL1wiK215RGF5K1wiL1wiK215WWVhcjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gVG9vbDsiLCJtb2R1bGUuZXhwb3J0cyA9XG57XG4gICAgYXBpVXJsIDogXCJodHRwOi8vbG9jYWxob3N0OjMwMDAvYXBpXCIsXG4gICAgdXNlcnNHZXRDb25maWdVcmwgOiBcIi91c2VyL2dldGNvbmZpZ1wiLFxuICAgIGxhbmcgOiBcImZyXCIsXG4gICAgdXNlckhvbWVQYWdlIDogXCJhY2N1ZWlsLmh0bWxcIixcbiAgICBhZG1pbkhvbWVQYWdlIDogXCJhZG1pbi5odG1sXCIsXG4gICAgbWFuYWdlckhvbWVQYWdlIDogXCJnZXN0aW9uLmh0bWxcIixcbiAgICBzdWJzY3JpYmVQYWdlIDogXCJpbnNjcmlwdGlvbi5odG1sXCIsXG4gICAgY29ubmVjdGlvblBhZ2UgOiBcImNvbm5leGlvbi5odG1sXCIsXG4gICAgYWNjb3VudFBhZ2U6IFwiY29tcHRlLmh0bWxcIixcbiAgICBxdWVzdGlvbm5haXJlc01hbmFnZW1lbnRQYWdlOiBcImdlc3Rpb24tcXVpenMuaHRtbFwiLFxuICAgIHVzZXJzTWFuYWdlbWVudFBhZ2U6IFwiZ2VzdGlvbi11dGlsaXNhdGV1cnMuaHRtbFwiLFxuICAgIG5iUXVlc3Rpb25uYWlyZXNVc2VySG9tZVBhZ2UgOiAxMCxcbiAgICBpbGx1c3RyYXRpb25EaXIgOiBcIi9pbWcvcXVpenMvXCJcbn07XG4vLyDDoCB0ZXJtZSBmdXNpb25uZXIgYXZlYyBsZXMgZMOpY2xhcmF0aW9ucyBiYWNrZW5kIGNvbmNlcm5hbnQgbGUgZnJvbnQsIHRvdXQgw6l0YW50IHNhaXNpIGRhbnMgbCdhZG1pbiIsIi8vIEZPTkNUSU9OUyBVVElMRVMgQVUgU1RPQ0tBR0UgTE9DQUwgKFNFU1NJT04sIENPT0tJRVMsIElOREVYREIsIEVUQy4pXG4vLyBSZXZlbmlyIHBvdXIgZ8OpcmVyIGxlIGNhcyBvw7kgbG9jYWwuc3RvcmFnZSBuJ2VzdCBwYXMgY29ubnUgcG91ciB1dGlsaXNlciBjb29raWVcbiAgICBcbmV4cG9ydCBjb25zdCBzYXZlTG9jYWx5ID0gKG5hbWUsIGRhdGEpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obmFtZSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xufVxuXG5leHBvcnQgY29uc3QgZ2V0TG9jYWx5ID0gKG5hbWUsIGpzb249ZmFsc2UpID0+XG57XG4gICAgaWYoanNvbilcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0obmFtZSkpO1xuICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKG5hbWUpO1xufVxuXG5leHBvcnQgY29uc3QgcmVtb3ZlTG9jYWx5ID0gKG5hbWUpID0+XG57XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0obmFtZSk7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIGFzc29jaWFudCBsZXMgYXR0cmlidXRzIGZvdXJuaXMgw6AgdW4gY2hhbXAgZGUgZm9ybXVsYWlyZVxuZXhwb3J0IGNvbnN0IGFkZEVsZW1lbnQgPSAoZWx0UGFyZW50LCBlbHRUeXBlLCBlbHRDb250ZW50PVwiXCIsIGVsdElkPVwiXCIsIGVsdENsYXNzPVtdLCBlbHRBdHRyaWJ1dGVzPXt9LCByZXBsYWNlPXRydWUpID0+XG57XG4gICAgaWYoaXNFbXB0eShlbHRUeXBlKSB8fCBpc0VtcHR5KGVsdFBhcmVudCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBlbHNlXG4gICAge1xuICAgICAgICBjb25zdCBuZXdFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZWx0VHlwZSk7XG4gICAgICAgIFxuICAgICAgICBpZighaXNFbXB0eShlbHRJZCkpLy8gdGVzdGVyIHNpIGwnaWQgbidlc3QgcGFzIGTDqWrDoCB1dGlsaXPDqSBkYW5zIGxlIERPTSA/XG4gICAgICAgICAgICBuZXdFbGVtZW50LmlkPWVsdElkO1xuXG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkoZWx0Q2xhc3MpICYmIGVsdENsYXNzLmxlbmd0aCE9MClcbiAgICAgICAge1xuICAgICAgICAgICAgZm9yKGxldCBpIGluIGVsdENsYXNzKVxuICAgICAgICAgICAgICAgIG5ld0VsZW1lbnQuY2xhc3NMaXN0LmFkZChlbHRDbGFzc1tpXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0eXBlb2YgZWx0QXR0cmlidXRlcyA9PT0gXCJvYmplY3RcIikgLy8gISEgdG91cyBsZXMgb2JqZXRzIG5lIHNvbnQgcGFzIG9rXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcihsZXQgYXR0cmlidXROYW1lIGluIGVsdEF0dHJpYnV0ZXMpXG4gICAgICAgICAgICAgICAgbmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXROYW1lLCBlbHRBdHRyaWJ1dGVzW2F0dHJpYnV0TmFtZV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoIWlzRW1wdHkoZWx0Q29udGVudCkpXG4gICAgICAgICAgICBuZXdFbGVtZW50LmlubmVySFRNTD1lbHRDb250ZW50LnJlcGxhY2UoL1xcbi9nLFwiPGJyPlwiKTsvLyBpbm5lckhUTUwgcGVybWV0IGQnYWpvdXRlciBkdSB0ZXh0ZSBheWFudCBsdWktbcOqbWUgZGVzIGJhbGlzZXMsIGV0Yy5cbiAgICAgICAgICAgIFxuICAgICAgICBpZihyZXBsYWNlKVxuICAgICAgICAgICAgZWx0UGFyZW50LmlubmVySFRNTD1cIlwiO1xuICAgICAgICBlbHRQYXJlbnQuYXBwZW5kQ2hpbGQobmV3RWxlbWVudCk7XG4gICAgfSAgICBcbn0iLCIvLyBDZSBzY3JpcHQgZm91cm5pdCBkZXMgZm9uY3Rpb25zIHV0aWxpc8OpZXMgc3VyIHRvdXRlcyBsZXMgcGFnZXMgZHUgc2l0ZVxuXG5leHBvcnQgY29uc3QgaGVsbG9EZXYgPSAoKSA9Plxue1xuICAgIGNvbnNvbGUubG9nKFwiKioqKiBIZWxsbyBhbWkgZMOpdmVsb3BwZXVyIDotKVxcbiBMZSBjb2RlIGRlIFdpa2lMZXJuaSBlc3QgbGlicmUgZXQgZXN0IGxpc2libGUgc3VyIGdpdGxhYiA6IFxcbiBCb25uZSBsZWN0dXJlIDotKSBcXG4gUG91ciBsZXMgc3VnZ2VzdGlvbnMgZCdhbcOpbGlvcmF0aW9uIG91IHF1ZXN0aW9ucyA6IGRldkB3aWxpbGVybmkuY29tICoqKipcIik7XG4gICAgcmV0dXJuIHRydWU7XG59IiwiaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIEZvbmN0aW9uIHLDqWN1cMOpcmFudCBsZXMgcGFyYW3DqHRyZXMgcGFzc8OpcyBwYXIgbCd1cmxcbmV4cG9ydCBjb25zdCBnZXRVcmxQYXJhbXMgPSAoKSA9Plxue1xuICAgIGlmKGlzRW1wdHkobG9jYXRpb24uc2VhcmNoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IGxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkuc3BsaXQoXCImXCIpO1xuICAgIGlmKCFBcnJheS5pc0FycmF5KHBhcmFtZXRlcnMpIHx8IHBhcmFtZXRlcnMubGVuZ3RoPT09MClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBcbiAgICBsZXQgcGFyYW0sIGRhdGFzPXt9O1xuICAgIGZvcihsZXQgaSBpbiBwYXJhbWV0ZXJzKVxuICAgIHtcbiAgICAgICAgcGFyYW0gPSBwYXJhbWV0ZXJzW2ldLnNwbGl0KFwiPVwiKTtcbiAgICAgICAgaWYocGFyYW0ubGVuZ3RoPT09MilcbiAgICAgICAgICAgIGRhdGFzW3BhcmFtWzBdXT1kZWNvZGVVUkkocGFyYW1bMV0pO1xuICAgIH1cbiAgICByZXR1cm4gZGF0YXM7XG59IiwiY29uc3QgY29uZmlnRnJvbnRFbmQgPSByZXF1aXJlKFwiLi4vY29uZmlnL2dlbmVyYWxcIik7XG5cbmltcG9ydCB7IGdldExvY2FseSwgcmVtb3ZlTG9jYWx5LCBzYXZlTG9jYWx5IH0gZnJvbSBcIi4vY2xpZW50c3RvcmFnZS5qc1wiO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gXCIuLi8uLi8uLi90b29scy9tYWluXCI7XG5cbi8vIFLDqWN1cMOocmUgbGVzIGRvbm7DqWVzIGRlIGNvbmZpZ3VyYXRpb24gZGVzIHV0aWxpc2F0ZXVyc1xuLy8gw4AgdGVybWUsIHVuIGZpY2hpZXIgc3RhdGlxdWUgaW1wb3J0YWJsZSBjb21tZSBtb2R1bGUgZGV2cmFpdCDDqXZpdGVyIHVuZSByZXF1w6p0ZSBhamF4XG5leHBvcnQgY29uc3QgZ2V0Q29uZmlnID0gIGFzeW5jICgpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgY29uZmlnRnJvbnRFbmQuYXBpVXJsK2NvbmZpZ0Zyb250RW5kLnVzZXJzR2V0Q29uZmlnVXJsKTtcbiAgICAgICAgeGhyLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoSlNPTi5wYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7XG4gICAgICAgIHhoci5vbmVycm9yID0gKCkgPT4gcmVqZWN0KHhoci5zdGF0dXNUZXh0KTtcbiAgICAgICAgeGhyLnNlbmQoKTtcbiAgICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFRpbWVEaWZmZXJlbmNlID0gKGNvbmZpZykgPT5cbntcbiAgICBjb25zdCB0aW1lTG9jYWw9bmV3IERhdGUoKS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgIGlmKHRpbWVMb2NhbCA+IGNvbmZpZy50aW1lRGlmZmVyZW5jZU1heCB8fCB0aW1lTG9jYWwgPCBjb25maWcudGltZURpZmZlcmVuY2VNaW4pXG4gICAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgcmV0dXJuIHRpbWVMb2NhbDtcbn1cblxuLy8gT24gZW5sw6h2ZSB2b2xvbnRhaXJlbWVudCBsZXMgMC9PIHBvdXIgw6l2aXRlciBsZXMgY29uZnVzaW9ucyAhXG4vLyBFdCBtaWV1eCB2YXV0IGF1c3NpIGTDqWJ1dGVyIGV0IGZpbmlyIHBhciB1bmUgbGV0dHJlIHNpbXBsZS5cbmV4cG9ydCBjb25zdCBnZXRQYXNzd29yZCA9IChuYkNhck1pbiwgbmJDYXJNYXgpID0+XG57XG4gICAgY29uc3QgbmJDYXI9bmJDYXJNaW4rTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKihuYkNhck1heC1uYkNhck1pbikpO1xuICAgIGNvbnN0IGxldHRlcnM9XCJBQkNERUZHSElKS0xNTlBRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5wcXJzdHV2d3h5elwiO1xuICAgIGNvbnN0IG90aGVycz1cIjEyMzQ1Njc4OSE/LiotXyVAJsOJw4DDiMOZ4oKsJMOCw4rDm8OOXCI7XG4gICAgbGV0IHBhc3N3b3JkPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgZm9yKGxldCBpPTE7aTwobmJDYXItMSk7aSsrKVxuICAgIHtcbiAgICAgICAgaWYoKGkgJSAyKSA9PT0xKVxuICAgICAgICAgICAgcGFzc3dvcmQrPW90aGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqb3RoZXJzLmxlbmd0aCldO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBwYXNzd29yZCs9bGV0dGVyc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqbGV0dGVycy5sZW5ndGgpXTsgICBcbiAgICB9XG4gICAgcGFzc3dvcmQrPWxldHRlcnNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKmxldHRlcnMubGVuZ3RoKV07XG4gICAgcmV0dXJuIHBhc3N3b3JkO1xufVxuXG4vLyBKJ3V0aWxpc2UgbGUgc3RvY2thZ2UgbG9jYWwgZHUgbmF2aWdhdGV1ciBwb3VyIGVucmVnaXN0cmVyIGxlcyBkb25uw6llcyBwZXJtZXR0YW50IGRlIHJlY29ubmHDrnRyZSBsJ3V0aWxpc2F0ZXVyIHBhciBsYSBzdWl0ZVxuLy8gU2V1bCBsZSBzZXJ2ZXVyIHBvdXJyYSB2w6lyaWZpZXIgcXVlIGxlcyBpZGVudGlmaWFudHMgc29udCAodG91am91cnMpIHZhbGlkZXMuXG5leHBvcnQgY29uc3Qgc2V0U2Vzc2lvbiA9ICh1c2VySWQsIHRva2VuLCBkdXJhdGlvblRTKSA9Plxue1xuICAgIGNvbnN0IHN0b3JhZ2VVc2VyPVxuICAgIHtcbiAgICAgICAgaWQ6IHVzZXJJZCxcbiAgICAgICAgdG9rZW46IHRva2VuLFxuICAgICAgICBkdXJhdGlvbiA6IGR1cmF0aW9uVFNcbiAgICB9XG4gICAgc2F2ZUxvY2FseShcInVzZXJcIiwgc3RvcmFnZVVzZXIpO1xufVxuXG4vLyBWw6lyaWZpZSBxdSdpbCB5IGEgZGVzIGRvbm7DqWVzIGxvY2FsZXMgY29uY2VybmFudCBsZSByw6lzdWx0YXQgZCd1biBxdWl6XG4vLyBFdCBsZXMgYWpvdXRlIGF1eCBkb25uw6llcyBlbnZvecOpZXMgcGFyIGxlcyBmb3JtdWxhaXJlcyBkJ2luc2NyaXB0aW9uL2Nvbm5leGlvbiBzaSBjJ2VzdCBsZSBjYXNcbmV4cG9ydCBjb25zdCBjaGVja0Fuc3dlckRhdGFzID0gKGRhdGFzKSA9Plxue1xuICAgIGNvbnN0IGxhc3RBbnN3ZXI9Z2V0TG9jYWx5KFwibGFzdEFuc3dlclwiKTtcbiAgICBpZighaXNFbXB0eShsYXN0QW5zd2VyKSlcbiAgICB7XG4gICAgICAgIGNvbnN0IGFuc3dlcj1KU09OLnBhcnNlKGxhc3RBbnN3ZXIpO1xuICAgICAgICBpZighaXNFbXB0eShhbnN3ZXIuZHVyYXRpb24pICYmICFpc0VtcHR5KGFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzKSAmJiAhaXNFbXB0eShhbnN3ZXIuUXVlc3Rpb25uYWlyZUlkKSAmJiAhaXNFbXB0eShhbnN3ZXIubmJRdWVzdGlvbnMpKVxuICAgICAgICB7XG4gICAgICAgICAgICBkYXRhcy5kdXJhdGlvbj1hbnN3ZXIuZHVyYXRpb247XG4gICAgICAgICAgICBkYXRhcy5uYkNvcnJlY3RBbnN3ZXJzPWFuc3dlci5uYkNvcnJlY3RBbnN3ZXJzO1xuICAgICAgICAgICAgZGF0YXMuUXVlc3Rpb25uYWlyZUlkPWFuc3dlci5RdWVzdGlvbm5haXJlSWQ7XG4gICAgICAgICAgICBkYXRhcy5uYlF1ZXN0aW9ucz1hbnN3ZXIubmJRdWVzdGlvbnM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGRhdGFzO1xufVxuXG4vLyBDZXR0ZSBmb25jdGlvbiB0ZXN0ZSBsYSBjb25uZXhpb24gZGUgbCd1dGlsaXNhdGV1ciBkJ3VuZSBwYWdlXG4vLyBPbiBwZXV0IGZvdXJuaXMgdW5lIGxpc3RlIGRlIHN0YXR1dHMgYWNjZXB0w6lzIChzaSB2aWRlID0gdG91cyksIGFpbnNpIHF1J3VuZSB1cmwgZGUgcmVkaXJlY3Rpb24gc2kgbm9uIGNvbm5lY3TDqSwgdW4gbWVzc2FnZSBkJ2VycmV1ciDDoCBhZmZpY2hlciBzdXIgbGEgcGFnZSBkZSBkZXN0aW5hdGlvbiBldCBsJ3VybCBzdXIgbGFxdWVsbGUgcmV2ZW5pciB1bmUgZm9pcyBjb25uZWN0w6lcbmV4cG9ydCBjb25zdCBjaGVja1Nlc3Npb24gPSBhc3luYyAoY29uZmlnLCBzdGF0dXM9W10sIHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpID0+XG57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+XG4gICAge1xuICAgICAgICBjb25zdCB1c2VyRGF0YXM9Z2V0TG9jYWx5KFwidXNlclwiKTtcbiAgICAgICAgaWYoaXNFbXB0eSh1c2VyRGF0YXMpKVxuICAgICAgICB7XG4gICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgIHtcbiAgICAgICAgICAgIGNvbnN0IHVzZXI9SlNPTi5wYXJzZSh1c2VyRGF0YXMpO1xuICAgICAgICAgICAgaWYoaXNFbXB0eSh1c2VyLmlkKSB8fMKgaXNFbXB0eSh1c2VyLnRva2VuKSB8fCBpc0VtcHR5KHVzZXIuZHVyYXRpb24pIHx8IHVzZXIuZHVyYXRpb24gPCBEYXRlLm5vdygpKVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgcmVkaXJlY3RVc2VyKHVybFJlZGlyZWN0aW9uLCBtZXNzYWdlLCB1cmxXYW50ZWQpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuICAgICAgICAgICAgICAgIHhoci5vcGVuKFwiR0VUXCIsIGNvbmZpZ0Zyb250RW5kLmFwaVVybCtjb25maWcudXNlclJvdXRlcytjb25maWcuY2hlY2tMb2dpblJvdXRlK3VzZXIudG9rZW4pO1xuICAgICAgICAgICAgICAgIHhoci5vbmxvYWQgPSAoKSA9PlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3BvbnNlPUpTT04ucGFyc2UoeGhyLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4aHIuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UuaXNWYWxpZCAmJiByZXNwb25zZS5pZCAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHJlc3BvbnNlLmlkPT09dXNlci5pZClcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLm5hbWU9cmVzcG9uc2UubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyLmxhbmd1YWdlPXJlc3BvbnNlLmxhbmd1YWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXIudGltZURpZmZlcmVuY2U9cmVzcG9uc2UudGltZURpZmZlcmVuY2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci5zdGF0dXM9cmVzcG9uc2Uuc3RhdHVzOy8vIGxlIHRva2VuIGV0IGRlIHRvdXRlIGZhw6dvbiB2w6lyaWZpZXIgw6AgY2hhcXVlIHJlcXXDqnRlIMOgIGwnQVBJXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcInVzZXJcIiwgdXNlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2kgaWwgcydhZ2l0IGQndW4gXCJ1c2VyXCIgZXQgcXVlIHNvbiBhYm9ubmVtZW50IGEgZXhwaXLDqSwgamUgbGUgcmVkaXJpZ2UgdmVycyBsYSBjYWlzc2UgOi0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocmVzcG9uc2Uuc3RhdHVzPT09XCJ1c2VyXCIgJiYgcmVzcG9uc2UubmJEYXlzT2sgPD0gMClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVybEFjY291bnQ9Y29uZmlnLnNpdGVVcmwrXCIvXCIrY29uZmlnRnJvbnRFbmQuYWNjb3VudFBhZ2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YodXJsQWNjb3VudCk9PT0tMSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnRnJvbnRFbmQuYWNjb3VudFBhZ2UpOy8vIHBhc3PDqWUgZGlyZWN0ZW1lbnQgaWNpLCBsJ2FuY3JlICNzdWJzY3JpYmUgbmUgZm9uY3Rpb25uZSBwYXMgIT9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoc3RhdHVzLmxlbmd0aCE9PTAgJiYgc3RhdHVzLmluZGV4T2YocmVzcG9uc2Uuc3RhdHVzKT09PS0xKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVMb2NhbHkoXCJ1c2VyXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZGlyZWN0VXNlcih1cmxSZWRpcmVjdGlvbiwgbWVzc2FnZSwgdXJsV2FudGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZUxvY2FseShcInVzZXJcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWRpcmVjdFVzZXIodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB4aHIub25lcnJvciA9ICgpID0+IHJlamVjdCh4aHIuc3RhdHVzVGV4dCk7XG4gICAgICAgICAgICAgICAgeGhyLnNlbmQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy8gQ2V0dGUgZm9uY3Rpb24gc2VydCDDoCBsYSBwcsOpY8OpZGVudGUgZW4gY2FzIGRlIGNvbm5leGlvbiBub24gdmFsaWRlXG5jb25zdCByZWRpcmVjdFVzZXIgPSAodXJsUmVkaXJlY3Rpb24sIG1lc3NhZ2UsIHVybFdhbnRlZCkgPT5cbntcbiAgICBpZighaXNFbXB0eShtZXNzYWdlKSlcbiAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgbWVzc2FnZSk7XG4gICAgaWYoIWlzRW1wdHkodXJsV2FudGVkKSlcbiAgICAgICAgc2F2ZUxvY2FseShcInVybFwiLCB1cmxXYW50ZWQpO1xuICAgIGlmKCFpc0VtcHR5KHVybFJlZGlyZWN0aW9uKSlcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbih1cmxSZWRpcmVjdGlvbik7XG59IiwiLy8gLS0gR0VTVElPTiBERSBMQSBQQUdFIFBFUk1FVFRBTlQgREUgVkFMSURFUiBMQSBDUsOJQVRJT04gREUgU09OIENPTVBURVxuXG4vLy8gVW4gdG9rZW4gZXN0IHRyYW5zbWlzIGVuIHBhcmFtw6h0cmUgZGUgbCdVcmwuIElsIGEgdW5lIHZhbGlkaXTDqSBsaW1pdMOpIGRhbnMgbGUgdGVtcHMuXG4vLy8gRGFucyBjZSBjYXMsIG9uIHBldXQgcmVkaXJpZ2VyIGwndXRpbGlzYXRldXIgdmVycyBsYSBwYWdlIGRlIGNvbm5leGlvbiBwb3VyIG9idGVuaXIgdW4gbm91dmVhdSBsaWVuIGRlIHZhbGlkYXRpb25cbi8vLyBTaSBsZSB0b2tlbiBlc3Qgb2ssIG9uIGNyw6llIHVuZSBzZXNzaW9uIGRlIGNvdXJ0ZSBkdXLDqWUgZXQgcmVkaXJpZ2UgbCd1dGlsaXNhdGV1ciB2ZXJzIHNhIHBhZ2UgZCdhY2N1ZWlsXG4vLy8gU2kgbCd1dGlsaXNhdGV1ciBhIGTDqWrDoCB1bmUgc2Vzc2lvbiBhY3RpdmUgdmFsaWRlLCBjJ2VzdCBxdSdpbCBhIGTDqWrDoCBjbGlxdcOpIHN1ciBsZSBsaWVuLiBPbiBsZSByZWRpcmlnZSDDqWdhbGVtZW50IHZlcnMgc2EgcGFnZSBkJ2FjY3VlaWwuXG5cbi8vIEZpY2hpZXIgZGUgY29uZmlndXJhdGlvbiBjw7R0w6kgY2xpZW50IDpcbmNvbnN0IGNvbmZpZ0Zyb250RW5kID0gcmVxdWlyZShcIi4vY29uZmlnL2dlbmVyYWxcIik7XG5cbi8vIEltcG9ydGF0aW9uIGRlcyBmb25jdGlvbnMgdXRpbGUgYXUgc2NyaXB0IDpcbmltcG9ydCB7IGdldExvY2FseSwgc2F2ZUxvY2FseSB9IGZyb20gXCIuL3Rvb2xzL2NsaWVudHN0b3JhZ2UuanNcIjtcbmltcG9ydCB7IGFkZEVsZW1lbnQgfSBmcm9tIFwiLi90b29scy9kb20uanNcIjtcbmltcG9ydCB7IGhlbGxvRGV2IH0gZnJvbSBcIi4vdG9vbHMvZXZlcnl3aGVyZS5qc1wiO1xuaW1wb3J0IHsgZ2V0VXJsUGFyYW1zIH0gZnJvbSBcIi4vdG9vbHMvdXJsLmpzXCI7XG5pbXBvcnQgeyBjaGVja1Nlc3Npb24sIGdldENvbmZpZywgc2V0U2Vzc2lvbiB9IGZyb20gXCIuL3Rvb2xzL3VzZXJzLmpzXCI7XG5cbi8vIERpY3Rpb25uYWlyZXMgOlxuY29uc3QgdHh0ID0gcmVxdWlyZShcIi4uLy4uL2xhbmcvXCIrY29uZmlnRnJvbnRFbmQubGFuZytcIi9nZW5lcmFsXCIpO1xuY29uc3QgdHh0VXNlcnMgPSByZXF1aXJlKFwiLi4vLi4vbGFuZy9cIitjb25maWdGcm9udEVuZC5sYW5nK1wiL3VzZXJcIik7XG5cbmNvbnN0IGRpdlJlc3BvbnNlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJyZXNwb25zZVwiKTtcblxuaGVsbG9EZXYoKTtcblxubGV0IGNvbmZpZztcbmNvbnN0IGluaXRpYWxpc2UgPSBhc3luYyAoKSA9Plxue1xuICAgIHRyeVxuICAgIHtcbiAgICAgICAgY29uZmlnID0gYXdhaXQgZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmKCFjb25maWcpXG4gICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgdHh0LnNlcnZlckVycm9yLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgIGVsc2VcbiAgICAgICAge1xuICAgICAgICAgICAgLy8gc2kgbCd1dGlsaXNhdGV1ciBlc3QgZMOpasOgIGNvbm5lY3TDqSwgcGFzIGxhIHBlaW5lIGQnYWxsZXIgKyBsb2luIDpcbiAgICAgICAgICAgIGNvbnN0IGlzQ29ubmVjdGVkPWF3YWl0IGNoZWNrU2Vzc2lvbihjb25maWcpO1xuICAgICAgICAgICAgaWYoaXNDb25uZWN0ZWQpXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc2F2ZUxvY2FseShcIm1lc3NhZ2VcIiwgeyBtZXNzYWdlOiB0eHRVc2Vycy5hbHJlYWR5Q29ubmVjdGVkLCBjb2xvcjpcImluZm9ybWF0aW9uXCIgfSk7Ly8gcG91ciBsJ2FmZmljaGVyIHN1ciBsYSBwYWdlIHN1aXZhbnRlXG4gICAgICAgICAgICAgICAgY29uc3QgdXNlcj1nZXRMb2NhbHkoXCJ1c2VyXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGhvbWVQYWdlPXVzZXIuc3RhdHVzK1wiSG9tZVBhZ2VcIjsvLyBuZSBkZXZyYWl0IHBvdXZvaXIgw6p0cmUgcXVlIHVzZXIgaWNpXG4gICAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihcIi9cIitjb25maWdGcm9udEVuZFtob21lUGFnZV0pO1xuICAgICAgICAgICAgICAgIGFkZEVsZW1lbnQoZGl2UmVzcG9uc2UsIFwicFwiLCB0eHRVc2Vycy5hbHJlYWR5Q29ubmVjdGVkLCBcIlwiLCBbXCJpbmZvcm1hdGlvblwiXSk7Ly8gYXUgY2FzIG/DucKgYmxvY2FnZSByZWRpcmVjdGlvblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGFzPWdldFVybFBhcmFtcygpO1xuICAgICAgICAgICAgICAgIGlmKGRhdGFzICYmIGRhdGFzLnQhPT11bmRlZmluZWQpXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgeGhyLm9wZW4oXCJHRVRcIiwgY29uZmlnRnJvbnRFbmQuYXBpVXJsK2NvbmZpZy51c2VyUm91dGVzK2NvbmZpZy5jaGVja1N1YnNjcmliZVRva2VuUm91dGUrZGF0YXMudCk7XG4gICAgICAgICAgICAgICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gWE1MSHR0cFJlcXVlc3QuRE9ORSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmVzcG9uc2U9SlNPTi5wYXJzZSh0aGlzLnJlc3BvbnNlVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAyMDAgJiYgcmVzcG9uc2UudXNlcklkICE9IHVuZGVmaW5lZCAmJiByZXNwb25zZS50b2tlbiAhPSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29ubmV4aW9uTWF4VGltZT1EYXRlLm5vdygpK3BhcnNlSW50KGNvbmZpZy5jb25uZXhpb25NaW5UaW1lSW5Ib3VycywxMCkqMzYwMCoxMDAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRTZXNzaW9uKHJlc3BvbnNlLnVzZXJJZCwgcmVzcG9uc2UudG9rZW4sIGNvbm5leGlvbk1heFRpbWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYXZlTG9jYWx5KFwibWVzc2FnZVwiLCB7IG1lc3NhZ2U6IHR4dFVzZXJzLnZhbGlkYXRpb25NZXNzYWdlLCBjb2xvcjpcInN1Y2Nlc3NcIiB9KTsvLyBwb3VyIGwnYWZmaWNoZXIgc3VyIGxhIHBhZ2Ugc3VpdmFudGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFVzZXJzLnZhbGlkYXRpb25NZXNzYWdlLCBcIlwiLCBbXCJzdWNjZXNzXCJdKTsvLyBhdSBjYXMgb8O5wqBibG9jYWdlIHJlZGlyZWN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24oXCIvXCIrY29uZmlnRnJvbnRFbmQudXNlckhvbWVQYWdlKTsvLyBxdWUgdXNlciBwb3NzaWJsZSBsb3JzIGRlIGxhIGNyw6lhdGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgodGhpcy5zdGF0dXMgPT09IDIwMCB8fCB0aGlzLnN0YXR1cyA9PT0gNDA0KSAmJiByZXNwb25zZS5lcnJvcnMgIT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycy5qb2luKFwiPGJyPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UuZXJyb3JzID0gdHh0LnNlcnZlckVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRFbGVtZW50KGRpdlJlc3BvbnNlLCBcInBcIiwgcmVzcG9uc2UuZXJyb3JzLCBcIlwiLCBbXCJlcnJvclwiXSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dFVzZXJzLmJhZExpbmtWYWxpZGF0aW9uTWVzc2FnZS5yZXBsYWNlKFwiI1VSTFwiLCBjb25maWdGcm9udEVuZC5jb25uZWN0aW9uUGFnZSksIFwiXCIsIFtcImVycm9yXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB4aHIuc2VuZCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaChlKVxuICAgIHtcbiAgICAgICAgYWRkRWxlbWVudChkaXZSZXNwb25zZSwgXCJwXCIsIHR4dC5zZXJ2ZXJFcnJvciwgXCJcIiwgW1wiZXJyb3JcIl0pO1xuICAgIH1cbn1cbmluaXRpYWxpc2UoKTsiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/front/webpack.config_prod.js b/front/webpack.config_prod.js deleted file mode 100644 index 2cb3a26..0000000 --- a/front/webpack.config_prod.js +++ /dev/null @@ -1,51 +0,0 @@ -const path = require('path'); - -module.exports = -{ - mode: "production", // pour tester les fichiers en version compressée - devtool: "inline-source-map", - entry: - { - accountUser: "./src/accountUser.js", - connection: "./src/connection.js", - deconnection: "./src/deconnection.js", - deleteValidation: "./src/deleteValidation.js", - homeManager: "./src/homeManager.js", - homeUser: "./src/homeUser.js", - index: "./src/index.js", - loginLink: "./src/loginLink.js", - manageQuestionnaires: "./src/manageQuestionnaires.js", - manageUsers: "./src/manageUsers.js", - newLoginValidation: "./src/newLoginValidation.js", - polyfill: "babel-polyfill", - questionnaire: "./src/questionnaire.js", - subscribe: "./src/subscribe.js", - subscribeValidation: "./src/subscribeValidation.js", - unsubscribe: "./src/unsubscribe.js" - }, - output: - { - filename: "./JS/prod/[name].app.js", - path: path.resolve(__dirname, "public") - }, - module: - { - rules: [ - { - test: /\.js$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - options: { - presets: ["@babel/preset-env"] - } - } - } - - ] - }, - devServer: - { - contentBase: path.resolve(__dirname, "./public") - } -}; \ No newline at end of file