|
(function() {
|
var nodeEnv = typeof require !== 'undefined' && typeof process !== 'undefined';
|
var __module = nodeEnv ? module : {exports:{}};
|
var __filename = 'preview-scripts/assets/Scripts/util/cli_log.js';
|
var __require = nodeEnv ? function (request) {
|
return cc.require(request);
|
} : function (request) {
|
return __quick_compile_project__.require(request, __filename);
|
};
|
function __define (exports, require, module) {
|
if (!nodeEnv) {__quick_compile_project__.registerModule(__filename, module);}"use strict";
|
cc._RF.push(module, '269e49DJp9NJa8HiulckyVD', 'cli_log');
|
// Scripts/util/cli_log.js
|
|
"use strict";
|
|
//日志上报
|
//zys
|
var LOG_TYPE = {
|
device: "device",
|
flash: "flash",
|
advice: "advice",
|
load_start: "load_start",
|
load_end: "load_end",
|
reg_acc: "reg_acc",
|
select_srv: "select_srv",
|
create_role: "create_role",
|
get_def_srv: "get_def_srv",
|
enter_city: "enter_city"
|
}; //是否记录日志
|
|
var _is_log = true;
|
_is_log = _is_log && LOG_URL != null;
|
window.cli_log = {
|
//日志上报
|
log_to_web: function log_to_web(url_type, log_args) {
|
return;
|
if (!_is_log) return;
|
var url = LOG_URL + url_type; // console.log("上报开始url===", url)
|
|
var date_time = Math.ceil(Date.now() / 1000);
|
var body = "?date_time=" + this.log_url_encode(date_time);
|
var sign = this.getSignValue(date_time);
|
body = body + "&sign=" + sign;
|
|
for (var k in log_args) {
|
body = body + "&" + k + "=" + this.log_url_encode(log_args[k]);
|
}
|
|
url = url + body;
|
console.log(url_type, log_args.step); // console.log("push_log==>", url);
|
|
var xhr = cc.loader.getXMLHttpRequest();
|
xhr.open("POST", url);
|
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
|
xhr.onreadystatechange = function () {
|
if (xhr.readyState == 4 && xhr.status >= 200 && xhr.status <= 207) {
|
var result = JSON.parse(xhr.responseText); // console.log("result==>", result)
|
|
if (result["success"] == false) {
|
// console.log(result["message"]);
|
return;
|
}
|
}
|
}.bind(this);
|
|
xhr.send();
|
},
|
getSignValue: function getSignValue(date_time) {
|
return;
|
var value = "";
|
var key = SIGN_KEY;
|
value = value + PLATFORM_TYPR;
|
value = value + date_time;
|
value = value + key;
|
|
var MD5 = require("md5.min");
|
|
value = MD5(value);
|
value = value.toLowerCase();
|
return value;
|
},
|
//上报信息到注册服
|
log_to_idfa_web: function log_to_idfa_web(body) {// if (!window.CONF_IDFA_WEB) return
|
// let url = window.CONF_IDFA_WEB
|
},
|
//url编码
|
log_url_encode: function log_url_encode(str) {
|
return;
|
str = String(str);
|
var _str = str;
|
str = str.replace(/\n/g, "\\r\\n");
|
|
var format = function format(c) {
|
return cc.js.formatStr("%%%02X", c.charCodeAt(0));
|
};
|
|
str = str.replace("([^%w ])", format);
|
str = str.replace(" ", "+"); // console.log(_str, "=====url_str======>", str)
|
|
return str;
|
},
|
//获取设备基本信息
|
log_get_device_info: function log_get_device_info() {
|
return;
|
var channel = window.CHANNEL;
|
var pro = "h5sszg";
|
var plat = PLATFORM_NAME;
|
return {
|
device_id: SDK ? SDK.getUid() : "1" //暂时用uid代替
|
,
|
device_type: 1 //暂时没获取
|
,
|
os: cc.sys.os,
|
carrier: "" //暂时没获取
|
,
|
network_type: cc.sys.getNetworkType() == 1 ? "wifi" : "数据",
|
resolution: '',
|
product_name: pro,
|
platform_name: plat,
|
channel_name: channel
|
};
|
},
|
//获取日志当前标识
|
log_flag: function log_flag(key, val) {
|
return;
|
if (!_is_log) return false;
|
val = val || 1;
|
var str = "";
|
|
if (PLATFORM_TYPR == "SH_RH") {
|
str = "shrh_log_flag";
|
}
|
|
var uid = "";
|
|
if (SDK) {
|
uid = SDK.getUid();
|
} else {
|
uid = "3";
|
}
|
|
console.log(uid, key, val);
|
console.log("日志bool==", gcore.SysEnv.get(str) == cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val), gcore.SysEnv.get(str), cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val));
|
|
if (gcore.SysEnv.get(str) == cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val)) {
|
return false;
|
} else {
|
gcore.SysEnv.set(str, cc.js.formatStr("uid=%s&key=%s&val=%s", uid, key, val));
|
return true;
|
}
|
},
|
//设备激活
|
log_activate_device: function log_activate_device() {
|
return;
|
|
if (this.log_flag(LOG_TYPE.device)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
this.log_to_web("/device/activation", log);
|
}
|
},
|
//闪屏 step.1
|
log_flash: function log_flash() {
|
return;
|
|
if (this.log_flag(LOG_TYPE.flash)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 1;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
// 忠告 step.2
|
log_advice: function log_advice() {
|
return;
|
|
if (this.log_flag(LOG_TYPE.advice)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 2;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
//加载游戏开始 step.3
|
log_loading_start: function log_loading_start() {
|
return;
|
|
if (this.log_flag(LOG_TYPE.load_start)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 3;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
// 加载游戏结束 step.4
|
log_loading_end: function log_loading_end() {
|
return;
|
|
if (this.log_flag(LOG_TYPE.load_end)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 4;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
//注册账号 step.5
|
log_reg_account: function log_reg_account(account) {
|
return;
|
|
if (this.log_flag(LOG_TYPE.reg_acc)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 5;
|
log.account_id = account;
|
log.account_name = account;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
//选服 step.6
|
log_select_server: function log_select_server(account) {
|
return;
|
|
if (this.log_flag(LOG_TYPE.select_srv)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 6;
|
log.account_id = account;
|
log.account_name = account;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
//创建角色 step.7
|
log_create_role: function log_create_role(account) {
|
return;
|
this.log_select_server(account); //防止有选服地方没处理到
|
|
if (this.log_flag(LOG_TYPE.select_srv)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 7;
|
log.account_id = account;
|
log.account_name = account;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
//起名 step.8
|
log_enter_city: function log_enter_city(account) {
|
return;
|
|
if (this.log_flag(LOG_TYPE.enter_city)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 8;
|
log.account_id = account;
|
log.account_name = account;
|
this.log_to_web("/entry/step", log);
|
}
|
},
|
//获取到默认服 step.9
|
log_get_def_srv: function log_get_def_srv(account) {
|
return;
|
this.log_enter_city(account); //防止有选服地方没处理到
|
|
if (this.log_flag(LOG_TYPE.get_def_srv)) {
|
//未上报过 上报一次
|
var log = this.log_get_device_info();
|
log.step = 9;
|
log.account_id = account;
|
log.account_name = account;
|
this.log_to_web("/entry/step", log);
|
}
|
}
|
}; // cli_log.log_activate_device(); //加载文件开始上报激活设备
|
// cli_log.log_flash();
|
// cli_log.log_advice();
|
// console.log("is_log===", _is_log, cc.sys.getNetworkType() == 1 ? "wifi" : "数据", cc.sys.os);
|
|
cc._RF.pop();
|
}
|
if (nodeEnv) {
|
__define(__module.exports, __require, __module);
|
}
|
else {
|
__quick_compile_project__.registerModuleFunc(__filename, function () {
|
__define(__module.exports, __require, __module);
|
});
|
}
|
})();
|
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImFzc2V0c1xcU2NyaXB0c1xcdXRpbFxcY2xpX2xvZy5qcyJdLCJuYW1lcyI6WyJMT0dfVFlQRSIsImRldmljZSIsImZsYXNoIiwiYWR2aWNlIiwibG9hZF9zdGFydCIsImxvYWRfZW5kIiwicmVnX2FjYyIsInNlbGVjdF9zcnYiLCJjcmVhdGVfcm9sZSIsImdldF9kZWZfc3J2IiwiZW50ZXJfY2l0eSIsIl9pc19sb2ciLCJMT0dfVVJMIiwid2luZG93IiwiY2xpX2xvZyIsImxvZ190b193ZWIiLCJ1cmxfdHlwZSIsImxvZ19hcmdzIiwidXJsIiwiZGF0ZV90aW1lIiwiTWF0aCIsImNlaWwiLCJEYXRlIiwibm93IiwiYm9keSIsImxvZ191cmxfZW5jb2RlIiwic2lnbiIsImdldFNpZ25WYWx1ZSIsImsiLCJjb25zb2xlIiwibG9nIiwic3RlcCIsInhociIsImNjIiwibG9hZGVyIiwiZ2V0WE1MSHR0cFJlcXVlc3QiLCJvcGVuIiwic2V0UmVxdWVzdEhlYWRlciIsIm9ucmVhZHlzdGF0ZWNoYW5nZSIsInJlYWR5U3RhdGUiLCJzdGF0dXMiLCJyZXN1bHQiLCJKU09OIiwicGFyc2UiLCJyZXNwb25zZVRleHQiLCJiaW5kIiwic2VuZCIsInZhbHVlIiwia2V5IiwiU0lHTl9LRVkiLCJQTEFURk9STV9UWVBSIiwiTUQ1IiwicmVxdWlyZSIsInRvTG93ZXJDYXNlIiwibG9nX3RvX2lkZmFfd2ViIiwic3RyIiwiU3RyaW5nIiwiX3N0ciIsInJlcGxhY2UiLCJmb3JtYXQiLCJjIiwianMiLCJmb3JtYXRTdHIiLCJjaGFyQ29kZUF0IiwibG9nX2dldF9kZXZpY2VfaW5mbyIsImNoYW5uZWwiLCJDSEFOTkVMIiwicHJvIiwicGxhdCIsIlBMQVRGT1JNX05BTUUiLCJkZXZpY2VfaWQiLCJTREsiLCJnZXRVaWQiLCJkZXZpY2VfdHlwZSIsIm9zIiwic3lzIiwiY2FycmllciIsIm5ldHdvcmtfdHlwZSIsImdldE5ldHdvcmtUeXBlIiwicmVzb2x1dGlvbiIsInByb2R1Y3RfbmFtZSIsInBsYXRmb3JtX25hbWUiLCJjaGFubmVsX25hbWUiLCJsb2dfZmxhZyIsInZhbCIsInVpZCIsImdjb3JlIiwiU3lzRW52IiwiZ2V0Iiwic2V0IiwibG9nX2FjdGl2YXRlX2RldmljZSIsImxvZ19mbGFzaCIsImxvZ19hZHZpY2UiLCJsb2dfbG9hZGluZ19zdGFydCIsImxvZ19sb2FkaW5nX2VuZCIsImxvZ19yZWdfYWNjb3VudCIsImFjY291bnQiLCJhY2NvdW50X2lkIiwiYWNjb3VudF9uYW1lIiwibG9nX3NlbGVjdF9zZXJ2ZXIiLCJsb2dfY3JlYXRlX3JvbGUiLCJsb2dfZW50ZXJfY2l0eSIsImxvZ19nZXRfZGVmX3NydiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0EsSUFBSUEsUUFBUSxHQUFHO0FBQ1hDLEVBQUFBLE1BQU0sRUFBRSxRQURHO0FBRVRDLEVBQUFBLEtBQUssRUFBRSxPQUZFO0FBR1RDLEVBQUFBLE1BQU0sRUFBRSxRQUhDO0FBSVRDLEVBQUFBLFVBQVUsRUFBRSxZQUpIO0FBS1RDLEVBQUFBLFFBQVEsRUFBRSxVQUxEO0FBTVRDLEVBQUFBLE9BQU8sRUFBRSxTQU5BO0FBT1RDLEVBQUFBLFVBQVUsRUFBRSxZQVBIO0FBUVRDLEVBQUFBLFdBQVcsRUFBRSxhQVJKO0FBU1RDLEVBQUFBLFdBQVcsRUFBRSxhQVRKO0FBVVRDLEVBQUFBLFVBQVUsRUFBRTtBQVZILENBQWYsRUFhQTs7QUFDQSxJQUFJQyxPQUFPLEdBQUcsSUFBZDtBQUNBQSxPQUFPLEdBQUdBLE9BQU8sSUFBSUMsT0FBTyxJQUFJLElBQWhDO0FBRUFDLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQjtBQUViO0FBQ0FDLEVBQUFBLFVBQVUsRUFBRSxvQkFBVUMsUUFBVixFQUFvQkMsUUFBcEIsRUFBOEI7QUFDdEM7QUFDQSxRQUFJLENBQUNOLE9BQUwsRUFBYztBQUNkLFFBQUlPLEdBQUcsR0FBR04sT0FBTyxHQUFHSSxRQUFwQixDQUhzQyxDQUl0Qzs7QUFDQSxRQUFJRyxTQUFT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O0FBbU5iO0FBQ0F3RSxFQUFBQSxlQUFlLEVBQUUseUJBQVVOLE9BQVYsRUFBbUI7QUFDaEM7QUFDQSxTQUFLSyxjQUFMLENBQW9CTCxPQUFwQixFQUZnQyxDQUVIOztBQUM3QixRQUFJLEtBQUtiLFFBQUwsQ0FBY25GLFFBQVEsQ0FBQ1MsV0FBdkIsQ0FBSixFQUF5QztBQUFLO0FBQzFDLFVBQUlxQixHQUFHLEdBQUcsS0FBS2tDLG1CQUFMLEVBQVY7QUFDQWxDLE1BQUFBLEdBQUcsQ0FBQ0MsSUFBSixHQUFXLENBQVg7QUFDQUQsTUFBQUEsR0FBRyxDQUFDbUUsVUFBSixHQUFpQkQsT0FBakI7QUFDQWxFLE1BQUFBLEdBQUcsQ0FBQ29FLFlBQUosR0FBbUJGLE9BQW5CO0FBQ0EsV0FBS2pGLFVBQUwsQ0FBZ0IsYUFBaEIsRUFBK0JlLEdBQS9CO0FBQ0g7QUFDSjtBQTlOWSxDQUFqQixFQWlPQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIvIiwic291cmNlc0NvbnRlbnQiOlsiLy/ml6Xlv5fkuIrmiqVcclxuLy96eXNcclxudmFyIExPR19UWVBFID0ge1xyXG4gICAgZGV2aWNlOiBcImRldmljZVwiXHJcbiAgICAsIGZsYXNoOiBcImZsYXNoXCJcclxuICAgICwgYWR2aWNlOiBcImFkdmljZVwiXHJcbiAgICAsIGxvYWRfc3RhcnQ6IFwibG9hZF9zdGFydFwiXHJcbiAgICAsIGxvYWRfZW5kOiBcImxvYWRfZW5kXCJcclxuICAgICwgcmVnX2FjYzogXCJyZWdfYWNjXCJcclxuICAgICwgc2VsZWN0X3NydjogXCJzZWxlY3Rfc3J2XCJcclxuICAgICwgY3JlYXRlX3JvbGU6IFwiY3JlYXRlX3JvbGVcIlxyXG4gICAgLCBnZXRfZGVmX3NydjogXCJnZXRfZGVmX3NydlwiXHJcbiAgICAsIGVudGVyX2NpdHk6IFwiZW50ZXJfY2l0eVwiXHJcbn1cclxuXHJcbi8v5piv5ZCm6K6w5b2V5pel5b+XXHJcbnZhciBfaXNfbG9nID0gdHJ1ZTtcclxuX2lzX2xvZyA9IF9pc19sb2cgJiYgTE9HX1VSTCAhPSBudWxsXHJcblxyXG53aW5kb3cuY2xpX2xvZyA9IHtcclxuXHJcbiAgICAvL+aXpeW/l+S4iuaKpVxyXG4gICAgbG9nX3RvX3dlYjogZnVuY3Rpb24gKHVybF90eXBlLCBsb2dfYXJncykge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmICghX2lzX2xvZykgcmV0dXJuXHJcbiAgICAgICAgbGV0IHVybCA9IExPR19VUkwgKyB1cmxfdHlwZTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuS4iuaKpeW8gOWni3VybD09PVwiLCB1cmwpXHJcbiAgICAgICAgbGV0IGRhdGVfdGltZSA9IE1hdGguY2VpbChEYXRlLm5vdygpIC8gMTAwMCk7XHJcbiAgICAgICAgbGV0IGJvZHkgPSBcIj9kYXRlX3RpbWU9XCIgKyB0aGlzLmxvZ191cmxfZW5jb2RlKGRhdGVfdGltZSk7XHJcbiAgICAgICAgbGV0IHNpZ24gPSB0aGlzLmdldFNpZ25WYWx1ZShkYXRlX3RpbWUpO1xyXG4gICAgICAgIGJvZHkgPSBib2R5ICsgXCImc2lnbj1cIiArIHNpZ247XHJcbiAgICAgICAgZm9yIChsZXQgayBpbiBsb2dfYXJncykge1xyXG4gICAgICAgICAgICBib2R5ID0gYm9keSArIFwiJlwiICsgayArIFwiPVwiICsgdGhpcy5sb2dfdXJsX2VuY29kZShsb2dfYXJnc1trXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHVybCA9IHVybCArIGJvZHk7XHJcbiAgICAgICAgY29uc29sZS5sb2codXJsX3R5cGUsbG9nX2FyZ3Muc3RlcClcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInB1c2hfbG9nPT0+XCIsIHVybCk7XHJcbiAgICAgICAgbGV0IHhociA9IGNjLmxvYWRlci5nZXRYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKFwiUE9TVFwiLCB1cmwpO1xyXG4gICAgICAgIHhoci5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIpO1xyXG4gICAgICAgIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0ICYmICh4aHIuc3RhdHVzID49IDIwMCAmJiB4aHIuc3RhdHVzIDw9IDIwNykpIHtcclxuICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSBKU09OLnBhcnNlKHhoci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyZXN1bHQ9PT5cIiwgcmVzdWx0KVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdFtcInN1Y2Nlc3NcIl0gPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXN1bHRbXCJtZXNzYWdlXCJdKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LmJpbmQodGhpcyk7XHJcbiAgICAgICAgeGhyLnNlbmQoKTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0U2lnblZhbHVlOiBmdW5jdGlvbiAoZGF0ZV90aW1lKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgdmFyIHZhbHVlID0gXCJcIjtcclxuICAgICAgICB2YXIga2V5ID0gU0lHTl9LRVk7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArIFBMQVRGT1JNX1RZUFI7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZSArIGRhdGVfdGltZTtcclxuICAgICAgICB2YWx1ZSA9IHZhbHVlICsga2V5O1xyXG5cclxuICAgICAgICB2YXIgTUQ1ID0gcmVxdWlyZShcIm1kNS5taW5cIik7XHJcbiAgICAgICAgdmFsdWUgPSBNRDUodmFsdWUpO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudG9Mb3dlckNhc2UoKTtcclxuICAgICAgICByZXR1cm4gdmFsdWVcclxuICAgIH0sXHJcblxyXG4gICAgLy/kuIrmiqXkv6Hmga/liLDms6jlhozmnI1cclxuICAgIGxvZ190b19pZGZhX3dlYjogZnVuY3Rpb24gKGJvZHkpIHtcclxuICAgICAgICAvLyBpZiAoIXdpbmRvdy5DT05GX0lERkFfV0VCKSByZXR1cm5cclxuICAgICAgICAvLyBsZXQgdXJsID0gd2luZG93LkNPTkZfSURGQV9XRUJcclxuICAgIH0sXHJcblxyXG4gICAgLy91cmznvJbnoIFcclxuICAgIGxvZ191cmxfZW5jb2RlOiBmdW5jdGlvbiAoc3RyKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgc3RyID0gU3RyaW5nKHN0cik7XHJcbiAgICAgICAgbGV0IF9zdHIgPSBzdHI7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxyXFxcXG5cIik7XHJcbiAgICAgICAgbGV0IGZvcm1hdCA9IGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBjYy5qcy5mb3JtYXRTdHIoXCIlJSUwMlhcIiwgYy5jaGFyQ29kZUF0KDApKVxyXG4gICAgICAgIH1cclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZShcIihbXiV3IF0pXCIsIGZvcm1hdCk7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoXCIgXCIsIFwiK1wiKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhfc3RyLCBcIj09PT09dXJsX3N0cj09PT09PT5cIiwgc3RyKVxyXG4gICAgICAgIHJldHVybiBzdHJcclxuICAgIH0sXHJcblxyXG4gICAgLy/ojrflj5borr7lpIfln7rmnKzkv6Hmga9cclxuICAgIGxvZ19nZXRfZGV2aWNlX2luZm86IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgICBsZXQgY2hhbm5lbCA9IHdpbmRvdy5DSEFOTkVMO1xyXG4gICAgICAgIGxldCBwcm8gPSBcImg1c3N6Z1wiO1xyXG4gICAgICAgIGxldCBwbGF0ID0gUExBVEZPUk1fTkFNRTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBkZXZpY2VfaWQ6IFNESyA/IFNESy5nZXRVaWQoKSA6IFwiMVwiICAgICAvL+aaguaXtueUqHVpZOS7o+abv1xyXG4gICAgICAgICAgICAsIGRldmljZV90eXBlOiAxICAgIC8v5pqC5pe25rKh6I635Y+WXHJcbiAgICAgICAgICAgICwgb3M6IGNjLnN5cy5vc1xyXG4gICAgICAgICAgICAsIGNhcnJpZXI6IFwiXCIgICAgICAgLy/mmoLml7bmsqHojrflj5ZcclxuICAgICAgICAgICAgLCBuZXR3b3JrX3R5cGU6IGNjLnN5cy5nZXROZXR3b3JrVHlwZSgpID09IDEgPyBcIndpZmlcIiA6IFwi5pWw5o2uXCJcclxuICAgICAgICAgICAgLCByZXNvbHV0aW9uOiAnJ1xyXG4gICAgICAgICAgICAsIHByb2R1Y3RfbmFtZTogcHJvXHJcbiAgICAgICAgICAgICwgcGxhdGZvcm1fbmFtZTogcGxhdFxyXG4gICAgICAgICAgICAsIGNoYW5uZWxfbmFtZTogY2hhbm5lbFxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/ojrflj5bml6Xlv5flvZPliY3moIfor4ZcclxuICAgIGxvZ19mbGFnOiBmdW5jdGlvbiAoa2V5LCB2YWwpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgICBpZiAoIV9pc19sb2cpIHJldHVybiBmYWxzZVxyXG4gICAgICAgIHZhbCA9IHZhbCB8fCAxO1xyXG4gICAgICAgIGxldCBzdHIgPSBcIlwiO1xyXG4gICAgICAgIGlmIChQTEFURk9STV9UWVBSID09IFwiU0hfUkhcIikge1xyXG4gICAgICAgICAgICBzdHIgPSBcInNocmhfbG9nX2ZsYWdcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHVpZCA9IFwiXCI7XHJcbiAgICAgICAgaWYgKFNESykge1xyXG4gICAgICAgICAgICB1aWQgPSBTREsuZ2V0VWlkKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdWlkID0gXCIzXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHVpZCxrZXksdmFsKVxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwi5pel5b+XYm9vbD09XCIsZ2NvcmUuU3lzRW52LmdldChzdHIpID09IGNjLmpzLmZvcm1hdFN0cihcInVpZD0lcyZrZXk9JXMmdmFsPSVzXCIsIHVpZCwga2V5LCB2YWwpLGdjb3JlLlN5c0Vudi5nZXQoc3RyKSxjYy5qcy5mb3JtYXRTdHIoXCJ1aWQ9JXMma2V5PSVzJnZhbD0lc1wiLCB1aWQsIGtleSwgdmFsKSlcclxuICAgICAgICBpZiAoZ2NvcmUuU3lzRW52LmdldChzdHIpID09IGNjLmpzLmZvcm1hdFN0cihcInVpZD0lcyZrZXk9JXMmdmFsPSVzXCIsIHVpZCwga2V5LCB2YWwpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGdjb3JlLlN5c0Vudi5zZXQoc3RyLCBjYy5qcy5mb3JtYXRTdHIoXCJ1aWQ9JXMma2V5PSVzJnZhbD0lc1wiLCB1aWQsIGtleSwgdmFsKSk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+iuvuWkh+a/gOa0u1xyXG4gICAgbG9nX2FjdGl2YXRlX2RldmljZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLmRldmljZSkpIHsgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9kZXZpY2UvYWN0aXZhdGlvblwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/pl6rlsY8gc3RlcC4xXHJcbiAgICBsb2dfZmxhc2g6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm5cclxuICAgICAgICBpZiAodGhpcy5sb2dfZmxhZyhMT0dfVFlQRS5mbGFzaCkpIHsgICAvL+acquS4iuaKpei/hyDkuIrmiqXkuIDmrKFcclxuICAgICAgICAgICAgbGV0IGxvZyA9IHRoaXMubG9nX2dldF9kZXZpY2VfaW5mbygpO1xyXG4gICAgICAgICAgICBsb2cuc3RlcCA9IDE7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9lbnRyeS9zdGVwXCIsIGxvZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvLyDlv6DlkYogc3RlcC4yXHJcbiAgICBsb2dfYWR2aWNlOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUuYWR2aWNlKSkgeyAgICAvL+acquS4iuaKpei/hyDkuIrmiqXkuIDmrKFcclxuICAgICAgICAgICAgbGV0IGxvZyA9IHRoaXMubG9nX2dldF9kZXZpY2VfaW5mbygpO1xyXG4gICAgICAgICAgICBsb2cuc3RlcCA9IDI7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9lbnRyeS9zdGVwXCIsIGxvZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuXHJcbiAgICAvL+WKoOi9vea4uOaIj+W8gOWniyBzdGVwLjNcclxuICAgIGxvZ19sb2FkaW5nX3N0YXJ0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUubG9hZF9zdGFydCkpIHsgICAgLy/mnKrkuIrmiqXov4cg5LiK5oql5LiA5qyhXHJcbiAgICAgICAgICAgIGxldCBsb2cgPSB0aGlzLmxvZ19nZXRfZGV2aWNlX2luZm8oKTtcclxuICAgICAgICAgICAgbG9nLnN0ZXAgPSAzO1xyXG4gICAgICAgICAgICB0aGlzLmxvZ190b193ZWIoXCIvZW50cnkvc3RlcFwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy8g5Yqg6L295ri45oiP57uT5p2fIHN0ZXAuNFxyXG4gICAgbG9nX2xvYWRpbmdfZW5kOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUubG9hZF9lbmQpKSB7ICAgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIGxvZy5zdGVwID0gNDtcclxuICAgICAgICAgICAgdGhpcy5sb2dfdG9fd2ViKFwiL2VudHJ5L3N0ZXBcIiwgbG9nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v5rOo5YaM6LSm5Y+3IHN0ZXAuNVxyXG4gICAgbG9nX3JlZ19hY2NvdW50OiBmdW5jdGlvbiAoYWNjb3VudCkge1xyXG4gICAgICAgIHJldHVyblxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLnJlZ19hY2MpKSB7ICAgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIGxvZy5zdGVwID0gNTtcclxuICAgICAgICAgICAgbG9nLmFjY291bnRfaWQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9uYW1lID0gYWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5sb2dfdG9fd2ViKFwiL2VudHJ5L3N0ZXBcIiwgbG9nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v6YCJ5pyNIHN0ZXAuNlxyXG4gICAgbG9nX3NlbGVjdF9zZXJ2ZXI6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUuc2VsZWN0X3NydikpIHsgICAgLy/mnKrkuIrmiqXov4cg5LiK5oql5LiA5qyhXHJcbiAgICAgICAgICAgIGxldCBsb2cgPSB0aGlzLmxvZ19nZXRfZGV2aWNlX2luZm8oKTtcclxuICAgICAgICAgICAgbG9nLnN0ZXAgPSA2O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9pZCA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIGxvZy5hY2NvdW50X25hbWUgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLmxvZ190b193ZWIoXCIvZW50cnkvc3RlcFwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/liJvlu7rop5LoibIgc3RlcC43XHJcbiAgICBsb2dfY3JlYXRlX3JvbGU6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5sb2dfc2VsZWN0X3NlcnZlcihhY2NvdW50KTsvL+mYsuatouaciemAieacjeWcsOaWueayoeWkhOeQhuWIsFxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLnNlbGVjdF9zcnYpKSB7ICAgIC8v5pyq5LiK5oql6L+HIOS4iuaKpeS4gOasoVxyXG4gICAgICAgICAgICBsZXQgbG9nID0gdGhpcy5sb2dfZ2V0X2RldmljZV9pbmZvKCk7XHJcbiAgICAgICAgICAgIGxvZy5zdGVwID0gNztcclxuICAgICAgICAgICAgbG9nLmFjY291bnRfaWQgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9uYW1lID0gYWNjb3VudDtcclxuICAgICAgICAgICAgdGhpcy5sb2dfdG9fd2ViKFwiL2VudHJ5L3N0ZXBcIiwgbG9nKTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG5cclxuICAgIC8v6LW35ZCNIHN0ZXAuOFxyXG4gICAgbG9nX2VudGVyX2NpdHk6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgaWYgKHRoaXMubG9nX2ZsYWcoTE9HX1RZUEUuZW50ZXJfY2l0eSkpIHsgICAgLy/mnKrkuIrmiqXov4cg5LiK5oql5LiA5qyhXHJcbiAgICAgICAgICAgIGxldCBsb2cgPSB0aGlzLmxvZ19nZXRfZGV2aWNlX2luZm8oKTtcclxuICAgICAgICAgICAgbG9nLnN0ZXAgPSA4O1xyXG4gICAgICAgICAgICBsb2cuYWNjb3VudF9pZCA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIGxvZy5hY2NvdW50X25hbWUgPSBhY2NvdW50O1xyXG4gICAgICAgICAgICB0aGlzLmxvZ190b193ZWIoXCIvZW50cnkvc3RlcFwiLCBsb2cpO1xyXG4gICAgICAgIH1cclxuICAgIH0sXHJcblxyXG4gICAgLy/ojrflj5bliLDpu5jorqTmnI0gc3RlcC45XHJcbiAgICBsb2dfZ2V0X2RlZl9zcnY6IGZ1bmN0aW9uIChhY2NvdW50KSB7XHJcbiAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgdGhpcy5sb2dfZW50ZXJfY2l0eShhY2NvdW50KTsvL+mYsuatouaciemAieacjeWcsOaWueayoeWkhOeQhuWIsFxyXG4gICAgICAgIGlmICh0aGlzLmxvZ19mbGFnKExPR19UWVBFLmdldF9kZWZfc3J2KSkgeyAgICAvL+acquS4iuaKpei/hyDkuIrmiqXkuIDmrKFcclxuICAgICAgICAgICAgbGV0IGxvZyA9IHRoaXMubG9nX2dldF9kZXZpY2VfaW5mbygpO1xyXG4gICAgICAgICAgICBsb2cuc3RlcCA9IDk7XHJcbiAgICAgICAgICAgIGxvZy5hY2NvdW50X2lkID0gYWNjb3VudDtcclxuICAgICAgICAgICAgbG9nLmFjY291bnRfbmFtZSA9IGFjY291bnQ7XHJcbiAgICAgICAgICAgIHRoaXMubG9nX3RvX3dlYihcIi9lbnRyeS9zdGVwXCIsIGxvZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxufVxyXG5cclxuLy8gY2xpX2xvZy5sb2dfYWN0aXZhdGVfZGV2aWNlKCk7IC8v5Yqg6L295paH5Lu25byA5aeL5LiK5oql5r+A5rS76K6+5aSHXHJcbi8vIGNsaV9sb2cubG9nX2ZsYXNoKCk7XHJcbi8vIGNsaV9sb2cubG9nX2FkdmljZSgpO1xyXG4vLyBjb25zb2xlLmxvZyhcImlzX2xvZz09PVwiLCBfaXNfbG9nLCBjYy5zeXMuZ2V0TmV0d29ya1R5cGUoKSA9PSAxID8gXCJ3aWZpXCIgOiBcIuaVsOaNrlwiLCBjYy5zeXMub3MpOyJdfQ==
|