ng-yunzai-mobile
Version:
1. 修改wechat.micro.ts
466 lines • 33.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: devices/browser.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { BaseDevice } from "./base.device";
import { HttpClient } from "@angular/common/http";
import { Inject, Injectable } from "@angular/core";
import { BASE_CLIENT } from "../client/base.client";
import { map } from "rxjs/operators";
import { preloaderFinished } from "../auth/preloader";
import { of } from "rxjs";
import { Title } from "@angular/platform-browser";
import { TokenService } from "../token/token.service";
import { UserService } from "../user/user.service";
import * as i0 from "@angular/core";
import * as i1 from "../token/token.service";
import * as i2 from "@angular/common/http";
import * as i3 from "../user/user.service";
import * as i4 from "../client/base.client";
import * as i5 from "@angular/platform-browser";
var Browser = /** @class */ (function (_super) {
tslib_1.__extends(Browser, _super);
function Browser(tokenService, http, user, baseclient, title) {
var _this = _super.call(this) || this;
_this.tokenService = tokenService;
_this.http = http;
_this.user = user;
_this.baseclient = baseclient;
_this.title = title;
return _this;
}
/**
* @return {?}
*/
Browser.prototype.auth = /**
* @return {?}
*/
function () {
var _this = this;
if (this.baseclient.browser && this.baseclient.browser.auth === false) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
preloaderFinished();
resolve(true);
}));
}
// 如果是本地开发配置了账号密码
if (this.baseclient.dev && this.baseclient.dev.username && this.baseclient.dev.password) {
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
_this.authByConfiguredUserPass().then((/**
* @return {?}
*/
function () {
_this.http
.get(_this.baseclient.gateway + "/auth/user")
.subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
_this.user.set(response.principal);
preloaderFinished();
resolve(true);
}));
}));
}));
}
// 走cas认证流程
return new Promise((/**
* @param {?} resolve
* @param {?} reject
* @return {?}
*/
function (resolve, reject) {
_this.authByCas().then((/**
* @return {?}
*/
function () {
_this.http
.get(_this.baseclient.gateway + "/auth/user")
.subscribe((/**
* @param {?} response
* @return {?}
*/
function (response) {
_this.user.set(response.principal);
preloaderFinished();
resolve(true);
}));
}));
}));
};
/**
* @private
* @return {?}
*/
Browser.prototype.authByCas = /**
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var url = encodeURIComponent(window.location.href);
return this.http.get(this.baseclient.gateway + '/cas-proxy/app/validate_full?callback=' + url + '×tamp=' + new Date().getTime())
.pipe(map((/**
* @param {?} res
* @return {?}
*/
function (res) {
switch (res.errcode) {
case 2000:
/** @type {?} */
var token = {};
token.tokenType = res.data.token_type;
token.accessToken = res.data.access_token;
token.scope = res.data.scope;
token.tokenDateLine = res.data.expires_in;
_this.tokenService.set(token);
break;
case 2001:
window.location.href = res.msg;
break;
case 2002:
alert(res.data);
break;
case 2003:
case 5000:
case 5001:
alert(res.msg);
break;
default:
break;
}
}))).toPromise();
};
/**
* @private
* @return {?}
*/
Browser.prototype.authByConfiguredUserPass = /**
* @private
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var form = new FormData();
form.set('username', this.baseclient.dev.username);
form.set('password', this.baseclient.dev.password);
form.set('grant_type', 'password');
form.set('client_id', 'webapp');
form.set('scope', 'webapp');
form.set('client_secret', '123456');
return this.http
.post(this.baseclient.gateway + "/auth/oauth/token", form)
.pipe(map((/**
* @param {?} response
* @return {?}
*/
function (response) {
/** @type {?} */
var token = {};
token.tokenType = response.token_type;
token.accessToken = response.access_token;
token.scope = response.scope;
token.tokenDateLine = response.expires_in;
_this.tokenService.set(token);
})))
.toPromise();
};
/**
* @return {?}
*/
Browser.prototype.getToken = /**
* @return {?}
*/
function () {
/** @type {?} */
var itoken = {
accessToken: this.tokenService.get().accessToken,
tokenType: this.tokenService.get().tokenType,
tokenDataLine: this.tokenService.get().tokenDateLine,
scope: this.tokenService.get().scope
};
return itoken;
};
/**
* @return {?}
*/
Browser.prototype.getUser = /**
* @return {?}
*/
function () {
/** @type {?} */
var iuser = Object.create({
account: this.user.get().username,
userName: this.user.get().username,
password: this.user.get().password,
userId: this.user.get().id,
realName: this.user.get().realname,
deptId: this.user.get().deptId,
deptName: this.user.get().deptName,
userType: this.user.get().userType
});
return iuser;
};
/**
* @param {?} iwindow
* @return {?}
*/
Browser.prototype.openWindow = /**
* @param {?} iwindow
* @return {?}
*/
function (iwindow) {
window.location.href = iwindow.url;
};
/**
* @return {?}
*/
Browser.prototype.scanCode = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持扫码,请在APP中使用此功能!");
return of("浏览器暂不支持扫码,请在APP中使用此功能!");
};
/**
* @param {?} navigationBar
* @return {?}
*/
Browser.prototype.setNavigationBar = /**
* @param {?} navigationBar
* @return {?}
*/
function (navigationBar) {
alert("浏览器暂不支持放置按钮,请在APP中使用此功能!");
};
/**
* @param {?} ititle
* @return {?}
*/
Browser.prototype.setTitle = /**
* @param {?} ititle
* @return {?}
*/
function (ititle) {
this.title.setTitle(ititle.title);
};
/**
* @return {?}
*/
Browser.prototype.share = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持分享,请在APP中使用此功能!");
};
/**
* @return {?}
*/
Browser.prototype.userLocation = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持定位,请在APP中使用此功能!");
return of(null);
};
/**
* @param {?} bssids
* @return {?}
*/
Browser.prototype.validateInWifi = /**
* @param {?} bssids
* @return {?}
*/
function (bssids) {
alert("浏览器暂不支持WIFI验证,请在APP中使用此功能!");
return of(null);
};
/**
* @return {?}
*/
Browser.prototype.getWifiMac = /**
* @return {?}
*/
function () {
alert("浏览器暂不支持获取MAC地址,请在APP中使用此功能!");
return of("浏览器暂不支持获取MAC地址,请在APP中使用此功能!");
};
/**
* @param {?} count
* @return {?}
*/
Browser.prototype.chooseContacts = /**
* @param {?} count
* @return {?}
*/
function (count) {
alert("浏览器暂不支持获取联系人,请在APP中使用此功能!");
return of("浏览器暂不支持获取联系人,请在APP中使用此功能!");
};
/**
* @param {?} targetUserId
* @return {?}
*/
Browser.prototype.contactDetails = /**
* @param {?} targetUserId
* @return {?}
*/
function (targetUserId) {
alert("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!");
return of("浏览器暂不支持查询联系人详细信息,请在APP中使用此功能!");
};
/**
* @param {?} count
* @param {?} sourceType
* @return {?}
*/
Browser.prototype.uploadImage = /**
* @param {?} count
* @param {?} sourceType
* @return {?}
*/
function (count, sourceType) {
alert('浏览器暂不支持图片上传,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
Browser.prototype.openReadWithTimer = /**
* @param {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
function (url, openType, title, id, type) {
alert('浏览器暂不支持读物时间统计,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} limitMinute
* @return {?}
*/
Browser.prototype.uploadMovie = /**
* @param {?} limitMinute
* @return {?}
*/
function (limitMinute) {
alert('浏览器暂不支持视频上传,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} url
* @param {?} title
* @return {?}
*/
Browser.prototype.fileBrowser = /**
* @param {?} url
* @param {?} title
* @return {?}
*/
function (url, title) {
alert('浏览器暂不支持此功能,请在APP中使用此功能!');
return undefined;
};
/**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
Browser.prototype.startSearchBeacons = /**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
function (ticket, callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
Browser.prototype.stopSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
Browser.prototype.onSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
Browser.decorators = [
{ type: Injectable, args: [{
providedIn: "root"
},] }
];
/** @nocollapse */
Browser.ctorParameters = function () { return [
{ type: TokenService },
{ type: HttpClient },
{ type: UserService },
{ type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] },
{ type: Title }
]; };
/** @nocollapse */ Browser.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Browser_Factory() { return new Browser(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT), i0.ɵɵinject(i5.Title)); }, token: Browser, providedIn: "root" });
return Browser;
}(BaseDevice));
export { Browser };
if (false) {
/**
* @type {?}
* @private
*/
Browser.prototype.tokenService;
/**
* @type {?}
* @private
*/
Browser.prototype.http;
/**
* @type {?}
* @private
*/
Browser.prototype.user;
/**
* @type {?}
* @private
*/
Browser.prototype.baseclient;
/**
* @type {?}
* @private
*/
Browser.prototype.title;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJvd3Nlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJkZXZpY2VzL2Jyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBYyxNQUFNLHVCQUF1QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUd0RCxPQUFPLEVBQW9CLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUc1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7OztBQUduRDtJQUc2QixtQ0FBVTtJQUNyQyxpQkFDVSxZQUEwQixFQUMxQixJQUFnQixFQUNoQixJQUFpQixFQUNJLFVBQXNCLEVBQzNDLEtBQVk7UUFMdEIsWUFPRSxpQkFBTyxTQUNSO1FBUFMsa0JBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsVUFBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFJLEdBQUosSUFBSSxDQUFhO1FBQ0ksZ0JBQVUsR0FBVixVQUFVLENBQVk7UUFDM0MsV0FBSyxHQUFMLEtBQUssQ0FBTzs7SUFHdEIsQ0FBQzs7OztJQUVELHNCQUFJOzs7SUFBSjtRQUFBLGlCQWlDQztRQWhDQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxJQUFJLElBQUks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LEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7Ozs7O0lBQ0QsaUNBQWU7Ozs7SUFBZixVQUFnQixRQUE2QjtRQUMzQyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Z0JBek1GLFVBQVUsU0FBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7Ozs7Z0JBTlEsWUFBWTtnQkFaWixVQUFVO2dCQWFWLFdBQVc7Z0RBV2YsTUFBTSxTQUFDLFdBQVc7Z0JBYmQsS0FBSzs7O2tCQVpkO0NBMk5DLEFBMU1ELENBRzZCLFVBQVUsR0F1TXRDO1NBdk1ZLE9BQU87Ozs7OztJQUVoQiwrQkFBa0M7Ozs7O0lBQ2xDLHVCQUF3Qjs7Ozs7SUFDeEIsdUJBQXlCOzs7OztJQUN6Qiw2QkFBbUQ7Ozs7O0lBQ25ELHdCQUFvQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VEZXZpY2UgfSBmcm9tIFwiLi9iYXNlLmRldmljZVwiO1xyXG5pbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEJBU0VfQ0xJRU5ULCBCYXNlQ2xpZW50IH0gZnJvbSBcIi4uL2NsaWVudC9iYXNlLmNsaWVudFwiO1xyXG5pbXBvcnQgeyBJVGl0bGUgfSBmcm9tIFwiLi9tb2RlbC90aXRsZVwiO1xyXG5pbXBvcnQgeyBtYXAgfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHsgcHJlbG9hZGVyRmluaXNoZWQgfSBmcm9tIFwiLi4vYXV0aC9wcmVsb2FkZXJcIjtcclxuaW1wb3J0IHsgSXRva2VuIH0gZnJvbSBcIi4uL2F1dGgvaXRva2VuXCI7XHJcbmltcG9ydCB7IElXaW5kb3cgfSBmcm9tIFwiLi9tb2RlbC93aW5kb3dcIjtcclxuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uQmFyIH0gZnJvbSBcIi4vbW9kZWwvbmF2aWdhdGlvbmJhclwiO1xyXG5pbXBvcnQgeyBVc2VyTG9jYXRpb24gfSBmcm9tIFwiLi9tb2RlbC9sb2NhdGlvblwiO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gXCJAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyXCI7XHJcbmltcG9ydCB7IFRva2VuU2VydmljZSB9IGZyb20gXCIuLi90b2tlbi90b2tlbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSBcIi4uL3VzZXIvdXNlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IElVc2VyIH0gZnJvbSBcIi4uL3VzZXIvdXNlci5pbnRlcmZhY2VcIjtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgQnJvd3NlciBleHRlbmRzIEJhc2VEZXZpY2Uge1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJBU0VfQ0xJRU5UKSBwcml2YXRlIGJhc2VjbGllbnQ6IEJhc2VDbGllbnQsXHJcbiAgICBwcml2YXRlIHRpdGxlOiBUaXRsZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGF1dGgoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmJhc2VjbGllbnQuYnJvd3NlciAmJiB0aGlzLmJhc2VjbGllbnQuYnJvd3Nlci5hdXRoID09PSBmYWxzZSkge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIC8vIOWmguaenOaYr+acrOWcsOW8gOWPkemFjee9ruS6hui0puWPt+WvhueggVxyXG4gICAgaWYgKHRoaXMuYmFzZWNsaWVudC5kZXYgJiYgdGhpcy5iYXNlY2xpZW50LmRldi51c2VybmFtZSAmJiB0aGlzLmJhc2VjbGllbnQuZGV2LnBhc3N3b3JkKSB7XHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB0aGlzLmF1dGhCeUNvbmZpZ3VyZWRVc2VyUGFzcygpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5odHRwXHJcbiAgICAgICAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApXHJcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLnVzZXIuc2V0KHJlc3BvbnNlLnByaW5jaXBhbCk7XHJcbiAgICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAvLyDotbBjYXPorqTor4HmtYHnqItcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgdGhpcy5hdXRoQnlDYXMoKS50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXNlci5zZXQocmVzcG9uc2UucHJpbmNpcGFsKTtcclxuICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgYXV0aEJ5Q2FzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgdXJsID0gZW5jb2RlVVJJQ29tcG9uZW50KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcclxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuYmFzZWNsaWVudC5nYXRld2F5ICsgJy9jYXMtcHJveHkvYXBwL3ZhbGlkYXRlX2Z1bGw/Y2FsbGJhY2s9JyArIHVybCArICcmdGltZXN0YW1wPScgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgc3dpdGNoIChyZXMuZXJyY29kZSkge1xyXG4gICAgICAgICAgICBjYXNlIDIwMDA6XHJcbiAgICAgICAgICAgICAgY29uc3QgdG9rZW46IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgIHRva2VuLnRva2VuVHlwZSA9IHJlcy5kYXRhLnRva2VuX3R5cGU7XHJcbiAgICAgICAgICAgICAgdG9rZW4uYWNjZXNzVG9rZW4gPSByZXMuZGF0YS5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICAgICAgdG9rZW4uc2NvcGUgPSByZXMuZGF0YS5zY29wZTtcclxuICAgICAgICAgICAgICB0b2tlbi50b2tlbkRhdGVMaW5lID0gcmVzLmRhdGEuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodG9rZW4pO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDIwMDE6XHJcbiAgICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSByZXMubXNnO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDIwMDI6XHJcbiAgICAgICAgICAgICAgYWxlcnQocmVzLmRhdGEpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIDIwMDM6XHJcbiAgICAgICAgICAgIGNhc2UgNTAwMDpcclxuICAgICAgICAgICAgY2FzZSA1MDAxOlxyXG4gICAgICAgICAgICAgIGFsZXJ0KHJlcy5tc2cpO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICkudG9Qcm9taXNlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGF1dGhCeUNvbmZpZ3VyZWRVc2VyUGFzcygpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IGZvcm06IEZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XHJcbiAgICBmb3JtLnNldCgndXNlcm5hbWUnLCB0aGlzLmJhc2VjbGllbnQuZGV2LnVzZXJuYW1lKTtcclxuICAgIGZvcm0uc2V0KCdwYXNzd29yZCcsIHRoaXMuYmFzZWNsaWVudC5kZXYucGFzc3dvcmQpO1xyXG4gICAgZm9ybS5zZXQoJ2dyYW50X3R5cGUnLCAncGFzc3dvcmQnKTtcclxuICAgIGZvcm0uc2V0KCdjbGllbnRfaWQnLCAnd2ViYXBwJyk7XHJcbiAgICBmb3JtLnNldCgnc2NvcGUnLCAnd2ViYXBwJyk7XHJcbiAgICBmb3JtLnNldCgnY2xpZW50X3NlY3JldCcsICcxMjM0NTYnKTtcclxuXHJcbiAgICByZXR1cm4gdGhpcy5odHRwXHJcbiAgICAgIC5wb3N0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL29hdXRoL3Rva2VuYCwgZm9ybSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCB0b2tlbjogYW55ID0ge307XHJcbiAgICAgICAgICB0b2tlbi50b2tlblR5cGUgPSByZXNwb25zZS50b2tlbl90eXBlO1xyXG4gICAgICAgICAgdG9rZW4uYWNjZXNzVG9rZW4gPSByZXNwb25zZS5hY2Nlc3NfdG9rZW47XHJcbiAgICAgICAgICB0b2tlbi5zY29wZSA9IHJlc3BvbnNlLnNjb3BlO1xyXG4gICAgICAgICAgdG9rZW4udG9rZW5EYXRlTGluZSA9IHJlc3BvbnNlLmV4cGlyZXNfaW47XHJcbiAgICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodG9rZW4pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnRvUHJvbWlzZSgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VG9rZW4oKTogSXRva2VuIHtcclxuICAgIGNvbnN0IGl0b2tlbjogSXRva2VuID0ge1xyXG4gICAgICBhY2Nlc3NUb2tlbjogdGhpcy50b2tlblNlcnZpY2UuZ2V0KCkuYWNjZXNzVG9rZW4sXHJcbiAgICAgIHRva2VuVHlwZTogdGhpcy50b2tlblNlcnZpY2UuZ2V0KCkudG9rZW5UeXBlLFxyXG4gICAgICB0b2tlbkRhdGFMaW5lOiB0aGlzLnRva2VuU2VydmljZS5nZXQoKS50b2tlbkRhdGVMaW5lLFxyXG4gICAgICBzY29wZTogdGhpcy50b2tlblNlcnZpY2UuZ2V0KCkuc2NvcGVcclxuICAgIH07XHJcbiAgICByZXR1cm4gaXRva2VuO1xyXG4gIH1cclxuXHJcbiAgZ2V0VXNlcigpOiBJVXNlciB7XHJcbiAgICBjb25zdCBpdXNlcjogSVVzZXIgPSBPYmplY3QuY3JlYXRlKHtcclxuICAgICAgYWNjb3VudDogdGhpcy51c2VyLmdldCgpLnVzZXJuYW1lLFxyXG4gICAgICB1c2VyTmFtZTogdGhpcy51c2VyLmdldCgpLnVzZXJuYW1lLFxyXG4gICAgICBwYXNzd29yZDogdGhpcy51c2VyLmdldCgpLnBhc3N3b3JkLFxyXG4gICAgICB1c2VySWQ6IHRoaXMudXNlci5nZXQoKS5pZCxcclxuICAgICAgcmVhbE5hbWU6IHRoaXMudXNlci5nZXQoKS5yZWFsbmFtZSxcclxuICAgICAgZGVwdElkOiB0aGlzLnVzZXIuZ2V0KCkuZGVwdElkLFxyXG4gICAgICBkZXB0TmFtZTogdGhpcy51c2VyLmdldCgpLmRlcHROYW1lLFxyXG4gICAgICB1c2VyVHlwZTogdGhpcy51c2VyLmdldCgpLnVzZXJUeXBlXHJcbiAgICB9KTtcclxuICAgIHJldHVybiBpdXNlcjtcclxuICB9XHJcblxyXG4gIG9wZW5XaW5kb3coaXdpbmRvdzogSVdpbmRvdyk6IHZvaWQge1xyXG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBpd2luZG93LnVybDtcclxuICB9XHJcblxyXG4gIHNjYW5Db2RlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeaJq+eggSzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIG9mKFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5omr56CBLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgfVxyXG5cclxuICBzZXROYXZpZ2F0aW9uQmFyKG5hdmlnYXRpb25CYXI6IE5hdmlnYXRpb25CYXIpOiB2b2lkIHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB5pS+572u5oyJ6ZKuLOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgfVxyXG5cclxuICBzZXRUaXRsZShpdGl0bGU6IElUaXRsZSk6IHZvaWQge1xyXG4gICAgdGhpcy50aXRsZS5zZXRUaXRsZShpdGl0bGUudGl0bGUpO1xyXG4gIH1cclxuXHJcbiAgc2hhcmUoKTogdm9pZCB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeWIhuS6qyzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgdXNlckxvY2F0aW9uKCk6IE9ic2VydmFibGU8VXNlckxvY2F0aW9uPiB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgeWumuS9jSzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVJbldpZmkoYnNzaWRzOiBBcnJheTxzdHJpbmc+KTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XHJcbiAgICBhbGVydChcIua1j+iniOWZqOaaguS4jeaUr+aMgVdJRknpqozor4Es6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihudWxsKTtcclxuICB9XHJcblxyXG4gIGdldFdpZmlNYWMoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcclxuICAgIGFsZXJ0KFwi5rWP6KeI5Zmo5pqC5LiN5pSv5oyB6I635Y+WTUFD5Zyw5Z2ALOivt+WcqEFQUOS4reS9v+eUqOatpOWKn+iDvSFcIik7XHJcbiAgICByZXR1cm4gb2YoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHojrflj5ZNQUPlnLDlnYAs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICB9XHJcblxyXG4gIGNob29zZUNvbnRhY3RzKGNvdW50OiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHojrflj5bogZTns7vkuros6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihcIua1j+iniOWZqOaaguS4jeaUr+aMgeiOt+WPluiBlOezu+S6uizor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgY29udGFjdERldGFpbHModGFyZ2V0VXNlcklkOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoXCLmtY/op4jlmajmmoLkuI3mlK/mjIHmn6Xor6LogZTns7vkurror6bnu4bkv6Hmga8s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IVwiKTtcclxuICAgIHJldHVybiBvZihcIua1j+iniOWZqOaaguS4jeaUr+aMgeafpeivouiBlOezu+S6uuivpue7huS/oeaBryzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hXCIpO1xyXG4gIH1cclxuXHJcbiAgdXBsb2FkSW1hZ2UoY291bnQ6IG51bWJlciwgc291cmNlVHlwZTogYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KCfmtY/op4jlmajmmoLkuI3mlK/mjIHlm77niYfkuIrkvKAs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IScpO1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG9wZW5SZWFkV2l0aFRpbWVyKHVybDogYW55LCBvcGVuVHlwZTogYW55LCB0aXRsZTogYW55LCBpZDogYW55LCB0eXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgYWxlcnQoJ+a1j+iniOWZqOaaguS4jeaUr+aMgeivu+eJqeaXtumXtOe7n+iuoSzor7flnKhBUFDkuK3kvb/nlKjmraTlip/og70hJyk7XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuICB1cGxvYWRNb3ZpZShsaW1pdE1pbnV0ZTogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KCfmtY/op4jlmajmmoLkuI3mlK/mjIHop4bpopHkuIrkvKAs6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IScpO1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgZmlsZUJyb3dzZXIodXJsOiBzdHJpbmcsdGl0bGU6c3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGFsZXJ0KCfmtY/op4jlmajmmoLkuI3mlK/mjIHmraTlip/og70s6K+35ZyoQVBQ5Lit5L2/55So5q2k5Yqf6IO9IScpO1xyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcbiAgc3RhcnRTZWFyY2hCZWFjb25zKHRpY2tldDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIHN0b3BTZWFyY2hCZWFjb25zKGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbiAgb25TZWFyY2hCZWFjb25zKGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbn1cclxuIl19