UNPKG

moh-common-lib

Version:

A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).

264 lines 25.7 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Renderer2, Output, Input, EventEmitter } from '@angular/core'; import { HttpClient } from '@angular/common/http'; import { RecaptchaDataService } from './recaptcha-data.service'; var RecaptchaComponent = /** @class */ (function () { function RecaptchaComponent(dataService, _renderer, _http) { this.dataService = dataService; this._renderer = _renderer; this._http = _http; this.language = 'en'; this.onValidToken = new EventEmitter(); this.errorVerifyAnswer = null; /** * ************************ * * Translated Messages ** * * *UPDATE REQUIRED* ** * ************************** */ this.translatedMessages = { playAudio: { en: 'Play Audio', zh: '播放声音', fr: 'Lecture audio', pa: 'ਆਡੀਓ ਚਲਾਓ', }, tryAnotherImg: { en: 'Try another image', zh: '换个图像', fr: 'Essayez une autre image', pa: 'ਕੋਈ ਹੋਰ ਚਿੱਤਰ ਅਜ਼ਮਾਓ', }, userPromptMessage: { en: 'Enter the text you either see in the box or you hear in the audio', zh: '请输入看到或听到的文字', fr: 'Entrez le texte que vous voyez dans la case ou que vous entendez dans le son', pa: 'ਉਹ ਟੈਕਸਟ ਦਾਖਲ ਕਰੋ ਜੋ ਤੁਸੀਂ ਬਕਸੇ ਵਿੱਚ ਦੇਖਦੇ ਹੋ ਜਾਂ ਤੁਸੀਂ ਆਡੀਓ ਵਿੱਚ ਸੁਣਦੇ ਹੋ', }, incorrectAnswer: { en: 'Incorrect answer, please try again.', zh: '答案不对。请重试。', fr: 'Mauvaise réponse, veuillez réessayer.', pa: 'ਗਲਤ ਜਵਾਬ, ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ.', }, successMessage: { en: 'You can submit your application now.', zh: '你现在可以提交申请了。', fr: 'Vous pouvez soumettre votre candidature maintenant.', pa: 'ਤੁਸੀਂ ਆਪਣੀ ਅਰਜ਼ੀ ਹੁਣੇ ਪੇਸ਼ ਕਰ ਸਕਦੇ ਹੋ', }, correct: { en: 'Correct.', zh: '正确。', fr: 'Correct.', pa: 'ਸਹੀ ਕਰੋ', }, loadingImage: { en: 'Loading CAPTCHA image', zh: '正在下载验证码', fr: 'Chargement de l\'image CAPTCHA', pa: 'ਕੈਪਟਚਾ ਚਿੱਤਰ ਲੋਡ ਕਰ ਰਿਹਾ ਹੈ', }, browserNotSupportAudio: { en: 'Your browser does not support the audio element.', zh: '你的浏览器不支持播音', fr: 'Votre navigateur ne supporte pas l\'élément audio.', pa: 'ਤੁਹਾਡਾ ਬ੍ਰਾਉਜ਼ਰ ਆਡੀਓ ਐਲੀਮੈਂਟ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ.', }, verifyingAnswer: { en: 'Verifying your answer...', zh: '正在验证答案...', fr: 'Vérification de votre réponse ...', pa: 'ਤੁਹਾਡਾ ਜਵਾਬ ਤਸਦੀਕ ਕਰ ਰਿਹਾ ਹੈ ...', }, errorRetrievingImg: { en: 'Error happened while retrieving CAPTCHA image. Please {{Click Here}} to try again', zh: '验证码下载错误。请{{点击这里}}重试', fr: 'Une erreur s\'est produite lors de la récupération de l\'image CAPTCHA. S\'il vous plaît {{Cliquez Ici}} pour réessayer', pa: 'ਕੈਪਟਚਾ ਚਿੱਤਰ ਨੂੰ ਪ੍ਰਾਪਤ ਕਰਦੇ ਸਮੇਂ ਤਰੁੱਟੀ ਉਤਪੰਨ ਹੋਈ. ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ {{ਇੱਥੇ ਕਲਿਕ ਕਰੋ}}', }, errorVerifyingAnswer: { en: 'Error happened while verifying your answer. Please {{Click Here}} to try again', zh: '验证答案过程发生错误。请{{点击这里}}重试', fr: 'Une erreur s\'est produite lors de la vérification de votre réponse. S\'il vous plaît {{Cliquez Ici}} pour réessayer', pa: 'ਤੁਹਾਡਾ ਜਵਾਬ ਤਸਦੀਕ ਕਰਨ ਵੇਲੇ ਗਲਤੀ ਆਈ ਕਿਰਪਾ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰਨ ਲਈ {{ਇੱਥੇ ਕਲਿਕ ਕਰੋ}}', }, }; } /** * @return {?} */ RecaptchaComponent.prototype.ngOnInit = /** * @return {?} */ function () { /** @type {?} */ var script = this._renderer.createElement('script'); script.defer = true; script.async = true; script.src = "https://www.google.com/recaptcha/api.js"; this._renderer.appendChild(document.body, script); }; /** * @param {?} token * @return {?} */ RecaptchaComponent.prototype.resolved = /** * @param {?} token * @return {?} */ function (token) { var _this = this; console.log(token); this.state = CAPTCHA_STATE.VERIFYING_TOKEN; this.dataService.verifyRecaptcha(this.apiBaseUrl, this.nonce, token).subscribe((/** * @param {?} response * @return {?} */ function (response) { /** @type {?} */ var payload = response.body; if (_this.isValidPayload(payload)) { _this.state = CAPTCHA_STATE.SUCCESS_VERIFY_ANSWER_CORRECT; _this.onValidToken.emit(payload.jwt); } else { _this.state = CAPTCHA_STATE.ERROR_VERIFY; _this.errorVerifyAnswer = _this.createErrorTextLine(response); } })); }; /** * Case where HTTP 200 response code is received by the payload is incorrect or corrupt. * The occurance of this type of case should be rare. * @param payload */ /** * Case where HTTP 200 response code is received by the payload is incorrect or corrupt. * The occurance of this type of case should be rare. * @private * @param {?} payload * @return {?} */ RecaptchaComponent.prototype.isValidPayload = /** * Case where HTTP 200 response code is received by the payload is incorrect or corrupt. * The occurance of this type of case should be rare. * @private * @param {?} payload * @return {?} */ function (payload) { if (!payload) { console.error('payload cannot be null or undefined or 0'); return false; } else { /** @type {?} */ var hasValidProp = payload.hasOwnProperty('valid'); console.log("hasValidProp:", hasValidProp); if (hasValidProp) { console.log("payload.valid:", payload.valid); console.log("typeof payload.valid:", typeof payload.valid); } if (!hasValidProp || payload.valid === false) { console.error('Error verifying captcha'); return false; } else { return true; } } }; /** * @private * @param {?} error * @return {?} */ RecaptchaComponent.prototype.createErrorTextLine = /** * @private * @param {?} error * @return {?} */ function (error) { /** @type {?} */ var line = 'Error status: ' + error.status; if (error.statusText) { line = line + ', status text: ' + error.statusText; } return line; }; RecaptchaComponent.decorators = [ { type: Component, args: [{ selector: 'common-recaptcha', template: "<div class=\"bcgov-recaptcha\">\r\n <re-captcha (resolved)=\"resolved($event)\" siteKey={{publicKey}}>\r\n </re-captcha>\r\n\r\n <div class=\"error-captcha\" *ngIf=\"state === 6\" role=\"alert\" aria-live=\"assertive\">\r\n <svg class=\"icon-exclamation-triangle\"><use xlink:href=\"#icon-exclamation-triangle-def\"></use></svg>\r\n <span>{{translatedMessages.errorVerifyingAnswer[language].substring(0,translatedMessages.errorVerifyingAnswer[language].indexOf('{'))}}\r\n {{translatedMessages.errorVerifyingAnswer[language].substring(translatedMessages.errorVerifyingAnswer[language].lastIndexOf('}')+1)}}\r\n </span>\r\n <p>\r\n </p>\r\n </div>\r\n</div>\r\n", styles: [""] }] } ]; /** @nocollapse */ RecaptchaComponent.ctorParameters = function () { return [ { type: RecaptchaDataService }, { type: Renderer2 }, { type: HttpClient } ]; }; RecaptchaComponent.propDecorators = { apiBaseUrl: [{ type: Input, args: ['apiBaseUrl',] }], nonce: [{ type: Input, args: ['nonce',] }], publicKey: [{ type: Input, args: ['publicKey',] }], language: [{ type: Input, args: ['language',] }], onValidToken: [{ type: Output }] }; return RecaptchaComponent; }()); export { RecaptchaComponent }; if (false) { /** @type {?} */ RecaptchaComponent.prototype.apiBaseUrl; /** @type {?} */ RecaptchaComponent.prototype.nonce; /** @type {?} */ RecaptchaComponent.prototype.publicKey; /** @type {?} */ RecaptchaComponent.prototype.language; /** @type {?} */ RecaptchaComponent.prototype.onValidToken; /** @type {?} */ RecaptchaComponent.prototype.errorVerifyAnswer; /** @type {?} */ RecaptchaComponent.prototype.state; /** * ************************ * * Translated Messages ** * * *UPDATE REQUIRED* ** * ************************** * @type {?} */ RecaptchaComponent.prototype.translatedMessages; /** * @type {?} * @private */ RecaptchaComponent.prototype.dataService; /** * @type {?} * @private */ RecaptchaComponent.prototype._renderer; /** * @type {?} * @private */ RecaptchaComponent.prototype._http; } /** @enum {number} */ var CAPTCHA_STATE = { VERIFYING_TOKEN: 1, SUCCESS_VERIFY_ANSWER_CORRECT: 2, ERROR_VERIFY: 3, }; CAPTCHA_STATE[CAPTCHA_STATE.VERIFYING_TOKEN] = 'VERIFYING_TOKEN'; CAPTCHA_STATE[CAPTCHA_STATE.SUCCESS_VERIFY_ANSWER_CORRECT] = 'SUCCESS_VERIFY_ANSWER_CORRECT'; CAPTCHA_STATE[CAPTCHA_STATE.ERROR_VERIFY] = 'ERROR_VERIFY'; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjYXB0Y2hhLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vaC1jb21tb24tbGliL3JlY2FwdGNoYS8iLCJzb3VyY2VzIjpbInJlY2FwdGNoYS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUMsWUFBWSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUVoRTtJQWlCRSw0QkFBcUIsV0FBaUMsRUFBVSxTQUFvQixFQUFVLEtBQWlCO1FBQTFGLGdCQUFXLEdBQVgsV0FBVyxDQUFzQjtRQUFVLGNBQVMsR0FBVCxTQUFTLENBQVc7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBUDVGLGFBQVEsR0FBVyxJQUFJLENBQUM7UUFFakMsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBRXBELHNCQUFpQixHQUFHLElBQUksQ0FBQzs7Ozs7OztRQWlFbEIsdUJBQWtCLEdBQUc7WUFDMUIsU0FBUyxFQUFFO2dCQUNULEVBQUUsRUFBRSxZQUFZO2dCQUNoQixFQUFFLEVBQUUsTUFBTTtnQkFDVixFQUFFLEVBQUUsZUFBZTtnQkFDbkIsRUFBRSxFQUFFLFdBQVc7YUFDaEI7WUFDRCxhQUFhLEVBQUU7Z0JBQ2IsRUFBRSxFQUFFLG1CQUFtQjtnQkFDdkIsRUFBRSxFQUFFLE1BQU07Z0JBQ1YsRUFBRSxFQUFFLHlCQUF5QjtnQkFDN0IsRUFBRSxFQUFFLHNCQUFzQjthQUMzQjtZQUNELGlCQUFpQixFQUFFO2dCQUNqQixFQUFFLEVBQUUsbUVBQW1FO2dCQUN2RSxFQUFFLEVBQUUsYUFBYTtnQkFDakIsRUFBRSxFQUFFLDhFQUE4RTtnQkFDbEYsRUFBRSxFQUFFLDRFQUE0RTthQUNqRjtZQUNELGVBQWUsRUFBRTtnQkFDZixFQUFFLEVBQUUscUNBQXFDO2dCQUN6QyxFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsdUNBQXVDO2dCQUMzQyxFQUFFLEVBQUUsMENBQTBDO2FBQy9DO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLEVBQUUsRUFBRSxzQ0FBc0M7Z0JBQzFDLEVBQUUsRUFBRSxhQUFhO2dCQUNqQixFQUFFLEVBQUUscURBQXFEO2dCQUN6RCxFQUFFLEVBQUUsdUNBQXVDO2FBQzVDO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxVQUFVO2dCQUNkLEVBQUUsRUFBRSxLQUFLO2dCQUNULEVBQUUsRUFBRSxVQUFVO2dCQUNkLEVBQUUsRUFBRSxTQUFTO2FBQ2Q7WUFDRCxZQUFZLEVBQUU7Z0JBQ1osRUFBRSxFQUFFLHVCQUF1QjtnQkFDM0IsRUFBRSxFQUFFLFNBQVM7Z0JBQ2IsRUFBRSxFQUFFLGdDQUFnQztnQkFDcEMsRUFBRSxFQUFFLDZCQUE2QjthQUNsQztZQUNELHNCQUFzQixFQUFFO2dCQUN0QixFQUFFLEVBQUUsa0RBQWtEO2dCQUN0RCxFQUFFLEVBQUUsWUFBWTtnQkFDaEIsRUFBRSxFQUFFLG9EQUFvRDtnQkFDeEQsRUFBRSxFQUFFLGtEQUFrRDthQUN2RDtZQUNELGVBQWUsRUFBRTtnQkFDZixFQUFFLEVBQUUsMEJBQTBCO2dCQUM5QixFQUFFLEVBQUUsV0FBVztnQkFDZixFQUFFLEVBQUUsbUNBQW1DO2dCQUN2QyxFQUFFLEVBQUUsa0NBQWtDO2FBQ3ZDO1lBQ0Qsa0JBQWtCLEVBQUU7Z0JBQ2xCLEVBQUUsRUFBRSxtRkFBbUY7Z0JBQ3ZGLEVBQUUsRUFBRSxxQkFBcUI7Z0JBQ3pCLEVBQUUsRUFBRSx5SEFBeUg7Z0JBQzdILEVBQUUsRUFBRSx3R0FBd0c7YUFDN0c7WUFDRCxvQkFBb0IsRUFBRTtnQkFDcEIsRUFBRSxFQUFFLGdGQUFnRjtnQkFDcEYsRUFBRSxFQUFFLHdCQUF3QjtnQkFDNUIsRUFBRSxFQUFFLHNIQUFzSDtnQkFDMUgsRUFBRSxFQUFFLHVGQUF1RjthQUM1RjtTQUNGLENBQUM7SUFqSWtILENBQUM7Ozs7SUFFckgscUNBQVE7OztJQUFSOztZQUNNLE1BQU0sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7UUFDbkQsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsR0FBRyx5Q0FBeUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3BELENBQUM7Ozs7O0lBRUQscUNBQVE7Ozs7SUFBUixVQUFTLEtBQVk7UUFBckIsaUJBYUM7UUFaQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLGVBQWUsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUzs7OztRQUFDLFVBQUEsUUFBUTs7Z0JBQy9FLE9BQU8sR0FBTyxRQUFRLENBQUMsSUFBSTtZQUNqQyxJQUFJLEtBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2hDLEtBQUksQ0FBQyxLQUFLLEdBQUcsYUFBYSxDQUFDLDZCQUE2QixDQUFDO2dCQUN6RCxLQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDckM7aUJBQU07Z0JBQ0wsS0FBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsWUFBWSxDQUFDO2dCQUN4QyxLQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQzdEO1FBQ0gsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRzs7Ozs7Ozs7SUFDSywyQ0FBYzs7Ozs7OztJQUF0QixVQUF1QixPQUFPO1FBQzVCLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDWixPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7WUFDMUQsT0FBTyxLQUFLLENBQUM7U0FDZDthQUFNOztnQkFDQyxZQUFZLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7WUFDcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLEVBQUUsWUFBWSxDQUFDLENBQUE7WUFDMUMsSUFBSSxZQUFZLEVBQUU7Z0JBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2dCQUM1QyxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixFQUFFLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFBO2FBQzNEO1lBRUQsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLEtBQUssRUFBRTtnQkFDNUMsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUN6QyxPQUFPLEtBQUssQ0FBQzthQUNkO2lCQUFNO2dCQUNMLE9BQU8sSUFBSSxDQUFDO2FBQ2I7U0FDRjtJQUNILENBQUM7Ozs7OztJQUVPLGdEQUFtQjs7Ozs7SUFBM0IsVUFBNEIsS0FBSzs7WUFDM0IsSUFBSSxHQUFHLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxNQUFNO1FBQzFDLElBQUksS0FBSyxDQUFDLFVBQVUsRUFBRTtZQUNwQixJQUFJLEdBQUcsSUFBSSxHQUFHLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxVQUFVLENBQUM7U0FDcEQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O2dCQTFFRixTQUFTLFNBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsMnJCQUF5Qzs7aUJBRTFDOzs7O2dCQU5RLG9CQUFvQjtnQkFGRCxTQUFTO2dCQUM1QixVQUFVOzs7NkJBVWhCLEtBQUssU0FBQyxZQUFZO3dCQUNsQixLQUFLLFNBQUMsT0FBTzs0QkFDYixLQUFLLFNBQUMsV0FBVzsyQkFDakIsS0FBSyxTQUFDLFVBQVU7K0JBRWhCLE1BQU07O0lBdUlULHlCQUFDO0NBQUEsQUFuSkQsSUFtSkM7U0E5SVksa0JBQWtCOzs7SUFFN0Isd0NBQXdDOztJQUN4QyxtQ0FBOEI7O0lBQzlCLHVDQUFzQzs7SUFDdEMsc0NBQTJDOztJQUUzQywwQ0FBb0Q7O0lBRXBELCtDQUF5Qjs7SUFDekIsbUNBQXFCOzs7Ozs7OztJQWdFckIsZ0RBbUVFOzs7OztJQWpJVyx5Q0FBeUM7Ozs7O0lBQUUsdUNBQTRCOzs7OztJQUFFLG1DQUF5Qjs7OztJQXFJL0csa0JBQW1CO0lBQ25CLGdDQUFpQztJQUNqQyxlQUFnQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBSZW5kZXJlcjIsIE91dHB1dCwgSW5wdXQsRXZlbnRFbWl0dGVyfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgUmVjYXB0Y2hhRGF0YVNlcnZpY2UgfSBmcm9tICcuL3JlY2FwdGNoYS1kYXRhLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb21tb24tcmVjYXB0Y2hhJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vcmVjYXB0Y2hhLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9yZWNhcHRjaGEuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSZWNhcHRjaGFDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG5cclxuICBASW5wdXQoJ2FwaUJhc2VVcmwnKSBhcGlCYXNlVXJsOiBzdHJpbmc7XHJcbiAgQElucHV0KCdub25jZScpIG5vbmNlOiBzdHJpbmc7XHJcbiAgQElucHV0KCdwdWJsaWNLZXknKSBwdWJsaWNLZXk6IHN0cmluZztcclxuICBASW5wdXQoJ2xhbmd1YWdlJykgbGFuZ3VhZ2U6IHN0cmluZyA9ICdlbic7XHJcblxyXG4gIEBPdXRwdXQoKSBvblZhbGlkVG9rZW4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgZXJyb3JWZXJpZnlBbnN3ZXIgPSBudWxsO1xyXG4gIHN0YXRlOiBDQVBUQ0hBX1NUQVRFO1xyXG5cclxuICBjb25zdHJ1Y3RvciggcHJpdmF0ZSBkYXRhU2VydmljZTogUmVjYXB0Y2hhRGF0YVNlcnZpY2UsIHByaXZhdGUgX3JlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgX2h0dHA6IEh0dHBDbGllbnQgKSB7IH1cclxuXHJcbiAgbmdPbkluaXQoKTp2b2lkIHtcclxuICAgIGxldCBzY3JpcHQgPSB0aGlzLl9yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcclxuICAgIHNjcmlwdC5kZWZlciA9IHRydWU7XHJcbiAgICBzY3JpcHQuYXN5bmMgPSB0cnVlO1xyXG4gICAgc2NyaXB0LnNyYyA9IFwiaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9yZWNhcHRjaGEvYXBpLmpzXCI7XHJcbiAgICB0aGlzLl9yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5ib2R5LCBzY3JpcHQpO1xyXG4gIH1cclxuXHJcbiAgcmVzb2x2ZWQodG9rZW46c3RyaW5nKXtcclxuICAgIGNvbnNvbGUubG9nKHRva2VuKTtcclxuICAgIHRoaXMuc3RhdGUgPSBDQVBUQ0hBX1NUQVRFLlZFUklGWUlOR19UT0tFTjtcclxuICAgIHRoaXMuZGF0YVNlcnZpY2UudmVyaWZ5UmVjYXB0Y2hhKHRoaXMuYXBpQmFzZVVybCwgdGhpcy5ub25jZSwgdG9rZW4pLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgIGNvbnN0IHBheWxvYWQ6YW55ID0gcmVzcG9uc2UuYm9keTtcclxuICAgICAgaWYgKHRoaXMuaXNWYWxpZFBheWxvYWQocGF5bG9hZCkpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0FQVENIQV9TVEFURS5TVUNDRVNTX1ZFUklGWV9BTlNXRVJfQ09SUkVDVDtcclxuICAgICAgICB0aGlzLm9uVmFsaWRUb2tlbi5lbWl0KHBheWxvYWQuand0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0gQ0FQVENIQV9TVEFURS5FUlJPUl9WRVJJRlk7XHJcbiAgICAgICAgdGhpcy5lcnJvclZlcmlmeUFuc3dlciA9IHRoaXMuY3JlYXRlRXJyb3JUZXh0TGluZShyZXNwb25zZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FzZSB3aGVyZSBIVFRQIDIwMCByZXNwb25zZSBjb2RlIGlzIHJlY2VpdmVkIGJ5IHRoZSBwYXlsb2FkIGlzIGluY29ycmVjdCBvciBjb3JydXB0LlxyXG4gICAqIFRoZSBvY2N1cmFuY2Ugb2YgdGhpcyB0eXBlIG9mIGNhc2Ugc2hvdWxkIGJlIHJhcmUuXHJcbiAgICogQHBhcmFtIHBheWxvYWRcclxuICAgKi9cclxuICBwcml2YXRlIGlzVmFsaWRQYXlsb2FkKHBheWxvYWQpIHtcclxuICAgIGlmICghcGF5bG9hZCkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdwYXlsb2FkIGNhbm5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCBvciAwJyk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGhhc1ZhbGlkUHJvcCA9IHBheWxvYWQuaGFzT3duUHJvcGVydHkoJ3ZhbGlkJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwiaGFzVmFsaWRQcm9wOlwiLCBoYXNWYWxpZFByb3ApXHJcbiAgICAgIGlmIChoYXNWYWxpZFByb3ApIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInBheWxvYWQudmFsaWQ6XCIsIHBheWxvYWQudmFsaWQpXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJ0eXBlb2YgcGF5bG9hZC52YWxpZDpcIiwgdHlwZW9mIHBheWxvYWQudmFsaWQpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaGFzVmFsaWRQcm9wIHx8IHBheWxvYWQudmFsaWQgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgdmVyaWZ5aW5nIGNhcHRjaGEnKTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgY3JlYXRlRXJyb3JUZXh0TGluZShlcnJvcikge1xyXG4gICAgbGV0IGxpbmUgPSAnRXJyb3Igc3RhdHVzOiAnICsgZXJyb3Iuc3RhdHVzO1xyXG4gICAgaWYgKGVycm9yLnN0YXR1c1RleHQpIHtcclxuICAgICAgbGluZSA9IGxpbmUgKyAnLCBzdGF0dXMgdGV4dDogJyArIGVycm9yLnN0YXR1c1RleHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbGluZTtcclxuICB9XHJcbiAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG4gICoqICAgIFRyYW5zbGF0ZWQgTWVzc2FnZXMgKipcclxuICAqKiAgICAqVVBEQVRFIFJFUVVJUkVEKiAgICoqXHJcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cclxuICBwdWJsaWMgdHJhbnNsYXRlZE1lc3NhZ2VzID0ge1xyXG4gICAgcGxheUF1ZGlvOiB7XHJcbiAgICAgIGVuOiAnUGxheSBBdWRpbycsXHJcbiAgICAgIHpoOiAn5pKt5pS+5aOw6Z+zJyxcclxuICAgICAgZnI6ICdMZWN0dXJlIGF1ZGlvJyxcclxuICAgICAgcGE6ICfgqIbgqKHgqYDgqJMg4Kia4Kiy4Ki+4KiTJyxcclxuICAgIH0sXHJcbiAgICB0cnlBbm90aGVySW1nOiB7XHJcbiAgICAgIGVuOiAnVHJ5IGFub3RoZXIgaW1hZ2UnLFxyXG4gICAgICB6aDogJ+aNouS4quWbvuWDjycsXHJcbiAgICAgIGZyOiAnRXNzYXlleiB1bmUgYXV0cmUgaW1hZ2UnLFxyXG4gICAgICBwYTogJ+ColeCpi+CoiCDgqLngqYvgqLAg4Kia4Ki/4Kmx4Kik4KiwIOCoheConOCovOCoruCovuCokycsXHJcbiAgICB9LFxyXG4gICAgdXNlclByb21wdE1lc3NhZ2U6IHtcclxuICAgICAgZW46ICdFbnRlciB0aGUgdGV4dCB5b3UgZWl0aGVyIHNlZSBpbiB0aGUgYm94IG9yIHlvdSBoZWFyIGluIHRoZSBhdWRpbycsXHJcbiAgICAgIHpoOiAn6K+36L6T5YWl55yL5Yiw5oiW5ZCs5Yiw55qE5paH5a2XJyxcclxuICAgICAgZnI6ICdFbnRyZXogbGUgdGV4dGUgcXVlIHZvdXMgdm95ZXogZGFucyBsYSBjYXNlIG91IHF1ZSB2b3VzIGVudGVuZGV6IGRhbnMgbGUgc29uJyxcclxuICAgICAgcGE6ICfgqIngqLkg4Kif4KmI4KiV4Ki44KifIOCopuCovuColuCosiDgqJXgqLDgqYsg4Kic4KmLIOCopOCpgeCouOCpgOCogiDgqKzgqJXgqLjgqYcg4Ki14Ki/4Kmx4KiaIOCopuCph+ColuCopuCphyDgqLngqYsg4Kic4Ki+4KiCIOCopOCpgeCouOCpgOCogiDgqIbgqKHgqYDgqJMg4Ki14Ki/4Kmx4KiaIOCouOCpgeCoo+CopuCphyDgqLngqYsnLFxyXG4gICAgfSxcclxuICAgIGluY29ycmVjdEFuc3dlcjoge1xyXG4gICAgICBlbjogJ0luY29ycmVjdCBhbnN3ZXIsIHBsZWFzZSB0cnkgYWdhaW4uJyxcclxuICAgICAgemg6ICfnrZTmoYjkuI3lr7njgILor7fph43or5XjgIInLFxyXG4gICAgICBmcjogJ01hdXZhaXNlIHLDqXBvbnNlLCB2ZXVpbGxleiByw6llc3NheWVyLicsXHJcbiAgICAgIHBhOiAn4KiX4Kiy4KikIOConOCoteCovuCorCwg4KiV4Ki/4Kiw4Kiq4Ki+IOColeCosOColeCphyDgqKbgqYHgqKzgqL7gqLDgqL4g4KiV4KmL4Ki44Ki84Ki/4Ki44Ki8IOColeCosOCpiy4nLFxyXG4gICAgfSxcclxuICAgIHN1Y2Nlc3NNZXNzYWdlOiB7XHJcbiAgICAgIGVuOiAnWW91IGNhbiBzdWJtaXQgeW91ciBhcHBsaWNhdGlvbiBub3cuJyxcclxuICAgICAgemg6ICfkvaDnjrDlnKjlj6/ku6Xmj5DkuqTnlLPor7fkuobjgIInLFxyXG4gICAgICBmcjogJ1ZvdXMgcG91dmV6IHNvdW1ldHRyZSB2b3RyZSBjYW5kaWRhdHVyZSBtYWludGVuYW50LicsXHJcbiAgICAgIHBhOiAn4Kik4KmB4Ki44KmA4KiCIOCohuCoquCoo+CpgCDgqIXgqLDgqJzgqLzgqYAg4Ki54KmB4Kij4KmHIOCoquCph+CouOCovCDgqJXgqLAg4Ki44KiV4Kim4KmHIOCoueCpiycsXHJcbiAgICB9LFxyXG4gICAgY29ycmVjdDoge1xyXG4gICAgICBlbjogJ0NvcnJlY3QuJyxcclxuICAgICAgemg6ICfmraPnoa7jgIInLFxyXG4gICAgICBmcjogJ0NvcnJlY3QuJyxcclxuICAgICAgcGE6ICfgqLjgqLngqYAg4KiV4Kiw4KmLJyxcclxuICAgIH0sXHJcbiAgICBsb2FkaW5nSW1hZ2U6IHtcclxuICAgICAgZW46ICdMb2FkaW5nIENBUFRDSEEgaW1hZ2UnLFxyXG4gICAgICB6aDogJ+ato+WcqOS4i+i9vemqjOivgeeggScsXHJcbiAgICAgIGZyOiAnQ2hhcmdlbWVudCBkZSBsXFwnaW1hZ2UgQ0FQVENIQScsXHJcbiAgICAgIHBhOiAn4KiV4KmI4Kiq4Kif4Kia4Ki+IOComuCov+CpseCopOCosCDgqLLgqYvgqKEg4KiV4KiwIOCosOCov+CoueCoviDgqLngqYgnLFxyXG4gICAgfSxcclxuICAgIGJyb3dzZXJOb3RTdXBwb3J0QXVkaW86IHtcclxuICAgICAgZW46ICdZb3VyIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYXVkaW8gZWxlbWVudC4nLFxyXG4gICAgICB6aDogJ+S9oOeahOa1j+iniOWZqOS4jeaUr+aMgeaSremfsycsXHJcbiAgICAgIGZyOiAnVm90cmUgbmF2aWdhdGV1ciBuZSBzdXBwb3J0ZSBwYXMgbFxcJ8OpbMOpbWVudCBhdWRpby4nLFxyXG4gICAgICBwYTogJ+CopOCpgeCoueCovuCooeCoviDgqKzgqY3gqLDgqL7gqIngqJzgqLzgqLAg4KiG4Kih4KmA4KiTIOCokOCosuCpgOCoruCpiOCoguConyDgqKbgqL4g4Ki44Kiu4Kiw4Kil4KioIOCoqOCoueCpgOCogiDgqJXgqLDgqKbgqL4uJyxcclxuICAgIH0sXHJcbiAgICB2ZXJpZnlpbmdBbnN3ZXI6IHtcclxuICAgICAgZW46ICdWZXJpZnlpbmcgeW91ciBhbnN3ZXIuLi4nLFxyXG4gICAgICB6aDogJ+ato+WcqOmqjOivgeetlOahiC4uLicsXHJcbiAgICAgIGZyOiAnVsOpcmlmaWNhdGlvbiBkZSB2b3RyZSByw6lwb25zZSAuLi4nLFxyXG4gICAgICBwYTogJ+CopOCpgeCoueCovuCooeCoviDgqJzgqLXgqL7gqKwg4Kik4Ki44Kim4KmA4KiVIOColeCosCDgqLDgqL/gqLngqL4g4Ki54KmIIC4uLicsXHJcbiAgICB9LFxyXG4gICAgZXJyb3JSZXRyaWV2aW5nSW1nOiB7XHJcbiAgICAgIGVuOiAnRXJyb3IgaGFwcGVuZWQgd2hpbGUgcmV0cmlldmluZyBDQVBUQ0hBIGltYWdlLiBQbGVhc2Uge3tDbGljayBIZXJlfX0gdG8gdHJ5IGFnYWluJyxcclxuICAgICAgemg6ICfpqozor4HnoIHkuIvovb3plJnor6/jgILor7d7e+eCueWHu+i/memHjH196YeN6K+VJyxcclxuICAgICAgZnI6ICdVbmUgZXJyZXVyIHNcXCdlc3QgcHJvZHVpdGUgbG9ycyBkZSBsYSByw6ljdXDDqXJhdGlvbiBkZSBsXFwnaW1hZ2UgQ0FQVENIQS4gU1xcJ2lsIHZvdXMgcGxhw650IHt7Q2xpcXVleiBJY2l9fSBwb3VyIHLDqWVzc2F5ZXInLFxyXG4gICAgICBwYTogJ+ColeCpiOCoquCon+ComuCoviDgqJrgqL/gqbHgqKTgqLAg4Kio4KmC4KmwIOCoquCpjeCosOCovuCoquCopCDgqJXgqLDgqKbgqYcg4Ki44Kiu4KmH4KiCIOCopOCosOCpgeCpseCon+CpgCDgqIngqKTgqKrgqbDgqKgg4Ki54KmL4KiILiDgqJXgqL/gqLDgqKrgqL4g4KiV4Kiw4KiV4KmHIOCopuCpgeCorOCovuCosOCoviDgqJXgqYvgqLjgqLzgqL/gqLjgqLwg4KiV4Kiw4KioIOCosuCoiCB7e+Coh+CpseCopeCphyDgqJXgqLLgqL/gqJUg4KiV4Kiw4KmLfX0nLFxyXG4gICAgfSxcclxuICAgIGVycm9yVmVyaWZ5aW5nQW5zd2VyOiB7XHJcbiAgICAgIGVuOiAnRXJyb3IgaGFwcGVuZWQgd2hpbGUgdmVyaWZ5aW5nIHlvdXIgYW5zd2VyLiBQbGVhc2Uge3tDbGljayBIZXJlfX0gdG8gdHJ5IGFnYWluJyxcclxuICAgICAgemg6ICfpqozor4HnrZTmoYjov4fnqIvlj5HnlJ/plJnor6/jgILor7d7e+eCueWHu+i/memHjH196YeN6K+VJyxcclxuICAgICAgZnI6ICdVbmUgZXJyZXVyIHNcXCdlc3QgcHJvZHVpdGUgbG9ycyBkZSBsYSB2w6lyaWZpY2F0aW9uIGRlIHZvdHJlIHLDqXBvbnNlLiBTXFwnaWwgdm91cyBwbGHDrnQge3tDbGlxdWV6IEljaX19IHBvdXIgcsOpZXNzYXllcicsXHJcbiAgICAgIHBhOiAn4Kik4KmB4Ki54Ki+4Kih4Ki+IOConOCoteCovuCorCDgqKTgqLjgqKbgqYDgqJUg4KiV4Kiw4KioIOCoteCph+CosuCphyDgqJfgqLLgqKTgqYAg4KiG4KiIIOColeCov+CosOCoquCoviDgqJXgqLDgqJXgqYcg4Kim4KmB4Kis4Ki+4Kiw4Ki+IOColeCpi+CouOCovOCov+CouOCovCDgqJXgqLDgqKgg4Kiy4KiIIHt74KiH4Kmx4Kil4KmHIOColeCosuCov+ColSDgqJXgqLDgqYt9fScsXHJcbiAgICB9LFxyXG4gIH07XHJcbn1cclxuXHJcbmVudW0gQ0FQVENIQV9TVEFURSB7XHJcbiAgVkVSSUZZSU5HX1RPS0VOID0gMSxcclxuICBTVUNDRVNTX1ZFUklGWV9BTlNXRVJfQ09SUkVDVCA9IDIsXHJcbiAgRVJST1JfVkVSSUZZID0gMyxcclxufVxyXG4iXX0=