ng-yunzai-mobile
Version:
1. 适配yunzai_uni_app_x
615 lines • 39.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: devices/ios.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 IOS = /** @class */ (function (_super) {
tslib_1.__extends(IOS, _super);
function IOS(tokenService, http, user, baseclient) {
var _this = _super.call(this) || this;
_this.tokenService = tokenService;
_this.http = http;
_this.user = user;
_this.baseclient = baseclient;
return _this;
}
/**
* 手机网页认证
*/
/**
* 手机网页认证
* @return {?}
*/
IOS.prototype.auth = /**
* 手机网页认证
* @return {?}
*/
function () {
var _this = this;
if (this.baseclient.ios && this.baseclient.ios.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(tslib_1.__assign({}, response.principal, { tenantId: response.tenantId }));
// 加载结束
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(tslib_1.__assign({}, response.principal, { tenantId: response.tenantId }));
// 加载结束
preloaderFinished();
resolve(true);
}));
}));
})));
}
};
/**
* @return {?}
*/
IOS.prototype.getToken = /**
* @return {?}
*/
function () {
return yz.getTokenSync();
};
/**
* @param {?} window
* @return {?}
*/
IOS.prototype.openWindow = /**
* @param {?} window
* @return {?}
*/
function (window) {
yz.navigationOpenWindow(window);
if (window.listener) {
yz.listener.nBack(window.listener);
}
};
/**
* @return {?}
*/
IOS.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 {?}
*/
IOS.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 {?}
*/
IOS.prototype.setTitle = /**
* @param {?} ititle
* @return {?}
*/
function (ititle) {
yz.setNavigationBarTitle(ititle);
};
/**
* @param {?} ishare
* @return {?}
*/
IOS.prototype.share = /**
* @param {?} ishare
* @return {?}
*/
function (ishare) {
yz.setWebCanShare(ishare);
};
/**
* @return {?}
*/
IOS.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 {?}
*/
IOS.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 {?}
*/
IOS.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 {?}
*/
IOS.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 {?}
*/
IOS.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 {?}
*/
IOS.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 {?} url
* @param {?} openType
* @param {?} title
* @param {?} id
* @param {?} type
* @return {?}
*/
IOS.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 {?} limitMinute
* @return {?}
*/
IOS.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 {?} title
* @return {?}
*/
IOS.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 {?}
*/
IOS.prototype.startSearchBeacons = /**
* @param {?} ticket
* @param {?} callback
* @return {?}
*/
function (ticket, callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
IOS.prototype.stopSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
/**
* @param {?} callback
* @return {?}
*/
IOS.prototype.onSearchBeacons = /**
* @param {?} callback
* @return {?}
*/
function (callback) {
throw new Error("Method not implemented.");
};
IOS.decorators = [
{ type: Injectable, args: [{
providedIn: "root"
},] }
];
/** @nocollapse */
IOS.ctorParameters = function () { return [
{ type: TokenService },
{ type: HttpClient },
{ type: UserService },
{ type: undefined, decorators: [{ type: Inject, args: [BASE_CLIENT,] }] }
]; };
/** @nocollapse */ IOS.ngInjectableDef = i0.ɵɵdefineInjectable({ factory: function IOS_Factory() { return new IOS(i0.ɵɵinject(i1.TokenService), i0.ɵɵinject(i2.HttpClient), i0.ɵɵinject(i3.UserService), i0.ɵɵinject(i4.BASE_CLIENT)); }, token: IOS, providedIn: "root" });
return IOS;
}(BaseDevice));
export { IOS };
if (false) {
/**
* @type {?}
* @private
*/
IOS.prototype.tokenService;
/**
* @type {?}
* @private
*/
IOS.prototype.http;
/**
* @type {?}
* @private
*/
IOS.prototype.user;
/**
* @type {?}
* @private
*/
IOS.prototype.baseclient;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW9zLmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmcteXVuemFpLW1vYmlsZS8iLCJzb3VyY2VzIjpbImRldmljZXMvaW9zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBQyxNQUFNLEVBQUUsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pELE9BQU8sRUFBQyxXQUFXLEVBQWEsTUFBTSx1QkFBdUIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUdwRCxPQUFPLEVBQWEsSUFBSSxFQUFLLE1BQU0sTUFBTSxDQUFDO0FBSzFDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQUlqRDtJQUd5QiwrQkFBVTtJQUNqQyxhQUNVLFlBQTBCLEVBQzFCLElBQWdCLEVBQ2hCLElBQWlCLEVBQ0ksVUFBc0I7UUFKckQsWUFNRSxpQkFBTyxTQUNSO1FBTlMsa0JBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsVUFBSSxHQUFKLElBQUksQ0FBWTtRQUNoQixVQUFJLEdBQUosSUFBSSxDQUFhO1FBQ0ksZ0JBQVUsR0FBVixVQUFVLENBQVk7O0lBR3JELENBQUM7SUFFRDs7T0FFRzs7Ozs7SUFDSCxrQkFBSTs7OztJQUFKO1FBQUEsaUJBcURDO1FBcERDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRTtZQUM3RCxPQUFPLElBQUksT0FBTzs7Ozs7WUFBTSxVQUFDLE9BQU8sRUFBRSxNQUFNO2dCQUN0QyxpQkFBaUIsRUFBRSxDQUFDO2dC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YyxFQUFFLFFBQTZCO1FBQzlELE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOzs7OztJQUNELCtCQUFpQjs7OztJQUFqQixVQUFrQixRQUE2QjtRQUM3QyxNQUFNLElBQUksS0FBSyxDQUFDLHlCQUF5QixDQUFDLENBQUM7SUFDN0MsQ0FBQzs7Ozs7SUFDRCw2QkFBZTs7OztJQUFmLFVBQWdCLFFBQTZCO1FBQzNDLE1BQU0sSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUM3QyxDQUFDOztnQkF2UkYsVUFBVSxTQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7OztnQkFQTyxZQUFZO2dCQVhaLFVBQVU7Z0JBWVYsV0FBVztnREFZZCxNQUFNLFNBQUMsV0FBVzs7O2NBekJ2QjtDQXlTQyxBQXhSRCxDQUd5QixVQUFVLEdBcVJsQztTQXJSWSxHQUFHOzs7Ozs7SUFFWiwyQkFBa0M7Ozs7O0lBQ2xDLG1CQUF3Qjs7Ozs7SUFDeEIsbUJBQXlCOzs7OztJQUN6Qix5QkFBbUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Jhc2VEZXZpY2V9IGZyb20gXCIuL2Jhc2UuZGV2aWNlXCI7XHJcbmltcG9ydCB7SHR0cENsaWVudH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge0JBU0VfQ0xJRU5ULCBCYXNlQ2xpZW50fSBmcm9tIFwiLi4vY2xpZW50L2Jhc2UuY2xpZW50XCI7XHJcbmltcG9ydCB7cHJlbG9hZGVyRmluaXNoZWR9IGZyb20gXCIuLi9hdXRoL3ByZWxvYWRlclwiO1xyXG5pbXBvcnQge0l0b2tlbn0gZnJvbSBcIi4uL2F1dGgvaXRva2VuXCI7XHJcbmltcG9ydCB7SVdpbmRvd30gZnJvbSBcIi4vbW9kZWwvd2luZG93XCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZSwgZnJvbSwgb2Z9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7TmF2aWdhdGlvbkJhcn0gZnJvbSBcIi4vbW9kZWwvbmF2aWdhdGlvbmJhclwiO1xyXG5pbXBvcnQge0lUaXRsZX0gZnJvbSBcIi4vbW9kZWwvdGl0bGVcIjtcclxuaW1wb3J0IHtJU2hhcmV9IGZyb20gXCIuL21vZGVsL3NoYXJlXCI7XHJcbmltcG9ydCB7VXNlckxvY2F0aW9ufSBmcm9tIFwiLi9tb2RlbC9sb2NhdGlvblwiO1xyXG5pbXBvcnQge1Rva2VuU2VydmljZX0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtVc2VyU2VydmljZX0gZnJvbSBcIi4uL3VzZXIvdXNlci5zZXJ2aWNlXCI7XHJcblxyXG5kZWNsYXJlIGxldCB5ejtcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiBcInJvb3RcIlxyXG59KVxyXG5leHBvcnQgY2xhc3MgSU9TIGV4dGVuZHMgQmFzZURldmljZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHRva2VuU2VydmljZTogVG9rZW5TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxyXG4gICAgcHJpdmF0ZSB1c2VyOiBVc2VyU2VydmljZSxcclxuICAgIEBJbmplY3QoQkFTRV9DTElFTlQpIHByaXZhdGUgYmFzZWNsaWVudDogQmFzZUNsaWVudFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaJi+acuue9kemhteiupOivgVxyXG4gICAqL1xyXG4gIGF1dGgoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGlmICh0aGlzLmJhc2VjbGllbnQuaW9zICYmIHRoaXMuYmFzZWNsaWVudC5pb3MuYXV0aCA9PT0gZmFsc2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHByZWxvYWRlckZpbmlzaGVkKCk7XHJcbiAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAobnVsbCA9PT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gfHwgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjZcIikge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgLy8g6K6+572udG9rZW5cclxuICAgICAgICB0aGlzLnRva2VuU2VydmljZS5zZXQodGhpcy5nZXRUb2tlbigpIGFzIGFueSk7XHJcbiAgICAgICAgLy8g5Y+R6YCBL3VzZXLor7fmsYJcclxuICAgICAgICB0aGlzLmh0dHBcclxuICAgICAgICAgIC5nZXQoYCR7dGhpcy5iYXNlY2xpZW50LmdhdGV3YXl9L2F1dGgvdXNlcmApXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgdGhpcy51c2VyLnNldCh7IC4uLnJlc3BvbnNlLnByaW5jaXBhbCwgdGVuYW50SWQ6IHJlc3BvbnNlLnRlbmFudElkIH0pO1xyXG4gICAgICAgICAgICAvLyDliqDovb3nu5PmnZ9cclxuICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSBpZiAobnVsbCAhPT0gdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gJiYgdGhpcy5iYXNlY2xpZW50Lm1vYmlsZVZlcnNpb24gPT09IFwiVjVcIikge1xyXG4gICAgICBjb25zdCB1c2VySW5mbyA9IHl6LmdldFVzZXJJbmZvU3luYygpO1xyXG4gICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpO1xyXG4gICAgICBjb25zdCB7YWNjb3VudCwgcGFzc3dvcmR9ID0gdXNlckluZm87XHJcbiAgICAgIGZvcm1EYXRhLnNldChcInVzZXJuYW1lXCIsIGFjY291bnQpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJwYXNzd29yZFwiLCBwYXNzd29yZCk7XHJcbiAgICAgIGZvcm1EYXRhLnNldChcImdyYW50X3R5cGVcIiwgXCJwYXNzd29yZFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X2lkXCIsIFwid2ViYXBwXCIpO1xyXG4gICAgICBmb3JtRGF0YS5zZXQoXCJzY29wZVwiLCBcIndlYmFwcFwiKTtcclxuICAgICAgZm9ybURhdGEuc2V0KFwiY2xpZW50X3NlY3JldFwiLCBcIjEyMzQ1NlwiKTtcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPGFueT4oKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB0aGlzLmh0dHAucG9zdChgJHt0aGlzLmJhc2VjbGllbnQuZ2F0ZXdheX0vYXV0aC9vYXV0aC90b2tlbmAsIGZvcm1EYXRhKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBsZXQgdG9rZW5JbmZvID0ge307XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1snYWNjZXNzVG9rZW4nXSA9IHJlc3BvbnNlLmFjY2Vzc190b2tlbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWyd0b2tlblR5cGUnXSA9IHJlc3BvbnNlLnRva2VuX3R5cGU7XHJcbiAgICAgICAgICAgIHRva2VuSW5mb1sncmVmcmVzaFRva2VuJ10gPSByZXNwb25zZS5yZWZyZXNoX3Rva2VuO1xyXG4gICAgICAgICAgICB0b2tlbkluZm9bJ2V4cGlyZXNJbiddID0gcmVzcG9uc2UuZXhwaXJlc19pbjtcclxuICAgICAgICAgICAgdG9rZW5JbmZvWydzY29wZSddID0gcmVzcG9uc2Uuc2NvcGU7XHJcbiAgICAgICAgICAgIHRoaXMudG9rZW5TZXJ2aWNlLnNldCh0b2tlbkluZm8gYXMgYW55KVxyXG4gICAgICAgICAgICB0aGlzLmh0dHAuZ2V0KGAke3RoaXMuYmFzZWNsaWVudC5nYXRld2F5fS9hdXRoL3VzZXJgKS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIC8vIOiuvue9rnVzZXJcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlci5zZXQoeyAuLi5yZXNwb25zZS5wcmluY2lwYWwsIHRlbmFudElkOiByZXNwb25zZS50ZW5hbnRJZCB9KTtcclxuICAgICAgICAgICAgICAgIC8vIOWKoOi9vee7k+adn1xyXG4gICAgICAgICAgICAgICAgcHJlbG9hZGVyRmluaXNoZWQoKTtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgfSkpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRUb2tlbigpOiBJdG9rZW4ge1xyXG4gICAgcmV0dXJuIHl6LmdldFRva2VuU3luYygpO1xyXG4gIH1cclxuXHJcbiAgb3BlbldpbmRvdyh3aW5kb3c6IElXaW5kb3cpOiB2b2lkIHtcclxuICAgIHl6Lm5hdmlnYXRpb25PcGVuV2luZG93KHdpbmRvdyk7XHJcbiAgICBpZiAod2luZG93Lmxpc3RlbmVyKSB7XHJcbiAgICAgIHl6Lmxpc3RlbmVyLm5CYWNrKHdpbmRvdy5saXN0ZW5lcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzY2FuQ29kZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnNjYW5Db2RlKHtcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChcImVycm9yXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHNldE5hdmlnYXRpb25CYXIobmF2aWdhdGlvbkJhcjogTmF2aWdhdGlvbkJhcik6IHZvaWQge1xyXG4gICAgeXouc2V0TmF2aWdhdGlvbkJhclJpZ2h0SXRlbXMoe1xyXG4gICAgICBzaG93TWVudTogbmF2aWdhdGlvbkJhci5zaG93TWVudSxcclxuICAgICAgc2hhcmVGbGFnOiBuYXZpZ2F0aW9uQmFyLnNoYXJlRmxhZyxcclxuICAgICAgaXRlbXM6IG5hdmlnYXRpb25CYXIuaXRlbXMsXHJcbiAgICAgIG9uQ2xpY2s6IG5hdmlnYXRpb25CYXIub25DbGljayxcclxuICAgICAgc3VjY2VzczogbmF2aWdhdGlvbkJhci5zdWNjZXNzLFxyXG4gICAgICBmaWFsOiBuYXZpZ2F0aW9uQmFyLmZpYWwsXHJcbiAgICAgIGNvbXBsZXRlOiBuYXZpZ2F0aW9uQmFyLmNvbXBsZXRlXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNldFRpdGxlKGl0aXRsZTogSVRpdGxlKTogdm9pZCB7XHJcbiAgICB5ei5zZXROYXZpZ2F0aW9uQmFyVGl0bGUoaXRpdGxlKTtcclxuICB9XHJcblxyXG4gIHNoYXJlKGlzaGFyZTogSVNoYXJlKTogdm9pZCB7XHJcbiAgICB5ei5zZXRXZWJDYW5TaGFyZShpc2hhcmUpO1xyXG4gIH1cclxuXHJcbiAgdXNlckxvY2F0aW9uKCk6IE9ic2VydmFibGU8VXNlckxvY2F0aW9uIHwgYW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVzZXJMb2NhdGlvbih7XHJcbiAgICAgICAgICBzdWNjZXNzKGRhdGE6IGFueSkge1xyXG4gICAgICAgICAgICByZXNvbHZlKHtcclxuICAgICAgICAgICAgICBhZGRyZXNzOiBkYXRhLmFkZHJlc3MsXHJcbiAgICAgICAgICAgICAgbGF0aXR1ZGU6IGRhdGEubGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBkYXRhLmxvbmdpdHVkZVxyXG4gICAgICAgICAgICB9IGFzIFVzZXJMb2NhdGlvbik7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbChlcnJNc2c6IGFueSkge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB2YWxpZGF0ZUluV2lmaShic3NpZHM6IEFycmF5PHN0cmluZz4pOiBPYnNlcnZhYmxlPGJvb2xlYW4gfCBhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXNlckxvY2F0aW9uQ29udGFpbkFwKHtcclxuICAgICAgICAgIGJzc2lkcyxcclxuICAgICAgICAgIHN1Y2Nlc3MoZGF0YTogYm9vbGVhbikge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWwoZXJyTXNnOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZ2V0V2lmaU1hYygpOiBPYnNlcnZhYmxlPHN0cmluZyB8IGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5nZXRNYWMoe1xyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVycm9yTXNnKSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJvck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgY2hvb3NlQ29udGFjdHMoY291bnQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LmNob29zZUNvbnRhY3RzKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc3VjY2VzcyhkYXRhOiBhbnkpIHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsKGVyck1zZzogYW55KSB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGNvbnRhY3REZXRhaWxzKHRhcmdldFVzZXJJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXouQ29udGFjdERldGFpbHMoe1xyXG4gICAgICAgICAgdGFyZ2V0VXNlcklkLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZEltYWdlKGNvdW50OiBudW1iZXIsIHNvdXJjZVR5cGU6IGFueSk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LnVwbG9hZEltYWdlKHtcclxuICAgICAgICAgIGNvdW50LFxyXG4gICAgICAgICAgc291cmNlVHlwZSxcclxuICAgICAgICAgIHN1Y2Nlc3M6IGRhdGEgPT4ge1xyXG4gICAgICAgICAgICByZXNvbHZlKGRhdGEpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGZhaWw6IGVyck1zZyA9PiB7XHJcbiAgICAgICAgICAgIHJlamVjdChlcnJNc2cpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG9wZW5SZWFkV2l0aFRpbWVyKHVybDogYW55LCBvcGVuVHlwZTogYW55LCB0aXRsZTogYW55LCBpZDogYW55LCB0eXBlOiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIGZyb20oXHJcbiAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB5ei5vcGVuUmVhZFdpdGhUaW1lcih7XHJcbiAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICBvcGVuVHlwZSxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgaWQsXHJcbiAgICAgICAgICB0eXBlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIHVwbG9hZE1vdmllKGxpbWl0TWludXRlOiBudW1iZXIgKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiBmcm9tKFxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgeXoudXBsb2FkTW92aWUoe1xyXG4gICAgICAgICAgbGltaXRNaW51dGUsXHJcbiAgICAgICAgICBzdWNjZXNzOiBkYXRhID0+IHtcclxuICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBmYWlsOiBlcnJNc2cgPT4ge1xyXG4gICAgICAgICAgICByZWplY3QoZXJyTXNnKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBmaWxlQnJvd3Nlcih1cmw6IHN0cmluZywgdGl0bGU6IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gZnJvbShcclxuICAgICAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIHl6LmZpbGVCcm93c2VyKHtcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIHRpdGxlLFxyXG4gICAgICAgICAgc3VjY2VzczogZGF0YSA9PiB7XHJcbiAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZmFpbDogZXJyTXNnID0+IHtcclxuICAgICAgICAgICAgcmVqZWN0KGVyck1zZyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgc3RhcnRTZWFyY2hCZWFjb25zKHRpY2tldDogc3RyaW5nLCBjYWxsYmFjazogKGFyZ3Y6IGFueSkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTWV0aG9kIG5vdCBpbXBsZW1lbnRlZC5cIik7XHJcbiAgfVxyXG4gIHN0b3BTZWFyY2hCZWFjb25zKGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbiAgb25TZWFyY2hCZWFjb25zKGNhbGxiYWNrOiAoYXJndjogYW55KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJNZXRob2Qgbm90IGltcGxlbWVudGVkLlwiKTtcclxuICB9XHJcbn1cclxuIl19