UNPKG

ng-yunzai-mobile

Version:

1. 修改wechat.micro.ts

627 lines 40.5 kB
/** * @fileoverview added by tsickle * Generated from: devices/android.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 { preloaderFinished } from "../auth/preloader"; import { from } from "rxjs"; 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"; var Android = /** @class */ (function (_super) { tslib_1.__extends(Android, _super); function Android(tokenService, http, user, baseclient) { var _this = _super.call(this) || this; _this.tokenService = tokenService; _this.http = http; _this.user = user; _this.baseclient = baseclient; /* * @type {any[]} 暂存被选中联系人数据集合 * */ _this.checkboxTrue = []; /* * @type {any[]} 页面上的被选中联系人列表数据集合 * */ _this.checkboxName = []; return _this; } /** * 手机网页认证 */ /** * 手机网页认证 * @return {?} */ Android.prototype.auth = /** * 手机网页认证 * @return {?} */ function () { var _this = this; if (this.baseclient.android && this.baseclient.android.auth === false) { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { preloaderFinished(); resolve(true); })); } if (null === this.baseclient.mobileVersion || this.baseclient.mobileVersion === "V6") { return new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { // 设置token _this.tokenService.set((/** @type {?} */ (_this.getToken()))); // 发送/user请求 _this.http .get(_this.baseclient.gateway + "/auth/user") .subscribe((/** * @param {?} response * @return {?} */ function (response) { // 设置user _this.user.set(response.principal); // 加载结束 preloaderFinished(); resolve(true); })); })); } else if (null !== this.baseclient.mobileVersion && this.baseclient.mobileVersion === "V5") { /** @type {?} */ var userInfo = yz.getUserInfoSync(); /** @type {?} */ var formData_1 = new FormData(); var account = userInfo.account, password = userInfo.password; formData_1.set("username", account); formData_1.set("password", password); formData_1.set("grant_type", "password"); formData_1.set("client_id", "webapp"); formData_1.set("scope", "webapp"); formData_1.set("client_secret", "123456"); return new Promise(((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { _this.http.post(_this.baseclient.gateway + "/auth/oauth/token", formData_1).subscribe((/** * @param {?} response * @return {?} */ function (response) { /** @type {?} */ var tokenInfo = {}; tokenInfo['accessToken'] = response.access_token; tokenInfo['tokenType'] = response.token_type; tokenInfo['refreshToken'] = response.refresh_token; tokenInfo['expiresIn'] = response.expires_in; tokenInfo['scope'] = response.scope; _this.tokenService.set((/** @type {?} */ (tokenInfo))); _this.http.get(_this.baseclient.gateway + "/auth/user").subscribe((/** * @param {?} response * @return {?} */ function (response) { // 设置user _this.user.set(response.principal); // 加载结束 preloaderFinished(); resolve(true); })); })); }))); } }; /** * @return {?} */ Android.prototype.getToken = /** * @return {?} */ function () { return yz.getTokenSync(); }; /** * @param {?} window * @return {?} */ Android.prototype.openWindow = /** * @param {?} window * @return {?} */ function (window) { yz.navigationOpenWindow(window); if (window.listener) { yz.listener.nBack(window.listener); } }; /** * @return {?} */ Android.prototype.scanCode = /** * @return {?} */ function () { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.scanCode({ success: /** * @param {?} data * @return {?} */ function (data) { resolve(data); }, fail: /** * @param {?} errMsg * @return {?} */ function (errMsg) { reject("error"); } }); }))); }; /** * @param {?} navigationBar * @return {?} */ Android.prototype.setNavigationBar = /** * @param {?} navigationBar * @return {?} */ function (navigationBar) { yz.setNavigationBarRightItems({ showMenu: navigationBar.showMenu, shareFlag: navigationBar.shareFlag, items: navigationBar.items, onClick: navigationBar.onClick, success: navigationBar.success, fial: navigationBar.fial, complete: navigationBar.complete }); }; /** * @param {?} ititle * @return {?} */ Android.prototype.setTitle = /** * @param {?} ititle * @return {?} */ function (ititle) { yz.setNavigationBarTitle(ititle); }; /** * @param {?} ishare * @return {?} */ Android.prototype.share = /** * @param {?} ishare * @return {?} */ function (ishare) { yz.setWebCanShare(ishare); }; /** * @return {?} */ Android.prototype.userLocation = /** * @return {?} */ function () { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.userLocation({ success: /** * @param {?} data * @return {?} */ function (data) { resolve((/** @type {?} */ ({ address: data.address, latitude: data.latitude, longitude: data.longitude }))); }, fail: /** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); } }); }))); }; /** * @param {?} bssids * @return {?} */ Android.prototype.validateInWifi = /** * @param {?} bssids * @return {?} */ function (bssids) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.userLocationContainAp({ bssids: bssids, success: /** * @param {?} data * @return {?} */ function (data) { resolve(data); }, fail: /** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); } }); }))); }; /** * @return {?} */ Android.prototype.getWifiMac = /** * @return {?} */ function () { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.getMac({ success: /** * @param {?} data * @return {?} */ function (data) { resolve(data); }, fail: /** * @param {?} errorMsg * @return {?} */ function (errorMsg) { reject(errorMsg); } }); }))); }; /** * @param {?} count * @return {?} */ Android.prototype.chooseContacts = /** * @param {?} count * @return {?} */ function (count) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.chooseContacts({ count: count, success: /** * @param {?} data * @return {?} */ function (data) { resolve(data); }, fail: /** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); } }); }))); }; /** * @param {?} targetUserId * @return {?} */ Android.prototype.contactDetails = /** * @param {?} targetUserId * @return {?} */ function (targetUserId) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.ContactDetails({ targetUserId: targetUserId, success: (/** * @param {?} data * @return {?} */ function (data) { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); }) }); }))); }; /** * @param {?} count * @param {?} sourceType * @return {?} */ Android.prototype.uploadImage = /** * @param {?} count * @param {?} sourceType * @return {?} */ function (count, sourceType) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.uploadImage({ count: count, sourceType: sourceType, success: (/** * @param {?} data * @return {?} */ function (data) { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); }) }); }))); }; /** * @param {?} limitMinute * @return {?} */ Android.prototype.uploadMovie = /** * @param {?} limitMinute * @return {?} */ function (limitMinute) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.uploadMovie({ limitMinute: limitMinute, success: (/** * @param {?} data * @return {?} */ function (data) { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); }) }); }))); }; /** * @param {?} url * @param {?} openType * @param {?} title * @param {?} id * @param {?} type * @return {?} */ Android.prototype.openReadWithTimer = /** * @param {?} url * @param {?} openType * @param {?} title * @param {?} id * @param {?} type * @return {?} */ function (url, openType, title, id, type) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.openReadWithTimer({ url: url, openType: openType, title: title, id: id, type: type, success: (/** * @param {?} data * @return {?} */ function (data) { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); }) }); }))); }; /** * @param {?} url * @param {?} title * @return {?} */ Android.prototype.fileBrowser = /** * @param {?} url * @param {?} title * @return {?} */ function (url, title) { return from(new Promise((/** * @param {?} resolve * @param {?} reject * @return {?} */ function (resolve, reject) { yz.fileBrowser({ url: url, title: title, success: (/** * @param {?} data * @return {?} */ function (data) { resolve(data); }), fail: (/** * @param {?} errMsg * @return {?} */ function (errMsg) { reject(errMsg); }) }); }))); }; /** * @param {?} ticket * @param {?} callback * @return {?} */ Android.prototype.startSearchBeacons = /** * @param {?} ticket * @param {?} callback * @return {?} */ function (ticket, callback) { throw new Error("Method not implemented."); }; /** * @param {?} callback * @return {?} */ Android.prototype.stopSearchBeacons = /** * @param {?} callback * @return {?} */ function (callback) { throw new Error("Method not implemented."); }; /** * @param {?} callback * @return {?} */ Android.prototype.onSearchBeacons = /** * @param {?} callback * @return {?} */ function (callback) { throw new Error("Method not implemented."); }; Android.decorators = [ { type: Injectable, args: [{ providedIn: "root" },] } ]; /** @nocollapse */ Android.ctorParameters = function () { return [ { type: TokenService }, { type: HttpClient }, { type: UserService }, { type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] } ]; }; /** @nocollapse */ Android.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function Android_Factory() { return new Android(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT)); }, token: Android, providedIn: "root" }); return Android; }(BaseDevice)); export { Android }; if (false) { /** @type {?} */ Android.prototype.checkboxTrue; /** @type {?} */ Android.prototype.checkboxName; /** * @type {?} * @private */ Android.prototype.tokenService; /** * @type {?} * @private */ Android.prototype.http; /** * @type {?} * @private */ Android.prototype.user; /** * @type {?} * @private */ Android.prototype.baseclient; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5kcm9pZC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXl1bnphaS1tb2JpbGUvIiwic291cmNlcyI6WyJkZXZpY2VzL2FuZHJvaWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLFdBQVcsRUFBYSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR3BELE9BQU8sRUFBYSxJQUFJLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFLdEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ3BELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQzs7Ozs7O0FBSWpEO0lBRzZCLG1DQUFVO0lBV3JDLGlCQUNVLFlBQTBCLEVBQzFCLElBQWdCLEVBQ2hCLElBQWlCLEVBQ0ksVUFBc0I7UUFKckQsWUFNRSxpQkFBTyxTQUNSO1FBTlMsa0JBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsVUFBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFJLEdBQUosSUFBSSxDQUFhO1FBQ0ksZ0JBQVUsR0FBVixVQUFVLENBQVk7Ozs7UUFWckQsa0JBQVksR0FBVSxFQUFFLENBQUM7Ozs7UUFJekIsa0JBQVksR0FBVSxFQUFFLENBQUM7O0lBU3pCLENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCxzQkFBSTs7OztJQUFKO1FBQUEsaUJBcURDO1FBcERDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUNyRSxP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bUIsTUFBYyxFQUFFLFFBQTZCO1FBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUNELG1DQUFpQjs7OztJQUFqQixVQUFrQixRQUE2QjtRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Ozs7SUFDRCxpQ0FBZTs7OztJQUFmLFVBQWdCLFFBQTZCO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOztnQkFsU0YsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFQTyxZQUFZO2dCQVhaLFVBQVU7Z0JBWVYsV0FBVztnREFzQmQsTUFBTSxTQUFDLFdBQVc7OztrQkFuQ3ZCO0NBb1RDLEFBblNELENBRzZCLFVBQVUsR0FnU3RDO1NBaFNZLE9BQU87OztJQUtsQiwrQkFBeUI7O0lBSXpCLCtCQUF5Qjs7Ozs7SUFHdkIsK0JBQWtDOzs7OztJQUNsQyx1QkFBd0I7Ozs7O0lBQ3hCLHVCQUF5Qjs7Ozs7SUFDekIsNkJBQW1EIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCYXNlRGV2aWNlfSBmcm9tIFwiLi9iYXNlLmRldmljZVwiO1xyXG5pbXBvcnQge0h0dHBDbGllbnR9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtCQVNFX0NMSUVOVCwgQmFzZUNsaWVudH0gZnJvbSBcIi4uL2NsaWVudC9iYXNlLmNsaWVudFwiO1xyXG5pbXBvcnQge3ByZWxvYWRlckZpbmlzaGVkfSBmcm9tIFwiLi4vYXV0aC9wcmVsb2FkZXJcIjtcclxuaW1wb3J0IHtJdG9rZW59IGZyb20gXCIuLi9hdXRoL2l0b2tlblwiO1xyXG5pbXBvcnQge0lXaW5kb3d9IGZyb20gXCIuL21vZGVsL3dpbmRvd1wiO1xyXG5pbXBvcnQge09ic2VydmFibGUsIGZyb219IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkJhcn0gZnJvbSBcIi4vbW9kZWwvbmF2aWdhdGlvbmJhclwiO1xyXG5pbXBvcnQge0lUaXRsZX0gZnJvbSBcIi4vbW9kZWwvdGl0bGVcIjtcclxuaW1wb3J0IHtJU2hhcmV9IGZyb20gXCIuL21vZGVsL3NoYXJlXCI7XHJcbmltcG9ydCB7VXNlckxvY2F0aW9ufSBmcm9tIFwiLi9tb2RlbC9sb2NhdGlvblwiO1xyXG5pbXBvcnQge1Rva2VuU2VydmljZX0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXIvdXNlci5zZXJ2aWNlXCI7XHJcblxyXG5kZWNsYXJlIGxldCB5ejtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgQW5kcm9pZCBleHRlbmRzIEJhc2VEZXZpY2Uge1xyXG5cclxuICAvKlxyXG4gICAqICBAdHlwZSB7YW55W119IOaaguWtmOiiq+mAieS4reiBlOezu+S6uuaVsOaNrumbhuWQiFxyXG4gICAqICovXHJcbiAgY2hlY2tib3hUcnVlOiBhbnlbXSA9IFtdO1xyXG4gIC8qXHJcbiAgICogIEB0eXBlIHthbnlbXX0g6aG16Z2i5LiK55qE6KKr6YCJ5Lit6IGU57O75Lq65YiX6KGo5pWw5o2u6ZuG5ZCIXHJcbiAgICogKi9cclxuICBjaGVja2JveE5hbWU6IGFueVtdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSB0b2tlblNlcnZpY2U6IFRva2VuU2VydmljZSxcclxuICAgIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXHJcbiAgICBASW5qZWN0KEJBU0VfQ0xJRU5UKSBwcml2YXRlIGJhc2VjbGllbnQ6IEJhc2VDbGllbnRcclxuICApIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmiYvmnLrnvZHpobXorqTor4FcclxuICAgKi9cclxuICBhdXRoKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICBpZiAodGhpcy5iYXNlY2xpZW50LmFuZHJvaWQgJiYgdGhpcy5iYXNlY2xpZW50LmFuZHJvaWQuYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobnVsbCA9PT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gfHwgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjZcIikge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgLy8g6K6+572udG9rZW5cclxuICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodGhpcy5nZXRUb2tlbigpIGFzIGFueSk7XHJcbiAgICAgICAgLy8g5Y+R6YCBL3VzZXLor7fmsYJcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgdGhpcy51c2VyLnNldChyZXNwb25zZS5wcmluY2lwYWwpO1xyXG4gICAgICAgICAgICAvLyDliqDovb3nu5PmnZ9cclxuICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAobnVsbCAhPT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gJiYgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjVcIikge1xyXG4gICAgICBjb25zdCB1c2VySW5mbyA9IHl6LmdldFVzZXJJbmZvU3luYygpO1xyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBjb25zdCB7YWNjb3VudCwgcGFzc3dvcmR9ID0gdXNlckluZm87XHJcbiAgICAgIGZvcm1EYXRhLnNldChcInVzZXJuYW1lXCIsIGFjY291bnQpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJwYXNzd29yZFwiLCBwYXNzd29yZCk7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImdyYW50X3R5cGVcIiwgXCJwYXNzd29yZFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X2lkXCIsIFwid2ViYXBwXCIpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJzY29wZVwiLCBcIndlYmFwcFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X3NlY3JldFwiLCBcIjEyMzQ1NlwiKTtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC9vYXV0aC90b2tlbmAsIGZvcm1EYXRhKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdG9rZW5JbmZvID0ge307XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1snYWNjZXNzVG9rZW4nXSA9IHJlc3BvbnNlLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWyd0b2tlblR5cGUnXSA9IHJlc3BvbnNlLnRva2VuX3R5cGU7XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1sncmVmcmVzaFRva2VuJ10gPSByZXNwb25zZS5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ2V4cGlyZXNJbiddID0gcmVzcG9uc2UuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydzY29wZSddID0gcmVzcG9uc2Uuc2NvcGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldCh0b2tlbkluZm8gYXMgYW55KVxyXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlci5zZXQocmVzcG9uc2UucHJpbmNpcGFsKTtcclxuICAgICAgICAgICAgICAgIC8vIOWKoOi9vee7k+adn1xyXG4gICAgICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb2tlbigpOiBJdG9rZW4ge1xyXG4gICAgcmV0dXJuIHl6LmdldFRva2VuU3luYygpO1xyXG4gIH1cclxuXHJcbiAgb3BlbldpbmRvdyh3aW5kb3c6IElXaW5kb3cpOiB2b2lkIHtcclxuICAgIHl6Lm5hdmlnYXRpb25PcGVuV2luZG93KHdpbmRvdyk7XHJcbiAgICBpZiAod2luZG93Lmxpc3RlbmVyKSB7XHJcbiAgICAgIHl6Lmxpc3RlbmVyLm5CYWNrKHdpbmRvdy5saXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzY2FuQ29kZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnNjYW5Db2RlKHtcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChcImVycm9yXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldE5hdmlnYXRpb25CYXIobmF2aWdhdGlvbkJhcjogTmF2aWdhdGlvbkJhcik6IHZvaWQge1xyXG4gICAgeXouc2V0TmF2aWdhdGlvbkJhclJpZ2h0SXRlbXMoe1xyXG4gICAgICBzaG93TWVudTogbmF2aWdhdGlvbkJhci5zaG93TWVudSxcclxuICAgICAgc2hhcmVGbGFnOiBuYXZpZ2F0aW9uQmFyLnNoYXJlRmxhZyxcclxuICAgICAgaXRlbXM6IG5hdmlnYXRpb25CYXIuaXRlbXMsXHJcbiAgICAgIG9uQ2xpY2s6IG5hdmlnYXRpb25CYXIub25DbGljayxcclxuICAgICAgc3VjY2VzczogbmF2aWdhdGlvbkJhci5zdWNjZXNzLFxyXG4gICAgICBmaWFsOiBuYXZpZ2F0aW9uQmFyLmZpYWwsXHJcbiAgICAgIGNvbXBsZXRlOiBuYXZpZ2F0aW9uQmFyLmNvbXBsZXRlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRpdGxlKGl0aXRsZTogSVRpdGxlKTogdm9pZCB7XHJcbiAgICB5ei5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoaXRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNoYXJlKGlzaGFyZTogSVNoYXJlKTogdm9pZCB7XHJcbiAgICB5ei5zZXRXZWJDYW5TaGFyZShpc2hhcmUpO1xyXG4gIH1cclxuXHJcbiAgdXNlckxvY2F0aW9uKCk6IE9ic2VydmFibGU8VXNlckxvY2F0aW9uIHwgYW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVzZXJMb2NhdGlvbih7XHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGRhdGEubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBkYXRhLmxvbmdpdHVkZVxyXG4gICAgICAgICAgICB9IGFzIFVzZXJMb2NhdGlvbik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2c6IGFueSkge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUluV2lmaShic3NpZHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXNlckxvY2F0aW9uQ29udGFpbkFwKHtcclxuICAgICAgICAgIGJzc2lkcyxcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lmaU1hYygpOiBPYnNlcnZhYmxlPHN0cmluZyB8IGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5nZXRNYWMoe1xyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVycm9yTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlQ29udGFjdHMoY291bnQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LmNob29zZUNvbnRhY3RzKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZzogYW55KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnRhY3REZXRhaWxzKHRhcmdldFVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouQ29udGFjdERldGFpbHMoe1xyXG4gICAgICAgICAgdGFyZ2V0VXNlcklkLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZEltYWdlKGNvdW50OiBudW1iZXIsIHNvdXJjZVR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZEltYWdlKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc291cmNlVHlwZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG5cclxuICB1cGxvYWRNb3ZpZShsaW1pdE1pbnV0ZTogbnVtYmVyICk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZE1vdmllKHtcclxuICAgICAgICAgIGxpbWl0TWludXRlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgb3BlblJlYWRXaXRoVGltZXIodXJsOiBhbnksIG9wZW5UeXBlOiBhbnksIHRpdGxlOiBhbnksIGlkOiBhbnksIHR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6Lm9wZW5SZWFkV2l0aFRpbWVyKHtcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIG9wZW5UeXBlLFxyXG4gICAgICAgICAgdGl0bGUsXHJcbiAgICAgICAgICBpZCxcclxuICAgICAgICAgIHR5cGUsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZmlsZUJyb3dzZXIodXJsOiBzdHJpbmcsIHRpdGxlOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5maWxlQnJvd3Nlcih7XHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICB0aXRsZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHN0YXJ0U2VhcmNoQmVhY29ucyh0aWNrZXQ6IHN0cmluZywgY2FsbGJhY2s6IChhcmd2OiBhbnkpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRocm93IG5ldyBFcnJvcihcIk1ldGhvZCBub3QgaW1wbGVtZW50ZWQuXCIpO1xyXG4gIH1cclxuICBzdG9wU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIG9uU2VhcmNoQmVhY29ucyhjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG59XHJcbiJdfQ==