diff --git a/java-mall-app-shop-admin/config/appUpdate.js b/java-mall-app-shop-admin/config/appUpdate.js index a196743..a91c5e0 100644 --- a/java-mall-app-shop-admin/config/appUpdate.js +++ b/java-mall-app-shop-admin/config/appUpdate.js @@ -864,10 +864,9 @@ function downloadPopup(data) { } export default function (isPrompt = false) { getCurrentNo((versionInfo) => { - componentConfig.getServerNo(versionInfo, isPrompt, (res) => { if (res.updateType == 'forcibly' || res.updateType == 'silent') { - if (/\.wgt$/i.test(res.downloadUrl)) { + if (/\.wgt$/i.test(res.download_wgt_url)) { getDownload(res); } else if (/\.html$/i.test(res.downloadUrl)) { plus.runtime.openURL(res.downloadUrl); diff --git a/java-mall-app-shop-admin/config/componentConfig.js b/java-mall-app-shop-admin/config/componentConfig.js index 52e990c..231e219 100644 --- a/java-mall-app-shop-admin/config/componentConfig.js +++ b/java-mall-app-shop-admin/config/componentConfig.js @@ -43,8 +43,8 @@ export default { // 可以用自己项目的请求方法(接口自己找后台要,插件不提供) let marketId = 100; - - phoneInfo.brand = phoneInfo.brand.toLowerCase(); + + phoneInfo.brand = phoneInfo.brand.toLowerCase(); switch (phoneInfo.brand) { case 'xiaomi': @@ -71,7 +71,7 @@ export default { } console.log('marketId', marketId); - console.log('phoneInfo.brand',phoneInfo.brand) + console.log('phoneInfo.brand', phoneInfo.brand); let params = { marketId: marketId, @@ -83,6 +83,13 @@ export default { if (res && res.status == 200) { if (res.data) { + res.data.updateType = 'solicit'; + if (res.data.is_force_update) { + res.updateType = 'forcibly'; + callback && callback(res.data); + } else { + callback && callback(res.data); + } } } diff --git a/java-mall-app-shop-admin/unpackage/dist/dev/app-plus/app-service.js b/java-mall-app-shop-admin/unpackage/dist/dev/app-plus/app-service.js index fdd008c..9a16b11 100644 --- a/java-mall-app-shop-admin/unpackage/dist/dev/app-plus/app-service.js +++ b/java-mall-app-shop-admin/unpackage/dist/dev/app-plus/app-service.js @@ -4958,1068 +4958,29 @@ eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefaul !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/index.js ***! \********************************************************************************************/ /*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/***/ (function(module, exports) { -module.exports = __webpack_require__(/*! ./lib/axios */ 102); - -/***/ }), -/* 102 */ -/*!************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/axios.js ***! - \************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./utils */ 103); -var bind = __webpack_require__(/*! ./helpers/bind */ 104); -var Axios = __webpack_require__(/*! ./core/Axios */ 105); -var mergeConfig = __webpack_require__(/*! ./core/mergeConfig */ 133); -var defaults = __webpack_require__(/*! ./defaults */ 110); - -/** - * Create an instance of Axios - * - * @param {Object} defaultConfig The default config for the instance - * @return {Axios} A new instance of Axios - */ -function createInstance(defaultConfig) { - var context = new Axios(defaultConfig); - var instance = bind(Axios.prototype.request, context); - - // Copy axios.prototype to instance - utils.extend(instance, Axios.prototype, context); - - // Copy context to instance - utils.extend(instance, context); - - // Factory for creating new instances - instance.create = function create(instanceConfig) { - return createInstance(mergeConfig(defaultConfig, instanceConfig)); - }; - return instance; -} - -// Create the default instance to be exported -var axios = createInstance(defaults); - -// Expose Axios class to allow class inheritance -axios.Axios = Axios; - -// Expose Cancel & CancelToken -axios.CanceledError = __webpack_require__(/*! ./cancel/CanceledError */ 129); -axios.CancelToken = __webpack_require__(/*! ./cancel/CancelToken */ 136); -axios.isCancel = __webpack_require__(/*! ./cancel/isCancel */ 132); -axios.VERSION = __webpack_require__(/*! ./env/data */ 135).version; -axios.toFormData = __webpack_require__(/*! ./helpers/toFormData */ 116); - -// Expose AxiosError class -axios.AxiosError = __webpack_require__(/*! ../lib/core/AxiosError */ 114); - -// alias for CanceledError for backward compatibility -axios.Cancel = axios.CanceledError; - -// Expose all/spread -axios.all = function all(promises) { - return Promise.all(promises); -}; -axios.spread = __webpack_require__(/*! ./helpers/spread */ 137); - -// Expose isAxiosError -axios.isAxiosError = __webpack_require__(/*! ./helpers/isAxiosError */ 138); -module.exports = axios; - -// Allow use of default import syntax in TypeScript -module.exports.default = axios; - -/***/ }), -/* 103 */ -/*!************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/utils.js ***! - \************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4); -var bind = __webpack_require__(/*! ./helpers/bind */ 104); - -// utils is a library of generic helper functions non-specific to axios - -var toString = Object.prototype.toString; - -// eslint-disable-next-line func-names -var kindOf = function (cache) { - // eslint-disable-next-line func-names - return function (thing) { - var str = toString.call(thing); - return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); - }; -}(Object.create(null)); -function kindOfTest(type) { - type = type.toLowerCase(); - return function isKindOf(thing) { - return kindOf(thing) === type; - }; -} - -/** - * Determine if a value is an Array - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Array, otherwise false - */ -function isArray(val) { - return Array.isArray(val); -} - -/** - * Determine if a value is undefined - * - * @param {Object} val The value to test - * @returns {boolean} True if the value is undefined, otherwise false - */ -function isUndefined(val) { - return typeof val === 'undefined'; -} - -/** - * Determine if a value is a Buffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Buffer, otherwise false - */ -function isBuffer(val) { - return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && typeof val.constructor.isBuffer === 'function' && val.constructor.isBuffer(val); -} - -/** - * Determine if a value is an ArrayBuffer - * - * @function - * @param {Object} val The value to test - * @returns {boolean} True if value is an ArrayBuffer, otherwise false - */ -var isArrayBuffer = kindOfTest('ArrayBuffer'); - -/** - * Determine if a value is a view on an ArrayBuffer - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false - */ -function isArrayBufferView(val) { - var result; - if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { - result = ArrayBuffer.isView(val); - } else { - result = val && val.buffer && isArrayBuffer(val.buffer); - } - return result; -} - -/** - * Determine if a value is a String - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a String, otherwise false - */ -function isString(val) { - return typeof val === 'string'; -} - -/** - * Determine if a value is a Number - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Number, otherwise false - */ -function isNumber(val) { - return typeof val === 'number'; -} - -/** - * Determine if a value is an Object - * - * @param {Object} val The value to test - * @returns {boolean} True if value is an Object, otherwise false - */ -function isObject(val) { - return val !== null && _typeof(val) === 'object'; -} - -/** - * Determine if a value is a plain Object - * - * @param {Object} val The value to test - * @return {boolean} True if value is a plain Object, otherwise false - */ -function isPlainObject(val) { - if (kindOf(val) !== 'object') { - return false; - } - var prototype = Object.getPrototypeOf(val); - return prototype === null || prototype === Object.prototype; -} - -/** - * Determine if a value is a Date - * - * @function - * @param {Object} val The value to test - * @returns {boolean} True if value is a Date, otherwise false - */ -var isDate = kindOfTest('Date'); - -/** - * Determine if a value is a File - * - * @function - * @param {Object} val The value to test - * @returns {boolean} True if value is a File, otherwise false - */ -var isFile = kindOfTest('File'); - -/** - * Determine if a value is a Blob - * - * @function - * @param {Object} val The value to test - * @returns {boolean} True if value is a Blob, otherwise false - */ -var isBlob = kindOfTest('Blob'); - -/** - * Determine if a value is a FileList - * - * @function - * @param {Object} val The value to test - * @returns {boolean} True if value is a File, otherwise false - */ -var isFileList = kindOfTest('FileList'); - -/** - * Determine if a value is a Function - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Function, otherwise false - */ -function isFunction(val) { - return toString.call(val) === '[object Function]'; -} - -/** - * Determine if a value is a Stream - * - * @param {Object} val The value to test - * @returns {boolean} True if value is a Stream, otherwise false - */ -function isStream(val) { - return isObject(val) && isFunction(val.pipe); -} - -/** - * Determine if a value is a FormData - * - * @param {Object} thing The value to test - * @returns {boolean} True if value is an FormData, otherwise false - */ -function isFormData(thing) { - var pattern = '[object FormData]'; - return thing && (typeof FormData === 'function' && thing instanceof FormData || toString.call(thing) === pattern || isFunction(thing.toString) && thing.toString() === pattern); -} - -/** - * Determine if a value is a URLSearchParams object - * @function - * @param {Object} val The value to test - * @returns {boolean} True if value is a URLSearchParams object, otherwise false - */ -var isURLSearchParams = kindOfTest('URLSearchParams'); - -/** - * Trim excess whitespace off the beginning and end of a string - * - * @param {String} str The String to trim - * @returns {String} The String freed of excess whitespace - */ -function trim(str) { - return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, ''); -} - -/** - * Determine if we're running in a standard browser environment - * - * This allows axios to run in a web worker, and react-native. - * Both environments support XMLHttpRequest, but not fully standard globals. - * - * web workers: - * typeof window -> undefined - * typeof document -> undefined - * - * react-native: - * navigator.product -> 'ReactNative' - * nativescript - * navigator.product -> 'NativeScript' or 'NS' - */ -function isStandardBrowserEnv() { - if (typeof navigator !== 'undefined' && (navigator.product === 'ReactNative' || navigator.product === 'NativeScript' || navigator.product === 'NS')) { - return false; - } - return typeof window !== 'undefined' && typeof document !== 'undefined'; -} - -/** - * Iterate over an Array or an Object invoking a function for each item. - * - * If `obj` is an Array callback will be called passing - * the value, index, and complete array for each item. - * - * If 'obj' is an Object callback will be called passing - * the value, key, and complete object for each property. - * - * @param {Object|Array} obj The object to iterate - * @param {Function} fn The callback to invoke for each item - */ -function forEach(obj, fn) { - // Don't bother if no value provided - if (obj === null || typeof obj === 'undefined') { - return; - } - - // Force an array if not already something iterable - if (_typeof(obj) !== 'object') { - /*eslint no-param-reassign:0*/ - obj = [obj]; - } - if (isArray(obj)) { - // Iterate over array values - for (var i = 0, l = obj.length; i < l; i++) { - fn.call(null, obj[i], i, obj); - } - } else { - // Iterate over object keys - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) { - fn.call(null, obj[key], key, obj); - } - } - } -} - -/** - * Accepts varargs expecting each argument to be an object, then - * immutably merges the properties of each object and returns result. - * - * When multiple objects contain the same key the later object in - * the arguments list will take precedence. - * - * Example: - * - * ```js - * var result = merge({foo: 123}, {foo: 456}); - * console.log(result.foo); // outputs 456 - * ``` - * - * @param {Object} obj1 Object to merge - * @returns {Object} Result of all merge properties - */ -function merge( /* obj1, obj2, obj3, ... */ -) { - var result = {}; - function assignValue(val, key) { - if (isPlainObject(result[key]) && isPlainObject(val)) { - result[key] = merge(result[key], val); - } else if (isPlainObject(val)) { - result[key] = merge({}, val); - } else if (isArray(val)) { - result[key] = val.slice(); - } else { - result[key] = val; - } - } - for (var i = 0, l = arguments.length; i < l; i++) { - forEach(arguments[i], assignValue); - } - return result; -} - -/** - * Extends object a by mutably adding to it the properties of object b. - * - * @param {Object} a The object to be extended - * @param {Object} b The object to copy properties from - * @param {Object} thisArg The object to bind function to - * @return {Object} The resulting value of object a - */ -function extend(a, b, thisArg) { - forEach(b, function assignValue(val, key) { - if (thisArg && typeof val === 'function') { - a[key] = bind(val, thisArg); - } else { - a[key] = val; - } - }); - return a; -} - -/** - * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) - * - * @param {string} content with BOM - * @return {string} content value without BOM - */ -function stripBOM(content) { - if (content.charCodeAt(0) === 0xFEFF) { - content = content.slice(1); - } - return content; -} - -/** - * Inherit the prototype methods from one constructor into another - * @param {function} constructor - * @param {function} superConstructor - * @param {object} [props] - * @param {object} [descriptors] - */ - -function inherits(constructor, superConstructor, props, descriptors) { - constructor.prototype = Object.create(superConstructor.prototype, descriptors); - constructor.prototype.constructor = constructor; - props && Object.assign(constructor.prototype, props); -} - -/** - * Resolve object with deep prototype chain to a flat object - * @param {Object} sourceObj source object - * @param {Object} [destObj] - * @param {Function} [filter] - * @returns {Object} - */ - -function toFlatObject(sourceObj, destObj, filter) { - var props; - var i; - var prop; - var merged = {}; - destObj = destObj || {}; - do { - props = Object.getOwnPropertyNames(sourceObj); - i = props.length; - while (i-- > 0) { - prop = props[i]; - if (!merged[prop]) { - destObj[prop] = sourceObj[prop]; - merged[prop] = true; - } - } - sourceObj = Object.getPrototypeOf(sourceObj); - } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); - return destObj; -} - -/* - * determines whether a string ends with the characters of a specified string - * @param {String} str - * @param {String} searchString - * @param {Number} [position= 0] - * @returns {boolean} - */ -function endsWith(str, searchString, position) { - str = String(str); - if (position === undefined || position > str.length) { - position = str.length; - } - position -= searchString.length; - var lastIndex = str.indexOf(searchString, position); - return lastIndex !== -1 && lastIndex === position; -} - -/** - * Returns new array from array like object - * @param {*} [thing] - * @returns {Array} - */ -function toArray(thing) { - if (!thing) return null; - var i = thing.length; - if (isUndefined(i)) return null; - var arr = new Array(i); - while (i-- > 0) { - arr[i] = thing[i]; - } - return arr; -} - -// eslint-disable-next-line func-names -var isTypedArray = function (TypedArray) { - // eslint-disable-next-line func-names - return function (thing) { - return TypedArray && thing instanceof TypedArray; - }; -}(typeof Uint8Array !== 'undefined' && Object.getPrototypeOf(Uint8Array)); -module.exports = { - isArray: isArray, - isArrayBuffer: isArrayBuffer, - isBuffer: isBuffer, - isFormData: isFormData, - isArrayBufferView: isArrayBufferView, - isString: isString, - isNumber: isNumber, - isObject: isObject, - isPlainObject: isPlainObject, - isUndefined: isUndefined, - isDate: isDate, - isFile: isFile, - isBlob: isBlob, - isFunction: isFunction, - isStream: isStream, - isURLSearchParams: isURLSearchParams, - isStandardBrowserEnv: isStandardBrowserEnv, - forEach: forEach, - merge: merge, - extend: extend, - trim: trim, - stripBOM: stripBOM, - inherits: inherits, - toFlatObject: toFlatObject, - kindOf: kindOf, - kindOfTest: kindOfTest, - endsWith: endsWith, - toArray: toArray, - isTypedArray: isTypedArray, - isFileList: isFileList -}; - -/***/ }), -/* 104 */ -/*!*******************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/bind.js ***! - \*******************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function bind(fn, thisArg) { - return function wrap() { - var args = new Array(arguments.length); - for (var i = 0; i < args.length; i++) { - args[i] = arguments[i]; - } - return fn.apply(thisArg, args); - }; -}; - -/***/ }), -/* 105 */ -/*!*****************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/Axios.js ***! - \*****************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -var buildURL = __webpack_require__(/*! ../helpers/buildURL */ 106); -var InterceptorManager = __webpack_require__(/*! ./InterceptorManager */ 107); -var dispatchRequest = __webpack_require__(/*! ./dispatchRequest */ 108); -var mergeConfig = __webpack_require__(/*! ./mergeConfig */ 133); -var buildFullPath = __webpack_require__(/*! ./buildFullPath */ 124); -var validator = __webpack_require__(/*! ../helpers/validator */ 134); -var validators = validator.validators; -/** - * Create a new instance of Axios - * - * @param {Object} instanceConfig The default config for the instance - */ -function Axios(instanceConfig) { - this.defaults = instanceConfig; - this.interceptors = { - request: new InterceptorManager(), - response: new InterceptorManager() - }; -} - -/** - * Dispatch a request - * - * @param {Object} config The config specific for this request (merged with this.defaults) - */ -Axios.prototype.request = function request(configOrUrl, config) { - /*eslint no-param-reassign:0*/ - // Allow for axios('example/url'[, config]) a la fetch API - if (typeof configOrUrl === 'string') { - config = config || {}; - config.url = configOrUrl; - } else { - config = configOrUrl || {}; - } - config = mergeConfig(this.defaults, config); - - // Set config.method - if (config.method) { - config.method = config.method.toLowerCase(); - } else if (this.defaults.method) { - config.method = this.defaults.method.toLowerCase(); - } else { - config.method = 'get'; - } - var transitional = config.transitional; - if (transitional !== undefined) { - validator.assertOptions(transitional, { - silentJSONParsing: validators.transitional(validators.boolean), - forcedJSONParsing: validators.transitional(validators.boolean), - clarifyTimeoutError: validators.transitional(validators.boolean) - }, false); - } - - // filter out skipped interceptors - var requestInterceptorChain = []; - var synchronousRequestInterceptors = true; - this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { - if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { - return; - } - synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; - requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); - }); - var responseInterceptorChain = []; - this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { - responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); - }); - var promise; - if (!synchronousRequestInterceptors) { - var chain = [dispatchRequest, undefined]; - Array.prototype.unshift.apply(chain, requestInterceptorChain); - chain = chain.concat(responseInterceptorChain); - promise = Promise.resolve(config); - while (chain.length) { - promise = promise.then(chain.shift(), chain.shift()); - } - return promise; - } - var newConfig = config; - while (requestInterceptorChain.length) { - var onFulfilled = requestInterceptorChain.shift(); - var onRejected = requestInterceptorChain.shift(); - try { - newConfig = onFulfilled(newConfig); - } catch (error) { - onRejected(error); - break; - } - } - try { - promise = dispatchRequest(newConfig); - } catch (error) { - return Promise.reject(error); - } - while (responseInterceptorChain.length) { - promise = promise.then(responseInterceptorChain.shift(), responseInterceptorChain.shift()); - } - return promise; -}; -Axios.prototype.getUri = function getUri(config) { - config = mergeConfig(this.defaults, config); - var fullPath = buildFullPath(config.baseURL, config.url); - return buildURL(fullPath, config.params, config.paramsSerializer); -}; - -// Provide aliases for supported request methods -utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { - /*eslint func-names:0*/ - Axios.prototype[method] = function (url, config) { - return this.request(mergeConfig(config || {}, { - method: method, - url: url, - data: (config || {}).data - })); - }; -}); -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - /*eslint func-names:0*/ - - function generateHTTPMethod(isForm) { - return function httpMethod(url, data, config) { - return this.request(mergeConfig(config || {}, { - method: method, - headers: isForm ? { - 'Content-Type': 'multipart/form-data' - } : {}, - url: url, - data: data - })); - }; - } - Axios.prototype[method] = generateHTTPMethod(); - Axios.prototype[method + 'Form'] = generateHTTPMethod(true); -}); -module.exports = Axios; +throw new Error("Module build failed (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js):\nError: ENOENT: no such file or directory, open 'G:\\pro\\java-mall-app-shop-admin\\java-mall-app-shop-admin\\node_modules\\axios\\index.js'"); /***/ }), +/* 102 */, +/* 103 */, +/* 104 */, +/* 105 */, /* 106 */ /*!***********************************************************************************************************!*\ !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/buildURL.js ***! \***********************************************************************************************************/ /*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/***/ (function(module, exports) { -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -function encode(val) { - return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); -} - -/** - * Build a URL by appending params to the end - * - * @param {string} url The base of the url (e.g., http://www.google.com) - * @param {object} [params] The params to be appended - * @returns {string} The formatted url - */ -module.exports = function buildURL(url, params, paramsSerializer) { - /*eslint no-param-reassign:0*/ - if (!params) { - return url; - } - var serializedParams; - if (paramsSerializer) { - serializedParams = paramsSerializer(params); - } else if (utils.isURLSearchParams(params)) { - serializedParams = params.toString(); - } else { - var parts = []; - utils.forEach(params, function serialize(val, key) { - if (val === null || typeof val === 'undefined') { - return; - } - if (utils.isArray(val)) { - key = key + '[]'; - } else { - val = [val]; - } - utils.forEach(val, function parseValue(v) { - if (utils.isDate(v)) { - v = v.toISOString(); - } else if (utils.isObject(v)) { - v = JSON.stringify(v); - } - parts.push(encode(key) + '=' + encode(v)); - }); - }); - serializedParams = parts.join('&'); - } - if (serializedParams) { - var hashmarkIndex = url.indexOf('#'); - if (hashmarkIndex !== -1) { - url = url.slice(0, hashmarkIndex); - } - url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; - } - return url; -}; - -/***/ }), -/* 107 */ -/*!******************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/InterceptorManager.js ***! - \******************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -function InterceptorManager() { - this.handlers = []; -} - -/** - * Add a new interceptor to the stack - * - * @param {Function} fulfilled The function to handle `then` for a `Promise` - * @param {Function} rejected The function to handle `reject` for a `Promise` - * - * @return {Number} An ID used to remove interceptor later - */ -InterceptorManager.prototype.use = function use(fulfilled, rejected, options) { - this.handlers.push({ - fulfilled: fulfilled, - rejected: rejected, - synchronous: options ? options.synchronous : false, - runWhen: options ? options.runWhen : null - }); - return this.handlers.length - 1; -}; - -/** - * Remove an interceptor from the stack - * - * @param {Number} id The ID that was returned by `use` - */ -InterceptorManager.prototype.eject = function eject(id) { - if (this.handlers[id]) { - this.handlers[id] = null; - } -}; - -/** - * Iterate over all the registered interceptors - * - * This method is particularly useful for skipping over any - * interceptors that may have become `null` calling `eject`. - * - * @param {Function} fn The function to call for each interceptor - */ -InterceptorManager.prototype.forEach = function forEach(fn) { - utils.forEach(this.handlers, function forEachHandler(h) { - if (h !== null) { - fn(h); - } - }); -}; -module.exports = InterceptorManager; - -/***/ }), -/* 108 */ -/*!***************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/dispatchRequest.js ***! - \***************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -var transformData = __webpack_require__(/*! ./transformData */ 109); -var isCancel = __webpack_require__(/*! ../cancel/isCancel */ 132); -var defaults = __webpack_require__(/*! ../defaults */ 110); -var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ 129); - -/** - * Throws a `CanceledError` if cancellation has been requested. - */ -function throwIfCancellationRequested(config) { - if (config.cancelToken) { - config.cancelToken.throwIfRequested(); - } - if (config.signal && config.signal.aborted) { - throw new CanceledError(); - } -} - -/** - * Dispatch a request to the server using the configured adapter. - * - * @param {object} config The config that is to be used for the request - * @returns {Promise} The Promise to be fulfilled - */ -module.exports = function dispatchRequest(config) { - throwIfCancellationRequested(config); - - // Ensure headers exist - config.headers = config.headers || {}; - - // Transform request data - config.data = transformData.call(config, config.data, config.headers, config.transformRequest); - - // Flatten headers - config.headers = utils.merge(config.headers.common || {}, config.headers[config.method] || {}, config.headers); - utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function cleanHeaderConfig(method) { - delete config.headers[method]; - }); - var adapter = config.adapter || defaults.adapter; - return adapter(config).then(function onAdapterResolution(response) { - throwIfCancellationRequested(config); - - // Transform response data - response.data = transformData.call(config, response.data, response.headers, config.transformResponse); - return response; - }, function onAdapterRejection(reason) { - if (!isCancel(reason)) { - throwIfCancellationRequested(config); - - // Transform response data - if (reason && reason.response) { - reason.response.data = transformData.call(config, reason.response.data, reason.response.headers, config.transformResponse); - } - } - return Promise.reject(reason); - }); -}; - -/***/ }), -/* 109 */ -/*!*************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/transformData.js ***! - \*************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -var defaults = __webpack_require__(/*! ../defaults */ 110); - -/** - * Transform the data for a request or a response - * - * @param {Object|String} data The data to be transformed - * @param {Array} headers The headers for the request or response - * @param {Array|Function} fns A single function or Array of functions - * @returns {*} The resulting transformed data - */ -module.exports = function transformData(data, headers, fns) { - var context = this || defaults; - /*eslint no-param-reassign:0*/ - utils.forEach(fns, function transform(fn) { - data = fn.call(context, data, headers); - }); - return data; -}; - -/***/ }), -/* 110 */ -/*!*********************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/defaults/index.js ***! - \*********************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(process) { - -var utils = __webpack_require__(/*! ../utils */ 103); -var normalizeHeaderName = __webpack_require__(/*! ../helpers/normalizeHeaderName */ 113); -var AxiosError = __webpack_require__(/*! ../core/AxiosError */ 114); -var transitionalDefaults = __webpack_require__(/*! ./transitional */ 115); -var toFormData = __webpack_require__(/*! ../helpers/toFormData */ 116); -var DEFAULT_CONTENT_TYPE = { - 'Content-Type': 'application/x-www-form-urlencoded' -}; -function setContentTypeIfUnset(headers, value) { - if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) { - headers['Content-Type'] = value; - } -} -function getDefaultAdapter() { - var adapter; - if (typeof XMLHttpRequest !== 'undefined') { - // For browsers use XHR adapter - adapter = __webpack_require__(/*! ../adapters/xhr */ 121); - } else if (typeof process !== 'undefined' && Object.prototype.toString.call(process) === '[object process]') { - // For node use HTTP adapter - adapter = __webpack_require__(/*! ../adapters/http */ 121); - } - return adapter; -} -function stringifySafely(rawValue, parser, encoder) { - if (utils.isString(rawValue)) { - try { - (parser || JSON.parse)(rawValue); - return utils.trim(rawValue); - } catch (e) { - if (e.name !== 'SyntaxError') { - throw e; - } - } - } - return (encoder || JSON.stringify)(rawValue); -} -var defaults = { - transitional: transitionalDefaults, - adapter: getDefaultAdapter(), - transformRequest: [function transformRequest(data, headers) { - normalizeHeaderName(headers, 'Accept'); - normalizeHeaderName(headers, 'Content-Type'); - if (utils.isFormData(data) || utils.isArrayBuffer(data) || utils.isBuffer(data) || utils.isStream(data) || utils.isFile(data) || utils.isBlob(data)) { - return data; - } - if (utils.isArrayBufferView(data)) { - return data.buffer; - } - if (utils.isURLSearchParams(data)) { - setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8'); - return data.toString(); - } - var isObjectPayload = utils.isObject(data); - var contentType = headers && headers['Content-Type']; - var isFileList; - if ((isFileList = utils.isFileList(data)) || isObjectPayload && contentType === 'multipart/form-data') { - var _FormData = this.env && this.env.FormData; - return toFormData(isFileList ? { - 'files[]': data - } : data, _FormData && new _FormData()); - } else if (isObjectPayload || contentType === 'application/json') { - setContentTypeIfUnset(headers, 'application/json'); - return stringifySafely(data); - } - return data; - }], - transformResponse: [function transformResponse(data) { - var transitional = this.transitional || defaults.transitional; - var silentJSONParsing = transitional && transitional.silentJSONParsing; - var forcedJSONParsing = transitional && transitional.forcedJSONParsing; - var strictJSONParsing = !silentJSONParsing && this.responseType === 'json'; - if (strictJSONParsing || forcedJSONParsing && utils.isString(data) && data.length) { - try { - return JSON.parse(data); - } catch (e) { - if (strictJSONParsing) { - if (e.name === 'SyntaxError') { - throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); - } - throw e; - } - } - } - return data; - }], - /** - * A timeout in milliseconds to abort a request. If set to 0 (default) a - * timeout is not created. - */ - timeout: 0, - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - maxContentLength: -1, - maxBodyLength: -1, - env: { - FormData: __webpack_require__(/*! ./env/FormData */ 131) - }, - validateStatus: function validateStatus(status) { - return status >= 200 && status < 300; - }, - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - } - } -}; -utils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) { - defaults.headers[method] = {}; -}); -utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { - defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE); -}); -module.exports = defaults; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/node-libs-browser/mock/process.js */ 111))) +throw new Error("Module build failed (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js):\nError: ENOENT: no such file or directory, open 'G:\\pro\\java-mall-app-shop-admin\\java-mall-app-shop-admin\\node_modules\\axios\\lib\\helpers\\buildURL.js'"); /***/ }), +/* 107 */, +/* 108 */, +/* 109 */, +/* 110 */, /* 111 */ /*!********************************************************!*\ !*** ./node_modules/node-libs-browser/mock/process.js ***! @@ -6377,194 +5338,10 @@ var substr = 'ab'.substr(-1) === 'b' /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../node-libs-browser/mock/process.js */ 111))) /***/ }), -/* 113 */ -/*!**********************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/normalizeHeaderName.js ***! - \**********************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ 103); -module.exports = function normalizeHeaderName(headers, normalizedName) { - utils.forEach(headers, function processHeader(value, name) { - if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) { - headers[normalizedName] = value; - delete headers[name]; - } - }); -}; - -/***/ }), -/* 114 */ -/*!**********************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/AxiosError.js ***! - \**********************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ 103); - -/** - * Create an Error with the specified message, config, error code, request and response. - * - * @param {string} message The error message. - * @param {string} [code] The error code (for example, 'ECONNABORTED'). - * @param {Object} [config] The config. - * @param {Object} [request] The request. - * @param {Object} [response] The response. - * @returns {Error} The created error. - */ -function AxiosError(message, code, config, request, response) { - Error.call(this); - this.message = message; - this.name = 'AxiosError'; - code && (this.code = code); - config && (this.config = config); - request && (this.request = request); - response && (this.response = response); -} -utils.inherits(AxiosError, Error, { - toJSON: function toJSON() { - return { - // Standard - message: this.message, - name: this.name, - // Microsoft - description: this.description, - number: this.number, - // Mozilla - fileName: this.fileName, - lineNumber: this.lineNumber, - columnNumber: this.columnNumber, - stack: this.stack, - // Axios - config: this.config, - code: this.code, - status: this.response && this.response.status ? this.response.status : null - }; - } -}); -var prototype = AxiosError.prototype; -var descriptors = {}; -['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED' -// eslint-disable-next-line func-names -].forEach(function (code) { - descriptors[code] = { - value: code - }; -}); -Object.defineProperties(AxiosError, descriptors); -Object.defineProperty(prototype, 'isAxiosError', { - value: true -}); - -// eslint-disable-next-line func-names -AxiosError.from = function (error, code, config, request, response, customProps) { - var axiosError = Object.create(prototype); - utils.toFlatObject(error, axiosError, function filter(obj) { - return obj !== Error.prototype; - }); - AxiosError.call(axiosError, error.message, code, config, request, response); - axiosError.name = error.name; - customProps && Object.assign(axiosError, customProps); - return axiosError; -}; -module.exports = AxiosError; - -/***/ }), -/* 115 */ -/*!****************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/defaults/transitional.js ***! - \****************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = { - silentJSONParsing: true, - forcedJSONParsing: true, - clarifyTimeoutError: false -}; - -/***/ }), -/* 116 */ -/*!*************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/toFormData.js ***! - \*************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(Buffer) { - -var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4); -var utils = __webpack_require__(/*! ../utils */ 103); - -/** - * Convert a data object to FormData - * @param {Object} obj - * @param {?Object} [formData] - * @returns {Object} - **/ - -function toFormData(obj, formData) { - // eslint-disable-next-line no-param-reassign - formData = formData || new FormData(); - var stack = []; - function convertValue(value) { - if (value === null) return ''; - if (utils.isDate(value)) { - return value.toISOString(); - } - if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { - return typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); - } - return value; - } - function build(data, parentKey) { - if (utils.isPlainObject(data) || utils.isArray(data)) { - if (stack.indexOf(data) !== -1) { - throw Error('Circular reference detected in ' + parentKey); - } - stack.push(data); - utils.forEach(data, function each(value, key) { - if (utils.isUndefined(value)) return; - var fullKey = parentKey ? parentKey + '.' + key : key; - var arr; - if (value && !parentKey && _typeof(value) === 'object') { - if (utils.endsWith(key, '{}')) { - // eslint-disable-next-line no-param-reassign - value = JSON.stringify(value); - } else if (utils.endsWith(key, '[]') && (arr = utils.toArray(value))) { - // eslint-disable-next-line func-names - arr.forEach(function (el) { - !utils.isUndefined(el) && formData.append(fullKey, convertValue(el)); - }); - return; - } - } - build(value, fullKey); - }); - stack.pop(); - } else { - formData.append(parentKey, convertValue(data)); - } - } - build(obj); - return formData; -} -module.exports = toFormData; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/buffer/index.js */ 117).Buffer)) - -/***/ }), +/* 113 */, +/* 114 */, +/* 115 */, +/* 116 */, /* 117 */ /*!**************************************!*\ !*** ./node_modules/buffer/index.js ***! @@ -8637,949 +7414,42 @@ module.exports = Array.isArray || function (arr) { /***/ }), -/* 121 */ -/*!*******************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/adapters/xhr.js ***! - \*******************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -var settle = __webpack_require__(/*! ./../core/settle */ 122); -var cookies = __webpack_require__(/*! ./../helpers/cookies */ 123); -var buildURL = __webpack_require__(/*! ./../helpers/buildURL */ 106); -var buildFullPath = __webpack_require__(/*! ../core/buildFullPath */ 124); -var parseHeaders = __webpack_require__(/*! ./../helpers/parseHeaders */ 127); -var isURLSameOrigin = __webpack_require__(/*! ./../helpers/isURLSameOrigin */ 128); -var transitionalDefaults = __webpack_require__(/*! ../defaults/transitional */ 115); -var AxiosError = __webpack_require__(/*! ../core/AxiosError */ 114); -var CanceledError = __webpack_require__(/*! ../cancel/CanceledError */ 129); -var parseProtocol = __webpack_require__(/*! ../helpers/parseProtocol */ 130); -module.exports = function xhrAdapter(config) { - return new Promise(function dispatchXhrRequest(resolve, reject) { - var requestData = config.data; - var requestHeaders = config.headers; - var responseType = config.responseType; - var onCanceled; - function done() { - if (config.cancelToken) { - config.cancelToken.unsubscribe(onCanceled); - } - if (config.signal) { - config.signal.removeEventListener('abort', onCanceled); - } - } - if (utils.isFormData(requestData) && utils.isStandardBrowserEnv()) { - delete requestHeaders['Content-Type']; // Let the browser set it - } - - var request = new XMLHttpRequest(); - - // HTTP basic authentication - if (config.auth) { - var username = config.auth.username || ''; - var password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : ''; - requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password); - } - var fullPath = buildFullPath(config.baseURL, config.url); - request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true); - - // Set the request timeout in MS - request.timeout = config.timeout; - function onloadend() { - if (!request) { - return; - } - // Prepare the response - var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null; - var responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response; - var response = { - data: responseData, - status: request.status, - statusText: request.statusText, - headers: responseHeaders, - config: config, - request: request - }; - settle(function _resolve(value) { - resolve(value); - done(); - }, function _reject(err) { - reject(err); - done(); - }, response); - - // Clean up request - request = null; - } - if ('onloadend' in request) { - // Use onloadend if available - request.onloadend = onloadend; - } else { - // Listen for ready state to emulate onloadend - request.onreadystatechange = function handleLoad() { - if (!request || request.readyState !== 4) { - return; - } - - // The request errored out and we didn't get a response, this will be - // handled by onerror instead - // With one exception: request that using file: protocol, most browsers - // will return status as 0 even though it's a successful request - if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { - return; - } - // readystate handler is calling before onerror or ontimeout handlers, - // so we should call onloadend on the next 'tick' - setTimeout(onloadend); - }; - } - - // Handle browser request cancellation (as opposed to a manual cancellation) - request.onabort = function handleAbort() { - if (!request) { - return; - } - reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); - - // Clean up request - request = null; - }; - - // Handle low level network errors - request.onerror = function handleError() { - // Real errors are hidden from us by the browser - // onerror should only fire if it's a network error - reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request, request)); - - // Clean up request - request = null; - }; - - // Handle timeout - request.ontimeout = function handleTimeout() { - var timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; - var transitional = config.transitional || transitionalDefaults; - if (config.timeoutErrorMessage) { - timeoutErrorMessage = config.timeoutErrorMessage; - } - reject(new AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, config, request)); - - // Clean up request - request = null; - }; - - // Add xsrf header - // This is only done if running in a standard browser environment. - // Specifically not if we're in a web worker, or react-native. - if (utils.isStandardBrowserEnv()) { - // Add xsrf header - var xsrfValue = (config.withCredentials || isURLSameOrigin(fullPath)) && config.xsrfCookieName ? cookies.read(config.xsrfCookieName) : undefined; - if (xsrfValue) { - requestHeaders[config.xsrfHeaderName] = xsrfValue; - } - } - - // Add headers to the request - if ('setRequestHeader' in request) { - utils.forEach(requestHeaders, function setRequestHeader(val, key) { - if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') { - // Remove Content-Type if data is undefined - delete requestHeaders[key]; - } else { - // Otherwise add header to the request - request.setRequestHeader(key, val); - } - }); - } - - // Add withCredentials to request if needed - if (!utils.isUndefined(config.withCredentials)) { - request.withCredentials = !!config.withCredentials; - } - - // Add responseType to request if needed - if (responseType && responseType !== 'json') { - request.responseType = config.responseType; - } - - // Handle progress if needed - if (typeof config.onDownloadProgress === 'function') { - request.addEventListener('progress', config.onDownloadProgress); - } - - // Not all browsers support upload events - if (typeof config.onUploadProgress === 'function' && request.upload) { - request.upload.addEventListener('progress', config.onUploadProgress); - } - if (config.cancelToken || config.signal) { - // Handle cancellation - // eslint-disable-next-line func-names - onCanceled = function onCanceled(cancel) { - if (!request) { - return; - } - reject(!cancel || cancel && cancel.type ? new CanceledError() : cancel); - request.abort(); - request = null; - }; - config.cancelToken && config.cancelToken.subscribe(onCanceled); - if (config.signal) { - config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled); - } - } - if (!requestData) { - requestData = null; - } - var protocol = parseProtocol(fullPath); - if (protocol && ['http', 'https', 'file'].indexOf(protocol) === -1) { - reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); - return; - } - - // Send the request - request.send(requestData); - }); -}; - -/***/ }), +/* 121 */, /* 122 */ /*!******************************************************************************************************!*\ !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/settle.js ***! \******************************************************************************************************/ /*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { +/***/ (function(module, exports) { -"use strict"; - - -var AxiosError = __webpack_require__(/*! ./AxiosError */ 114); - -/** - * Resolve or reject a Promise based on response status. - * - * @param {Function} resolve A function that resolves the promise. - * @param {Function} reject A function that rejects the promise. - * @param {object} response The response. - */ -module.exports = function settle(resolve, reject, response) { - var validateStatus = response.config.validateStatus; - if (!response.status || !validateStatus || validateStatus(response.status)) { - resolve(response); - } else { - reject(new AxiosError('Request failed with status code ' + response.status, [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response)); - } -}; - -/***/ }), -/* 123 */ -/*!**********************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/cookies.js ***! - \**********************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -module.exports = utils.isStandardBrowserEnv() ? -// Standard browser envs support document.cookie -function standardBrowserEnv() { - return { - write: function write(name, value, expires, path, domain, secure) { - var cookie = []; - cookie.push(name + '=' + encodeURIComponent(value)); - if (utils.isNumber(expires)) { - cookie.push('expires=' + new Date(expires).toGMTString()); - } - if (utils.isString(path)) { - cookie.push('path=' + path); - } - if (utils.isString(domain)) { - cookie.push('domain=' + domain); - } - if (secure === true) { - cookie.push('secure'); - } - document.cookie = cookie.join('; '); - }, - read: function read(name) { - var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); - return match ? decodeURIComponent(match[3]) : null; - }, - remove: function remove(name) { - this.write(name, '', Date.now() - 86400000); - } - }; -}() : -// Non standard browser env (web workers, react-native) lack needed support. -function nonStandardBrowserEnv() { - return { - write: function write() {}, - read: function read() { - return null; - }, - remove: function remove() {} - }; -}(); +throw new Error("Module build failed (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js):\nError: ENOENT: no such file or directory, open 'G:\\pro\\java-mall-app-shop-admin\\java-mall-app-shop-admin\\node_modules\\axios\\lib\\core\\settle.js'"); /***/ }), +/* 123 */, /* 124 */ /*!*************************************************************************************************************!*\ !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/buildFullPath.js ***! \*************************************************************************************************************/ /*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isAbsoluteURL = __webpack_require__(/*! ../helpers/isAbsoluteURL */ 125); -var combineURLs = __webpack_require__(/*! ../helpers/combineURLs */ 126); - -/** - * Creates a new URL by combining the baseURL with the requestedURL, - * only when the requestedURL is not already an absolute URL. - * If the requestURL is absolute, this function returns the requestedURL untouched. - * - * @param {string} baseURL The base URL - * @param {string} requestedURL Absolute or relative URL to combine - * @returns {string} The combined full path - */ -module.exports = function buildFullPath(baseURL, requestedURL) { - if (baseURL && !isAbsoluteURL(requestedURL)) { - return combineURLs(baseURL, requestedURL); - } - return requestedURL; -}; - -/***/ }), -/* 125 */ -/*!****************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/isAbsoluteURL.js ***! - \****************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Determines whether the specified URL is absolute - * - * @param {string} url The URL to test - * @returns {boolean} True if the specified URL is absolute, otherwise false - */ -module.exports = function isAbsoluteURL(url) { - // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). - // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed - // by any combination of letters, digits, plus, period, or hyphen. - return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); -}; - -/***/ }), -/* 126 */ -/*!**************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/combineURLs.js ***! - \**************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Creates a new URL by combining the specified URLs - * - * @param {string} baseURL The base URL - * @param {string} relativeURL The relative URL - * @returns {string} The combined URL - */ -module.exports = function combineURLs(baseURL, relativeURL) { - return relativeURL ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; -}; - -/***/ }), -/* 127 */ -/*!***************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/parseHeaders.js ***! - \***************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); - -// Headers whose duplicates are ignored by node -// c.f. https://nodejs.org/api/http.html#http_message_headers -var ignoreDuplicateOf = ['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']; - -/** - * Parse headers into an object - * - * ``` - * Date: Wed, 27 Aug 2014 08:58:49 GMT - * Content-Type: application/json - * Connection: keep-alive - * Transfer-Encoding: chunked - * ``` - * - * @param {String} headers Headers needing to be parsed - * @returns {Object} Headers parsed into an object - */ -module.exports = function parseHeaders(headers) { - var parsed = {}; - var key; - var val; - var i; - if (!headers) { - return parsed; - } - utils.forEach(headers.split('\n'), function parser(line) { - i = line.indexOf(':'); - key = utils.trim(line.substr(0, i)).toLowerCase(); - val = utils.trim(line.substr(i + 1)); - if (key) { - if (parsed[key] && ignoreDuplicateOf.indexOf(key) >= 0) { - return; - } - if (key === 'set-cookie') { - parsed[key] = (parsed[key] ? parsed[key] : []).concat([val]); - } else { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - } - }); - return parsed; -}; - -/***/ }), -/* 128 */ -/*!******************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/isURLSameOrigin.js ***! - \******************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); -module.exports = utils.isStandardBrowserEnv() ? -// Standard browser envs have full support of the APIs needed to test -// whether the request URL is of the same origin as current location. -function standardBrowserEnv() { - var msie = /(msie|trident)/i.test(navigator.userAgent); - var urlParsingNode = document.createElement('a'); - var originURL; - - /** - * Parse a URL to discover it's components - * - * @param {String} url The URL to be parsed - * @returns {Object} - */ - function resolveURL(url) { - var href = url; - if (msie) { - // IE needs attribute set twice to normalize properties - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - urlParsingNode.setAttribute('href', href); - - // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: urlParsingNode.hostname, - port: urlParsingNode.port, - pathname: urlParsingNode.pathname.charAt(0) === '/' ? urlParsingNode.pathname : '/' + urlParsingNode.pathname - }; - } - originURL = resolveURL(window.location.href); - - /** - * Determine if a URL shares the same origin as the current location - * - * @param {String} requestURL The URL to test - * @returns {boolean} True if URL shares the same origin, otherwise false - */ - return function isURLSameOrigin(requestURL) { - var parsed = utils.isString(requestURL) ? resolveURL(requestURL) : requestURL; - return parsed.protocol === originURL.protocol && parsed.host === originURL.host; - }; -}() : -// Non standard browser envs (web workers, react-native) lack needed support. -function nonStandardBrowserEnv() { - return function isURLSameOrigin() { - return true; - }; -}(); - -/***/ }), -/* 129 */ -/*!***************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/cancel/CanceledError.js ***! - \***************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var AxiosError = __webpack_require__(/*! ../core/AxiosError */ 114); -var utils = __webpack_require__(/*! ../utils */ 103); - -/** - * A `CanceledError` is an object that is thrown when an operation is canceled. - * - * @class - * @param {string=} message The message. - */ -function CanceledError(message) { - // eslint-disable-next-line no-eq-null,eqeqeq - AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED); - this.name = 'CanceledError'; -} -utils.inherits(CanceledError, AxiosError, { - __CANCEL__: true -}); -module.exports = CanceledError; - -/***/ }), -/* 130 */ -/*!****************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/parseProtocol.js ***! - \****************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function parseProtocol(url) { - var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); - return match && match[1] || ''; -}; - -/***/ }), -/* 131 */ -/*!*******************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/null.js ***! - \*******************************************************************************************************/ -/*! no static exports found */ /***/ (function(module, exports) { -// eslint-disable-next-line strict -module.exports = null; - -/***/ }), -/* 132 */ -/*!**********************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/cancel/isCancel.js ***! - \**********************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -module.exports = function isCancel(value) { - return !!(value && value.__CANCEL__); -}; - -/***/ }), -/* 133 */ -/*!***********************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/core/mergeConfig.js ***! - \***********************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ../utils */ 103); - -/** - * Config-specific merge-function which creates a new config-object - * by merging two configuration objects together. - * - * @param {Object} config1 - * @param {Object} config2 - * @returns {Object} New object resulting from merging config2 to config1 - */ -module.exports = function mergeConfig(config1, config2) { - // eslint-disable-next-line no-param-reassign - config2 = config2 || {}; - var config = {}; - function getMergedValue(target, source) { - if (utils.isPlainObject(target) && utils.isPlainObject(source)) { - return utils.merge(target, source); - } else if (utils.isPlainObject(source)) { - return utils.merge({}, source); - } else if (utils.isArray(source)) { - return source.slice(); - } - return source; - } - - // eslint-disable-next-line consistent-return - function mergeDeepProperties(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(config1[prop], config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - return getMergedValue(undefined, config1[prop]); - } - } - - // eslint-disable-next-line consistent-return - function valueFromConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(undefined, config2[prop]); - } - } - - // eslint-disable-next-line consistent-return - function defaultToConfig2(prop) { - if (!utils.isUndefined(config2[prop])) { - return getMergedValue(undefined, config2[prop]); - } else if (!utils.isUndefined(config1[prop])) { - return getMergedValue(undefined, config1[prop]); - } - } - - // eslint-disable-next-line consistent-return - function mergeDirectKeys(prop) { - if (prop in config2) { - return getMergedValue(config1[prop], config2[prop]); - } else if (prop in config1) { - return getMergedValue(undefined, config1[prop]); - } - } - var mergeMap = { - 'url': valueFromConfig2, - 'method': valueFromConfig2, - 'data': valueFromConfig2, - 'baseURL': defaultToConfig2, - 'transformRequest': defaultToConfig2, - 'transformResponse': defaultToConfig2, - 'paramsSerializer': defaultToConfig2, - 'timeout': defaultToConfig2, - 'timeoutMessage': defaultToConfig2, - 'withCredentials': defaultToConfig2, - 'adapter': defaultToConfig2, - 'responseType': defaultToConfig2, - 'xsrfCookieName': defaultToConfig2, - 'xsrfHeaderName': defaultToConfig2, - 'onUploadProgress': defaultToConfig2, - 'onDownloadProgress': defaultToConfig2, - 'decompress': defaultToConfig2, - 'maxContentLength': defaultToConfig2, - 'maxBodyLength': defaultToConfig2, - 'beforeRedirect': defaultToConfig2, - 'transport': defaultToConfig2, - 'httpAgent': defaultToConfig2, - 'httpsAgent': defaultToConfig2, - 'cancelToken': defaultToConfig2, - 'socketPath': defaultToConfig2, - 'responseEncoding': defaultToConfig2, - 'validateStatus': mergeDirectKeys - }; - utils.forEach(Object.keys(config1).concat(Object.keys(config2)), function computeConfigValue(prop) { - var merge = mergeMap[prop] || mergeDeepProperties; - var configValue = merge(prop); - utils.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue); - }); - return config; -}; - -/***/ }), -/* 134 */ -/*!************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/validator.js ***! - \************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; -/* WEBPACK VAR INJECTION */(function(__f__) { - -var _typeof = __webpack_require__(/*! @babel/runtime/helpers/typeof */ 4); -var VERSION = __webpack_require__(/*! ../env/data */ 135).version; -var AxiosError = __webpack_require__(/*! ../core/AxiosError */ 114); -var validators = {}; - -// eslint-disable-next-line func-names -['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function (type, i) { - validators[type] = function validator(thing) { - return _typeof(thing) === type || 'a' + (i < 1 ? 'n ' : ' ') + type; - }; -}); -var deprecatedWarnings = {}; - -/** - * Transitional option validator - * @param {function|boolean?} validator - set to false if the transitional option has been removed - * @param {string?} version - deprecated version / removed since version - * @param {string?} message - some message with additional info - * @returns {function} - */ -validators.transitional = function transitional(validator, version, message) { - function formatMessage(opt, desc) { - return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); - } - - // eslint-disable-next-line func-names - return function (value, opt, opts) { - if (validator === false) { - throw new AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), AxiosError.ERR_DEPRECATED); - } - if (version && !deprecatedWarnings[opt]) { - deprecatedWarnings[opt] = true; - // eslint-disable-next-line no-console - __f__("warn", formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future'), " at node_modules/axios/lib/helpers/validator.js:41"); - } - return validator ? validator(value, opt, opts) : true; - }; -}; - -/** - * Assert object's properties type - * @param {object} options - * @param {object} schema - * @param {boolean?} allowUnknown - */ - -function assertOptions(options, schema, allowUnknown) { - if (_typeof(options) !== 'object') { - throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); - } - var keys = Object.keys(options); - var i = keys.length; - while (i-- > 0) { - var opt = keys[i]; - var validator = schema[opt]; - if (validator) { - var value = options[opt]; - var result = value === undefined || validator(value, opt, options); - if (result !== true) { - throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); - } - continue; - } - if (allowUnknown !== true) { - throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); - } - } -} -module.exports = { - assertOptions: assertOptions, - validators: validators -}; -/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 98)["default"])) - -/***/ }), -/* 135 */ -/*!***************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/env/data.js ***! - \***************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = { - "version": "0.27.2" -}; - -/***/ }), -/* 136 */ -/*!*************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/cancel/CancelToken.js ***! - \*************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var CanceledError = __webpack_require__(/*! ./CanceledError */ 129); - -/** - * A `CancelToken` is an object that can be used to request cancellation of an operation. - * - * @class - * @param {Function} executor The executor function. - */ -function CancelToken(executor) { - if (typeof executor !== 'function') { - throw new TypeError('executor must be a function.'); - } - var resolvePromise; - this.promise = new Promise(function promiseExecutor(resolve) { - resolvePromise = resolve; - }); - var token = this; - - // eslint-disable-next-line func-names - this.promise.then(function (cancel) { - if (!token._listeners) return; - var i; - var l = token._listeners.length; - for (i = 0; i < l; i++) { - token._listeners[i](cancel); - } - token._listeners = null; - }); - - // eslint-disable-next-line func-names - this.promise.then = function (onfulfilled) { - var _resolve; - // eslint-disable-next-line func-names - var promise = new Promise(function (resolve) { - token.subscribe(resolve); - _resolve = resolve; - }).then(onfulfilled); - promise.cancel = function reject() { - token.unsubscribe(_resolve); - }; - return promise; - }; - executor(function cancel(message) { - if (token.reason) { - // Cancellation has already been requested - return; - } - token.reason = new CanceledError(message); - resolvePromise(token.reason); - }); -} - -/** - * Throws a `CanceledError` if cancellation has been requested. - */ -CancelToken.prototype.throwIfRequested = function throwIfRequested() { - if (this.reason) { - throw this.reason; - } -}; - -/** - * Subscribe to the cancel signal - */ - -CancelToken.prototype.subscribe = function subscribe(listener) { - if (this.reason) { - listener(this.reason); - return; - } - if (this._listeners) { - this._listeners.push(listener); - } else { - this._listeners = [listener]; - } -}; - -/** - * Unsubscribe from the cancel signal - */ - -CancelToken.prototype.unsubscribe = function unsubscribe(listener) { - if (!this._listeners) { - return; - } - var index = this._listeners.indexOf(listener); - if (index !== -1) { - this._listeners.splice(index, 1); - } -}; - -/** - * Returns an object that contains a new `CancelToken` and a function that, when called, - * cancels the `CancelToken`. - */ -CancelToken.source = function source() { - var cancel; - var token = new CancelToken(function executor(c) { - cancel = c; - }); - return { - token: token, - cancel: cancel - }; -}; -module.exports = CancelToken; - -/***/ }), -/* 137 */ -/*!*********************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/spread.js ***! - \*********************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/** - * Syntactic sugar for invoking a function and expanding an array for arguments. - * - * Common use case would be to use `Function.prototype.apply`. - * - * ```js - * function f(x, y, z) {} - * var args = [1, 2, 3]; - * f.apply(null, args); - * ``` - * - * With `spread` this example can be re-written. - * - * ```js - * spread(function(x, y, z) {})([1, 2, 3]); - * ``` - * - * @param {Function} callback - * @returns {Function} - */ -module.exports = function spread(callback) { - return function wrap(arr) { - return callback.apply(null, arr); - }; -}; - -/***/ }), -/* 138 */ -/*!***************************************************************************************************************!*\ - !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/node_modules/axios/lib/helpers/isAxiosError.js ***! - \***************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var utils = __webpack_require__(/*! ./../utils */ 103); - -/** - * Determines whether the payload is an error thrown by Axios - * - * @param {*} payload The value to test - * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false - */ -module.exports = function isAxiosError(payload) { - return utils.isObject(payload) && payload.isAxiosError === true; -}; +throw new Error("Module build failed (from ./node_modules/@dcloudio/vue-cli-plugin-uni/packages/webpack-preprocess-loader/index.js):\nError: ENOENT: no such file or directory, open 'G:\\pro\\java-mall-app-shop-admin\\java-mall-app-shop-admin\\node_modules\\axios\\lib\\core\\buildFullPath.js'"); /***/ }), +/* 125 */, +/* 126 */, +/* 127 */, +/* 128 */, +/* 129 */, +/* 130 */, +/* 131 */, +/* 132 */, +/* 133 */, +/* 134 */, +/* 135 */, +/* 136 */, +/* 137 */, +/* 138 */, /* 139 */ /*!*********************************************************************************!*\ !*** G:/pro/java-mall-app-shop-admin/java-mall-app-shop-admin/config/config.js ***! @@ -30232,7 +28102,7 @@ eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefaul /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.getCurrentNo = void 0;\nvar _componentConfig = _interopRequireDefault(__webpack_require__(/*! @/config/componentConfig */ 524));\nvar platform = uni.getSystemInfoSync().platform;\n// 主颜色\nvar $mainColor = _componentConfig.default.appUpdateColor ? _componentConfig.default.appUpdateColor : 'FF5B78';\n// 弹窗图标url\nvar $iconUrl = _componentConfig.default.appUpdateIcon ? _componentConfig.default.appUpdateIcon : '../static/ic_ar.png';\n\n// 获取当前应用的版本号\nvar getCurrentNo = function getCurrentNo(callback) {\n // 获取本地应用资源版本号\n plus.runtime.getProperty(plus.runtime.appid, function (inf) {\n callback && callback({\n versionCode: inf.versionCode,\n versionName: inf.version\n });\n });\n};\n// 从服务器下载应用资源包(wgt文件)\nexports.getCurrentNo = getCurrentNo;\nvar getDownload = function getDownload(data) {\n var dtask;\n if (data.updateType == 'forcibly' || data.updateType == 'solicit') {\n var popupData = {\n progress: true,\n buttonNum: 2\n };\n if (data.updateType == 'forcibly') {\n popupData.buttonNum = 0;\n }\n var lastProgressValue = 0;\n var popupObj = downloadPopup(popupData);\n dtask = plus.downloader.createDownload(data.downloadUrl, {\n filename: '_doc/update/'\n }, function (download, status) {\n if (status == 200) {\n popupObj.change({\n progressValue: 100,\n progressTip: '正在安装文件...',\n progress: true,\n buttonNum: 0\n });\n plus.runtime.install(download.filename, {}, function () {\n popupObj.change({\n contentText: '应用资源更新完成!',\n buttonNum: 1,\n progress: false\n });\n }, function (e) {\n popupObj.cancel();\n plus.nativeUI.alert('安装文件失败[' + e.code + ']:' + e.message);\n });\n } else {\n popupObj.change({\n contentText: '文件下载失败...',\n buttonNum: 1,\n progress: false\n });\n }\n });\n dtask.start();\n dtask.addEventListener('statechanged', function (task, status) {\n switch (task.state) {\n case 1:\n // 开始\n popupObj.change({\n progressValue: 0,\n progressTip: '准备下载...',\n progress: true\n });\n break;\n case 2:\n // 已连接到服务器\n popupObj.change({\n progressValue: 0,\n progressTip: '开始下载...',\n progress: true\n });\n break;\n case 3:\n var progress = parseInt(task.downloadedSize / task.totalSize * 100);\n if (progress - lastProgressValue >= 2) {\n lastProgressValue = progress;\n popupObj.change({\n progressValue: progress,\n progressTip: '已下载' + progress + '%',\n progress: true\n });\n }\n break;\n }\n });\n // 取消下载\n popupObj.cancelDownload = function () {\n dtask && dtask.abort();\n uni.showToast({\n title: '已取消下载',\n icon: 'none'\n });\n };\n // 重启APP\n popupObj.reboot = function () {\n plus.runtime.restart();\n };\n } else if (data.updateType == 'silent') {\n dtask = plus.downloader.createDownload(data.downloadUrl, {\n filename: '_doc/update/'\n }, function (download, status) {\n if (status == 200) {\n plus.runtime.install(download.filename, {}, function () {\n __f__(\"log\", '应用资源更新完成', \" at config/appUpdate.js:130\");\n }, function (e) {\n plus.nativeUI.alert('安装文件失败[' + e.code + ']:' + e.message);\n });\n } else {\n plus.nativeUI.alert('文件下载失败...');\n }\n });\n dtask.start();\n }\n};\n// 文字换行\nfunction drawtext(text, maxWidth) {\n var textArr = text.split('');\n var len = textArr.length;\n // 上个节点\n var previousNode = 0;\n // 记录节点宽度\n var nodeWidth = 0;\n // 文本换行数组\n var rowText = [];\n // 如果是字母,侧保存长度\n var letterWidth = 0;\n // 汉字宽度\n var chineseWidth = 14;\n // otherFont宽度\n var otherWidth = 7;\n for (var i = 0; i < len; i++) {\n if (/[\\u4e00-\\u9fa5]|[\\uFE30-\\uFFA0]/g.test(textArr[i])) {\n if (letterWidth > 0) {\n if (nodeWidth + chineseWidth + letterWidth * otherWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i)\n });\n previousNode = i;\n nodeWidth = chineseWidth;\n letterWidth = 0;\n } else {\n nodeWidth += chineseWidth + letterWidth * otherWidth;\n letterWidth = 0;\n }\n } else {\n if (nodeWidth + chineseWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i)\n });\n previousNode = i;\n nodeWidth = chineseWidth;\n } else {\n nodeWidth += chineseWidth;\n }\n }\n } else {\n if (/\\n/g.test(textArr[i])) {\n rowText.push({\n type: 'break',\n content: text.substring(previousNode, i)\n });\n previousNode = i + 1;\n nodeWidth = 0;\n letterWidth = 0;\n } else if (textArr[i] == '\\\\' && textArr[i + 1] == 'n') {\n rowText.push({\n type: 'break',\n content: text.substring(previousNode, i)\n });\n previousNode = i + 2;\n nodeWidth = 0;\n letterWidth = 0;\n } else if (/[a-zA-Z0-9]/g.test(textArr[i])) {\n letterWidth += 1;\n if (nodeWidth + letterWidth * otherWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i + 1 - letterWidth)\n });\n previousNode = i + 1 - letterWidth;\n nodeWidth = letterWidth * otherWidth;\n letterWidth = 0;\n }\n } else {\n if (nodeWidth + otherWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i)\n });\n previousNode = i;\n nodeWidth = otherWidth;\n } else {\n nodeWidth += otherWidth;\n }\n }\n }\n }\n if (previousNode < len) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, len)\n });\n }\n return rowText;\n}\n// 是否更新弹窗\nfunction updatePopup(data, callback) {\n // 弹窗遮罩层\n var maskLayer = new plus.nativeObj.View('maskLayer', {\n //先创建遮罩层\n top: '0px',\n left: '0px',\n height: '100%',\n width: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)'\n });\n\n // 以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心\n var screenWidth = plus.screen.resolutionWidth;\n var screenHeight = plus.screen.resolutionHeight;\n //弹窗容器宽度\n var popupViewWidth = screenWidth * 0.7;\n // 弹窗容器的Padding\n var viewContentPadding = 20;\n // 弹窗容器的宽度\n var viewContentWidth = parseInt(popupViewWidth - viewContentPadding * 2);\n // 描述的列表\n var descriptionList = drawtext(data.versionInfo, viewContentWidth);\n // 弹窗容器高度\n var popupViewHeight = 80 + 20 + 20 + 90 + 10;\n var popupViewContentList = [{\n src: $iconUrl,\n id: 'logo',\n tag: 'img',\n position: {\n top: '0px',\n left: (popupViewWidth - 124) / 2 + 'px',\n width: '124px',\n height: '80px'\n }\n }, {\n tag: 'font',\n id: 'title',\n text: '发现新版本' + data.versionName,\n textStyles: {\n size: '18px',\n color: '#333',\n weight: 'bold',\n whiteSpace: 'normal'\n },\n position: {\n top: '90px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '30px'\n }\n }];\n var textHeight = 18;\n var contentTop = 130;\n descriptionList.forEach(function (item, index) {\n if (index > 0) {\n popupViewHeight += textHeight;\n contentTop += textHeight;\n }\n popupViewContentList.push({\n tag: 'font',\n id: 'content' + index + 1,\n text: item.content,\n textStyles: {\n size: '14px',\n color: '#666',\n lineSpacing: '50%',\n align: 'left'\n },\n position: {\n top: contentTop + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: textHeight + 'px'\n }\n });\n if (item.type == 'break') {\n contentTop += 10;\n popupViewHeight += 10;\n }\n });\n if (data.updateType == 'forcibly') {\n popupViewContentList.push({\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '6px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'font',\n id: 'confirmText',\n text: '立即升级',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '30px'\n }\n });\n } else {\n // 绘制底边按钮\n popupViewContentList.push({\n tag: 'rect',\n id: 'cancelBox',\n rectStyles: {\n radius: '3px',\n borderColor: '#f1f1f1',\n borderWidth: '1px'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'rect',\n id: 'confirmBox',\n rectStyles: {\n radius: '3px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'font',\n id: 'cancelText',\n text: '暂不升级',\n textStyles: {\n size: '14px',\n color: '#666',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'font',\n id: 'confirmText',\n text: '立即升级',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n }\n // 弹窗内容\n var popupView = new plus.nativeObj.View('popupView', {\n //创建底部图标菜单\n tag: 'rect',\n top: (screenHeight - popupViewHeight) / 2 + 'px',\n left: '15%',\n height: popupViewHeight + 'px',\n width: '70%'\n });\n // 绘制白色背景\n popupView.drawRect({\n color: '#FFFFFF',\n radius: '8px'\n }, {\n top: '40px',\n height: popupViewHeight - 40 + 'px'\n });\n popupView.draw(popupViewContentList);\n popupView.addEventListener('click', function (e) {\n var maxTop = popupViewHeight - viewContentPadding;\n var maxLeft = popupViewWidth - viewContentPadding;\n var buttonWidth = (viewContentWidth - viewContentPadding) / 2;\n if (e.clientY > maxTop - 30 && e.clientY < maxTop) {\n if (data.updateType == 'forcibly') {\n if (e.clientX > viewContentPadding && e.clientX < maxLeft) {\n // 立即升级\n maskLayer.hide();\n popupView.hide();\n callback && callback();\n }\n } else {\n // 暂不升级\n if (e.clientX > viewContentPadding && e.clientX < maxLeft - buttonWidth - viewContentPadding) {\n maskLayer.hide();\n popupView.hide();\n } else if (e.clientX > maxLeft - buttonWidth && e.clientX < maxLeft) {\n // 立即升级\n maskLayer.hide();\n popupView.hide();\n callback && callback();\n }\n }\n }\n });\n if (data.updateType == 'solicit') {\n // 点击遮罩层\n maskLayer.addEventListener('click', function () {\n //处理遮罩层点击\n maskLayer.hide();\n popupView.hide();\n });\n }\n // 显示弹窗\n maskLayer.show();\n popupView.show();\n}\n// 文件下载的弹窗绘图\nfunction downloadPopupDrawing(data) {\n // 以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心\n var screenWidth = plus.screen.resolutionWidth;\n var screenHeight = plus.screen.resolutionHeight;\n //弹窗容器宽度\n var popupViewWidth = screenWidth * 0.7;\n // 弹窗容器的Padding\n var viewContentPadding = 20;\n // 弹窗容器的宽度\n var viewContentWidth = popupViewWidth - viewContentPadding * 2;\n // 弹窗容器高度\n var popupViewHeight = viewContentPadding * 3 + 60;\n var progressTip = data.progressTip || '准备下载...';\n var contentText = data.contentText || '正在为您更新,请耐心等待';\n var elementList = [{\n tag: 'rect',\n //背景色\n color: '#FFFFFF',\n rectStyles: {\n radius: '8px'\n }\n }, {\n tag: 'font',\n id: 'title',\n text: '升级APP',\n textStyles: {\n size: '16px',\n color: '#333',\n weight: 'bold',\n verticalAlign: 'middle',\n whiteSpace: 'normal'\n },\n position: {\n top: viewContentPadding + 'px',\n height: '30px'\n }\n }, {\n tag: 'font',\n id: 'content',\n text: contentText,\n textStyles: {\n size: '14px',\n color: '#333',\n verticalAlign: 'middle',\n whiteSpace: 'normal'\n },\n position: {\n top: viewContentPadding * 2 + 30 + 'px',\n height: '20px'\n }\n }];\n // 是否有进度条\n if (data.progress) {\n popupViewHeight += viewContentPadding + 40;\n elementList = elementList.concat([{\n tag: 'font',\n id: 'progressValue',\n text: progressTip,\n textStyles: {\n size: '14px',\n color: $mainColor,\n whiteSpace: 'normal'\n },\n position: {\n top: viewContentPadding * 4 + 20 + 'px',\n height: '30px'\n }\n }, {\n tag: 'rect',\n //绘制进度条背景\n id: 'progressBg',\n rectStyles: {\n radius: '4px',\n borderColor: '#f1f1f1',\n borderWidth: '1px'\n },\n position: {\n top: viewContentPadding * 4 + 60 + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '8px'\n }\n }]);\n }\n if (data.buttonNum == 2) {\n popupViewHeight += viewContentPadding + 30;\n elementList = elementList.concat([{\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '3px',\n borderColor: '#f1f1f1',\n borderWidth: '1px'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }, {\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '3px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }, {\n tag: 'font',\n id: 'cancelText',\n text: '取消下载',\n textStyles: {\n size: '14px',\n color: '#666',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }, {\n tag: 'font',\n id: 'confirmText',\n text: '后台下载',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }]);\n }\n if (data.buttonNum == 1) {\n popupViewHeight += viewContentPadding + 40;\n elementList = elementList.concat([{\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '6px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '40px'\n }\n }, {\n tag: 'font',\n id: 'confirmText',\n text: '关闭',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '40px'\n }\n }]);\n }\n return {\n popupViewHeight: popupViewHeight,\n popupViewWidth: popupViewWidth,\n screenHeight: screenHeight,\n viewContentWidth: viewContentWidth,\n viewContentPadding: viewContentPadding,\n elementList: elementList\n };\n}\n// 文件下载的弹窗\nfunction downloadPopup(data) {\n // 弹窗遮罩层\n var maskLayer = new plus.nativeObj.View('maskLayer', {\n //先创建遮罩层\n top: '0px',\n left: '0px',\n height: '100%',\n width: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)'\n });\n var popupViewData = downloadPopupDrawing(data);\n // 弹窗内容\n var popupView = new plus.nativeObj.View('popupView', {\n //创建底部图标菜单\n tag: 'rect',\n top: (popupViewData.screenHeight - popupViewData.popupViewHeight) / 2 + 'px',\n left: '15%',\n height: popupViewData.popupViewHeight + 'px',\n width: '70%'\n });\n var progressValue = 0;\n var progressTip = 0;\n var contentText = 0;\n var buttonNum = 2;\n if (data.buttonNum >= 0) {\n buttonNum = data.buttonNum;\n }\n popupView.draw(popupViewData.elementList);\n var callbackData = {\n change: function change(res) {\n var progressElement = [];\n if (res.progressValue) {\n progressValue = res.progressValue;\n // 绘制进度条\n progressElement.push({\n tag: 'rect',\n //绘制进度条背景\n id: 'progressValueBg',\n rectStyles: {\n radius: '4px',\n color: $mainColor\n },\n position: {\n top: popupViewData.viewContentPadding * 4 + 60 + 'px',\n left: popupViewData.viewContentPadding + 'px',\n width: popupViewData.viewContentWidth * (res.progressValue / 100) + 'px',\n height: '8px'\n }\n });\n }\n if (res.progressTip) {\n progressTip = res.progressTip;\n progressElement.push({\n tag: 'font',\n id: 'progressValue',\n text: res.progressTip,\n textStyles: {\n size: '14px',\n color: $mainColor,\n whiteSpace: 'normal'\n },\n position: {\n top: popupViewData.viewContentPadding * 4 + 20 + 'px',\n height: '30px'\n }\n });\n }\n if (res.contentText) {\n contentText = res.contentText;\n progressElement.push({\n tag: 'font',\n id: 'content',\n text: res.contentText,\n textStyles: {\n size: '16px',\n color: '#333',\n whiteSpace: 'normal'\n },\n position: {\n top: popupViewData.viewContentPadding * 2 + 30 + 'px',\n height: '30px'\n }\n });\n }\n if (res.buttonNum >= 0 && buttonNum != res.buttonNum) {\n buttonNum = res.buttonNum;\n popupView.reset();\n popupViewData = downloadPopupDrawing(Object.assign({\n progressValue: progressValue,\n progressTip: progressTip,\n contentText: contentText\n }, res));\n var newElement = [];\n popupViewData.elementList.map(function (item, index) {\n var have = false;\n progressElement.forEach(function (childItem, childIndex) {\n if (item.id == childItem.id) {\n have = true;\n }\n });\n if (!have) {\n newElement.push(item);\n }\n });\n progressElement = newElement.concat(progressElement);\n popupView.setStyle({\n tag: 'rect',\n top: (popupViewData.screenHeight - popupViewData.popupViewHeight) / 2 + 'px',\n left: '15%',\n height: popupViewData.popupViewHeight + 'px',\n width: '70%'\n });\n popupView.draw(progressElement);\n } else {\n popupView.draw(progressElement);\n }\n },\n cancel: function cancel() {\n maskLayer.hide();\n popupView.hide();\n }\n };\n popupView.addEventListener('click', function (e) {\n var maxTop = popupViewData.popupViewHeight - popupViewData.viewContentPadding;\n var maxLeft = popupViewData.popupViewWidth - popupViewData.viewContentPadding;\n if (e.clientY > maxTop - 40 && e.clientY < maxTop) {\n if (buttonNum == 1) {\n // 单按钮\n if (e.clientX > popupViewData.viewContentPadding && e.clientX < maxLeft) {\n maskLayer.hide();\n popupView.hide();\n callbackData.reboot();\n }\n } else if (buttonNum == 2) {\n // 双按钮\n var buttonWidth = (popupViewData.viewContentWidth - popupViewData.viewContentPadding) / 2;\n if (e.clientX > popupViewData.viewContentPadding && e.clientX < maxLeft - buttonWidth - popupViewData.viewContentPadding) {\n maskLayer.hide();\n popupView.hide();\n callbackData.cancelDownload();\n } else if (e.clientX > maxLeft - buttonWidth && e.clientX < maxLeft) {\n maskLayer.hide();\n popupView.hide();\n }\n }\n }\n });\n // 显示弹窗\n maskLayer.show();\n popupView.show();\n // 改变进度条\n return callbackData;\n}\nfunction _default() {\n var isPrompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n getCurrentNo(function (versionInfo) {\n _componentConfig.default.getServerNo(versionInfo, isPrompt, function (res) {\n if (res.updateType == 'forcibly' || res.updateType == 'silent') {\n if (/\\.wgt$/i.test(res.downloadUrl)) {\n getDownload(res);\n } else if (/\\.html$/i.test(res.downloadUrl)) {\n plus.runtime.openURL(res.downloadUrl);\n } else {\n if (platform == 'android') {\n getDownload(res);\n } else {\n plus.runtime.openURL(res.downloadUrl);\n }\n }\n } else if (res.updateType == 'solicit') {\n updatePopup(res, function () {\n if (/\\.wgt$/i.test(res.downloadUrl)) {\n getDownload(res);\n } else if (/\\.html$/i.test(res.downloadUrl)) {\n plus.runtime.openURL(res.downloadUrl);\n } else {\n if (platform == 'android') {\n getDownload(res);\n } else {\n plus.runtime.openURL(res.downloadUrl);\n }\n }\n });\n }\n });\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 98)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlnL2FwcFVwZGF0ZS5qcyJdLCJuYW1lcyI6WyJwbGF0Zm9ybSIsInVuaSIsImdldFN5c3RlbUluZm9TeW5jIiwiJG1haW5Db2xvciIsImNvbXBvbmVudENvbmZpZyIsImFwcFVwZGF0ZUNvbG9yIiwiJGljb25VcmwiLCJhcHBVcGRhdGVJY29uIiwiZ2V0Q3VycmVudE5vIiwiY2FsbGJhY2siLCJwbHVzIiwicnVudGltZSIsImdldFByb3BlcnR5IiwiYXBwaWQiLCJpbmYiLCJ2ZXJzaW9uQ29kZSIsInZlcnNpb25OYW1lIiwidmVyc2lvbiIsImdldERvd25sb2FkIiwiZGF0YSIsImR0YXNrIiwidXBkYXRlVHlwZSIsInBvcHVwRGF0YSIsInByb2dyZXNzIiwiYnV0dG9uTnVtIiwibGFzdFByb2dyZXNzVmFsdWUiLCJwb3B1cE9iaiIsImRvd25sb2FkUG9wdXAiLCJkb3dubG9hZGVyIiwiY3JlYXRlRG93bmxvYWQiLCJkb3dubG9hZFVybCIsImZpbGVuYW1lIiwiZG93bmxvYWQiLCJzdGF0dXMiLCJjaGFuZ2UiLCJwcm9ncmVzc1ZhbHVlIiwicHJvZ3Jlc3NUaXAiLCJpbnN0YWxsIiwiY29udGVudFRleHQiLCJlIiwiY2FuY2VsIiwibmF0aXZlVUkiLCJhbGVydCIsImNvZGUiLCJtZXNzYWdlIiwic3RhcnQiLCJhZGRFdmVudExpc3RlbmVyIiwidGFzayIsInN0YXRlIiwicGFyc2VJbnQiLCJkb3dubG9hZGVkU2l6ZSIsInRvdGFsU2l6ZSIsImNhbmNlbERvd25sb2FkIiwiYWJvcnQiLCJzaG93VG9hc3QiLCJ0aXRsZSIsImljb24iLCJyZWJvb3QiLCJyZXN0YXJ0IiwiZHJhd3RleHQiLCJ0ZXh0IiwibWF4V2lkdGgiLCJ0ZXh0QXJyIiwic3BsaXQiLCJsZW4iLCJsZW5ndGgiLCJwcmV2aW91c05vZGUiLCJub2RlV2lkdGgiLCJyb3dUZXh0IiwibGV0dGVyV2lkdGgiLCJjaGluZXNlV2lkdGgiLCJvdGhlcldpZHRoIiwiaSIsInRlc3QiLCJwdXNoIiwidHlwZSIsImNvbnRlbnQiLCJzdWJzdHJpbmciLCJ1cGRhdGVQb3B1cCIsIm1hc2tMYXllciIsIm5hdGl2ZU9iaiIsIlZpZXciLCJ0b3AiLCJsZWZ0IiwiaGVpZ2h0Iiwid2lkdGgiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzY3JlZW5XaWR0aCIsInNjcmVlbiIsInJlc29sdXRpb25XaWR0aCIsInNjcmVlbkhlaWdodCIsInJlc29sdXRpb25IZWlnaHQiLCJwb3B1cFZpZXdXaWR0aCIsInZpZXdDb250ZW50UGFkZGluZyIsInZpZXdDb250ZW50V2lkdGgiLCJkZXNjcmlwdGlvbkxpc3QiLCJ2ZXJzaW9uSW5mbyIsInBvcHVwVmlld0hlaWdodCIsInBvcHVwVmlld0NvbnRlbnRMaXN0Iiwic3JjIiwiaWQiLCJ0YWciLCJwb3NpdGlvbiIsInRleHRTdHlsZXMiLCJzaXplIiwiY29sb3IiLCJ3ZWlnaHQiLCJ3aGl0ZVNwYWNlIiwidGV4dEhlaWdodCIsImNvbnRlbnRUb3AiLCJmb3JFYWNoIiwiaXRlbSIsImluZGV4IiwibGluZVNwYWNpbmciLCJhbGlnbiIsInJlY3RTdHlsZXMiLCJyYWRpdXMiLCJib3R0b20iLCJib3JkZXJDb2xvciIsImJvcmRlcldpZHRoIiwicG9wdXBWaWV3IiwiZHJhd1JlY3QiLCJkcmF3IiwibWF4VG9wIiwibWF4TGVmdCIsImJ1dHRvbldpZHRoIiwiY2xpZW50WSIsImNsaWVudFgiLCJoaWRlIiwic2hvdyIsImRvd25sb2FkUG9wdXBEcmF3aW5nIiwiZWxlbWVudExpc3QiLCJ2ZXJ0aWNhbEFsaWduIiwiY29uY2F0IiwicG9wdXBWaWV3RGF0YSIsImNhbGxiYWNrRGF0YSIsInJlcyIsInByb2dyZXNzRWxlbWVudCIsInJlc2V0IiwiT2JqZWN0IiwiYXNzaWduIiwibmV3RWxlbWVudCIsIm1hcCIsImhhdmUiLCJjaGlsZEl0ZW0iLCJjaGlsZEluZGV4Iiwic2V0U3R5bGUiLCJpc1Byb21wdCIsImdldFNlcnZlck5vIiwib3BlblVSTCJdLCJtYXBwaW5ncyI6Ijs7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QUFDL0QsSUFBSSxDQUFDK0QsR0FBRyxDQUFDMUcsV0FBVyxDQUFDLEVBQUU7VUFDM0NwQixJQUFJLENBQUNDLE9BQU8sQ0FBQzBJLE9BQU8sQ0FBQ2IsR0FBRyxDQUFDMUcsV0FBVyxDQUFDO1FBQ3ZDLENBQUMsTUFBTTtVQUNMLElBQUk5QixRQUFRLElBQUksU0FBUyxFQUFFO1lBQ3pCa0IsV0FBVyxDQUFDc0gsR0FBRyxDQUFDO1VBQ2xCLENBQUMsTUFBTTtZQUNMOUgsSUFBSSxDQUFDQyxPQUFPLENBQUMwSSxPQUFPLENBQUNiLEdBQUcsQ0FBQzFHLFdBQVcsQ0FBQztVQUN2QztRQUNGO01BQ0YsQ0FBQyxNQUFNLElBQUkwRyxHQUFHLENBQUNuSCxVQUFVLElBQUksU0FBUyxFQUFFO1FBQ3RDeUQsV0FBVyxDQUFDMEQsR0FBRyxFQUFFLFlBQVk7VUFDM0IsSUFBSSxTQUFTLENBQUMvRCxJQUFJLENBQUMrRCxHQUFHLENBQUMxRyxXQUFXLENBQUMsRUFBRTtZQUNuQ1osV0FBVyxDQUFDc0gsR0FBRyxDQUFDO1VBQ2xCLENBQUMsTUFBTSxJQUFJLFVBQVUsQ0FBQy9ELElBQUksQ0FBQytELEdBQUcsQ0FBQzFHLFdBQVcsQ0FBQyxFQUFFO1lBQzNDcEIsSUFBSSxDQUFDQyxPQUFPLENBQUMwSSxPQUFPLENBQUNiLEdBQUcsQ0FBQzFHLFdBQVcsQ0FBQztVQUN2QyxDQUFDLE1BQU07WUFDTCxJQUFJOUIsUUFBUSxJQUFJLFNBQVMsRUFBRTtjQUN6QmtCLFdBQVcsQ0FBQ3NILEdBQUcsQ0FBQztZQUNsQixDQUFDLE1BQU07Y0FDTDlILElBQUksQ0FBQ0MsT0FBTyxDQUFDMEksT0FBTyxDQUFDYixHQUFHLENBQUMxRyxXQUFXLENBQUM7WUFDdkM7VUFDRjtRQUNGLENBQUMsQ0FBQztNQUNKO0lBQ0YsQ0FBQyxDQUFDO0VBQ0osQ0FBQyxDQUFDO0FBQ0osQyIsImZpbGUiOiI1MjMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuaW1wb3J0IGNvbXBvbmVudENvbmZpZyBmcm9tICdAL2NvbmZpZy9jb21wb25lbnRDb25maWcnO1xyXG5jb25zdCBwbGF0Zm9ybSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpLnBsYXRmb3JtO1xyXG4vLyDkuLvpopzoibJcclxuY29uc3QgJG1haW5Db2xvciA9IGNvbXBvbmVudENvbmZpZy5hcHBVcGRhdGVDb2xvclxyXG4gID8gY29tcG9uZW50Q29uZmlnLmFwcFVwZGF0ZUNvbG9yXHJcbiAgOiAnRkY1Qjc4JztcclxuLy8g5by556qX5Zu+5qCHdXJsXHJcbmNvbnN0ICRpY29uVXJsID0gY29tcG9uZW50Q29uZmlnLmFwcFVwZGF0ZUljb25cclxuICA/IGNvbXBvbmVudENvbmZpZy5hcHBVcGRhdGVJY29uXHJcbiAgOiAnLi4vc3RhdGljL2ljX2FyLnBuZyc7XHJcblxyXG4vLyDojrflj5blvZPliY3lupTnlKjnmoTniYjmnKzlj7dcclxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRObyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gIC8vIOiOt+WPluacrOWcsOW6lOeUqOi1hOa6kOeJiOacrOWPt1xyXG4gIHBsdXMucnVudGltZS5nZXRQcm9wZXJ0eShwbHVzLnJ1bnRpbWUuYXBwaWQsIGZ1bmN0aW9uIChpbmYpIHtcclxuICAgIGNhbGxiYWNrICYmXHJcbiAgICAgIGNhbGxiYWNrKHtcclxuICAgICAgICB2ZXJzaW9uQ29kZTogaW5mLnZlcnNpb25Db2RlLFxyXG4gICAgICAgIHZlcnNpb25OYW1lOiBpbmYudmVyc2lvbixcclxuICAgICAgfSk7XHJcbiAgfSk7XHJcbn07XHJcbi8vIOS7juacjeWKoeWZqOS4i+i9veW6lOeUqOi1hOa6kOWMhe+8iHdndOaWh+S7tu+8iVxyXG5jb25zdCBnZXREb3dubG9hZCA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgbGV0IGR0YXNrO1xyXG4gIGlmIChkYXRhLnVwZGF0ZVR5cGUgPT0gJ2ZvcmNpYmx5JyB8fCBkYXRhLnVwZGF0ZVR5cGUgPT0gJ3NvbGljaXQnKSB7XHJcbiAgICBsZXQgcG9wdXBEYXRhID0ge1xyXG4gICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgYnV0dG9uTnVtOiAyLFxyXG4gICAgfTtcclxuICAgIGlmIChkYXRhLnVwZGF0ZVR5cGUgPT0gJ2ZvcmNpYmx5Jykge1xyXG4gICAgICBwb3B1cERhdGEuYnV0dG9uTnVtID0gMDtcclxuICAgIH1cclxuICAgIGxldCBsYXN0UHJvZ3Jlc3NWYWx1ZSA9IDA7XHJcbiAgICBsZXQgcG9wdXBPYmogPSBkb3dubG9hZFBvcHVwKHBvcHVwRGF0YSk7XHJcbiAgICBkdGFzayA9IHBsdXMuZG93bmxvYWRlci5jcmVhdGVEb3dubG9hZChcclxuICAgICAgZGF0YS5kb3dubG9hZFVybCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGVuYW1lOiAnX2RvYy91cGRhdGUvJyxcclxuICAgICAgfSxcclxuICAgICAgZnVuY3Rpb24gKGRvd25sb2FkLCBzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgcG9wdXBPYmouY2hhbmdlKHtcclxuICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZTogMTAwLFxyXG4gICAgICAgICAgICBwcm9ncmVzc1RpcDogJ+ato+WcqOWuieijheaWh+S7ti4uLicsXHJcbiAgICAgICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICBidXR0b25OdW06IDAsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHBsdXMucnVudGltZS5pbnN0YWxsKFxyXG4gICAgICAgICAgICBkb3dubG9hZC5maWxlbmFtZSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICBwb3B1cE9iai5jaGFuZ2Uoe1xyXG4gICAgICAgICAgICAgICAgY29udGVudFRleHQ6ICflupTnlKjotYTmupDmm7TmlrDlrozmiJDvvIEnLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uTnVtOiAxLFxyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgIHBvcHVwT2JqLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgIHBsdXMubmF0aXZlVUkuYWxlcnQoJ+WuieijheaWh+S7tuWksei0pVsnICsgZS5jb2RlICsgJ13vvJonICsgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9wdXBPYmouY2hhbmdlKHtcclxuICAgICAgICAgICAgY29udGVudFRleHQ6ICfmlofku7bkuIvovb3lpLHotKUuLi4nLFxyXG4gICAgICAgICAgICBidXR0b25OdW06IDEsXHJcbiAgICAgICAgICAgIHByb2dyZXNzOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGR0YXNrLnN0YXJ0KCk7XHJcbiAgICBkdGFzay5hZGRFdmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZWQnLCBmdW5jdGlvbiAodGFzaywgc3RhdHVzKSB7XHJcbiAgICAgIHN3aXRjaCAodGFzay5zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgMTogLy8g5byA5aeLXHJcbiAgICAgICAgICBwb3B1cE9iai5jaGFuZ2Uoe1xyXG4gICAgICAgICAgICBwcm9ncmVzc1ZhbHVlOiAwLFxyXG4gICAgICAgICAgICBwcm9ncmVzc1RpcDogJ+WHhuWkh+S4i+i9vS4uLicsXHJcbiAgICAgICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6IC8vIOW3sui/nuaOpeWIsOacjeWKoeWZqFxyXG4gICAgICAgICAgcG9wdXBPYmouY2hhbmdlKHtcclxuICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZTogMCxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NUaXA6ICflvIDlp4vkuIvovb0uLi4nLFxyXG4gICAgICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBwYXJzZUludChcclxuICAgICAgICAgICAgKHRhc2suZG93bmxvYWRlZFNpemUgLyB0YXNrLnRvdGFsU2l6ZSkgKiAxMDBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAocHJvZ3Jlc3MgLSBsYXN0UHJvZ3Jlc3NWYWx1ZSA+PSAyKSB7XHJcbiAgICAgICAgICAgIGxhc3RQcm9ncmVzc1ZhbHVlID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIHBvcHVwT2JqLmNoYW5nZSh7XHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZTogcHJvZ3Jlc3MsXHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NUaXA6ICflt7LkuIvovb0nICsgcHJvZ3Jlc3MgKyAnJScsXHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8g5Y+W5raI5LiL6L29XHJcbiAgICBwb3B1cE9iai5jYW5jZWxEb3dubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgZHRhc2sgJiYgZHRhc2suYWJvcnQoKTtcclxuICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6ICflt7Llj5bmtojkuIvovb0nLFxyXG4gICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLy8g6YeN5ZCvQVBQXHJcbiAgICBwb3B1cE9iai5yZWJvb3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHBsdXMucnVudGltZS5yZXN0YXJ0KCk7XHJcbiAgICB9O1xyXG4gIH0gZWxzZSBpZiAoZGF0YS51cGRhdGVUeXBlID09ICdzaWxlbnQnKSB7XHJcbiAgICBkdGFzayA9IHBsdXMuZG93bmxvYWRlci5jcmVhdGVEb3dubG9hZChcclxuICAgICAgZGF0YS5kb3dubG9hZFVybCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGVuYW1lOiAnX2RvYy91cGRhdGUvJyxcclxuICAgICAgfSxcclxuICAgICAgZnVuY3Rpb24gKGRvd25sb2FkLCBzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgcGx1cy5ydW50aW1lLmluc3RhbGwoXHJcbiAgICAgICAgICAgIGRvd25sb2FkLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCflupTnlKjotYTmupDmm7TmlrDlrozmiJAnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICBwbHVzLm5hdGl2ZVVJLmFsZXJ0KCflronoo4Xmlofku7blpLHotKVbJyArIGUuY29kZSArICdd77yaJyArIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBsdXMubmF0aXZlVUkuYWxlcnQoJ+aWh+S7tuS4i+i9veWksei0pS4uLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGR0YXNrLnN0YXJ0KCk7XHJcbiAgfVxyXG59O1xyXG4vLyDmloflrZfmjaLooYxcclxuZnVuY3Rpb24gZHJhd3RleHQodGV4dCwgbWF4V2lkdGgpIHtcclxuICBsZXQgdGV4dEFyciA9IHRleHQuc3BsaXQoJycpO1xyXG4gIGxldCBsZW4gPSB0ZXh0QXJyLmxlbmd0aDtcclxuICAvLyDkuIrkuKroioLngrlcclxuICBsZXQgcHJldmlvdXNOb2RlID0gMDtcclxuICAvLyDorrDlvZXoioLngrnlrr3luqZcclxuICBsZXQgbm9kZVdpZHRoID0gMDtcclxuICAvLyDmlofmnKzmjaLooYzmlbDnu4RcclxuICBsZXQgcm93VGV4dCA9IFtdO1xyXG4gIC8vIOWmguaenOaYr+Wtl+avje+8jOS+p+S/neWtmOmVv+W6plxyXG4gIGxldCBsZXR0ZXJXaWR0aCA9IDA7XHJcbiAgLy8g5rGJ5a2X5a695bqmXHJcbiAgbGV0IGNoaW5lc2VXaWR0aCA9IDE0O1xyXG4gIC8vIG90aGVyRm9udOWuveW6plxyXG4gIGxldCBvdGhlcldpZHRoID0gNztcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICBpZiAoL1tcXHU0ZTAwLVxcdTlmYTVdfFtcXHVGRTMwLVxcdUZGQTBdL2cudGVzdCh0ZXh0QXJyW2ldKSkge1xyXG4gICAgICBpZiAobGV0dGVyV2lkdGggPiAwKSB7XHJcbiAgICAgICAgaWYgKG5vZGVXaWR0aCArIGNoaW5lc2VXaWR0aCArIGxldHRlcldpZHRoICogb3RoZXJXaWR0aCA+IG1heFdpZHRoKSB7XHJcbiAgICAgICAgICByb3dUZXh0LnB1c2goe1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRleHQuc3Vic3RyaW5nKHByZXZpb3VzTm9kZSwgaSksXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHByZXZpb3VzTm9kZSA9IGk7XHJcbiAgICAgICAgICBub2RlV2lkdGggPSBjaGluZXNlV2lkdGg7XHJcbiAgICAgICAgICBsZXR0ZXJXaWR0aCA9IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5vZGVXaWR0aCArPSBjaGluZXNlV2lkdGggKyBsZXR0ZXJXaWR0aCAqIG90aGVyV2lkdGg7XHJcbiAgICAgICAgICBsZXR0ZXJXaWR0aCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChub2RlV2lkdGggKyBjaGluZXNlV2lkdGggPiBtYXhXaWR0aCkge1xyXG4gICAgICAgICAgcm93VGV4dC5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBjb250ZW50OiB0ZXh0LnN1YnN0cmluZyhwcmV2aW91c05vZGUsIGkpLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBwcmV2aW91c05vZGUgPSBpO1xyXG4gICAgICAgICAgbm9kZVdpZHRoID0gY2hpbmVzZVdpZHRoO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBub2RlV2lkdGggKz0gY2hpbmVzZVdpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKC9cXG4vZy50ZXN0KHRleHRBcnJbaV0pKSB7XHJcbiAgICAgICAgcm93VGV4dC5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdicmVhaycsXHJcbiAgICAgICAgICBjb250ZW50OiB0ZXh0LnN1YnN0cmluZyhwcmV2aW91c05vZGUsIGkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHByZXZpb3VzTm9kZSA9IGkgKyAxO1xyXG4gICAgICAgIG5vZGVXaWR0aCA9IDA7XHJcbiAgICAgICAgbGV0dGVyV2lkdGggPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHRleHRBcnJbaV0gPT0gJ1xcXFwnICYmIHRleHRBcnJbaSArIDFdID09ICduJykge1xyXG4gICAgICAgIHJvd1RleHQucHVzaCh7XHJcbiAgICAgICAgICB0eXBlOiAnYnJlYWsnLFxyXG4gICAgICAgICAgY29udGVudDogdGV4dC5zdWJzdHJpbmcocHJldmlvdXNOb2RlLCBpKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwcmV2aW91c05vZGUgPSBpICsgMjtcclxuICAgICAgICBub2RlV2lkdGggPSAwO1xyXG4gICAgICAgIGxldHRlcldpZHRoID0gMDtcclxuICAgICAgfSBlbHNlIGlmICgvW2EtekEtWjAtOV0vZy50ZXN0KHRleHRBcnJbaV0pKSB7XHJcbiAgICAgICAgbGV0dGVyV2lkdGggKz0gMTtcclxuICAgICAgICBpZiAobm9kZVdpZHRoICsgbGV0dGVyV2lkdGggKiBvdGhlcldpZHRoID4gbWF4V2lkdGgpIHtcclxuICAgICAgICAgIHJvd1RleHQucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgY29udGVudDogdGV4dC5zdWJzdHJpbmcocHJldmlvdXNOb2RlLCBpICsgMSAtIGxldHRlcldpZHRoKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNOb2RlID0gaSArIDEgLSBsZXR0ZXJXaWR0aDtcclxuICAgICAgICAgIG5vZGVXaWR0aCA9IGxldHRlcldpZHRoICogb3RoZXJXaWR0aDtcclxuICAgICAgICAgIGxldHRlcldpZHRoID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKG5vZGVXaWR0aCArIG90aGVyV2lkdGggPiBtYXhXaWR0aCkge1xyXG4gICAgICAgICAgcm93VGV4dC5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBjb250ZW50OiB0ZXh0LnN1YnN0cmluZyhwcmV2aW91c05vZGUsIGkpLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBwcmV2aW91c05vZGUgPSBpO1xyXG4gICAgICAgICAgbm9kZVdpZHRoID0gb3RoZXJXaWR0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbm9kZVdpZHRoICs9IG90aGVyV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChwcmV2aW91c05vZGUgPCBsZW4pIHtcclxuICAgIHJvd1RleHQucHVzaCh7XHJcbiAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgY29udGVudDogdGV4dC5zdWJzdHJpbmcocHJldmlvdXNOb2RlLCBsZW4pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiByb3dUZXh0O1xyXG59XHJcbi8vIOaYr+WQpuabtOaWsOW8ueeql1xyXG5mdW5jdGlvbiB1cGRhdGVQb3B1cChkYXRhLCBjYWxsYmFjaykge1xyXG4gIC8vIOW8ueeql+mBrue9qeWxglxyXG4gIGxldCBtYXNrTGF5ZXIgPSBuZXcgcGx1cy5uYXRpdmVPYmouVmlldygnbWFza0xheWVyJywge1xyXG4gICAgLy/lhYjliJvlu7rpga7nvanlsYJcclxuICAgIHRvcDogJzBweCcsXHJcbiAgICBsZWZ0OiAnMHB4JyxcclxuICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41KScsXHJcbiAgfSk7XHJcblxyXG4gIC8vIOS7peS4i+S4uuiuoeeul+iPnOWNleeahG52aWV357uY5Yi25biD5bGA77yM5Li65Zu65a6a566X5rOV77yM5L2/55So6ICF5peg5YWz5YWz5b+DXHJcbiAgY29uc3Qgc2NyZWVuV2lkdGggPSBwbHVzLnNjcmVlbi5yZXNvbHV0aW9uV2lkdGg7XHJcbiAgY29uc3Qgc2NyZWVuSGVpZ2h0ID0gcGx1cy5zY3JlZW4ucmVzb2x1dGlvbkhlaWdodDtcclxuICAvL+W8ueeql+WuueWZqOWuveW6plxyXG4gIGNvbnN0IHBvcHVwVmlld1dpZHRoID0gc2NyZWVuV2lkdGggKiAwLjc7XHJcbiAgLy8g5by556qX5a655Zmo55qEUGFkZGluZ1xyXG4gIGNvbnN0IHZpZXdDb250ZW50UGFkZGluZyA9IDIwO1xyXG4gIC8vIOW8ueeql+WuueWZqOeahOWuveW6plxyXG4gIGNvbnN0IHZpZXdDb250ZW50V2lkdGggPSBwYXJzZUludChwb3B1cFZpZXdXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZyAqIDIpO1xyXG4gIC8vIOaPj+i/sOeahOWIl+ihqFxyXG4gIGNvbnN0IGRlc2NyaXB0aW9uTGlzdCA9IGRyYXd0ZXh0KGRhdGEudmVyc2lvbkluZm8sIHZpZXdDb250ZW50V2lkdGgpO1xyXG4gIC8vIOW8ueeql+WuueWZqOmrmOW6plxyXG4gIGxldCBwb3B1cFZpZXdIZWlnaHQgPSA4MCArIDIwICsgMjAgKyA5MCArIDEwO1xyXG5cclxuICBsZXQgcG9wdXBWaWV3Q29udGVudExpc3QgPSBbXHJcbiAgICB7XHJcbiAgICAgIHNyYzogJGljb25VcmwsXHJcbiAgICAgIGlkOiAnbG9nbycsXHJcbiAgICAgIHRhZzogJ2ltZycsXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgdG9wOiAnMHB4JyxcclxuICAgICAgICBsZWZ0OiAocG9wdXBWaWV3V2lkdGggLSAxMjQpIC8gMiArICdweCcsXHJcbiAgICAgICAgd2lkdGg6ICcxMjRweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnODBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICd0aXRsZScsXHJcbiAgICAgIHRleHQ6ICflj5HnjrDmlrDniYjmnKwnICsgZGF0YS52ZXJzaW9uTmFtZSxcclxuICAgICAgdGV4dFN0eWxlczoge1xyXG4gICAgICAgIHNpemU6ICcxOHB4JyxcclxuICAgICAgICBjb2xvcjogJyMzMzMnLFxyXG4gICAgICAgIHdlaWdodDogJ2JvbGQnLFxyXG4gICAgICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnLFxyXG4gICAgICB9LFxyXG4gICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIHRvcDogJzkwcHgnLFxyXG4gICAgICAgIGxlZnQ6IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgIGhlaWdodDogJzMwcHgnLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICBdO1xyXG4gIGNvbnN0IHRleHRIZWlnaHQgPSAxODtcclxuICBsZXQgY29udGVudFRvcCA9IDEzMDtcclxuICBkZXNjcmlwdGlvbkxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgcG9wdXBWaWV3SGVpZ2h0ICs9IHRleHRIZWlnaHQ7XHJcbiAgICAgIGNvbnRlbnRUb3AgKz0gdGV4dEhlaWdodDtcclxuICAgIH1cclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjb250ZW50JyArIGluZGV4ICsgMSxcclxuICAgICAgdGV4dDogaXRlbS5jb250ZW50LFxyXG4gICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgc2l6ZTogJzE0cHgnLFxyXG4gICAgICAgIGNvbG9yOiAnIzY2NicsXHJcbiAgICAgICAgbGluZVNwYWNpbmc6ICc1MCUnLFxyXG4gICAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgdG9wOiBjb250ZW50VG9wICsgJ3B4JyxcclxuICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIHdpZHRoOiB2aWV3Q29udGVudFdpZHRoICsgJ3B4JyxcclxuICAgICAgICBoZWlnaHQ6IHRleHRIZWlnaHQgKyAncHgnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBpZiAoaXRlbS50eXBlID09ICdicmVhaycpIHtcclxuICAgICAgY29udGVudFRvcCArPSAxMDtcclxuICAgICAgcG9wdXBWaWV3SGVpZ2h0ICs9IDEwO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoZGF0YS51cGRhdGVUeXBlID09ICdmb3JjaWJseScpIHtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdyZWN0JywgLy/nu5jliLblupXovrnmjInpkq5cclxuICAgICAgcmVjdFN0eWxlczoge1xyXG4gICAgICAgIHJhZGl1czogJzZweCcsXHJcbiAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgYm90dG9tOiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIGxlZnQ6IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgIGhlaWdodDogJzMwcHgnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBwb3B1cFZpZXdDb250ZW50TGlzdC5wdXNoKHtcclxuICAgICAgdGFnOiAnZm9udCcsXHJcbiAgICAgIGlkOiAnY29uZmlybVRleHQnLFxyXG4gICAgICB0ZXh0OiAn56uL5Y2z5Y2H57qnJyxcclxuICAgICAgdGV4dFN0eWxlczoge1xyXG4gICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICBjb2xvcjogJyNGRkYnLFxyXG4gICAgICAgIGxpbmVTcGFjaW5nOiAnMCUnLFxyXG4gICAgICB9LFxyXG4gICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIGJvdHRvbTogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIHdpZHRoOiB2aWV3Q29udGVudFdpZHRoICsgJ3B4JyxcclxuICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyDnu5jliLblupXovrnmjInpkq5cclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdyZWN0JyxcclxuICAgICAgaWQ6ICdjYW5jZWxCb3gnLFxyXG4gICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgcmFkaXVzOiAnM3B4JyxcclxuICAgICAgICBib3JkZXJDb2xvcjogJyNmMWYxZjEnLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAnMXB4JyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgbGVmdDogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdyZWN0JyxcclxuICAgICAgaWQ6ICdjb25maXJtQm94JyxcclxuICAgICAgcmVjdFN0eWxlczoge1xyXG4gICAgICAgIHJhZGl1czogJzNweCcsXHJcbiAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgYm90dG9tOiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIGxlZnQ6XHJcbiAgICAgICAgICAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICtcclxuICAgICAgICAgIHZpZXdDb250ZW50UGFkZGluZyAqIDIgK1xyXG4gICAgICAgICAgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjYW5jZWxUZXh0JyxcclxuICAgICAgdGV4dDogJ+aaguS4jeWNh+e6pycsXHJcbiAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICBzaXplOiAnMTRweCcsXHJcbiAgICAgICAgY29sb3I6ICcjNjY2JyxcclxuICAgICAgICBsaW5lU3BhY2luZzogJzAlJyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgbGVmdDogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjb25maXJtVGV4dCcsXHJcbiAgICAgIHRleHQ6ICfnq4vljbPljYfnuqcnLFxyXG4gICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgc2l6ZTogJzE0cHgnLFxyXG4gICAgICAgIGNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgbGluZVNwYWNpbmc6ICcwJScsXHJcbiAgICAgICAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgYm90dG9tOiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIGxlZnQ6XHJcbiAgICAgICAgICAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICtcclxuICAgICAgICAgIHZpZXdDb250ZW50UGFkZGluZyAqIDIgK1xyXG4gICAgICAgICAgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8g5by556qX5YaF5a65XHJcbiAgbGV0IHBvcHVwVmlldyA9IG5ldyBwbHVzLm5hdGl2ZU9iai5WaWV3KCdwb3B1cFZpZXcnLCB7XHJcbiAgICAvL+WIm+W7uuW6lemDqOWbvuagh+iPnOWNlVxyXG4gICAgdGFnOiAncmVjdCcsXHJcbiAgICB0b3A6IChzY3JlZW5IZWlnaHQgLSBwb3B1cFZpZXdIZWlnaHQpIC8gMiArICdweCcsXHJcbiAgICBsZWZ0OiAnMTUlJyxcclxuICAgIGhlaWdodDogcG9wdXBWaWV3SGVpZ2h0ICsgJ3B4JyxcclxuICAgIHdpZHRoOiAnNzAlJyxcclxuICB9KTtcclxuICAvLyDnu5jliLbnmb3oibLog4zmma9cclxuICBwb3B1cFZpZXcuZHJhd1JlY3QoXHJcbiAgICB7XHJcbiAgICAgIGNvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgIHJhZGl1czogJzhweCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0b3A6ICc0MHB4JyxcclxuICAgICAgaGVpZ2h0OiBwb3B1cFZpZXdIZWlnaHQgLSA0MCArICdweCcsXHJcbiAgICB9XHJcbiAgKTtcclxuXHJcbiAgcG9wdXBWaWV3LmRyYXcocG9wdXBWaWV3Q29udGVudExpc3QpO1xyXG4gIHBvcHVwVmlldy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgbWF4VG9wID0gcG9wdXBWaWV3SGVpZ2h0IC0gdmlld0NvbnRlbnRQYWRkaW5nO1xyXG4gICAgbGV0IG1heExlZnQgPSBwb3B1cFZpZXdXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZztcclxuICAgIGxldCBidXR0b25XaWR0aCA9ICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDI7XHJcbiAgICBpZiAoZS5jbGllbnRZID4gbWF4VG9wIC0gMzAgJiYgZS5jbGllbnRZIDwgbWF4VG9wKSB7XHJcbiAgICAgIGlmIChkYXRhLnVwZGF0ZVR5cGUgPT0gJ2ZvcmNpYmx5Jykge1xyXG4gICAgICAgIGlmIChlLmNsaWVudFggPiB2aWV3Q29udGVudFBhZGRpbmcgJiYgZS5jbGllbnRYIDwgbWF4TGVmdCkge1xyXG4gICAgICAgICAgLy8g56uL5Y2z5Y2H57qnXHJcbiAgICAgICAgICBtYXNrTGF5ZXIuaGlkZSgpO1xyXG4gICAgICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOaaguS4jeWNh+e6p1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGUuY2xpZW50WCA+IHZpZXdDb250ZW50UGFkZGluZyAmJlxyXG4gICAgICAgICAgZS5jbGllbnRYIDwgbWF4TGVmdCAtIGJ1dHRvbldpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBtYXNrTGF5ZXIuaGlkZSgpO1xyXG4gICAgICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUuY2xpZW50WCA+IG1heExlZnQgLSBidXR0b25XaWR0aCAmJiBlLmNsaWVudFggPCBtYXhMZWZ0KSB7XHJcbiAgICAgICAgICAvLyDnq4vljbPljYfnuqdcclxuICAgICAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgICAgICBwb3B1cFZpZXcuaGlkZSgpO1xyXG4gICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuICBpZiAoZGF0YS51cGRhdGVUeXBlID09ICdzb2xpY2l0Jykge1xyXG4gICAgLy8g54K55Ye76YGu572p5bGCXHJcbiAgICBtYXNrTGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8v5aSE55CG6YGu572p5bGC54K55Ye7XHJcbiAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgIHBvcHVwVmlldy5oaWRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8g5pi+56S65by556qXXHJcbiAgbWFza0xheWVyLnNob3coKTtcclxuICBwb3B1cFZpZXcuc2hvdygpO1xyXG59XHJcbi8vIOaWh+S7tuS4i+i9veeahOW8ueeql+e7mOWbvlxyXG5mdW5jdGlvbiBkb3dubG9hZFBvcHVwRHJhd2luZyhkYXRhKSB7XHJcbiAgLy8g5Lul5LiL5Li66K6h566X6I+c5Y2V55qEbnZpZXfnu5jliLbluIPlsYDvvIzkuLrlm7rlrprnrpfms5XvvIzkvb/nlKjogIXml6DlhbPlhbPlv4NcclxuICBjb25zdCBzY3JlZW5XaWR0aCA9IHBsdXMuc2NyZWVuLnJlc29sdXRpb25XaWR0aDtcclxuICBjb25zdCBzY3JlZW5IZWlnaHQgPSBwbHVzLnNjcmVlbi5yZXNvbHV0aW9uSGVpZ2h0O1xyXG4gIC8v5by556qX5a655Zmo5a695bqmXHJcbiAgY29uc3QgcG9wdXBWaWV3V2lkdGggPSBzY3JlZW5XaWR0aCAqIDAuNztcclxuICAvLyDlvLnnqpflrrnlmajnmoRQYWRkaW5nXHJcbiAgY29uc3Qgdmlld0NvbnRlbnRQYWRkaW5nID0gMjA7XHJcbiAgLy8g5by556qX5a655Zmo55qE5a695bqmXHJcbiAgY29uc3Qgdmlld0NvbnRlbnRXaWR0aCA9IHBvcHVwVmlld1dpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nICogMjtcclxuICAvLyDlvLnnqpflrrnlmajpq5jluqZcclxuICBsZXQgcG9wdXBWaWV3SGVpZ2h0ID0gdmlld0NvbnRlbnRQYWRkaW5nICogMyArIDYwO1xyXG4gIGxldCBwcm9ncmVzc1RpcCA9IGRhdGEucHJvZ3Jlc3NUaXAgfHwgJ+WHhuWkh+S4i+i9vS4uLic7XHJcbiAgbGV0IGNvbnRlbnRUZXh0ID0gZGF0YS5jb250ZW50VGV4dCB8fCAn5q2j5Zyo5Li65oKo5pu05paw77yM6K+36ICQ5b+D562J5b6FJztcclxuICBsZXQgZWxlbWVudExpc3QgPSBbXHJcbiAgICB7XHJcbiAgICAgIHRhZzogJ3JlY3QnLCAvL+iDjOaZr+iJslxyXG4gICAgICBjb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgcmFkaXVzOiAnOHB4JyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICBpZDogJ3RpdGxlJyxcclxuICAgICAgdGV4dDogJ+WNh+e6p0FQUCcsXHJcbiAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICBzaXplOiAnMTZweCcsXHJcbiAgICAgICAgY29sb3I6ICcjMzMzJyxcclxuICAgICAgICB3ZWlnaHQ6ICdib2xkJyxcclxuICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjb250ZW50JyxcclxuICAgICAgdGV4dDogY29udGVudFRleHQsXHJcbiAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICBzaXplOiAnMTRweCcsXHJcbiAgICAgICAgY29sb3I6ICcjMzMzJyxcclxuICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyAqIDIgKyAzMCArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMjBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgLy8g5piv5ZCm5pyJ6L+b5bqm5p2hXHJcbiAgaWYgKGRhdGEucHJvZ3Jlc3MpIHtcclxuICAgIHBvcHVwVmlld0hlaWdodCArPSB2aWV3Q29udGVudFBhZGRpbmcgKyA0MDtcclxuICAgIGVsZW1lbnRMaXN0ID0gZWxlbWVudExpc3QuY29uY2F0KFtcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgIGlkOiAncHJvZ3Jlc3NWYWx1ZScsXHJcbiAgICAgICAgdGV4dDogcHJvZ3Jlc3NUaXAsXHJcbiAgICAgICAgdGV4dFN0eWxlczoge1xyXG4gICAgICAgICAgc2l6ZTogJzE0cHgnLFxyXG4gICAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyAqIDQgKyAyMCArICdweCcsXHJcbiAgICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGFnOiAncmVjdCcsIC8v57uY5Yi26L+b5bqm5p2h6IOM5pmvXHJcbiAgICAgICAgaWQ6ICdwcm9ncmVzc0JnJyxcclxuICAgICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgICByYWRpdXM6ICc0cHgnLFxyXG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZjFmMWYxJyxcclxuICAgICAgICAgIGJvcmRlcldpZHRoOiAnMXB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyAqIDQgKyA2MCArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnOHB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG4gIGlmIChkYXRhLmJ1dHRvbk51bSA9PSAyKSB7XHJcbiAgICBwb3B1cFZpZXdIZWlnaHQgKz0gdmlld0NvbnRlbnRQYWRkaW5nICsgMzA7XHJcbiAgICBlbGVtZW50TGlzdCA9IGVsZW1lbnRMaXN0LmNvbmNhdChbXHJcbiAgICAgIHtcclxuICAgICAgICB0YWc6ICdyZWN0JywgLy/nu5jliLblupXovrnmjInpkq5cclxuICAgICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgICByYWRpdXM6ICczcHgnLFxyXG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZjFmMWYxJyxcclxuICAgICAgICAgIGJvcmRlcldpZHRoOiAnMXB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6ICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDIgKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ3JlY3QnLCAvL+e7mOWItuW6lei+ueaMiemSrlxyXG4gICAgICAgIHJlY3RTdHlsZXM6IHtcclxuICAgICAgICAgIHJhZGl1czogJzNweCcsXHJcbiAgICAgICAgICBjb2xvcjogJG1haW5Db2xvcixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OlxyXG4gICAgICAgICAgICAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICtcclxuICAgICAgICAgICAgdmlld0NvbnRlbnRQYWRkaW5nICogMiArXHJcbiAgICAgICAgICAgICdweCcsXHJcbiAgICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGFnOiAnZm9udCcsXHJcbiAgICAgICAgaWQ6ICdjYW5jZWxUZXh0JyxcclxuICAgICAgICB0ZXh0OiAn5Y+W5raI5LiL6L29JyxcclxuICAgICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgICBzaXplOiAnMTRweCcsXHJcbiAgICAgICAgICBjb2xvcjogJyM2NjYnLFxyXG4gICAgICAgICAgbGluZVNwYWNpbmc6ICcwJScsXHJcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6ICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDIgKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgIGlkOiAnY29uZmlybVRleHQnLFxyXG4gICAgICAgIHRleHQ6ICflkI7lj7DkuIvovb0nLFxyXG4gICAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICAgIGNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgICBsaW5lU3BhY2luZzogJzAlJyxcclxuICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgIGJvdHRvbTogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgIGxlZnQ6XHJcbiAgICAgICAgICAgICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDIgK1xyXG4gICAgICAgICAgICB2aWV3Q29udGVudFBhZGRpbmcgKiAyICtcclxuICAgICAgICAgICAgJ3B4JyxcclxuICAgICAgICAgIHdpZHRoOiAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICsgJ3B4JyxcclxuICAgICAgICAgIGhlaWdodDogJzMwcHgnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdKTtcclxuICB9XHJcbiAgaWYgKGRhdGEuYnV0dG9uTnVtID09IDEpIHtcclxuICAgIHBvcHVwVmlld0hlaWdodCArPSB2aWV3Q29udGVudFBhZGRpbmcgKyA0MDtcclxuICAgIGVsZW1lbnRMaXN0ID0gZWxlbWVudExpc3QuY29uY2F0KFtcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ3JlY3QnLCAvL+e7mOWItuW6lei+ueaMiemSrlxyXG4gICAgICAgIHJlY3RTdHlsZXM6IHtcclxuICAgICAgICAgIHJhZGl1czogJzZweCcsXHJcbiAgICAgICAgICBjb2xvcjogJG1haW5Db2xvcixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnNDBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgIGlkOiAnY29uZmlybVRleHQnLFxyXG4gICAgICAgIHRleHQ6ICflhbPpl60nLFxyXG4gICAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICAgIGNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgICBsaW5lU3BhY2luZzogJzAlJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnNDBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgcG9wdXBWaWV3SGVpZ2h0OiBwb3B1cFZpZXdIZWlnaHQsXHJcbiAgICBwb3B1cFZpZXdXaWR0aDogcG9wdXBWaWV3V2lkdGgsXHJcbiAgICBzY3JlZW5IZWlnaHQ6IHNjcmVlbkhlaWdodCxcclxuICAgIHZpZXdDb250ZW50V2lkdGg6IHZpZXdDb250ZW50V2lkdGgsXHJcbiAgICB2aWV3Q29udGVudFBhZGRpbmc6IHZpZXdDb250ZW50UGFkZGluZyxcclxuICAgIGVsZW1lbnRMaXN0OiBlbGVtZW50TGlzdCxcclxuICB9O1xyXG59XHJcbi8vIOaWh+S7tuS4i+i9veeahOW8ueeql1xyXG5mdW5jdGlvbiBkb3dubG9hZFBvcHVwKGRhdGEpIHtcclxuICAvLyDlvLnnqpfpga7nvanlsYJcclxuICBsZXQgbWFza0xheWVyID0gbmV3IHBsdXMubmF0aXZlT2JqLlZpZXcoJ21hc2tMYXllcicsIHtcclxuICAgIC8v5YWI5Yib5bu66YGu572p5bGCXHJcbiAgICB0b3A6ICcwcHgnLFxyXG4gICAgbGVmdDogJzBweCcsXHJcbiAgICBoZWlnaHQ6ICcxMDAlJyxcclxuICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNSknLFxyXG4gIH0pO1xyXG4gIGxldCBwb3B1cFZpZXdEYXRhID0gZG93bmxvYWRQb3B1cERyYXdpbmcoZGF0YSk7XHJcbiAgLy8g5by556qX5YaF5a65XHJcbiAgbGV0IHBvcHVwVmlldyA9IG5ldyBwbHVzLm5hdGl2ZU9iai5WaWV3KCdwb3B1cFZpZXcnLCB7XHJcbiAgICAvL+WIm+W7uuW6lemDqOWbvuagh+iPnOWNlVxyXG4gICAgdGFnOiAncmVjdCcsXHJcbiAgICB0b3A6XHJcbiAgICAgIChwb3B1cFZpZXdEYXRhLnNjcmVlbkhlaWdodCAtIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0KSAvIDIgKyAncHgnLFxyXG4gICAgbGVmdDogJzE1JScsXHJcbiAgICBoZWlnaHQ6IHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0ICsgJ3B4JyxcclxuICAgIHdpZHRoOiAnNzAlJyxcclxuICB9KTtcclxuICBsZXQgcHJvZ3Jlc3NWYWx1ZSA9IDA7XHJcbiAgbGV0IHByb2dyZXNzVGlwID0gMDtcclxuICBsZXQgY29udGVudFRleHQgPSAwO1xyXG4gIGxldCBidXR0b25OdW0gPSAyO1xyXG4gIGlmIChkYXRhLmJ1dHRvbk51bSA+PSAwKSB7XHJcbiAgICBidXR0b25OdW0gPSBkYXRhLmJ1dHRvbk51bTtcclxuICB9XHJcbiAgcG9wdXBWaWV3LmRyYXcocG9wdXBWaWV3RGF0YS5lbGVtZW50TGlzdCk7XHJcbiAgbGV0IGNhbGxiYWNrRGF0YSA9IHtcclxuICAgIGNoYW5nZTogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICBsZXQgcHJvZ3Jlc3NFbGVtZW50ID0gW107XHJcbiAgICAgIGlmIChyZXMucHJvZ3Jlc3NWYWx1ZSkge1xyXG4gICAgICAgIHByb2dyZXNzVmFsdWUgPSByZXMucHJvZ3Jlc3NWYWx1ZTtcclxuICAgICAgICAvLyDnu5jliLbov5vluqbmnaFcclxuICAgICAgICBwcm9ncmVzc0VsZW1lbnQucHVzaCh7XHJcbiAgICAgICAgICB0YWc6ICdyZWN0JywgLy/nu5jliLbov5vluqbmnaHog4zmma9cclxuICAgICAgICAgIGlkOiAncHJvZ3Jlc3NWYWx1ZUJnJyxcclxuICAgICAgICAgIHJlY3RTdHlsZXM6IHtcclxuICAgICAgICAgICAgcmFkaXVzOiAnNHB4JyxcclxuICAgICAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgdG9wOiBwb3B1cFZpZXdEYXRhLnZpZXdDb250ZW50UGFkZGluZyAqIDQgKyA2MCArICdweCcsXHJcbiAgICAgICAgICAgIGxlZnQ6IHBvcHVwVmlld0RhdGEudmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgd2lkdGg6XHJcbiAgICAgICAgICAgICAgcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFdpZHRoICogKHJlcy5wcm9ncmVzc1ZhbHVlIC8gMTAwKSArICdweCcsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzhweCcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXMucHJvZ3Jlc3NUaXApIHtcclxuICAgICAgICBwcm9ncmVzc1RpcCA9IHJlcy5wcm9ncmVzc1RpcDtcclxuICAgICAgICBwcm9ncmVzc0VsZW1lbnQucHVzaCh7XHJcbiAgICAgICAgICB0YWc6ICdmb250JyxcclxuICAgICAgICAgIGlkOiAncHJvZ3Jlc3NWYWx1ZScsXHJcbiAgICAgICAgICB0ZXh0OiByZXMucHJvZ3Jlc3NUaXAsXHJcbiAgICAgICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHRvcDogcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcgKiA0ICsgMjAgKyAncHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlcy5jb250ZW50VGV4dCkge1xyXG4gICAgICAgIGNvbnRlbnRUZXh0ID0gcmVzLmNvbnRlbnRUZXh0O1xyXG4gICAgICAgIHByb2dyZXNzRWxlbWVudC5wdXNoKHtcclxuICAgICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgICAgaWQ6ICdjb250ZW50JyxcclxuICAgICAgICAgIHRleHQ6IHJlcy5jb250ZW50VGV4dCxcclxuICAgICAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICAgICAgc2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICBjb2xvcjogJyMzMzMnLFxyXG4gICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0b3A6IHBvcHVwVmlld0RhdGEudmlld0NvbnRlbnRQYWRkaW5nICogMiArIDMwICsgJ3B4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXMuYnV0dG9uTnVtID49IDAgJiYgYnV0dG9uTnVtICE9IHJlcy5idXR0b25OdW0pIHtcclxuICAgICAgICBidXR0b25OdW0gPSByZXMuYnV0dG9uTnVtO1xyXG4gICAgICAgIHBvcHVwVmlldy5yZXNldCgpO1xyXG4gICAgICAgIHBvcHVwVmlld0RhdGEgPSBkb3dubG9hZFBvcHVwRHJhd2luZyhcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwcm9ncmVzc1ZhbHVlOiBwcm9ncmVzc1ZhbHVlLFxyXG4gICAgICAgICAgICAgIHByb2dyZXNzVGlwOiBwcm9ncmVzc1RpcCxcclxuICAgICAgICAgICAgICBjb250ZW50VGV4dDogY29udGVudFRleHQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBbXTtcclxuICAgICAgICBwb3B1cFZpZXdEYXRhLmVsZW1lbnRMaXN0Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGxldCBoYXZlID0gZmFsc2U7XHJcbiAgICAgICAgICBwcm9ncmVzc0VsZW1lbnQuZm9yRWFjaCgoY2hpbGRJdGVtLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmlkID09IGNoaWxkSXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgIGhhdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICghaGF2ZSkge1xyXG4gICAgICAgICAgICBuZXdFbGVtZW50LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcHJvZ3Jlc3NFbGVtZW50ID0gbmV3RWxlbWVudC5jb25jYXQocHJvZ3Jlc3NFbGVtZW50KTtcclxuICAgICAgICBwb3B1cFZpZXcuc2V0U3R5bGUoe1xyXG4gICAgICAgICAgdGFnOiAncmVjdCcsXHJcbiAgICAgICAgICB0b3A6XHJcbiAgICAgICAgICAgIChwb3B1cFZpZXdEYXRhLnNjcmVlbkhlaWdodCAtIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0KSAvIDIgK1xyXG4gICAgICAgICAgICAncHgnLFxyXG4gICAgICAgICAgbGVmdDogJzE1JScsXHJcbiAgICAgICAgICBoZWlnaHQ6IHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgIHdpZHRoOiAnNzAlJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwb3B1cFZpZXcuZHJhdyhwcm9ncmVzc0VsZW1lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBvcHVwVmlldy5kcmF3KHByb2dyZXNzRWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbWFza0xheWVyLmhpZGUoKTtcclxuICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgIH0sXHJcbiAgfTtcclxuICBwb3B1cFZpZXcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgbGV0IG1heFRvcCA9XHJcbiAgICAgIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0IC0gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmc7XHJcbiAgICBsZXQgbWF4TGVmdCA9XHJcbiAgICAgIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3V2lkdGggLSBwb3B1cFZpZXdEYXRhLnZpZXdDb250ZW50UGFkZGluZztcclxuICAgIGlmIChlLmNsaWVudFkgPiBtYXhUb3AgLSA0MCAmJiBlLmNsaWVudFkgPCBtYXhUb3ApIHtcclxuICAgICAgaWYgKGJ1dHRvbk51bSA9PSAxKSB7XHJcbiAgICAgICAgLy8g5Y2V5oyJ6ZKuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZS5jbGllbnRYID4gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcgJiZcclxuICAgICAgICAgIGUuY2xpZW50WCA8IG1heExlZnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgICAgICBwb3B1cFZpZXcuaGlkZSgpO1xyXG4gICAgICAgICAgY2FsbGJhY2tEYXRhLnJlYm9vdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChidXR0b25OdW0gPT0gMikge1xyXG4gICAgICAgIC8vIOWPjOaMiemSrlxyXG4gICAgICAgIGxldCBidXR0b25XaWR0aCA9XHJcbiAgICAgICAgICAocG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFdpZHRoIC0gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcpIC9cclxuICAgICAgICAgIDI7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZS5jbGllbnRYID4gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcgJiZcclxuICAgICAgICAgIGUuY2xpZW50WCA8IG1heExlZnQgLSBidXR0b25XaWR0aCAtIHBvcHVwVmlld0RhdGEudmlld0NvbnRlbnRQYWRkaW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBtYXNrTGF5ZXIuaGlkZSgpO1xyXG4gICAgICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgICAgICAgIGNhbGxiYWNrRGF0YS5jYW5jZWxEb3dubG9hZCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5jbGllbnRYID4gbWF4TGVmdCAtIGJ1dHRvbldpZHRoICYmIGUuY2xpZW50WCA8IG1heExlZnQpIHtcclxuICAgICAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgICAgICBwb3B1cFZpZXcuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG4gIC8vIOaYvuekuuW8ueeql1xyXG4gIG1hc2tMYXllci5zaG93KCk7XHJcbiAgcG9wdXBWaWV3LnNob3coKTtcclxuICAvLyDmlLnlj5jov5vluqbmnaFcclxuICByZXR1cm4gY2FsbGJhY2tEYXRhO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChpc1Byb21wdCA9IGZhbHNlKSB7XHJcbiAgZ2V0Q3VycmVudE5vKCh2ZXJzaW9uSW5mbykgPT4ge1xyXG5cclxuICAgIGNvbXBvbmVudENvbmZpZy5nZXRTZXJ2ZXJObyh2ZXJzaW9uSW5mbywgaXNQcm9tcHQsIChyZXMpID0+IHtcclxuICAgICAgaWYgKHJlcy51cGRhdGVUeXBlID09ICdmb3JjaWJseScgfHwgcmVzLnVwZGF0ZVR5cGUgPT0gJ3NpbGVudCcpIHtcclxuICAgICAgICBpZiAoL1xcLndndCQvaS50ZXN0KHJlcy5kb3dubG9hZFVybCkpIHtcclxuICAgICAgICAgIGdldERvd25sb2FkKHJlcyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICgvXFwuaHRtbCQvaS50ZXN0KHJlcy5kb3dubG9hZFVybCkpIHtcclxuICAgICAgICAgIHBsdXMucnVudGltZS5vcGVuVVJMKHJlcy5kb3dubG9hZFVybCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PSAnYW5kcm9pZCcpIHtcclxuICAgICAgICAgICAgZ2V0RG93bmxvYWQocmVzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBsdXMucnVudGltZS5vcGVuVVJMKHJlcy5kb3dubG9hZFVybCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHJlcy51cGRhdGVUeXBlID09ICdzb2xpY2l0Jykge1xyXG4gICAgICAgIHVwZGF0ZVBvcHVwKHJlcywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgaWYgKC9cXC53Z3QkL2kudGVzdChyZXMuZG93bmxvYWRVcmwpKSB7XHJcbiAgICAgICAgICAgIGdldERvd25sb2FkKHJlcyk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKC9cXC5odG1sJC9pLnRlc3QocmVzLmRvd25sb2FkVXJsKSkge1xyXG4gICAgICAgICAgICBwbHVzLnJ1bnRpbWUub3BlblVSTChyZXMuZG93bmxvYWRVcmwpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHBsYXRmb3JtID09ICdhbmRyb2lkJykge1xyXG4gICAgICAgICAgICAgIGdldERvd25sb2FkKHJlcyk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcGx1cy5ydW50aW1lLm9wZW5VUkwocmVzLmRvd25sb2FkVXJsKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9KTtcclxufVxyXG5cclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///523\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = _default;\nexports.getCurrentNo = void 0;\nvar _componentConfig = _interopRequireDefault(__webpack_require__(/*! @/config/componentConfig */ 524));\nvar platform = uni.getSystemInfoSync().platform;\n// 主颜色\nvar $mainColor = _componentConfig.default.appUpdateColor ? _componentConfig.default.appUpdateColor : 'FF5B78';\n// 弹窗图标url\nvar $iconUrl = _componentConfig.default.appUpdateIcon ? _componentConfig.default.appUpdateIcon : '../static/ic_ar.png';\n\n// 获取当前应用的版本号\nvar getCurrentNo = function getCurrentNo(callback) {\n // 获取本地应用资源版本号\n plus.runtime.getProperty(plus.runtime.appid, function (inf) {\n callback && callback({\n versionCode: inf.versionCode,\n versionName: inf.version\n });\n });\n};\n// 从服务器下载应用资源包(wgt文件)\nexports.getCurrentNo = getCurrentNo;\nvar getDownload = function getDownload(data) {\n var dtask;\n if (data.updateType == 'forcibly' || data.updateType == 'solicit') {\n var popupData = {\n progress: true,\n buttonNum: 2\n };\n if (data.updateType == 'forcibly') {\n popupData.buttonNum = 0;\n }\n var lastProgressValue = 0;\n var popupObj = downloadPopup(popupData);\n dtask = plus.downloader.createDownload(data.downloadUrl, {\n filename: '_doc/update/'\n }, function (download, status) {\n if (status == 200) {\n popupObj.change({\n progressValue: 100,\n progressTip: '正在安装文件...',\n progress: true,\n buttonNum: 0\n });\n plus.runtime.install(download.filename, {}, function () {\n popupObj.change({\n contentText: '应用资源更新完成!',\n buttonNum: 1,\n progress: false\n });\n }, function (e) {\n popupObj.cancel();\n plus.nativeUI.alert('安装文件失败[' + e.code + ']:' + e.message);\n });\n } else {\n popupObj.change({\n contentText: '文件下载失败...',\n buttonNum: 1,\n progress: false\n });\n }\n });\n dtask.start();\n dtask.addEventListener('statechanged', function (task, status) {\n switch (task.state) {\n case 1:\n // 开始\n popupObj.change({\n progressValue: 0,\n progressTip: '准备下载...',\n progress: true\n });\n break;\n case 2:\n // 已连接到服务器\n popupObj.change({\n progressValue: 0,\n progressTip: '开始下载...',\n progress: true\n });\n break;\n case 3:\n var progress = parseInt(task.downloadedSize / task.totalSize * 100);\n if (progress - lastProgressValue >= 2) {\n lastProgressValue = progress;\n popupObj.change({\n progressValue: progress,\n progressTip: '已下载' + progress + '%',\n progress: true\n });\n }\n break;\n }\n });\n // 取消下载\n popupObj.cancelDownload = function () {\n dtask && dtask.abort();\n uni.showToast({\n title: '已取消下载',\n icon: 'none'\n });\n };\n // 重启APP\n popupObj.reboot = function () {\n plus.runtime.restart();\n };\n } else if (data.updateType == 'silent') {\n dtask = plus.downloader.createDownload(data.downloadUrl, {\n filename: '_doc/update/'\n }, function (download, status) {\n if (status == 200) {\n plus.runtime.install(download.filename, {}, function () {\n __f__(\"log\", '应用资源更新完成', \" at config/appUpdate.js:130\");\n }, function (e) {\n plus.nativeUI.alert('安装文件失败[' + e.code + ']:' + e.message);\n });\n } else {\n plus.nativeUI.alert('文件下载失败...');\n }\n });\n dtask.start();\n }\n};\n// 文字换行\nfunction drawtext(text, maxWidth) {\n var textArr = text.split('');\n var len = textArr.length;\n // 上个节点\n var previousNode = 0;\n // 记录节点宽度\n var nodeWidth = 0;\n // 文本换行数组\n var rowText = [];\n // 如果是字母,侧保存长度\n var letterWidth = 0;\n // 汉字宽度\n var chineseWidth = 14;\n // otherFont宽度\n var otherWidth = 7;\n for (var i = 0; i < len; i++) {\n if (/[\\u4e00-\\u9fa5]|[\\uFE30-\\uFFA0]/g.test(textArr[i])) {\n if (letterWidth > 0) {\n if (nodeWidth + chineseWidth + letterWidth * otherWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i)\n });\n previousNode = i;\n nodeWidth = chineseWidth;\n letterWidth = 0;\n } else {\n nodeWidth += chineseWidth + letterWidth * otherWidth;\n letterWidth = 0;\n }\n } else {\n if (nodeWidth + chineseWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i)\n });\n previousNode = i;\n nodeWidth = chineseWidth;\n } else {\n nodeWidth += chineseWidth;\n }\n }\n } else {\n if (/\\n/g.test(textArr[i])) {\n rowText.push({\n type: 'break',\n content: text.substring(previousNode, i)\n });\n previousNode = i + 1;\n nodeWidth = 0;\n letterWidth = 0;\n } else if (textArr[i] == '\\\\' && textArr[i + 1] == 'n') {\n rowText.push({\n type: 'break',\n content: text.substring(previousNode, i)\n });\n previousNode = i + 2;\n nodeWidth = 0;\n letterWidth = 0;\n } else if (/[a-zA-Z0-9]/g.test(textArr[i])) {\n letterWidth += 1;\n if (nodeWidth + letterWidth * otherWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i + 1 - letterWidth)\n });\n previousNode = i + 1 - letterWidth;\n nodeWidth = letterWidth * otherWidth;\n letterWidth = 0;\n }\n } else {\n if (nodeWidth + otherWidth > maxWidth) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, i)\n });\n previousNode = i;\n nodeWidth = otherWidth;\n } else {\n nodeWidth += otherWidth;\n }\n }\n }\n }\n if (previousNode < len) {\n rowText.push({\n type: 'text',\n content: text.substring(previousNode, len)\n });\n }\n return rowText;\n}\n// 是否更新弹窗\nfunction updatePopup(data, callback) {\n // 弹窗遮罩层\n var maskLayer = new plus.nativeObj.View('maskLayer', {\n //先创建遮罩层\n top: '0px',\n left: '0px',\n height: '100%',\n width: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)'\n });\n\n // 以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心\n var screenWidth = plus.screen.resolutionWidth;\n var screenHeight = plus.screen.resolutionHeight;\n //弹窗容器宽度\n var popupViewWidth = screenWidth * 0.7;\n // 弹窗容器的Padding\n var viewContentPadding = 20;\n // 弹窗容器的宽度\n var viewContentWidth = parseInt(popupViewWidth - viewContentPadding * 2);\n // 描述的列表\n var descriptionList = drawtext(data.versionInfo, viewContentWidth);\n // 弹窗容器高度\n var popupViewHeight = 80 + 20 + 20 + 90 + 10;\n var popupViewContentList = [{\n src: $iconUrl,\n id: 'logo',\n tag: 'img',\n position: {\n top: '0px',\n left: (popupViewWidth - 124) / 2 + 'px',\n width: '124px',\n height: '80px'\n }\n }, {\n tag: 'font',\n id: 'title',\n text: '发现新版本' + data.versionName,\n textStyles: {\n size: '18px',\n color: '#333',\n weight: 'bold',\n whiteSpace: 'normal'\n },\n position: {\n top: '90px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '30px'\n }\n }];\n var textHeight = 18;\n var contentTop = 130;\n descriptionList.forEach(function (item, index) {\n if (index > 0) {\n popupViewHeight += textHeight;\n contentTop += textHeight;\n }\n popupViewContentList.push({\n tag: 'font',\n id: 'content' + index + 1,\n text: item.content,\n textStyles: {\n size: '14px',\n color: '#666',\n lineSpacing: '50%',\n align: 'left'\n },\n position: {\n top: contentTop + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: textHeight + 'px'\n }\n });\n if (item.type == 'break') {\n contentTop += 10;\n popupViewHeight += 10;\n }\n });\n if (data.updateType == 'forcibly') {\n popupViewContentList.push({\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '6px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'font',\n id: 'confirmText',\n text: '立即升级',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '30px'\n }\n });\n } else {\n // 绘制底边按钮\n popupViewContentList.push({\n tag: 'rect',\n id: 'cancelBox',\n rectStyles: {\n radius: '3px',\n borderColor: '#f1f1f1',\n borderWidth: '1px'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'rect',\n id: 'confirmBox',\n rectStyles: {\n radius: '3px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'font',\n id: 'cancelText',\n text: '暂不升级',\n textStyles: {\n size: '14px',\n color: '#666',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n popupViewContentList.push({\n tag: 'font',\n id: 'confirmText',\n text: '立即升级',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n });\n }\n // 弹窗内容\n var popupView = new plus.nativeObj.View('popupView', {\n //创建底部图标菜单\n tag: 'rect',\n top: (screenHeight - popupViewHeight) / 2 + 'px',\n left: '15%',\n height: popupViewHeight + 'px',\n width: '70%'\n });\n // 绘制白色背景\n popupView.drawRect({\n color: '#FFFFFF',\n radius: '8px'\n }, {\n top: '40px',\n height: popupViewHeight - 40 + 'px'\n });\n popupView.draw(popupViewContentList);\n popupView.addEventListener('click', function (e) {\n var maxTop = popupViewHeight - viewContentPadding;\n var maxLeft = popupViewWidth - viewContentPadding;\n var buttonWidth = (viewContentWidth - viewContentPadding) / 2;\n if (e.clientY > maxTop - 30 && e.clientY < maxTop) {\n if (data.updateType == 'forcibly') {\n if (e.clientX > viewContentPadding && e.clientX < maxLeft) {\n // 立即升级\n maskLayer.hide();\n popupView.hide();\n callback && callback();\n }\n } else {\n // 暂不升级\n if (e.clientX > viewContentPadding && e.clientX < maxLeft - buttonWidth - viewContentPadding) {\n maskLayer.hide();\n popupView.hide();\n } else if (e.clientX > maxLeft - buttonWidth && e.clientX < maxLeft) {\n // 立即升级\n maskLayer.hide();\n popupView.hide();\n callback && callback();\n }\n }\n }\n });\n if (data.updateType == 'solicit') {\n // 点击遮罩层\n maskLayer.addEventListener('click', function () {\n //处理遮罩层点击\n maskLayer.hide();\n popupView.hide();\n });\n }\n // 显示弹窗\n maskLayer.show();\n popupView.show();\n}\n// 文件下载的弹窗绘图\nfunction downloadPopupDrawing(data) {\n // 以下为计算菜单的nview绘制布局,为固定算法,使用者无关关心\n var screenWidth = plus.screen.resolutionWidth;\n var screenHeight = plus.screen.resolutionHeight;\n //弹窗容器宽度\n var popupViewWidth = screenWidth * 0.7;\n // 弹窗容器的Padding\n var viewContentPadding = 20;\n // 弹窗容器的宽度\n var viewContentWidth = popupViewWidth - viewContentPadding * 2;\n // 弹窗容器高度\n var popupViewHeight = viewContentPadding * 3 + 60;\n var progressTip = data.progressTip || '准备下载...';\n var contentText = data.contentText || '正在为您更新,请耐心等待';\n var elementList = [{\n tag: 'rect',\n //背景色\n color: '#FFFFFF',\n rectStyles: {\n radius: '8px'\n }\n }, {\n tag: 'font',\n id: 'title',\n text: '升级APP',\n textStyles: {\n size: '16px',\n color: '#333',\n weight: 'bold',\n verticalAlign: 'middle',\n whiteSpace: 'normal'\n },\n position: {\n top: viewContentPadding + 'px',\n height: '30px'\n }\n }, {\n tag: 'font',\n id: 'content',\n text: contentText,\n textStyles: {\n size: '14px',\n color: '#333',\n verticalAlign: 'middle',\n whiteSpace: 'normal'\n },\n position: {\n top: viewContentPadding * 2 + 30 + 'px',\n height: '20px'\n }\n }];\n // 是否有进度条\n if (data.progress) {\n popupViewHeight += viewContentPadding + 40;\n elementList = elementList.concat([{\n tag: 'font',\n id: 'progressValue',\n text: progressTip,\n textStyles: {\n size: '14px',\n color: $mainColor,\n whiteSpace: 'normal'\n },\n position: {\n top: viewContentPadding * 4 + 20 + 'px',\n height: '30px'\n }\n }, {\n tag: 'rect',\n //绘制进度条背景\n id: 'progressBg',\n rectStyles: {\n radius: '4px',\n borderColor: '#f1f1f1',\n borderWidth: '1px'\n },\n position: {\n top: viewContentPadding * 4 + 60 + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '8px'\n }\n }]);\n }\n if (data.buttonNum == 2) {\n popupViewHeight += viewContentPadding + 30;\n elementList = elementList.concat([{\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '3px',\n borderColor: '#f1f1f1',\n borderWidth: '1px'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }, {\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '3px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }, {\n tag: 'font',\n id: 'cancelText',\n text: '取消下载',\n textStyles: {\n size: '14px',\n color: '#666',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }, {\n tag: 'font',\n id: 'confirmText',\n text: '后台下载',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%',\n whiteSpace: 'normal'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: (viewContentWidth - viewContentPadding) / 2 + viewContentPadding * 2 + 'px',\n width: (viewContentWidth - viewContentPadding) / 2 + 'px',\n height: '30px'\n }\n }]);\n }\n if (data.buttonNum == 1) {\n popupViewHeight += viewContentPadding + 40;\n elementList = elementList.concat([{\n tag: 'rect',\n //绘制底边按钮\n rectStyles: {\n radius: '6px',\n color: $mainColor\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '40px'\n }\n }, {\n tag: 'font',\n id: 'confirmText',\n text: '关闭',\n textStyles: {\n size: '14px',\n color: '#FFF',\n lineSpacing: '0%'\n },\n position: {\n bottom: viewContentPadding + 'px',\n left: viewContentPadding + 'px',\n width: viewContentWidth + 'px',\n height: '40px'\n }\n }]);\n }\n return {\n popupViewHeight: popupViewHeight,\n popupViewWidth: popupViewWidth,\n screenHeight: screenHeight,\n viewContentWidth: viewContentWidth,\n viewContentPadding: viewContentPadding,\n elementList: elementList\n };\n}\n// 文件下载的弹窗\nfunction downloadPopup(data) {\n // 弹窗遮罩层\n var maskLayer = new plus.nativeObj.View('maskLayer', {\n //先创建遮罩层\n top: '0px',\n left: '0px',\n height: '100%',\n width: '100%',\n backgroundColor: 'rgba(0,0,0,0.5)'\n });\n var popupViewData = downloadPopupDrawing(data);\n // 弹窗内容\n var popupView = new plus.nativeObj.View('popupView', {\n //创建底部图标菜单\n tag: 'rect',\n top: (popupViewData.screenHeight - popupViewData.popupViewHeight) / 2 + 'px',\n left: '15%',\n height: popupViewData.popupViewHeight + 'px',\n width: '70%'\n });\n var progressValue = 0;\n var progressTip = 0;\n var contentText = 0;\n var buttonNum = 2;\n if (data.buttonNum >= 0) {\n buttonNum = data.buttonNum;\n }\n popupView.draw(popupViewData.elementList);\n var callbackData = {\n change: function change(res) {\n var progressElement = [];\n if (res.progressValue) {\n progressValue = res.progressValue;\n // 绘制进度条\n progressElement.push({\n tag: 'rect',\n //绘制进度条背景\n id: 'progressValueBg',\n rectStyles: {\n radius: '4px',\n color: $mainColor\n },\n position: {\n top: popupViewData.viewContentPadding * 4 + 60 + 'px',\n left: popupViewData.viewContentPadding + 'px',\n width: popupViewData.viewContentWidth * (res.progressValue / 100) + 'px',\n height: '8px'\n }\n });\n }\n if (res.progressTip) {\n progressTip = res.progressTip;\n progressElement.push({\n tag: 'font',\n id: 'progressValue',\n text: res.progressTip,\n textStyles: {\n size: '14px',\n color: $mainColor,\n whiteSpace: 'normal'\n },\n position: {\n top: popupViewData.viewContentPadding * 4 + 20 + 'px',\n height: '30px'\n }\n });\n }\n if (res.contentText) {\n contentText = res.contentText;\n progressElement.push({\n tag: 'font',\n id: 'content',\n text: res.contentText,\n textStyles: {\n size: '16px',\n color: '#333',\n whiteSpace: 'normal'\n },\n position: {\n top: popupViewData.viewContentPadding * 2 + 30 + 'px',\n height: '30px'\n }\n });\n }\n if (res.buttonNum >= 0 && buttonNum != res.buttonNum) {\n buttonNum = res.buttonNum;\n popupView.reset();\n popupViewData = downloadPopupDrawing(Object.assign({\n progressValue: progressValue,\n progressTip: progressTip,\n contentText: contentText\n }, res));\n var newElement = [];\n popupViewData.elementList.map(function (item, index) {\n var have = false;\n progressElement.forEach(function (childItem, childIndex) {\n if (item.id == childItem.id) {\n have = true;\n }\n });\n if (!have) {\n newElement.push(item);\n }\n });\n progressElement = newElement.concat(progressElement);\n popupView.setStyle({\n tag: 'rect',\n top: (popupViewData.screenHeight - popupViewData.popupViewHeight) / 2 + 'px',\n left: '15%',\n height: popupViewData.popupViewHeight + 'px',\n width: '70%'\n });\n popupView.draw(progressElement);\n } else {\n popupView.draw(progressElement);\n }\n },\n cancel: function cancel() {\n maskLayer.hide();\n popupView.hide();\n }\n };\n popupView.addEventListener('click', function (e) {\n var maxTop = popupViewData.popupViewHeight - popupViewData.viewContentPadding;\n var maxLeft = popupViewData.popupViewWidth - popupViewData.viewContentPadding;\n if (e.clientY > maxTop - 40 && e.clientY < maxTop) {\n if (buttonNum == 1) {\n // 单按钮\n if (e.clientX > popupViewData.viewContentPadding && e.clientX < maxLeft) {\n maskLayer.hide();\n popupView.hide();\n callbackData.reboot();\n }\n } else if (buttonNum == 2) {\n // 双按钮\n var buttonWidth = (popupViewData.viewContentWidth - popupViewData.viewContentPadding) / 2;\n if (e.clientX > popupViewData.viewContentPadding && e.clientX < maxLeft - buttonWidth - popupViewData.viewContentPadding) {\n maskLayer.hide();\n popupView.hide();\n callbackData.cancelDownload();\n } else if (e.clientX > maxLeft - buttonWidth && e.clientX < maxLeft) {\n maskLayer.hide();\n popupView.hide();\n }\n }\n }\n });\n // 显示弹窗\n maskLayer.show();\n popupView.show();\n // 改变进度条\n return callbackData;\n}\nfunction _default() {\n var isPrompt = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;\n getCurrentNo(function (versionInfo) {\n _componentConfig.default.getServerNo(versionInfo, isPrompt, function (res) {\n if (res.updateType == 'forcibly' || res.updateType == 'silent') {\n if (/\\.wgt$/i.test(res.download_wgt_url)) {\n getDownload(res);\n } else if (/\\.html$/i.test(res.downloadUrl)) {\n plus.runtime.openURL(res.downloadUrl);\n } else {\n if (platform == 'android') {\n getDownload(res);\n } else {\n plus.runtime.openURL(res.downloadUrl);\n }\n }\n } else if (res.updateType == 'solicit') {\n updatePopup(res, function () {\n if (/\\.wgt$/i.test(res.downloadUrl)) {\n getDownload(res);\n } else if (/\\.html$/i.test(res.downloadUrl)) {\n plus.runtime.openURL(res.downloadUrl);\n } else {\n if (platform == 'android') {\n getDownload(res);\n } else {\n plus.runtime.openURL(res.downloadUrl);\n }\n }\n });\n }\n });\n });\n}\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 98)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlnL2FwcFVwZGF0ZS5qcyJdLCJuYW1lcyI6WyJwbGF0Zm9ybSIsInVuaSIsImdldFN5c3RlbUluZm9TeW5jIiwiJG1haW5Db2xvciIsImNvbXBvbmVudENvbmZpZyIsImFwcFVwZGF0ZUNvbG9yIiwiJGljb25VcmwiLCJhcHBVcGRhdGVJY29uIiwiZ2V0Q3VycmVudE5vIiwiY2FsbGJhY2siLCJwbHVzIiwicnVudGltZSIsImdldFByb3BlcnR5IiwiYXBwaWQiLCJpbmYiLCJ2ZXJzaW9uQ29kZSIsInZlcnNpb25OYW1lIiwidmVyc2lvbiIsImdldERvd25sb2FkIiwiZGF0YSIsImR0YXNrIiwidXBkYXRlVHlwZSIsInBvcHVwRGF0YSIsInByb2dyZXNzIiwiYnV0dG9uTnVtIiwibGFzdFByb2dyZXNzVmFsdWUiLCJwb3B1cE9iaiIsImRvd25sb2FkUG9wdXAiLCJkb3dubG9hZGVyIiwiY3JlYXRlRG93bmxvYWQiLCJkb3dubG9hZFVybCIsImZpbGVuYW1lIiwiZG93bmxvYWQiLCJzdGF0dXMiLCJjaGFuZ2UiLCJwcm9ncmVzc1ZhbHVlIiwicHJvZ3Jlc3NUaXAiLCJpbnN0YWxsIiwiY29udGVudFRleHQiLCJlIiwiY2FuY2VsIiwibmF0aXZlVUkiLCJhbGVydCIsImNvZGUiLCJtZXNzYWdlIiwic3RhcnQiLCJhZGRFdmVudExpc3RlbmVyIiwidGFzayIsInN0YXRlIiwicGFyc2VJbnQiLCJkb3dubG9hZGVkU2l6ZSIsInRvdGFsU2l6ZSIsImNhbmNlbERvd25sb2FkIiwiYWJvcnQiLCJzaG93VG9hc3QiLCJ0aXRsZSIsImljb24iLCJyZWJvb3QiLCJyZXN0YXJ0IiwiZHJhd3RleHQiLCJ0ZXh0IiwibWF4V2lkdGgiLCJ0ZXh0QXJyIiwic3BsaXQiLCJsZW4iLCJsZW5ndGgiLCJwcmV2aW91c05vZGUiLCJub2RlV2lkdGgiLCJyb3dUZXh0IiwibGV0dGVyV2lkdGgiLCJjaGluZXNlV2lkdGgiLCJvdGhlcldpZHRoIiwiaSIsInRlc3QiLCJwdXNoIiwidHlwZSIsImNvbnRlbnQiLCJzdWJzdHJpbmciLCJ1cGRhdGVQb3B1cCIsIm1hc2tMYXllciIsIm5hdGl2ZU9iaiIsIlZpZXciLCJ0b3AiLCJsZWZ0IiwiaGVpZ2h0Iiwid2lkdGgiLCJiYWNrZ3JvdW5kQ29sb3IiLCJzY3JlZW5XaWR0aCIsInNjcmVlbiIsInJlc29sdXRpb25XaWR0aCIsInNjcmVlbkhlaWdodCIsInJlc29sdXRpb25IZWlnaHQiLCJwb3B1cFZpZXdXaWR0aCIsInZpZXdDb250ZW50UGFkZGluZyIsInZpZXdDb250ZW50V2lkdGgiLCJkZXNjcmlwdGlvbkxpc3QiLCJ2ZXJzaW9uSW5mbyIsInBvcHVwVmlld0hlaWdodCIsInBvcHVwVmlld0NvbnRlbnRMaXN0Iiwic3JjIiwiaWQiLCJ0YWciLCJwb3NpdGlvbiIsInRleHRTdHlsZXMiLCJzaXplIiwiY29sb3IiLCJ3ZWlnaHQiLCJ3aGl0ZVNwYWNlIiwidGV4dEhlaWdodCIsImNvbnRlbnRUb3AiLCJmb3JFYWNoIiwiaXRlbSIsImluZGV4IiwibGluZVNwYWNpbmciLCJhbGlnbiIsInJlY3RTdHlsZXMiLCJyYWRpdXMiLCJib3R0b20iLCJib3JkZXJDb2xvciIsImJvcmRlcldpZHRoIiwicG9wdXBWaWV3IiwiZHJhd1JlY3QiLCJkcmF3IiwibWF4VG9wIiwibWF4TGVmdCIsImJ1dHRvbldpZHRoIiwiY2xpZW50WSIsImNsaWVudFgiLCJoaWRlIiwic2hvdyIsImRvd25sb2FkUG9wdXBEcmF3aW5nIiwiZWxlbWVudExpc3QiLCJ2ZXJ0aWNhbEFsaWduIiwiY29uY2F0IiwicG9wdXBWaWV3RGF0YSIsImNhbGxiYWNrRGF0YSIsInJlcyIsInByb2dyZXNzRWxlbWVudCIsInJlc2V0IiwiT2JqZWN0IiwiYXNzaWduIiwibmV3RWxlbWVudCIsIm1hcCIsImhhdmUiLCJjaGlsZEl0ZW0iLCJjaGlsZEluZGV4Iiwic2V0U3R5bGUiLCJpc1Byb21wdCIsImdldFNlcnZlck5vIiwiZG93bmxvYWRfd2d0X3VybCIsIm9wZW5V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ZyBmcm9tICdAL2NvbmZpZy9jb21wb25lbnRDb25maWcnO1xyXG5jb25zdCBwbGF0Zm9ybSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpLnBsYXRmb3JtO1xyXG4vLyDkuLvpopzoibJcclxuY29uc3QgJG1haW5Db2xvciA9IGNvbXBvbmVudENvbmZpZy5hcHBVcGRhdGVDb2xvclxyXG4gID8gY29tcG9uZW50Q29uZmlnLmFwcFVwZGF0ZUNvbG9yXHJcbiAgOiAnRkY1Qjc4JztcclxuLy8g5by556qX5Zu+5qCHdXJsXHJcbmNvbnN0ICRpY29uVXJsID0gY29tcG9uZW50Q29uZmlnLmFwcFVwZGF0ZUljb25cclxuICA/IGNvbXBvbmVudENvbmZpZy5hcHBVcGRhdGVJY29uXHJcbiAgOiAnLi4vc3RhdGljL2ljX2FyLnBuZyc7XHJcblxyXG4vLyDojrflj5blvZPliY3lupTnlKjnmoTniYjmnKzlj7dcclxuZXhwb3J0IGNvbnN0IGdldEN1cnJlbnRObyA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xyXG4gIC8vIOiOt+WPluacrOWcsOW6lOeUqOi1hOa6kOeJiOacrOWPt1xyXG4gIHBsdXMucnVudGltZS5nZXRQcm9wZXJ0eShwbHVzLnJ1bnRpbWUuYXBwaWQsIGZ1bmN0aW9uIChpbmYpIHtcclxuICAgIGNhbGxiYWNrICYmXHJcbiAgICAgIGNhbGxiYWNrKHtcclxuICAgICAgICB2ZXJzaW9uQ29kZTogaW5mLnZlcnNpb25Db2RlLFxyXG4gICAgICAgIHZlcnNpb25OYW1lOiBpbmYudmVyc2lvbixcclxuICAgICAgfSk7XHJcbiAgfSk7XHJcbn07XHJcbi8vIOS7juacjeWKoeWZqOS4i+i9veW6lOeUqOi1hOa6kOWMhe+8iHdndOaWh+S7tu+8iVxyXG5jb25zdCBnZXREb3dubG9hZCA9IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgbGV0IGR0YXNrO1xyXG4gIGlmIChkYXRhLnVwZGF0ZVR5cGUgPT0gJ2ZvcmNpYmx5JyB8fCBkYXRhLnVwZGF0ZVR5cGUgPT0gJ3NvbGljaXQnKSB7XHJcbiAgICBsZXQgcG9wdXBEYXRhID0ge1xyXG4gICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgYnV0dG9uTnVtOiAyLFxyXG4gICAgfTtcclxuICAgIGlmIChkYXRhLnVwZGF0ZVR5cGUgPT0gJ2ZvcmNpYmx5Jykge1xyXG4gICAgICBwb3B1cERhdGEuYnV0dG9uTnVtID0gMDtcclxuICAgIH1cclxuICAgIGxldCBsYXN0UHJvZ3Jlc3NWYWx1ZSA9IDA7XHJcbiAgICBsZXQgcG9wdXBPYmogPSBkb3dubG9hZFBvcHVwKHBvcHVwRGF0YSk7XHJcbiAgICBkdGFzayA9IHBsdXMuZG93bmxvYWRlci5jcmVhdGVEb3dubG9hZChcclxuICAgICAgZGF0YS5kb3dubG9hZFVybCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGVuYW1lOiAnX2RvYy91cGRhdGUvJyxcclxuICAgICAgfSxcclxuICAgICAgZnVuY3Rpb24gKGRvd25sb2FkLCBzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgcG9wdXBPYmouY2hhbmdlKHtcclxuICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZTogMTAwLFxyXG4gICAgICAgICAgICBwcm9ncmVzc1RpcDogJ+ato+WcqOWuieijheaWh+S7ti4uLicsXHJcbiAgICAgICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgICAgICBidXR0b25OdW06IDAsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHBsdXMucnVudGltZS5pbnN0YWxsKFxyXG4gICAgICAgICAgICBkb3dubG9hZC5maWxlbmFtZSxcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICBwb3B1cE9iai5jaGFuZ2Uoe1xyXG4gICAgICAgICAgICAgICAgY29udGVudFRleHQ6ICflupTnlKjotYTmupDmm7TmlrDlrozmiJDvvIEnLFxyXG4gICAgICAgICAgICAgICAgYnV0dG9uTnVtOiAxLFxyXG4gICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAgIHBvcHVwT2JqLmNhbmNlbCgpO1xyXG4gICAgICAgICAgICAgIHBsdXMubmF0aXZlVUkuYWxlcnQoJ+WuieijheaWh+S7tuWksei0pVsnICsgZS5jb2RlICsgJ13vvJonICsgZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgcG9wdXBPYmouY2hhbmdlKHtcclxuICAgICAgICAgICAgY29udGVudFRleHQ6ICfmlofku7bkuIvovb3lpLHotKUuLi4nLFxyXG4gICAgICAgICAgICBidXR0b25OdW06IDEsXHJcbiAgICAgICAgICAgIHByb2dyZXNzOiBmYWxzZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGR0YXNrLnN0YXJ0KCk7XHJcbiAgICBkdGFzay5hZGRFdmVudExpc3RlbmVyKCdzdGF0ZWNoYW5nZWQnLCBmdW5jdGlvbiAodGFzaywgc3RhdHVzKSB7XHJcbiAgICAgIHN3aXRjaCAodGFzay5zdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgMTogLy8g5byA5aeLXHJcbiAgICAgICAgICBwb3B1cE9iai5jaGFuZ2Uoe1xyXG4gICAgICAgICAgICBwcm9ncmVzc1ZhbHVlOiAwLFxyXG4gICAgICAgICAgICBwcm9ncmVzc1RpcDogJ+WHhuWkh+S4i+i9vS4uLicsXHJcbiAgICAgICAgICAgIHByb2dyZXNzOiB0cnVlLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIDI6IC8vIOW3sui/nuaOpeWIsOacjeWKoeWZqFxyXG4gICAgICAgICAgcG9wdXBPYmouY2hhbmdlKHtcclxuICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZTogMCxcclxuICAgICAgICAgICAgcHJvZ3Jlc3NUaXA6ICflvIDlp4vkuIvovb0uLi4nLFxyXG4gICAgICAgICAgICBwcm9ncmVzczogdHJ1ZSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAzOlxyXG4gICAgICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBwYXJzZUludChcclxuICAgICAgICAgICAgKHRhc2suZG93bmxvYWRlZFNpemUgLyB0YXNrLnRvdGFsU2l6ZSkgKiAxMDBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBpZiAocHJvZ3Jlc3MgLSBsYXN0UHJvZ3Jlc3NWYWx1ZSA+PSAyKSB7XHJcbiAgICAgICAgICAgIGxhc3RQcm9ncmVzc1ZhbHVlID0gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIHBvcHVwT2JqLmNoYW5nZSh7XHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NWYWx1ZTogcHJvZ3Jlc3MsXHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3NUaXA6ICflt7LkuIvovb0nICsgcHJvZ3Jlc3MgKyAnJScsXHJcbiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHRydWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgLy8g5Y+W5raI5LiL6L29XHJcbiAgICBwb3B1cE9iai5jYW5jZWxEb3dubG9hZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgZHRhc2sgJiYgZHRhc2suYWJvcnQoKTtcclxuICAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAgICAgdGl0bGU6ICflt7Llj5bmtojkuIvovb0nLFxyXG4gICAgICAgIGljb246ICdub25lJyxcclxuICAgICAgfSk7XHJcbiAgICB9O1xyXG4gICAgLy8g6YeN5ZCvQVBQXHJcbiAgICBwb3B1cE9iai5yZWJvb3QgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHBsdXMucnVudGltZS5yZXN0YXJ0KCk7XHJcbiAgICB9O1xyXG4gIH0gZWxzZSBpZiAoZGF0YS51cGRhdGVUeXBlID09ICdzaWxlbnQnKSB7XHJcbiAgICBkdGFzayA9IHBsdXMuZG93bmxvYWRlci5jcmVhdGVEb3dubG9hZChcclxuICAgICAgZGF0YS5kb3dubG9hZFVybCxcclxuICAgICAge1xyXG4gICAgICAgIGZpbGVuYW1lOiAnX2RvYy91cGRhdGUvJyxcclxuICAgICAgfSxcclxuICAgICAgZnVuY3Rpb24gKGRvd25sb2FkLCBzdGF0dXMpIHtcclxuICAgICAgICBpZiAoc3RhdHVzID09IDIwMCkge1xyXG4gICAgICAgICAgcGx1cy5ydW50aW1lLmluc3RhbGwoXHJcbiAgICAgICAgICAgIGRvd25sb2FkLmZpbGVuYW1lLFxyXG4gICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKCflupTnlKjotYTmupDmm7TmlrDlrozmiJAnKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICBwbHVzLm5hdGl2ZVVJLmFsZXJ0KCflronoo4Xmlofku7blpLHotKVbJyArIGUuY29kZSArICdd77yaJyArIGUubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBsdXMubmF0aXZlVUkuYWxlcnQoJ+aWh+S7tuS4i+i9veWksei0pS4uLicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIGR0YXNrLnN0YXJ0KCk7XHJcbiAgfVxyXG59O1xyXG4vLyDmloflrZfmjaLooYxcclxuZnVuY3Rpb24gZHJhd3RleHQodGV4dCwgbWF4V2lkdGgpIHtcclxuICBsZXQgdGV4dEFyciA9IHRleHQuc3BsaXQoJycpO1xyXG4gIGxldCBsZW4gPSB0ZXh0QXJyLmxlbmd0aDtcclxuICAvLyDkuIrkuKroioLngrlcclxuICBsZXQgcHJldmlvdXNOb2RlID0gMDtcclxuICAvLyDorrDlvZXoioLngrnlrr3luqZcclxuICBsZXQgbm9kZVdpZHRoID0gMDtcclxuICAvLyDmlofmnKzmjaLooYzmlbDnu4RcclxuICBsZXQgcm93VGV4dCA9IFtdO1xyXG4gIC8vIOWmguaenOaYr+Wtl+avje+8jOS+p+S/neWtmOmVv+W6plxyXG4gIGxldCBsZXR0ZXJXaWR0aCA9IDA7XHJcbiAgLy8g5rGJ5a2X5a695bqmXHJcbiAgbGV0IGNoaW5lc2VXaWR0aCA9IDE0O1xyXG4gIC8vIG90aGVyRm9udOWuveW6plxyXG4gIGxldCBvdGhlcldpZHRoID0gNztcclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICBpZiAoL1tcXHU0ZTAwLVxcdTlmYTVdfFtcXHVGRTMwLVxcdUZGQTBdL2cudGVzdCh0ZXh0QXJyW2ldKSkge1xyXG4gICAgICBpZiAobGV0dGVyV2lkdGggPiAwKSB7XHJcbiAgICAgICAgaWYgKG5vZGVXaWR0aCArIGNoaW5lc2VXaWR0aCArIGxldHRlcldpZHRoICogb3RoZXJXaWR0aCA+IG1heFdpZHRoKSB7XHJcbiAgICAgICAgICByb3dUZXh0LnB1c2goe1xyXG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHRleHQuc3Vic3RyaW5nKHByZXZpb3VzTm9kZSwgaSksXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIHByZXZpb3VzTm9kZSA9IGk7XHJcbiAgICAgICAgICBub2RlV2lkdGggPSBjaGluZXNlV2lkdGg7XHJcbiAgICAgICAgICBsZXR0ZXJXaWR0aCA9IDA7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG5vZGVXaWR0aCArPSBjaGluZXNlV2lkdGggKyBsZXR0ZXJXaWR0aCAqIG90aGVyV2lkdGg7XHJcbiAgICAgICAgICBsZXR0ZXJXaWR0aCA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChub2RlV2lkdGggKyBjaGluZXNlV2lkdGggPiBtYXhXaWR0aCkge1xyXG4gICAgICAgICAgcm93VGV4dC5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBjb250ZW50OiB0ZXh0LnN1YnN0cmluZyhwcmV2aW91c05vZGUsIGkpLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBwcmV2aW91c05vZGUgPSBpO1xyXG4gICAgICAgICAgbm9kZVdpZHRoID0gY2hpbmVzZVdpZHRoO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBub2RlV2lkdGggKz0gY2hpbmVzZVdpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKC9cXG4vZy50ZXN0KHRleHRBcnJbaV0pKSB7XHJcbiAgICAgICAgcm93VGV4dC5wdXNoKHtcclxuICAgICAgICAgIHR5cGU6ICdicmVhaycsXHJcbiAgICAgICAgICBjb250ZW50OiB0ZXh0LnN1YnN0cmluZyhwcmV2aW91c05vZGUsIGkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHByZXZpb3VzTm9kZSA9IGkgKyAxO1xyXG4gICAgICAgIG5vZGVXaWR0aCA9IDA7XHJcbiAgICAgICAgbGV0dGVyV2lkdGggPSAwO1xyXG4gICAgICB9IGVsc2UgaWYgKHRleHRBcnJbaV0gPT0gJ1xcXFwnICYmIHRleHRBcnJbaSArIDFdID09ICduJykge1xyXG4gICAgICAgIHJvd1RleHQucHVzaCh7XHJcbiAgICAgICAgICB0eXBlOiAnYnJlYWsnLFxyXG4gICAgICAgICAgY29udGVudDogdGV4dC5zdWJzdHJpbmcocHJldmlvdXNOb2RlLCBpKSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwcmV2aW91c05vZGUgPSBpICsgMjtcclxuICAgICAgICBub2RlV2lkdGggPSAwO1xyXG4gICAgICAgIGxldHRlcldpZHRoID0gMDtcclxuICAgICAgfSBlbHNlIGlmICgvW2EtekEtWjAtOV0vZy50ZXN0KHRleHRBcnJbaV0pKSB7XHJcbiAgICAgICAgbGV0dGVyV2lkdGggKz0gMTtcclxuICAgICAgICBpZiAobm9kZVdpZHRoICsgbGV0dGVyV2lkdGggKiBvdGhlcldpZHRoID4gbWF4V2lkdGgpIHtcclxuICAgICAgICAgIHJvd1RleHQucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgICAgICAgY29udGVudDogdGV4dC5zdWJzdHJpbmcocHJldmlvdXNOb2RlLCBpICsgMSAtIGxldHRlcldpZHRoKSxcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgcHJldmlvdXNOb2RlID0gaSArIDEgLSBsZXR0ZXJXaWR0aDtcclxuICAgICAgICAgIG5vZGVXaWR0aCA9IGxldHRlcldpZHRoICogb3RoZXJXaWR0aDtcclxuICAgICAgICAgIGxldHRlcldpZHRoID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKG5vZGVXaWR0aCArIG90aGVyV2lkdGggPiBtYXhXaWR0aCkge1xyXG4gICAgICAgICAgcm93VGV4dC5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxyXG4gICAgICAgICAgICBjb250ZW50OiB0ZXh0LnN1YnN0cmluZyhwcmV2aW91c05vZGUsIGkpLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICBwcmV2aW91c05vZGUgPSBpO1xyXG4gICAgICAgICAgbm9kZVdpZHRoID0gb3RoZXJXaWR0aDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbm9kZVdpZHRoICs9IG90aGVyV2lkdGg7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIGlmIChwcmV2aW91c05vZGUgPCBsZW4pIHtcclxuICAgIHJvd1RleHQucHVzaCh7XHJcbiAgICAgIHR5cGU6ICd0ZXh0JyxcclxuICAgICAgY29udGVudDogdGV4dC5zdWJzdHJpbmcocHJldmlvdXNOb2RlLCBsZW4pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIHJldHVybiByb3dUZXh0O1xyXG59XHJcbi8vIOaYr+WQpuabtOaWsOW8ueeql1xyXG5mdW5jdGlvbiB1cGRhdGVQb3B1cChkYXRhLCBjYWxsYmFjaykge1xyXG4gIC8vIOW8ueeql+mBrue9qeWxglxyXG4gIGxldCBtYXNrTGF5ZXIgPSBuZXcgcGx1cy5uYXRpdmVPYmouVmlldygnbWFza0xheWVyJywge1xyXG4gICAgLy/lhYjliJvlu7rpga7nvanlsYJcclxuICAgIHRvcDogJzBweCcsXHJcbiAgICBsZWZ0OiAnMHB4JyxcclxuICAgIGhlaWdodDogJzEwMCUnLFxyXG4gICAgd2lkdGg6ICcxMDAlJyxcclxuICAgIGJhY2tncm91bmRDb2xvcjogJ3JnYmEoMCwwLDAsMC41KScsXHJcbiAgfSk7XHJcblxyXG4gIC8vIOS7peS4i+S4uuiuoeeul+iPnOWNleeahG52aWV357uY5Yi25biD5bGA77yM5Li65Zu65a6a566X5rOV77yM5L2/55So6ICF5peg5YWz5YWz5b+DXHJcbiAgY29uc3Qgc2NyZWVuV2lkdGggPSBwbHVzLnNjcmVlbi5yZXNvbHV0aW9uV2lkdGg7XHJcbiAgY29uc3Qgc2NyZWVuSGVpZ2h0ID0gcGx1cy5zY3JlZW4ucmVzb2x1dGlvbkhlaWdodDtcclxuICAvL+W8ueeql+WuueWZqOWuveW6plxyXG4gIGNvbnN0IHBvcHVwVmlld1dpZHRoID0gc2NyZWVuV2lkdGggKiAwLjc7XHJcbiAgLy8g5by556qX5a655Zmo55qEUGFkZGluZ1xyXG4gIGNvbnN0IHZpZXdDb250ZW50UGFkZGluZyA9IDIwO1xyXG4gIC8vIOW8ueeql+WuueWZqOeahOWuveW6plxyXG4gIGNvbnN0IHZpZXdDb250ZW50V2lkdGggPSBwYXJzZUludChwb3B1cFZpZXdXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZyAqIDIpO1xyXG4gIC8vIOaPj+i/sOeahOWIl+ihqFxyXG4gIGNvbnN0IGRlc2NyaXB0aW9uTGlzdCA9IGRyYXd0ZXh0KGRhdGEudmVyc2lvbkluZm8sIHZpZXdDb250ZW50V2lkdGgpO1xyXG4gIC8vIOW8ueeql+WuueWZqOmrmOW6plxyXG4gIGxldCBwb3B1cFZpZXdIZWlnaHQgPSA4MCArIDIwICsgMjAgKyA5MCArIDEwO1xyXG5cclxuICBsZXQgcG9wdXBWaWV3Q29udGVudExpc3QgPSBbXHJcbiAgICB7XHJcbiAgICAgIHNyYzogJGljb25VcmwsXHJcbiAgICAgIGlkOiAnbG9nbycsXHJcbiAgICAgIHRhZzogJ2ltZycsXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgdG9wOiAnMHB4JyxcclxuICAgICAgICBsZWZ0OiAocG9wdXBWaWV3V2lkdGggLSAxMjQpIC8gMiArICdweCcsXHJcbiAgICAgICAgd2lkdGg6ICcxMjRweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnODBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICd0aXRsZScsXHJcbiAgICAgIHRleHQ6ICflj5HnjrDmlrDniYjmnKwnICsgZGF0YS52ZXJzaW9uTmFtZSxcclxuICAgICAgdGV4dFN0eWxlczoge1xyXG4gICAgICAgIHNpemU6ICcxOHB4JyxcclxuICAgICAgICBjb2xvcjogJyMzMzMnLFxyXG4gICAgICAgIHdlaWdodDogJ2JvbGQnLFxyXG4gICAgICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnLFxyXG4gICAgICB9LFxyXG4gICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIHRvcDogJzkwcHgnLFxyXG4gICAgICAgIGxlZnQ6IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgIGhlaWdodDogJzMwcHgnLFxyXG4gICAgICB9LFxyXG4gICAgfSxcclxuICBdO1xyXG4gIGNvbnN0IHRleHRIZWlnaHQgPSAxODtcclxuICBsZXQgY29udGVudFRvcCA9IDEzMDtcclxuICBkZXNjcmlwdGlvbkxpc3QuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgIGlmIChpbmRleCA+IDApIHtcclxuICAgICAgcG9wdXBWaWV3SGVpZ2h0ICs9IHRleHRIZWlnaHQ7XHJcbiAgICAgIGNvbnRlbnRUb3AgKz0gdGV4dEhlaWdodDtcclxuICAgIH1cclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjb250ZW50JyArIGluZGV4ICsgMSxcclxuICAgICAgdGV4dDogaXRlbS5jb250ZW50LFxyXG4gICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgc2l6ZTogJzE0cHgnLFxyXG4gICAgICAgIGNvbG9yOiAnIzY2NicsXHJcbiAgICAgICAgbGluZVNwYWNpbmc6ICc1MCUnLFxyXG4gICAgICAgIGFsaWduOiAnbGVmdCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgdG9wOiBjb250ZW50VG9wICsgJ3B4JyxcclxuICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIHdpZHRoOiB2aWV3Q29udGVudFdpZHRoICsgJ3B4JyxcclxuICAgICAgICBoZWlnaHQ6IHRleHRIZWlnaHQgKyAncHgnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBpZiAoaXRlbS50eXBlID09ICdicmVhaycpIHtcclxuICAgICAgY29udGVudFRvcCArPSAxMDtcclxuICAgICAgcG9wdXBWaWV3SGVpZ2h0ICs9IDEwO1xyXG4gICAgfVxyXG4gIH0pO1xyXG5cclxuICBpZiAoZGF0YS51cGRhdGVUeXBlID09ICdmb3JjaWJseScpIHtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdyZWN0JywgLy/nu5jliLblupXovrnmjInpkq5cclxuICAgICAgcmVjdFN0eWxlczoge1xyXG4gICAgICAgIHJhZGl1czogJzZweCcsXHJcbiAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgYm90dG9tOiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIGxlZnQ6IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgIGhlaWdodDogJzMwcHgnLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgICBwb3B1cFZpZXdDb250ZW50TGlzdC5wdXNoKHtcclxuICAgICAgdGFnOiAnZm9udCcsXHJcbiAgICAgIGlkOiAnY29uZmlybVRleHQnLFxyXG4gICAgICB0ZXh0OiAn56uL5Y2z5Y2H57qnJyxcclxuICAgICAgdGV4dFN0eWxlczoge1xyXG4gICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICBjb2xvcjogJyNGRkYnLFxyXG4gICAgICAgIGxpbmVTcGFjaW5nOiAnMCUnLFxyXG4gICAgICB9LFxyXG4gICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgIGJvdHRvbTogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIHdpZHRoOiB2aWV3Q29udGVudFdpZHRoICsgJ3B4JyxcclxuICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH0gZWxzZSB7XHJcbiAgICAvLyDnu5jliLblupXovrnmjInpkq5cclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdyZWN0JyxcclxuICAgICAgaWQ6ICdjYW5jZWxCb3gnLFxyXG4gICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgcmFkaXVzOiAnM3B4JyxcclxuICAgICAgICBib3JkZXJDb2xvcjogJyNmMWYxZjEnLFxyXG4gICAgICAgIGJvcmRlcldpZHRoOiAnMXB4JyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgbGVmdDogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdyZWN0JyxcclxuICAgICAgaWQ6ICdjb25maXJtQm94JyxcclxuICAgICAgcmVjdFN0eWxlczoge1xyXG4gICAgICAgIHJhZGl1czogJzNweCcsXHJcbiAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgYm90dG9tOiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIGxlZnQ6XHJcbiAgICAgICAgICAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICtcclxuICAgICAgICAgIHZpZXdDb250ZW50UGFkZGluZyAqIDIgK1xyXG4gICAgICAgICAgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjYW5jZWxUZXh0JyxcclxuICAgICAgdGV4dDogJ+aaguS4jeWNh+e6pycsXHJcbiAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICBzaXplOiAnMTRweCcsXHJcbiAgICAgICAgY29sb3I6ICcjNjY2JyxcclxuICAgICAgICBsaW5lU3BhY2luZzogJzAlJyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgbGVmdDogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICAgIHBvcHVwVmlld0NvbnRlbnRMaXN0LnB1c2goe1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjb25maXJtVGV4dCcsXHJcbiAgICAgIHRleHQ6ICfnq4vljbPljYfnuqcnLFxyXG4gICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgc2l6ZTogJzE0cHgnLFxyXG4gICAgICAgIGNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgbGluZVNwYWNpbmc6ICcwJScsXHJcbiAgICAgICAgd2hpdGVTcGFjZTogJ25vcm1hbCcsXHJcbiAgICAgIH0sXHJcbiAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgYm90dG9tOiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgIGxlZnQ6XHJcbiAgICAgICAgICAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICtcclxuICAgICAgICAgIHZpZXdDb250ZW50UGFkZGluZyAqIDIgK1xyXG4gICAgICAgICAgJ3B4JyxcclxuICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8g5by556qX5YaF5a65XHJcbiAgbGV0IHBvcHVwVmlldyA9IG5ldyBwbHVzLm5hdGl2ZU9iai5WaWV3KCdwb3B1cFZpZXcnLCB7XHJcbiAgICAvL+WIm+W7uuW6lemDqOWbvuagh+iPnOWNlVxyXG4gICAgdGFnOiAncmVjdCcsXHJcbiAgICB0b3A6IChzY3JlZW5IZWlnaHQgLSBwb3B1cFZpZXdIZWlnaHQpIC8gMiArICdweCcsXHJcbiAgICBsZWZ0OiAnMTUlJyxcclxuICAgIGhlaWdodDogcG9wdXBWaWV3SGVpZ2h0ICsgJ3B4JyxcclxuICAgIHdpZHRoOiAnNzAlJyxcclxuICB9KTtcclxuICAvLyDnu5jliLbnmb3oibLog4zmma9cclxuICBwb3B1cFZpZXcuZHJhd1JlY3QoXHJcbiAgICB7XHJcbiAgICAgIGNvbG9yOiAnI0ZGRkZGRicsXHJcbiAgICAgIHJhZGl1czogJzhweCcsXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0b3A6ICc0MHB4JyxcclxuICAgICAgaGVpZ2h0OiBwb3B1cFZpZXdIZWlnaHQgLSA0MCArICdweCcsXHJcbiAgICB9XHJcbiAgKTtcclxuXHJcbiAgcG9wdXBWaWV3LmRyYXcocG9wdXBWaWV3Q29udGVudExpc3QpO1xyXG4gIHBvcHVwVmlldy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICBsZXQgbWF4VG9wID0gcG9wdXBWaWV3SGVpZ2h0IC0gdmlld0NvbnRlbnRQYWRkaW5nO1xyXG4gICAgbGV0IG1heExlZnQgPSBwb3B1cFZpZXdXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZztcclxuICAgIGxldCBidXR0b25XaWR0aCA9ICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDI7XHJcbiAgICBpZiAoZS5jbGllbnRZID4gbWF4VG9wIC0gMzAgJiYgZS5jbGllbnRZIDwgbWF4VG9wKSB7XHJcbiAgICAgIGlmIChkYXRhLnVwZGF0ZVR5cGUgPT0gJ2ZvcmNpYmx5Jykge1xyXG4gICAgICAgIGlmIChlLmNsaWVudFggPiB2aWV3Q29udGVudFBhZGRpbmcgJiYgZS5jbGllbnRYIDwgbWF4TGVmdCkge1xyXG4gICAgICAgICAgLy8g56uL5Y2z5Y2H57qnXHJcbiAgICAgICAgICBtYXNrTGF5ZXIuaGlkZSgpO1xyXG4gICAgICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOaaguS4jeWNh+e6p1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIGUuY2xpZW50WCA+IHZpZXdDb250ZW50UGFkZGluZyAmJlxyXG4gICAgICAgICAgZS5jbGllbnRYIDwgbWF4TGVmdCAtIGJ1dHRvbldpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBtYXNrTGF5ZXIuaGlkZSgpO1xyXG4gICAgICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGUuY2xpZW50WCA+IG1heExlZnQgLSBidXR0b25XaWR0aCAmJiBlLmNsaWVudFggPCBtYXhMZWZ0KSB7XHJcbiAgICAgICAgICAvLyDnq4vljbPljYfnuqdcclxuICAgICAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgICAgICBwb3B1cFZpZXcuaGlkZSgpO1xyXG4gICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9KTtcclxuICBpZiAoZGF0YS51cGRhdGVUeXBlID09ICdzb2xpY2l0Jykge1xyXG4gICAgLy8g54K55Ye76YGu572p5bGCXHJcbiAgICBtYXNrTGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIC8v5aSE55CG6YGu572p5bGC54K55Ye7XHJcbiAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgIHBvcHVwVmlldy5oaWRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbiAgLy8g5pi+56S65by556qXXHJcbiAgbWFza0xheWVyLnNob3coKTtcclxuICBwb3B1cFZpZXcuc2hvdygpO1xyXG59XHJcbi8vIOaWh+S7tuS4i+i9veeahOW8ueeql+e7mOWbvlxyXG5mdW5jdGlvbiBkb3dubG9hZFBvcHVwRHJhd2luZyhkYXRhKSB7XHJcbiAgLy8g5Lul5LiL5Li66K6h566X6I+c5Y2V55qEbnZpZXfnu5jliLbluIPlsYDvvIzkuLrlm7rlrprnrpfms5XvvIzkvb/nlKjogIXml6DlhbPlhbPlv4NcclxuICBjb25zdCBzY3JlZW5XaWR0aCA9IHBsdXMuc2NyZWVuLnJlc29sdXRpb25XaWR0aDtcclxuICBjb25zdCBzY3JlZW5IZWlnaHQgPSBwbHVzLnNjcmVlbi5yZXNvbHV0aW9uSGVpZ2h0O1xyXG4gIC8v5by556qX5a655Zmo5a695bqmXHJcbiAgY29uc3QgcG9wdXBWaWV3V2lkdGggPSBzY3JlZW5XaWR0aCAqIDAuNztcclxuICAvLyDlvLnnqpflrrnlmajnmoRQYWRkaW5nXHJcbiAgY29uc3Qgdmlld0NvbnRlbnRQYWRkaW5nID0gMjA7XHJcbiAgLy8g5by556qX5a655Zmo55qE5a695bqmXHJcbiAgY29uc3Qgdmlld0NvbnRlbnRXaWR0aCA9IHBvcHVwVmlld1dpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nICogMjtcclxuICAvLyDlvLnnqpflrrnlmajpq5jluqZcclxuICBsZXQgcG9wdXBWaWV3SGVpZ2h0ID0gdmlld0NvbnRlbnRQYWRkaW5nICogMyArIDYwO1xyXG4gIGxldCBwcm9ncmVzc1RpcCA9IGRhdGEucHJvZ3Jlc3NUaXAgfHwgJ+WHhuWkh+S4i+i9vS4uLic7XHJcbiAgbGV0IGNvbnRlbnRUZXh0ID0gZGF0YS5jb250ZW50VGV4dCB8fCAn5q2j5Zyo5Li65oKo5pu05paw77yM6K+36ICQ5b+D562J5b6FJztcclxuICBsZXQgZWxlbWVudExpc3QgPSBbXHJcbiAgICB7XHJcbiAgICAgIHRhZzogJ3JlY3QnLCAvL+iDjOaZr+iJslxyXG4gICAgICBjb2xvcjogJyNGRkZGRkYnLFxyXG4gICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgcmFkaXVzOiAnOHB4JyxcclxuICAgICAgfSxcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICBpZDogJ3RpdGxlJyxcclxuICAgICAgdGV4dDogJ+WNh+e6p0FQUCcsXHJcbiAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICBzaXplOiAnMTZweCcsXHJcbiAgICAgICAgY29sb3I6ICcjMzMzJyxcclxuICAgICAgICB3ZWlnaHQ6ICdib2xkJyxcclxuICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICB0YWc6ICdmb250JyxcclxuICAgICAgaWQ6ICdjb250ZW50JyxcclxuICAgICAgdGV4dDogY29udGVudFRleHQsXHJcbiAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICBzaXplOiAnMTRweCcsXHJcbiAgICAgICAgY29sb3I6ICcjMzMzJyxcclxuICAgICAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcclxuICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgfSxcclxuICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyAqIDIgKyAzMCArICdweCcsXHJcbiAgICAgICAgaGVpZ2h0OiAnMjBweCcsXHJcbiAgICAgIH0sXHJcbiAgICB9LFxyXG4gIF07XHJcbiAgLy8g5piv5ZCm5pyJ6L+b5bqm5p2hXHJcbiAgaWYgKGRhdGEucHJvZ3Jlc3MpIHtcclxuICAgIHBvcHVwVmlld0hlaWdodCArPSB2aWV3Q29udGVudFBhZGRpbmcgKyA0MDtcclxuICAgIGVsZW1lbnRMaXN0ID0gZWxlbWVudExpc3QuY29uY2F0KFtcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgIGlkOiAncHJvZ3Jlc3NWYWx1ZScsXHJcbiAgICAgICAgdGV4dDogcHJvZ3Jlc3NUaXAsXHJcbiAgICAgICAgdGV4dFN0eWxlczoge1xyXG4gICAgICAgICAgc2l6ZTogJzE0cHgnLFxyXG4gICAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyAqIDQgKyAyMCArICdweCcsXHJcbiAgICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGFnOiAncmVjdCcsIC8v57uY5Yi26L+b5bqm5p2h6IOM5pmvXHJcbiAgICAgICAgaWQ6ICdwcm9ncmVzc0JnJyxcclxuICAgICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgICByYWRpdXM6ICc0cHgnLFxyXG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZjFmMWYxJyxcclxuICAgICAgICAgIGJvcmRlcldpZHRoOiAnMXB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICB0b3A6IHZpZXdDb250ZW50UGFkZGluZyAqIDQgKyA2MCArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnOHB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG4gIGlmIChkYXRhLmJ1dHRvbk51bSA9PSAyKSB7XHJcbiAgICBwb3B1cFZpZXdIZWlnaHQgKz0gdmlld0NvbnRlbnRQYWRkaW5nICsgMzA7XHJcbiAgICBlbGVtZW50TGlzdCA9IGVsZW1lbnRMaXN0LmNvbmNhdChbXHJcbiAgICAgIHtcclxuICAgICAgICB0YWc6ICdyZWN0JywgLy/nu5jliLblupXovrnmjInpkq5cclxuICAgICAgICByZWN0U3R5bGVzOiB7XHJcbiAgICAgICAgICByYWRpdXM6ICczcHgnLFxyXG4gICAgICAgICAgYm9yZGVyQ29sb3I6ICcjZjFmMWYxJyxcclxuICAgICAgICAgIGJvcmRlcldpZHRoOiAnMXB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6ICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDIgKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ3JlY3QnLCAvL+e7mOWItuW6lei+ueaMiemSrlxyXG4gICAgICAgIHJlY3RTdHlsZXM6IHtcclxuICAgICAgICAgIHJhZGl1czogJzNweCcsXHJcbiAgICAgICAgICBjb2xvcjogJG1haW5Db2xvcixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OlxyXG4gICAgICAgICAgICAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICtcclxuICAgICAgICAgICAgdmlld0NvbnRlbnRQYWRkaW5nICogMiArXHJcbiAgICAgICAgICAgICdweCcsXHJcbiAgICAgICAgICB3aWR0aDogKHZpZXdDb250ZW50V2lkdGggLSB2aWV3Q29udGVudFBhZGRpbmcpIC8gMiArICdweCcsXHJcbiAgICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgICB9LFxyXG4gICAgICB9LFxyXG4gICAgICB7XHJcbiAgICAgICAgdGFnOiAnZm9udCcsXHJcbiAgICAgICAgaWQ6ICdjYW5jZWxUZXh0JyxcclxuICAgICAgICB0ZXh0OiAn5Y+W5raI5LiL6L29JyxcclxuICAgICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgICBzaXplOiAnMTRweCcsXHJcbiAgICAgICAgICBjb2xvcjogJyM2NjYnLFxyXG4gICAgICAgICAgbGluZVNwYWNpbmc6ICcwJScsXHJcbiAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6ICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDIgKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgIGlkOiAnY29uZmlybVRleHQnLFxyXG4gICAgICAgIHRleHQ6ICflkI7lj7DkuIvovb0nLFxyXG4gICAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICAgIGNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgICBsaW5lU3BhY2luZzogJzAlJyxcclxuICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgIGJvdHRvbTogdmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgIGxlZnQ6XHJcbiAgICAgICAgICAgICh2aWV3Q29udGVudFdpZHRoIC0gdmlld0NvbnRlbnRQYWRkaW5nKSAvIDIgK1xyXG4gICAgICAgICAgICB2aWV3Q29udGVudFBhZGRpbmcgKiAyICtcclxuICAgICAgICAgICAgJ3B4JyxcclxuICAgICAgICAgIHdpZHRoOiAodmlld0NvbnRlbnRXaWR0aCAtIHZpZXdDb250ZW50UGFkZGluZykgLyAyICsgJ3B4JyxcclxuICAgICAgICAgIGhlaWdodDogJzMwcHgnLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH0sXHJcbiAgICBdKTtcclxuICB9XHJcbiAgaWYgKGRhdGEuYnV0dG9uTnVtID09IDEpIHtcclxuICAgIHBvcHVwVmlld0hlaWdodCArPSB2aWV3Q29udGVudFBhZGRpbmcgKyA0MDtcclxuICAgIGVsZW1lbnRMaXN0ID0gZWxlbWVudExpc3QuY29uY2F0KFtcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ3JlY3QnLCAvL+e7mOWItuW6lei+ueaMiemSrlxyXG4gICAgICAgIHJlY3RTdHlsZXM6IHtcclxuICAgICAgICAgIHJhZGl1czogJzZweCcsXHJcbiAgICAgICAgICBjb2xvcjogJG1haW5Db2xvcixcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnNDBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgICAge1xyXG4gICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgIGlkOiAnY29uZmlybVRleHQnLFxyXG4gICAgICAgIHRleHQ6ICflhbPpl60nLFxyXG4gICAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICAgIGNvbG9yOiAnI0ZGRicsXHJcbiAgICAgICAgICBsaW5lU3BhY2luZzogJzAlJyxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICBib3R0b206IHZpZXdDb250ZW50UGFkZGluZyArICdweCcsXHJcbiAgICAgICAgICBsZWZ0OiB2aWV3Q29udGVudFBhZGRpbmcgKyAncHgnLFxyXG4gICAgICAgICAgd2lkdGg6IHZpZXdDb250ZW50V2lkdGggKyAncHgnLFxyXG4gICAgICAgICAgaGVpZ2h0OiAnNDBweCcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuICByZXR1cm4ge1xyXG4gICAgcG9wdXBWaWV3SGVpZ2h0OiBwb3B1cFZpZXdIZWlnaHQsXHJcbiAgICBwb3B1cFZpZXdXaWR0aDogcG9wdXBWaWV3V2lkdGgsXHJcbiAgICBzY3JlZW5IZWlnaHQ6IHNjcmVlbkhlaWdodCxcclxuICAgIHZpZXdDb250ZW50V2lkdGg6IHZpZXdDb250ZW50V2lkdGgsXHJcbiAgICB2aWV3Q29udGVudFBhZGRpbmc6IHZpZXdDb250ZW50UGFkZGluZyxcclxuICAgIGVsZW1lbnRMaXN0OiBlbGVtZW50TGlzdCxcclxuICB9O1xyXG59XHJcbi8vIOaWh+S7tuS4i+i9veeahOW8ueeql1xyXG5mdW5jdGlvbiBkb3dubG9hZFBvcHVwKGRhdGEpIHtcclxuICAvLyDlvLnnqpfpga7nvanlsYJcclxuICBsZXQgbWFza0xheWVyID0gbmV3IHBsdXMubmF0aXZlT2JqLlZpZXcoJ21hc2tMYXllcicsIHtcclxuICAgIC8v5YWI5Yib5bu66YGu572p5bGCXHJcbiAgICB0b3A6ICcwcHgnLFxyXG4gICAgbGVmdDogJzBweCcsXHJcbiAgICBoZWlnaHQ6ICcxMDAlJyxcclxuICAgIHdpZHRoOiAnMTAwJScsXHJcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICdyZ2JhKDAsMCwwLDAuNSknLFxyXG4gIH0pO1xyXG4gIGxldCBwb3B1cFZpZXdEYXRhID0gZG93bmxvYWRQb3B1cERyYXdpbmcoZGF0YSk7XHJcbiAgLy8g5by556qX5YaF5a65XHJcbiAgbGV0IHBvcHVwVmlldyA9IG5ldyBwbHVzLm5hdGl2ZU9iai5WaWV3KCdwb3B1cFZpZXcnLCB7XHJcbiAgICAvL+WIm+W7uuW6lemDqOWbvuagh+iPnOWNlVxyXG4gICAgdGFnOiAncmVjdCcsXHJcbiAgICB0b3A6XHJcbiAgICAgIChwb3B1cFZpZXdEYXRhLnNjcmVlbkhlaWdodCAtIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0KSAvIDIgKyAncHgnLFxyXG4gICAgbGVmdDogJzE1JScsXHJcbiAgICBoZWlnaHQ6IHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0ICsgJ3B4JyxcclxuICAgIHdpZHRoOiAnNzAlJyxcclxuICB9KTtcclxuICBsZXQgcHJvZ3Jlc3NWYWx1ZSA9IDA7XHJcbiAgbGV0IHByb2dyZXNzVGlwID0gMDtcclxuICBsZXQgY29udGVudFRleHQgPSAwO1xyXG4gIGxldCBidXR0b25OdW0gPSAyO1xyXG4gIGlmIChkYXRhLmJ1dHRvbk51bSA+PSAwKSB7XHJcbiAgICBidXR0b25OdW0gPSBkYXRhLmJ1dHRvbk51bTtcclxuICB9XHJcbiAgcG9wdXBWaWV3LmRyYXcocG9wdXBWaWV3RGF0YS5lbGVtZW50TGlzdCk7XHJcbiAgbGV0IGNhbGxiYWNrRGF0YSA9IHtcclxuICAgIGNoYW5nZTogZnVuY3Rpb24gKHJlcykge1xyXG4gICAgICBsZXQgcHJvZ3Jlc3NFbGVtZW50ID0gW107XHJcbiAgICAgIGlmIChyZXMucHJvZ3Jlc3NWYWx1ZSkge1xyXG4gICAgICAgIHByb2dyZXNzVmFsdWUgPSByZXMucHJvZ3Jlc3NWYWx1ZTtcclxuICAgICAgICAvLyDnu5jliLbov5vluqbmnaFcclxuICAgICAgICBwcm9ncmVzc0VsZW1lbnQucHVzaCh7XHJcbiAgICAgICAgICB0YWc6ICdyZWN0JywgLy/nu5jliLbov5vluqbmnaHog4zmma9cclxuICAgICAgICAgIGlkOiAncHJvZ3Jlc3NWYWx1ZUJnJyxcclxuICAgICAgICAgIHJlY3RTdHlsZXM6IHtcclxuICAgICAgICAgICAgcmFkaXVzOiAnNHB4JyxcclxuICAgICAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgcG9zaXRpb246IHtcclxuICAgICAgICAgICAgdG9wOiBwb3B1cFZpZXdEYXRhLnZpZXdDb250ZW50UGFkZGluZyAqIDQgKyA2MCArICdweCcsXHJcbiAgICAgICAgICAgIGxlZnQ6IHBvcHVwVmlld0RhdGEudmlld0NvbnRlbnRQYWRkaW5nICsgJ3B4JyxcclxuICAgICAgICAgICAgd2lkdGg6XHJcbiAgICAgICAgICAgICAgcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFdpZHRoICogKHJlcy5wcm9ncmVzc1ZhbHVlIC8gMTAwKSArICdweCcsXHJcbiAgICAgICAgICAgIGhlaWdodDogJzhweCcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXMucHJvZ3Jlc3NUaXApIHtcclxuICAgICAgICBwcm9ncmVzc1RpcCA9IHJlcy5wcm9ncmVzc1RpcDtcclxuICAgICAgICBwcm9ncmVzc0VsZW1lbnQucHVzaCh7XHJcbiAgICAgICAgICB0YWc6ICdmb250JyxcclxuICAgICAgICAgIGlkOiAncHJvZ3Jlc3NWYWx1ZScsXHJcbiAgICAgICAgICB0ZXh0OiByZXMucHJvZ3Jlc3NUaXAsXHJcbiAgICAgICAgICB0ZXh0U3R5bGVzOiB7XHJcbiAgICAgICAgICAgIHNpemU6ICcxNHB4JyxcclxuICAgICAgICAgICAgY29sb3I6ICRtYWluQ29sb3IsXHJcbiAgICAgICAgICAgIHdoaXRlU3BhY2U6ICdub3JtYWwnLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHBvc2l0aW9uOiB7XHJcbiAgICAgICAgICAgIHRvcDogcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcgKiA0ICsgMjAgKyAncHgnLFxyXG4gICAgICAgICAgICBoZWlnaHQ6ICczMHB4JyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlcy5jb250ZW50VGV4dCkge1xyXG4gICAgICAgIGNvbnRlbnRUZXh0ID0gcmVzLmNvbnRlbnRUZXh0O1xyXG4gICAgICAgIHByb2dyZXNzRWxlbWVudC5wdXNoKHtcclxuICAgICAgICAgIHRhZzogJ2ZvbnQnLFxyXG4gICAgICAgICAgaWQ6ICdjb250ZW50JyxcclxuICAgICAgICAgIHRleHQ6IHJlcy5jb250ZW50VGV4dCxcclxuICAgICAgICAgIHRleHRTdHlsZXM6IHtcclxuICAgICAgICAgICAgc2l6ZTogJzE2cHgnLFxyXG4gICAgICAgICAgICBjb2xvcjogJyMzMzMnLFxyXG4gICAgICAgICAgICB3aGl0ZVNwYWNlOiAnbm9ybWFsJyxcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBwb3NpdGlvbjoge1xyXG4gICAgICAgICAgICB0b3A6IHBvcHVwVmlld0RhdGEudmlld0NvbnRlbnRQYWRkaW5nICogMiArIDMwICsgJ3B4JyxcclxuICAgICAgICAgICAgaGVpZ2h0OiAnMzBweCcsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyZXMuYnV0dG9uTnVtID49IDAgJiYgYnV0dG9uTnVtICE9IHJlcy5idXR0b25OdW0pIHtcclxuICAgICAgICBidXR0b25OdW0gPSByZXMuYnV0dG9uTnVtO1xyXG4gICAgICAgIHBvcHVwVmlldy5yZXNldCgpO1xyXG4gICAgICAgIHBvcHVwVmlld0RhdGEgPSBkb3dubG9hZFBvcHVwRHJhd2luZyhcclxuICAgICAgICAgIE9iamVjdC5hc3NpZ24oXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICBwcm9ncmVzc1ZhbHVlOiBwcm9ncmVzc1ZhbHVlLFxyXG4gICAgICAgICAgICAgIHByb2dyZXNzVGlwOiBwcm9ncmVzc1RpcCxcclxuICAgICAgICAgICAgICBjb250ZW50VGV4dDogY29udGVudFRleHQsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHJlc1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbGV0IG5ld0VsZW1lbnQgPSBbXTtcclxuICAgICAgICBwb3B1cFZpZXdEYXRhLmVsZW1lbnRMaXN0Lm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgIGxldCBoYXZlID0gZmFsc2U7XHJcbiAgICAgICAgICBwcm9ncmVzc0VsZW1lbnQuZm9yRWFjaCgoY2hpbGRJdGVtLCBjaGlsZEluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtLmlkID09IGNoaWxkSXRlbS5pZCkge1xyXG4gICAgICAgICAgICAgIGhhdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIGlmICghaGF2ZSkge1xyXG4gICAgICAgICAgICBuZXdFbGVtZW50LnB1c2goaXRlbSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcHJvZ3Jlc3NFbGVtZW50ID0gbmV3RWxlbWVudC5jb25jYXQocHJvZ3Jlc3NFbGVtZW50KTtcclxuICAgICAgICBwb3B1cFZpZXcuc2V0U3R5bGUoe1xyXG4gICAgICAgICAgdGFnOiAncmVjdCcsXHJcbiAgICAgICAgICB0b3A6XHJcbiAgICAgICAgICAgIChwb3B1cFZpZXdEYXRhLnNjcmVlbkhlaWdodCAtIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0KSAvIDIgK1xyXG4gICAgICAgICAgICAncHgnLFxyXG4gICAgICAgICAgbGVmdDogJzE1JScsXHJcbiAgICAgICAgICBoZWlnaHQ6IHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0ICsgJ3B4JyxcclxuICAgICAgICAgIHdpZHRoOiAnNzAlJyxcclxuICAgICAgICB9KTtcclxuICAgICAgICBwb3B1cFZpZXcuZHJhdyhwcm9ncmVzc0VsZW1lbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHBvcHVwVmlldy5kcmF3KHByb2dyZXNzRWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0sXHJcbiAgICBjYW5jZWw6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgbWFza0xheWVyLmhpZGUoKTtcclxuICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgIH0sXHJcbiAgfTtcclxuICBwb3B1cFZpZXcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgbGV0IG1heFRvcCA9XHJcbiAgICAgIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3SGVpZ2h0IC0gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmc7XHJcbiAgICBsZXQgbWF4TGVmdCA9XHJcbiAgICAgIHBvcHVwVmlld0RhdGEucG9wdXBWaWV3V2lkdGggLSBwb3B1cFZpZXdEYXRhLnZpZXdDb250ZW50UGFkZGluZztcclxuICAgIGlmIChlLmNsaWVudFkgPiBtYXhUb3AgLSA0MCAmJiBlLmNsaWVudFkgPCBtYXhUb3ApIHtcclxuICAgICAgaWYgKGJ1dHRvbk51bSA9PSAxKSB7XHJcbiAgICAgICAgLy8g5Y2V5oyJ6ZKuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZS5jbGllbnRYID4gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcgJiZcclxuICAgICAgICAgIGUuY2xpZW50WCA8IG1heExlZnRcclxuICAgICAgICApIHtcclxuICAgICAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgICAgICBwb3B1cFZpZXcuaGlkZSgpO1xyXG4gICAgICAgICAgY2FsbGJhY2tEYXRhLnJlYm9vdCgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChidXR0b25OdW0gPT0gMikge1xyXG4gICAgICAgIC8vIOWPjOaMiemSrlxyXG4gICAgICAgIGxldCBidXR0b25XaWR0aCA9XHJcbiAgICAgICAgICAocG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFdpZHRoIC0gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcpIC9cclxuICAgICAgICAgIDI7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgZS5jbGllbnRYID4gcG9wdXBWaWV3RGF0YS52aWV3Q29udGVudFBhZGRpbmcgJiZcclxuICAgICAgICAgIGUuY2xpZW50WCA8IG1heExlZnQgLSBidXR0b25XaWR0aCAtIHBvcHVwVmlld0RhdGEudmlld0NvbnRlbnRQYWRkaW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBtYXNrTGF5ZXIuaGlkZSgpO1xyXG4gICAgICAgICAgcG9wdXBWaWV3LmhpZGUoKTtcclxuICAgICAgICAgIGNhbGxiYWNrRGF0YS5jYW5jZWxEb3dubG9hZCgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZS5jbGllbnRYID4gbWF4TGVmdCAtIGJ1dHRvbldpZHRoICYmIGUuY2xpZW50WCA8IG1heExlZnQpIHtcclxuICAgICAgICAgIG1hc2tMYXllci5oaWRlKCk7XHJcbiAgICAgICAgICBwb3B1cFZpZXcuaGlkZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0pO1xyXG4gIC8vIOaYvuekuuW8ueeql1xyXG4gIG1hc2tMYXllci5zaG93KCk7XHJcbiAgcG9wdXBWaWV3LnNob3coKTtcclxuICAvLyDmlLnlj5jov5vluqbmnaFcclxuICByZXR1cm4gY2FsbGJhY2tEYXRhO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChpc1Byb21wdCA9IGZhbHNlKSB7XHJcbiAgZ2V0Q3VycmVudE5vKCh2ZXJzaW9uSW5mbykgPT4ge1xyXG4gICAgY29tcG9uZW50Q29uZmlnLmdldFNlcnZlck5vKHZlcnNpb25JbmZvLCBpc1Byb21wdCwgKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzLnVwZGF0ZVR5cGUgPT0gJ2ZvcmNpYmx5JyB8fCByZXMudXBkYXRlVHlwZSA9PSAnc2lsZW50Jykge1xyXG4gICAgICAgIGlmICgvXFwud2d0JC9pLnRlc3QocmVzLmRvd25sb2FkX3dndF91cmwpKSB7XHJcbiAgICAgICAgICBnZXREb3dubG9hZChyZXMpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoL1xcLmh0bWwkL2kudGVzdChyZXMuZG93bmxvYWRVcmwpKSB7XHJcbiAgICAgICAgICBwbHVzLnJ1bnRpbWUub3BlblVSTChyZXMuZG93bmxvYWRVcmwpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAocGxhdGZvcm0gPT0gJ2FuZHJvaWQnKSB7XHJcbiAgICAgICAgICAgIGdldERvd25sb2FkKHJlcyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBwbHVzLnJ1bnRpbWUub3BlblVSTChyZXMuZG93bmxvYWRVcmwpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmIChyZXMudXBkYXRlVHlwZSA9PSAnc29saWNpdCcpIHtcclxuICAgICAgICB1cGRhdGVQb3B1cChyZXMsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIGlmICgvXFwud2d0JC9pLnRlc3QocmVzLmRvd25sb2FkVXJsKSkge1xyXG4gICAgICAgICAgICBnZXREb3dubG9hZChyZXMpO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICgvXFwuaHRtbCQvaS50ZXN0KHJlcy5kb3dubG9hZFVybCkpIHtcclxuICAgICAgICAgICAgcGx1cy5ydW50aW1lLm9wZW5VUkwocmVzLmRvd25sb2FkVXJsKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChwbGF0Zm9ybSA9PSAnYW5kcm9pZCcpIHtcclxuICAgICAgICAgICAgICBnZXREb3dubG9hZChyZXMpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHBsdXMucnVudGltZS5vcGVuVVJMKHJlcy5kb3dubG9hZFVybCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfSk7XHJcbn1cclxuXHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///523\n"); /***/ }), /* 524 */ @@ -30243,7 +28113,7 @@ eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefaul /***/ (function(module, exports, __webpack_require__) { "use strict"; -eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 72));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 74));\nvar _checkAPPupdate = __webpack_require__(/*! ../api/checkAPPupdate */ 525);\n/**** 此文件说明请看注释 *****/\n// 可以用自己项目的请求方法\n// 请求配置说明:https://ext.dcloud.net.cn/plugin?id=822\n\n/**** 结束 *****/\nvar platform = uni.getSystemInfoSync().platform;\nvar phoneInfo = uni.getSystemInfoSync();\nvar _default = {\n // 发起ajax请求获取服务端版本号\n getServerNo: function () {\n var _getServerNo = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(version) {\n var isPrompt,\n callback,\n appleId,\n marketId,\n params,\n res,\n _args = arguments;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n isPrompt = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;\n callback = _args.length > 2 ? _args[2] : undefined;\n if (!(platform != 'android')) {\n _context.next = 6;\n break;\n }\n appleId = 1549638327; //app的appleId\n plus.runtime.launchApplication({\n action: \"itms-apps://itunes.apple.com/cn/app/id\".concat(appleId, \"?mt=8\")\n }, function (e) {\n __f__(\"log\", 'Open system default browser failed: ' + e.message, \" at config/componentConfig.js:18\");\n });\n return _context.abrupt(\"return\");\n case 6:\n // let httpData = {\n // version: version.versionCode,\n // // 版本名称\n // versionName: version.versionName,\n // // setupPage参数说明(判断用户是不是从设置页面点击的更新,如果是设置页面点击的更新,有不要用静默更新了,不然用户点击没反应很奇怪的)\n // setupPage: isPrompt,\n // };\n // if (platform == 'android') {\n // httpData.type = 1101;\n // } else {\n // httpData.type = 1102;\n /* 接口入参说明\r\n * version: 应用当前版本号(已自动获取)\r\n * versionName: 应用当前版本名称(已自动获取)\r\n * type:平台(1101是安卓,1102是IOS)\r\n */\n /****************以下是示例*******************/\n // 可以用自己项目的请求方法(接口自己找后台要,插件不提供)\n marketId = 100;\n phoneInfo.brand = phoneInfo.brand.toLowerCase();\n _context.t0 = phoneInfo.brand;\n _context.next = _context.t0 === 'xiaomi' ? 11 : _context.t0 === 'huawei' ? 13 : _context.t0 === 'tengxun' ? 15 : _context.t0 === 'oppo' ? 17 : _context.t0 === 'vivo' ? 19 : _context.t0 === 'samsung' ? 21 : 23;\n break;\n case 11:\n marketId = 1;\n return _context.abrupt(\"break\", 25);\n case 13:\n marketId = 2;\n return _context.abrupt(\"break\", 25);\n case 15:\n marketId = 3;\n return _context.abrupt(\"break\", 25);\n case 17:\n marketId = 4;\n return _context.abrupt(\"break\", 25);\n case 19:\n marketId = 5;\n return _context.abrupt(\"break\", 25);\n case 21:\n marketId = 6;\n return _context.abrupt(\"break\", 25);\n case 23:\n marketId = 100;\n return _context.abrupt(\"break\", 25);\n case 25:\n __f__(\"log\", 'marketId', marketId, \" at config/componentConfig.js:73\");\n __f__(\"log\", 'phoneInfo.brand', phoneInfo.brand, \" at config/componentConfig.js:74\");\n params = {\n marketId: marketId,\n packageName: 'com.xiaofa.shopAdmin',\n currVersionKey: version\n };\n _context.next = 30;\n return (0, _checkAPPupdate.GetAPPversion)(params);\n case 30:\n res = _context.sent;\n if (res && res.status == 200) {\n if (res.data) {}\n }\n\n // .get('api/common/v1/app_version', httpData, {\n // isPrompt: isPrompt,\n // })\n // .then((res) => {\n // /* res的数据说明\n // * | 参数名称 | 一定返回 | 类型 | 描述\n // * | -------------|--------- | --------- | ------------- |\n // * | versionCode | y | int | 版本号 |\n // * | versionName | y | String | 版本名称 |\n // * | versionInfo | y | String | 版本信息 |\n // * | updateType | y | String | forcibly = 强制更新, solicit = 弹窗确认更新, silent = 静默更新 |\n // * | downloadUrl | y | String | 版本下载链接(IOS安装包更新请放跳转store应用商店链接,安卓apk和wgt文件放文件下载链接) |\n // */\n // if (res && res.downloadUrl) {\n // // 兼容之前的版本(updateType是新版才有的参数)\n // if (res.updateType) {\n // callback && callback(res);\n // } else {\n // if (res.forceUpdate) {\n // res.updateType = 'forcibly';\n // } else {\n // res.updateType = 'solicit';\n // }\n // callback && callback(res);\n // }\n // } else if (isPrompt) {\n // uni.showToast({\n // title: '暂无新版本',\n // icon: 'none',\n // });\n // }\n // });\n /****************以上是示例*******************/\n case 32:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n function getServerNo(_x) {\n return _getServerNo.apply(this, arguments);\n }\n return getServerNo;\n }(),\n // 弹窗主颜色(不填默认粉色)\n appUpdateColor: 'f00',\n // 弹窗图标(不填显示默认图标,链接配置示例如: '/static/demo/ic_attention.png')\n appUpdateIcon: ''\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 98)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlnL2NvbXBvbmVudENvbmZpZy5qcyJdLCJuYW1lcyI6WyJwbGF0Zm9ybSIsInVuaSIsImdldFN5c3RlbUluZm9TeW5jIiwicGhvbmVJbmZvIiwiZ2V0U2VydmVyTm8iLCJ2ZXJzaW9uIiwiaXNQcm9tcHQiLCJjYWxsYmFjayIsImFwcGxlSWQiLCJwbHVzIiwicnVudGltZSIsImxhdW5jaEFwcGxpY2F0aW9uIiwiYWN0aW9uIiwiZSIsIm1lc3NhZ2UiLCJtYXJrZXRJZCIsImJyYW5kIiwidG9Mb3dlckNhc2UiLCJwYXJhbXMiLCJwYWNrYWdlTmFtZSIsImN1cnJWZXJzaW9uS2V5IiwiR2V0QVBQdmVyc2lvbiIsInJlcyIsInN0YXR1cyIsImRhdGEiLCJhcHBVcGRhdGVDb2xvciIsImFwcFVwZGF0ZUljb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUdBO0FBSEE7QUFDQTtBQUNBOztBQUVBO0FBQ0EsSUFBTUEsUUFBUSxHQUFHQyxHQUFHLENBQUNDLGlCQUFpQixFQUFFLENBQUNGLFFBQVE7QUFDakQsSUFBTUcsU0FBUyxHQUFHRixHQUFHLENBQUNDLGlCQUFpQixFQUFFO0FBQUMsZUFDM0I7RUFDYjtFQUNBRSxXQUFXO0lBQUEsMkZBQUUsaUJBQU9DLE9BQU87TUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtNQUFBO1FBQUE7VUFBQTtZQUFBO2NBQUVDLFFBQVEsMkRBQUcsS0FBSztjQUFFQyxRQUFRO2NBQUEsTUFDakRQLFFBQVEsSUFBSSxTQUFTO2dCQUFBO2dCQUFBO2NBQUE7Y0FDbkJRLE9BQU8sR0FBRyxVQUFVLEVBQUU7Y0FDMUJDLElBQUksQ0FBQ0MsT0FBTyxDQUFDQyxpQkFBaUIsQ0FDNUI7Z0JBQ0VDLE1BQU0sa0RBQTJDSixPQUFPO2NBQzFELENBQUMsRUFDRCxVQUFVSyxDQUFDLEVBQUU7Z0JBQ1gsYUFBWSxzQ0FBc0MsR0FBR0EsQ0FBQyxDQUFDQyxPQUFPO2NBQ2hFLENBQUMsQ0FDRjtjQUFDO1lBQUE7Y0FLSjtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBRUE7QUFDSjtBQUNBO0FBQ0E7QUFDQTtjQUNJO2NBQ0E7Y0FFSUMsUUFBUSxHQUFHLEdBQUc7Y0FFckJaLFNBQVMsQ0FBQ2EsS0FBSyxHQUFHYixTQUFTLENBQUNhLEtBQUssQ0FBQ0MsV0FBVyxFQUFFO2NBQUMsY0FFckNkLFNBQVMsQ0FBQ2EsS0FBSztjQUFBLGdDQUNoQixRQUFRLHdCQUdSLFFBQVEsd0JBR1IsU0FBUyx3QkFHVCxNQUFNLHdCQUdOLE1BQU0sd0JBR04sU0FBUztjQUFBO1lBQUE7Y0FkWkQsUUFBUSxHQUFHLENBQUM7Y0FBQztZQUFBO2NBR2JBLFFBQVEsR0FBRyxDQUFDO2NBQUM7WUFBQTtjQUdiQSxRQUFRLEdBQUcsQ0FBQztjQUFDO1lBQUE7Y0FHYkEsUUFBUSxHQUFHLENBQUM7Y0FBQztZQUFBO2NBR2JBLFFBQVEsR0FBRyxDQUFDO2NBQUM7WUFBQTtjQUdiQSxRQUFRLEdBQUcsQ0FBQztjQUFDO1lBQUE7Y0FHYkEsUUFBUSxHQUFHLEdBQUc7Y0FBQztZQUFBO2NBSW5CLGFBQVksVUFBVSxFQUFFQSxRQUFRO2NBQ25DLGFBQVksaUJBQWlCLEVBQUNaLFNBQVMsQ0FBQ2EsS0FBSztjQUV0Q0UsTUFBTSxHQUFHO2dCQUNYSCxRQUFRLEVBQUVBLFFBQVE7Z0JBQ2xCSSxXQUFXLEVBQUUsc0JBQXNCO2dCQUNuQ0MsY0FBYyxFQUFFZjtjQUNsQixDQUFDO2NBQUE7Y0FBQSxPQUVlLElBQUFnQiw2QkFBYSxFQUFDSCxNQUFNLENBQUM7WUFBQTtjQUFqQ0ksR0FBRztjQUVQLElBQUlBLEdBQUcsSUFBSUEsR0FBRyxDQUFDQyxNQUFNLElBQUksR0FBRyxFQUFFO2dCQUM1QixJQUFJRCxHQUFHLENBQUNFLElBQUksRUFBRSxDQUNkO2NBQ0Y7O2NBRUE7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO1lBQUE7WUFBQTtjQUFBO1VBQUE7UUFBQTtNQUFBO0lBQUEsQ0FDRDtJQUFBO01BQUE7SUFBQTtJQUFBO0VBQUE7RUFDRDtFQUNBQyxjQUFjLEVBQUUsS0FBSztFQUNyQjtFQUNBQyxhQUFhLEVBQUU7QUFDakIsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjUyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqIOatpOaWh+S7tuivtOaYjuivt+eci+azqOmHiiAqKioqKi9cclxuLy8g5Y+v5Lul55So6Ieq5bex6aG555uu55qE6K+35rGC5pa55rOVXHJcbi8vIOivt+axgumFjee9ruivtOaYju+8mmh0dHBzOi8vZXh0LmRjbG91ZC5uZXQuY24vcGx1Z2luP2lkPTgyMlxyXG5pbXBvcnQgeyBHZXRBUFB2ZXJzaW9uIH0gZnJvbSAnLi4vYXBpL2NoZWNrQVBQdXBkYXRlJztcclxuLyoqKiog57uT5p2fICoqKioqL1xyXG5jb25zdCBwbGF0Zm9ybSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpLnBsYXRmb3JtO1xyXG5jb25zdCBwaG9uZUluZm8gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8vIOWPkei1t2FqYXjor7fmsYLojrflj5bmnI3liqHnq6/niYjmnKzlj7dcclxuICBnZXRTZXJ2ZXJObzogYXN5bmMgKHZlcnNpb24sIGlzUHJvbXB0ID0gZmFsc2UsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICBpZiAocGxhdGZvcm0gIT0gJ2FuZHJvaWQnKSB7XHJcbiAgICAgIGxldCBhcHBsZUlkID0gMTU0OTYzODMyNzsgLy9hcHDnmoRhcHBsZUlkXHJcbiAgICAgIHBsdXMucnVudGltZS5sYXVuY2hBcHBsaWNhdGlvbihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhY3Rpb246IGBpdG1zLWFwcHM6Ly9pdHVuZXMuYXBwbGUuY29tL2NuL2FwcC9pZCR7YXBwbGVJZH0/bXQ9OGAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ09wZW4gc3lzdGVtIGRlZmF1bHQgYnJvd3NlciBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsZXQgaHR0cERhdGEgPSB7XHJcbiAgICAvLyAgIHZlcnNpb246IHZlcnNpb24udmVyc2lvbkNvZGUsXHJcbiAgICAvLyAgIC8vIOeJiOacrOWQjeensFxyXG4gICAgLy8gICB2ZXJzaW9uTmFtZTogdmVyc2lvbi52ZXJzaW9uTmFtZSxcclxuICAgIC8vICAgLy8gc2V0dXBQYWdl5Y+C5pWw6K+05piO77yI5Yik5pat55So5oi35piv5LiN5piv5LuO6K6+572u6aG16Z2i54K55Ye755qE5pu05paw77yM5aaC5p6c5piv6K6+572u6aG16Z2i54K55Ye755qE5pu05paw77yM5pyJ5LiN6KaB55So6Z2Z6buY5pu05paw5LqG77yM5LiN54S255So5oi354K55Ye75rKh5Y+N5bqU5b6I5aWH5oCq55qE77yJXHJcbiAgICAvLyAgIHNldHVwUGFnZTogaXNQcm9tcHQsXHJcbiAgICAvLyB9O1xyXG4gICAgLy8gaWYgKHBsYXRmb3JtID09ICdhbmRyb2lkJykge1xyXG4gICAgLy8gICBodHRwRGF0YS50eXBlID0gMTEwMTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGh0dHBEYXRhLnR5cGUgPSAxMTAyO1xyXG5cclxuICAgIC8qIOaOpeWPo+WFpeWPguivtOaYjlxyXG4gICAgICogdmVyc2lvbjog5bqU55So5b2T5YmN54mI5pys5Y+377yI5bey6Ieq5Yqo6I635Y+W77yJXHJcbiAgICAgKiB2ZXJzaW9uTmFtZTog5bqU55So5b2T5YmN54mI5pys5ZCN56ew77yI5bey6Ieq5Yqo6I635Y+W77yJXHJcbiAgICAgKiB0eXBl77ya5bmz5Y+w77yIMTEwMeaYr+WuieWNk++8jDExMDLmmK9JT1PvvIlcclxuICAgICAqL1xyXG4gICAgLyoqKioqKioqKioqKioqKirku6XkuIvmmK/npLrkvosqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgLy8g5Y+v5Lul55So6Ieq5bex6aG555uu55qE6K+35rGC5pa55rOV77yI5o6l5Y+j6Ieq5bex5om+5ZCO5Y+w6KaB77yM5o+S5Lu25LiN5o+Q5L6b77yJXHJcblxyXG4gICAgbGV0IG1hcmtldElkID0gMTAwO1xyXG5cdFxyXG5cdHBob25lSW5mby5icmFuZCA9IHBob25lSW5mby5icmFuZC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAocGhvbmVJbmZvLmJyYW5kKSB7XHJcbiAgICAgIGNhc2UgJ3hpYW9taSc6XHJcbiAgICAgICAgbWFya2V0SWQgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdodWF3ZWknOlxyXG4gICAgICAgIG1hcmtldElkID0gMjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndGVuZ3h1bic6XHJcbiAgICAgICAgbWFya2V0SWQgPSAzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcHBvJzpcclxuICAgICAgICBtYXJrZXRJZCA9IDQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Zpdm8nOlxyXG4gICAgICAgIG1hcmtldElkID0gNTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc2Ftc3VuZyc6XHJcbiAgICAgICAgbWFya2V0SWQgPSA2O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG1hcmtldElkID0gMTAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdtYXJrZXRJZCcsIG1hcmtldElkKTtcclxuXHRjb25zb2xlLmxvZygncGhvbmVJbmZvLmJyYW5kJyxwaG9uZUluZm8uYnJhbmQpXHJcblxyXG4gICAgbGV0IHBhcmFtcyA9IHtcclxuICAgICAgbWFya2V0SWQ6IG1hcmtldElkLFxyXG4gICAgICBwYWNrYWdlTmFtZTogJ2NvbS54aWFvZmEuc2hvcEFkbWluJyxcclxuICAgICAgY3VyclZlcnNpb25LZXk6IHZlcnNpb24sXHJcbiAgICB9O1xyXG5cclxuICAgIGxldCByZXMgPSBhd2FpdCBHZXRBUFB2ZXJzaW9uKHBhcmFtcyk7XHJcblxyXG4gICAgaWYgKHJlcyAmJiByZXMuc3RhdHVzID09IDIwMCkge1xyXG4gICAgICBpZiAocmVzLmRhdGEpIHtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIC5nZXQoJ2FwaS9jb21tb24vdjEvYXBwX3ZlcnNpb24nLCBodHRwRGF0YSwge1xyXG4gICAgLy8gICBpc1Byb21wdDogaXNQcm9tcHQsXHJcbiAgICAvLyB9KVxyXG4gICAgLy8gLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgLy8gICAvKiByZXPnmoTmlbDmja7or7TmmI5cclxuICAgIC8vICAgICogfCDlj4LmlbDlkI3np7AgICAgICAgIHwg5LiA5a6a6L+U5ZueICAgICB8IOexu+WeiyAgICAgICAgfCDmj4/ov7BcclxuICAgIC8vICAgICogfCAtLS0tLS0tLS0tLS0tfC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfFxyXG4gICAgLy8gICAgKiB8IHZlcnNpb25Db2RlICAgICB8IHkgICAgICAgIHwgaW50ICAgICAgIHwg54mI5pys5Y+3ICAgICAgICB8XHJcbiAgICAvLyAgICAqIHwgdmVyc2lvbk5hbWUgICAgIHwgeSAgICAgICAgfCBTdHJpbmcgICAgfCDniYjmnKzlkI3np7AgICAgICB8XHJcbiAgICAvLyAgICAqIHwgdmVyc2lvbkluZm8gICAgIHwgeSAgICAgICAgfCBTdHJpbmcgICAgfCDniYjmnKzkv6Hmga8gICAgICB8XHJcbiAgICAvLyAgICAqIHwgdXBkYXRlVHlwZSAgICAgIHwgeSAgICAgICAgfCBTdHJpbmcgICAgfCBmb3JjaWJseSA9IOW8uuWItuabtOaWsCwgc29saWNpdCA9IOW8ueeql+ehruiupOabtOaWsCwgc2lsZW50ID0g6Z2Z6buY5pu05pawIHxcclxuICAgIC8vICAgICogfCBkb3dubG9hZFVybCAgICAgfCB5ICAgICAgICB8IFN0cmluZyAgICB8IOeJiOacrOS4i+i9vemTvuaOpe+8iElPU+WuieijheWMheabtOaWsOivt+aUvui3s+i9rHN0b3Jl5bqU55So5ZWG5bqX6ZO+5o6lLOWuieWNk2Fwa+WSjHdndOaWh+S7tuaUvuaWh+S7tuS4i+i9vemTvuaOpe+8iSAgfFxyXG4gICAgLy8gICAgKi9cclxuICAgIC8vICAgaWYgKHJlcyAmJiByZXMuZG93bmxvYWRVcmwpIHtcclxuICAgIC8vICAgICAvLyDlhbzlrrnkuYvliY3nmoTniYjmnKzvvIh1cGRhdGVUeXBl5piv5paw54mI5omN5pyJ55qE5Y+C5pWw77yJXHJcbiAgICAvLyAgICAgaWYgKHJlcy51cGRhdGVUeXBlKSB7XHJcbiAgICAvLyAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyZXMpO1xyXG4gICAgLy8gICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICBpZiAocmVzLmZvcmNlVXBkYXRlKSB7XHJcbiAgICAvLyAgICAgICAgIHJlcy51cGRhdGVUeXBlID0gJ2ZvcmNpYmx5JztcclxuICAgIC8vICAgICAgIH0gZWxzZSB7XHJcbiAgICAvLyAgICAgICAgIHJlcy51cGRhdGVUeXBlID0gJ3NvbGljaXQnO1xyXG4gICAgLy8gICAgICAgfVxyXG4gICAgLy8gICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzKTtcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgIH0gZWxzZSBpZiAoaXNQcm9tcHQpIHtcclxuICAgIC8vICAgICB1bmkuc2hvd1RvYXN0KHtcclxuICAgIC8vICAgICAgIHRpdGxlOiAn5pqC5peg5paw54mI5pysJyxcclxuICAgIC8vICAgICAgIGljb246ICdub25lJyxcclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfSk7XHJcbiAgICAvKioqKioqKioqKioqKioqKuS7peS4iuaYr+ekuuS+iyoqKioqKioqKioqKioqKioqKiovXHJcbiAgfSxcclxuICAvLyDlvLnnqpfkuLvpopzoibLvvIjkuI3loavpu5jorqTnsonoibLvvIlcclxuICBhcHBVcGRhdGVDb2xvcjogJ2YwMCcsXHJcbiAgLy8g5by556qX5Zu+5qCH77yI5LiN5aGr5pi+56S66buY6K6k5Zu+5qCH77yM6ZO+5o6l6YWN572u56S65L6L5aaC77yaICcvc3RhdGljL2RlbW8vaWNfYXR0ZW50aW9uLnBuZyfvvIlcclxuICBhcHBVcGRhdGVJY29uOiAnJyxcclxufTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///524\n"); +eval("/* WEBPACK VAR INJECTION */(function(__f__) {\n\nvar _interopRequireDefault = __webpack_require__(/*! @babel/runtime/helpers/interopRequireDefault */ 1);\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.default = void 0;\nvar _regenerator = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/regenerator */ 72));\nvar _asyncToGenerator2 = _interopRequireDefault(__webpack_require__(/*! @babel/runtime/helpers/asyncToGenerator */ 74));\nvar _checkAPPupdate = __webpack_require__(/*! ../api/checkAPPupdate */ 525);\n/**** 此文件说明请看注释 *****/\n// 可以用自己项目的请求方法\n// 请求配置说明:https://ext.dcloud.net.cn/plugin?id=822\n\n/**** 结束 *****/\nvar platform = uni.getSystemInfoSync().platform;\nvar phoneInfo = uni.getSystemInfoSync();\nvar _default = {\n // 发起ajax请求获取服务端版本号\n getServerNo: function () {\n var _getServerNo = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee(version) {\n var isPrompt,\n callback,\n appleId,\n marketId,\n params,\n res,\n _args = arguments;\n return _regenerator.default.wrap(function _callee$(_context) {\n while (1) {\n switch (_context.prev = _context.next) {\n case 0:\n isPrompt = _args.length > 1 && _args[1] !== undefined ? _args[1] : false;\n callback = _args.length > 2 ? _args[2] : undefined;\n if (!(platform != 'android')) {\n _context.next = 6;\n break;\n }\n appleId = 1549638327; //app的appleId\n plus.runtime.launchApplication({\n action: \"itms-apps://itunes.apple.com/cn/app/id\".concat(appleId, \"?mt=8\")\n }, function (e) {\n __f__(\"log\", 'Open system default browser failed: ' + e.message, \" at config/componentConfig.js:18\");\n });\n return _context.abrupt(\"return\");\n case 6:\n // let httpData = {\n // version: version.versionCode,\n // // 版本名称\n // versionName: version.versionName,\n // // setupPage参数说明(判断用户是不是从设置页面点击的更新,如果是设置页面点击的更新,有不要用静默更新了,不然用户点击没反应很奇怪的)\n // setupPage: isPrompt,\n // };\n // if (platform == 'android') {\n // httpData.type = 1101;\n // } else {\n // httpData.type = 1102;\n /* 接口入参说明\r\n * version: 应用当前版本号(已自动获取)\r\n * versionName: 应用当前版本名称(已自动获取)\r\n * type:平台(1101是安卓,1102是IOS)\r\n */\n /****************以下是示例*******************/\n // 可以用自己项目的请求方法(接口自己找后台要,插件不提供)\n marketId = 100;\n phoneInfo.brand = phoneInfo.brand.toLowerCase();\n _context.t0 = phoneInfo.brand;\n _context.next = _context.t0 === 'xiaomi' ? 11 : _context.t0 === 'huawei' ? 13 : _context.t0 === 'tengxun' ? 15 : _context.t0 === 'oppo' ? 17 : _context.t0 === 'vivo' ? 19 : _context.t0 === 'samsung' ? 21 : 23;\n break;\n case 11:\n marketId = 1;\n return _context.abrupt(\"break\", 25);\n case 13:\n marketId = 2;\n return _context.abrupt(\"break\", 25);\n case 15:\n marketId = 3;\n return _context.abrupt(\"break\", 25);\n case 17:\n marketId = 4;\n return _context.abrupt(\"break\", 25);\n case 19:\n marketId = 5;\n return _context.abrupt(\"break\", 25);\n case 21:\n marketId = 6;\n return _context.abrupt(\"break\", 25);\n case 23:\n marketId = 100;\n return _context.abrupt(\"break\", 25);\n case 25:\n __f__(\"log\", 'marketId', marketId, \" at config/componentConfig.js:73\");\n __f__(\"log\", 'phoneInfo.brand', phoneInfo.brand, \" at config/componentConfig.js:74\");\n params = {\n marketId: marketId,\n packageName: 'com.xiaofa.shopAdmin',\n currVersionKey: version\n };\n _context.next = 30;\n return (0, _checkAPPupdate.GetAPPversion)(params);\n case 30:\n res = _context.sent;\n if (res && res.status == 200) {\n if (res.data) {\n res.data.updateType = 'solicit';\n if (res.data.is_force_update) {\n res.updateType = 'forcibly';\n callback && callback(res.data);\n } else {\n callback && callback(res.data);\n }\n }\n }\n\n // .get('api/common/v1/app_version', httpData, {\n // isPrompt: isPrompt,\n // })\n // .then((res) => {\n // /* res的数据说明\n // * | 参数名称 | 一定返回 | 类型 | 描述\n // * | -------------|--------- | --------- | ------------- |\n // * | versionCode | y | int | 版本号 |\n // * | versionName | y | String | 版本名称 |\n // * | versionInfo | y | String | 版本信息 |\n // * | updateType | y | String | forcibly = 强制更新, solicit = 弹窗确认更新, silent = 静默更新 |\n // * | downloadUrl | y | String | 版本下载链接(IOS安装包更新请放跳转store应用商店链接,安卓apk和wgt文件放文件下载链接) |\n // */\n // if (res && res.downloadUrl) {\n // // 兼容之前的版本(updateType是新版才有的参数)\n // if (res.updateType) {\n // callback && callback(res);\n // } else {\n // if (res.forceUpdate) {\n // res.updateType = 'forcibly';\n // } else {\n // res.updateType = 'solicit';\n // }\n // callback && callback(res);\n // }\n // } else if (isPrompt) {\n // uni.showToast({\n // title: '暂无新版本',\n // icon: 'none',\n // });\n // }\n // });\n /****************以上是示例*******************/\n case 32:\n case \"end\":\n return _context.stop();\n }\n }\n }, _callee);\n }));\n function getServerNo(_x) {\n return _getServerNo.apply(this, arguments);\n }\n return getServerNo;\n }(),\n // 弹窗主颜色(不填默认粉色)\n appUpdateColor: 'f00',\n // 弹窗图标(不填显示默认图标,链接配置示例如: '/static/demo/ic_attention.png')\n appUpdateIcon: ''\n};\nexports.default = _default;\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./node_modules/@dcloudio/vue-cli-plugin-uni/lib/format-log.js */ 98)[\"default\"]))//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInVuaS1hcHA6Ly8vY29uZmlnL2NvbXBvbmVudENvbmZpZy5qcyJdLCJuYW1lcyI6WyJwbGF0Zm9ybSIsInVuaSIsImdldFN5c3RlbUluZm9TeW5jIiwicGhvbmVJbmZvIiwiZ2V0U2VydmVyTm8iLCJ2ZXJzaW9uIiwiaXNQcm9tcHQiLCJjYWxsYmFjayIsImFwcGxlSWQiLCJwbHVzIiwicnVudGltZSIsImxhdW5jaEFwcGxpY2F0aW9uIiwiYWN0aW9uIiwiZSIsIm1lc3NhZ2UiLCJtYXJrZXRJZCIsImJyYW5kIiwidG9Mb3dlckNhc2UiLCJwYXJhbXMiLCJwYWNrYWdlTmFtZSIsImN1cnJWZXJzaW9uS2V5IiwiR2V0QVBQdmVyc2lvbiIsInJlcyIsInN0YXR1cyIsImRhdGEiLCJ1cGRhdGVUeXBlIiwiaXNfZm9yY2VfdXBkYXRlIiwiYXBwVXBkYXRlQ29sb3IiLCJhcHBVcGRhdGVJY29uIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFHQTtBQUhBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLElBQU1BLFFBQVEsR0FBR0MsR0FBRyxDQUFDQyxpQkFBaUIsRUFBRSxDQUFDRixRQUFRO0FBQ2pELElBQU1HLFNBQVMsR0FBR0YsR0FBRyxDQUFDQyxpQkFBaUIsRUFBRTtBQUFDLGVBQzNCO0VBQ2I7RUFDQUUsV0FBVztJQUFBLDJGQUFFLGlCQUFPQyxPQUFPO01BQUE7UUFBQTtRQUFBO1FBQUE7UUFBQTtRQUFBO1FBQUE7TUFBQTtRQUFBO1VBQUE7WUFBQTtjQUFFQyxRQUFRLDJEQUFHLEtBQUs7Y0FBRUMsUUFBUTtjQUFBLE1BQ2pEUCxRQUFRLElBQUksU0FBUztnQkFBQTtnQkFBQTtjQUFBO2NBQ25CUSxPQUFPLEdBQUcsVUFBVSxFQUFFO2NBQzFCQyxJQUFJLENBQUNDLE9BQU8sQ0FBQ0MsaUJBQWlCLENBQzVCO2dCQUNFQyxNQUFNLGtEQUEyQ0osT0FBTztjQUMxRCxDQUFDLEVBQ0QsVUFBVUssQ0FBQyxFQUFFO2dCQUNYLGFBQVksc0NBQXNDLEdBQUdBLENBQUMsQ0FBQ0MsT0FBTztjQUNoRSxDQUFDLENBQ0Y7Y0FBQztZQUFBO2NBS0o7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUVBO0FBQ0o7QUFDQTtBQUNBO0FBQ0E7Y0FDSTtjQUNBO2NBRUlDLFFBQVEsR0FBRyxHQUFHO2NBRWxCWixTQUFTLENBQUNhLEtBQUssR0FBR2IsU0FBUyxDQUFDYSxLQUFLLENBQUNDLFdBQVcsRUFBRTtjQUFDLGNBRXhDZCxTQUFTLENBQUNhLEtBQUs7Y0FBQSxnQ0FDaEIsUUFBUSx3QkFHUixRQUFRLHdCQUdSLFNBQVMsd0JBR1QsTUFBTSx3QkFHTixNQUFNLHdCQUdOLFNBQVM7Y0FBQTtZQUFBO2NBZFpELFFBQVEsR0FBRyxDQUFDO2NBQUM7WUFBQTtjQUdiQSxRQUFRLEdBQUcsQ0FBQztjQUFDO1lBQUE7Y0FHYkEsUUFBUSxHQUFHLENBQUM7Y0FBQztZQUFBO2NBR2JBLFFBQVEsR0FBRyxDQUFDO2NBQUM7WUFBQTtjQUdiQSxRQUFRLEdBQUcsQ0FBQztjQUFDO1lBQUE7Y0FHYkEsUUFBUSxHQUFHLENBQUM7Y0FBQztZQUFBO2NBR2JBLFFBQVEsR0FBRyxHQUFHO2NBQUM7WUFBQTtjQUluQixhQUFZLFVBQVUsRUFBRUEsUUFBUTtjQUNoQyxhQUFZLGlCQUFpQixFQUFFWixTQUFTLENBQUNhLEtBQUs7Y0FFMUNFLE1BQU0sR0FBRztnQkFDWEgsUUFBUSxFQUFFQSxRQUFRO2dCQUNsQkksV0FBVyxFQUFFLHNCQUFzQjtnQkFDbkNDLGNBQWMsRUFBRWY7Y0FDbEIsQ0FBQztjQUFBO2NBQUEsT0FFZSxJQUFBZ0IsNkJBQWEsRUFBQ0gsTUFBTSxDQUFDO1lBQUE7Y0FBakNJLEdBQUc7Y0FFUCxJQUFJQSxHQUFHLElBQUlBLEdBQUcsQ0FBQ0MsTUFBTSxJQUFJLEdBQUcsRUFBRTtnQkFDNUIsSUFBSUQsR0FBRyxDQUFDRSxJQUFJLEVBQUU7a0JBQ1pGLEdBQUcsQ0FBQ0UsSUFBSSxDQUFDQyxVQUFVLEdBQUcsU0FBUztrQkFDL0IsSUFBSUgsR0FBRyxDQUFDRSxJQUFJLENBQUNFLGVBQWUsRUFBRTtvQkFDNUJKLEdBQUcsQ0FBQ0csVUFBVSxHQUFHLFVBQVU7b0JBQzNCbEIsUUFBUSxJQUFJQSxRQUFRLENBQUNlLEdBQUcsQ0FBQ0UsSUFBSSxDQUFDO2tCQUNoQyxDQUFDLE1BQU07b0JBQ0xqQixRQUFRLElBQUlBLFFBQVEsQ0FBQ2UsR0FBRyxDQUFDRSxJQUFJLENBQUM7a0JBQ2hDO2dCQUNGO2NBQ0Y7O2NBRUE7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO2NBQ0E7Y0FDQTtjQUNBO1lBQUE7WUFBQTtjQUFBO1VBQUE7UUFBQTtNQUFBO0lBQUEsQ0FDRDtJQUFBO01BQUE7SUFBQTtJQUFBO0VBQUE7RUFDRDtFQUNBRyxjQUFjLEVBQUUsS0FBSztFQUNyQjtFQUNBQyxhQUFhLEVBQUU7QUFDakIsQ0FBQztBQUFBLDJCIiwiZmlsZSI6IjUyNC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKioqIOatpOaWh+S7tuivtOaYjuivt+eci+azqOmHiiAqKioqKi9cclxuLy8g5Y+v5Lul55So6Ieq5bex6aG555uu55qE6K+35rGC5pa55rOVXHJcbi8vIOivt+axgumFjee9ruivtOaYju+8mmh0dHBzOi8vZXh0LmRjbG91ZC5uZXQuY24vcGx1Z2luP2lkPTgyMlxyXG5pbXBvcnQgeyBHZXRBUFB2ZXJzaW9uIH0gZnJvbSAnLi4vYXBpL2NoZWNrQVBQdXBkYXRlJztcclxuLyoqKiog57uT5p2fICoqKioqL1xyXG5jb25zdCBwbGF0Zm9ybSA9IHVuaS5nZXRTeXN0ZW1JbmZvU3luYygpLnBsYXRmb3JtO1xyXG5jb25zdCBwaG9uZUluZm8gPSB1bmkuZ2V0U3lzdGVtSW5mb1N5bmMoKTtcclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIC8vIOWPkei1t2FqYXjor7fmsYLojrflj5bmnI3liqHnq6/niYjmnKzlj7dcclxuICBnZXRTZXJ2ZXJObzogYXN5bmMgKHZlcnNpb24sIGlzUHJvbXB0ID0gZmFsc2UsIGNhbGxiYWNrKSA9PiB7XHJcbiAgICBpZiAocGxhdGZvcm0gIT0gJ2FuZHJvaWQnKSB7XHJcbiAgICAgIGxldCBhcHBsZUlkID0gMTU0OTYzODMyNzsgLy9hcHDnmoRhcHBsZUlkXHJcbiAgICAgIHBsdXMucnVudGltZS5sYXVuY2hBcHBsaWNhdGlvbihcclxuICAgICAgICB7XHJcbiAgICAgICAgICBhY3Rpb246IGBpdG1zLWFwcHM6Ly9pdHVuZXMuYXBwbGUuY29tL2NuL2FwcC9pZCR7YXBwbGVJZH0/bXQ9OGAsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ09wZW4gc3lzdGVtIGRlZmF1bHQgYnJvd3NlciBmYWlsZWQ6ICcgKyBlLm1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsZXQgaHR0cERhdGEgPSB7XHJcbiAgICAvLyAgIHZlcnNpb246IHZlcnNpb24udmVyc2lvbkNvZGUsXHJcbiAgICAvLyAgIC8vIOeJiOacrOWQjeensFxyXG4gICAgLy8gICB2ZXJzaW9uTmFtZTogdmVyc2lvbi52ZXJzaW9uTmFtZSxcclxuICAgIC8vICAgLy8gc2V0dXBQYWdl5Y+C5pWw6K+05piO77yI5Yik5pat55So5oi35piv5LiN5piv5LuO6K6+572u6aG16Z2i54K55Ye755qE5pu05paw77yM5aaC5p6c5piv6K6+572u6aG16Z2i54K55Ye755qE5pu05paw77yM5pyJ5LiN6KaB55So6Z2Z6buY5pu05paw5LqG77yM5LiN54S255So5oi354K55Ye75rKh5Y+N5bqU5b6I5aWH5oCq55qE77yJXHJcbiAgICAvLyAgIHNldHVwUGFnZTogaXNQcm9tcHQsXHJcbiAgICAvLyB9O1xyXG4gICAgLy8gaWYgKHBsYXRmb3JtID09ICdhbmRyb2lkJykge1xyXG4gICAgLy8gICBodHRwRGF0YS50eXBlID0gMTEwMTtcclxuICAgIC8vIH0gZWxzZSB7XHJcbiAgICAvLyAgIGh0dHBEYXRhLnR5cGUgPSAxMTAyO1xyXG5cclxuICAgIC8qIOaOpeWPo+WFpeWPguivtOaYjlxyXG4gICAgICogdmVyc2lvbjog5bqU55So5b2T5YmN54mI5pys5Y+377yI5bey6Ieq5Yqo6I635Y+W77yJXHJcbiAgICAgKiB2ZXJzaW9uTmFtZTog5bqU55So5b2T5YmN54mI5pys5ZCN56ew77yI5bey6Ieq5Yqo6I635Y+W77yJXHJcbiAgICAgKiB0eXBl77ya5bmz5Y+w77yIMTEwMeaYr+WuieWNk++8jDExMDLmmK9JT1PvvIlcclxuICAgICAqL1xyXG4gICAgLyoqKioqKioqKioqKioqKirku6XkuIvmmK/npLrkvosqKioqKioqKioqKioqKioqKioqL1xyXG4gICAgLy8g5Y+v5Lul55So6Ieq5bex6aG555uu55qE6K+35rGC5pa55rOV77yI5o6l5Y+j6Ieq5bex5om+5ZCO5Y+w6KaB77yM5o+S5Lu25LiN5o+Q5L6b77yJXHJcblxyXG4gICAgbGV0IG1hcmtldElkID0gMTAwO1xyXG5cclxuICAgIHBob25lSW5mby5icmFuZCA9IHBob25lSW5mby5icmFuZC50b0xvd2VyQ2FzZSgpO1xyXG5cclxuICAgIHN3aXRjaCAocGhvbmVJbmZvLmJyYW5kKSB7XHJcbiAgICAgIGNhc2UgJ3hpYW9taSc6XHJcbiAgICAgICAgbWFya2V0SWQgPSAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdodWF3ZWknOlxyXG4gICAgICAgIG1hcmtldElkID0gMjtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAndGVuZ3h1bic6XHJcbiAgICAgICAgbWFya2V0SWQgPSAzO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdvcHBvJzpcclxuICAgICAgICBtYXJrZXRJZCA9IDQ7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3Zpdm8nOlxyXG4gICAgICAgIG1hcmtldElkID0gNTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc2Ftc3VuZyc6XHJcbiAgICAgICAgbWFya2V0SWQgPSA2O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIG1hcmtldElkID0gMTAwO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKCdtYXJrZXRJZCcsIG1hcmtldElkKTtcclxuICAgIGNvbnNvbGUubG9nKCdwaG9uZUluZm8uYnJhbmQnLCBwaG9uZUluZm8uYnJhbmQpO1xyXG5cclxuICAgIGxldCBwYXJhbXMgPSB7XHJcbiAgICAgIG1hcmtldElkOiBtYXJrZXRJZCxcclxuICAgICAgcGFja2FnZU5hbWU6ICdjb20ueGlhb2ZhLnNob3BBZG1pbicsXHJcbiAgICAgIGN1cnJWZXJzaW9uS2V5OiB2ZXJzaW9uLFxyXG4gICAgfTtcclxuXHJcbiAgICBsZXQgcmVzID0gYXdhaXQgR2V0QVBQdmVyc2lvbihwYXJhbXMpO1xyXG5cclxuICAgIGlmIChyZXMgJiYgcmVzLnN0YXR1cyA9PSAyMDApIHtcclxuICAgICAgaWYgKHJlcy5kYXRhKSB7XHJcbiAgICAgICAgcmVzLmRhdGEudXBkYXRlVHlwZSA9ICdzb2xpY2l0JztcclxuICAgICAgICBpZiAocmVzLmRhdGEuaXNfZm9yY2VfdXBkYXRlKSB7XHJcbiAgICAgICAgICByZXMudXBkYXRlVHlwZSA9ICdmb3JjaWJseSc7XHJcbiAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyZXMuZGF0YSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlcy5kYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAuZ2V0KCdhcGkvY29tbW9uL3YxL2FwcF92ZXJzaW9uJywgaHR0cERhdGEsIHtcclxuICAgIC8vICAgaXNQcm9tcHQ6IGlzUHJvbXB0LFxyXG4gICAgLy8gfSlcclxuICAgIC8vIC50aGVuKChyZXMpID0+IHtcclxuICAgIC8vICAgLyogcmVz55qE5pWw5o2u6K+05piOXHJcbiAgICAvLyAgICAqIHwg5Y+C5pWw5ZCN56ewICAgICAgICB8IOS4gOWumui/lOWbniAgICAgfCDnsbvlnosgICAgICAgIHwg5o+P6L+wXHJcbiAgICAvLyAgICAqIHwgLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tIHxcclxuICAgIC8vICAgICogfCB2ZXJzaW9uQ29kZSAgICAgfCB5ICAgICAgICB8IGludCAgICAgICB8IOeJiOacrOWPtyAgICAgICAgfFxyXG4gICAgLy8gICAgKiB8IHZlcnNpb25OYW1lICAgICB8IHkgICAgICAgIHwgU3RyaW5nICAgIHwg54mI5pys5ZCN56ewICAgICAgfFxyXG4gICAgLy8gICAgKiB8IHZlcnNpb25JbmZvICAgICB8IHkgICAgICAgIHwgU3RyaW5nICAgIHwg54mI5pys5L+h5oGvICAgICAgfFxyXG4gICAgLy8gICAgKiB8IHVwZGF0ZVR5cGUgICAgICB8IHkgICAgICAgIHwgU3RyaW5nICAgIHwgZm9yY2libHkgPSDlvLrliLbmm7TmlrAsIHNvbGljaXQgPSDlvLnnqpfnoa7orqTmm7TmlrAsIHNpbGVudCA9IOmdmem7mOabtOaWsCB8XHJcbiAgICAvLyAgICAqIHwgZG93bmxvYWRVcmwgICAgIHwgeSAgICAgICAgfCBTdHJpbmcgICAgfCDniYjmnKzkuIvovb3pk77mjqXvvIhJT1Plronoo4XljIXmm7TmlrDor7fmlL7ot7PovaxzdG9yZeW6lOeUqOWVhuW6l+mTvuaOpSzlronljZNhcGvlkox3Z3Tmlofku7bmlL7mlofku7bkuIvovb3pk77mjqXvvIkgIHxcclxuICAgIC8vICAgICovXHJcbiAgICAvLyAgIGlmIChyZXMgJiYgcmVzLmRvd25sb2FkVXJsKSB7XHJcbiAgICAvLyAgICAgLy8g5YW85a655LmL5YmN55qE54mI5pys77yIdXBkYXRlVHlwZeaYr+aWsOeJiOaJjeacieeahOWPguaVsO+8iVxyXG4gICAgLy8gICAgIGlmIChyZXMudXBkYXRlVHlwZSkge1xyXG4gICAgLy8gICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzKTtcclxuICAgIC8vICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgaWYgKHJlcy5mb3JjZVVwZGF0ZSkge1xyXG4gICAgLy8gICAgICAgICByZXMudXBkYXRlVHlwZSA9ICdmb3JjaWJseSc7XHJcbiAgICAvLyAgICAgICB9IGVsc2Uge1xyXG4gICAgLy8gICAgICAgICByZXMudXBkYXRlVHlwZSA9ICdzb2xpY2l0JztcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlcyk7XHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gICB9IGVsc2UgaWYgKGlzUHJvbXB0KSB7XHJcbiAgICAvLyAgICAgdW5pLnNob3dUb2FzdCh7XHJcbiAgICAvLyAgICAgICB0aXRsZTogJ+aaguaXoOaWsOeJiOacrCcsXHJcbiAgICAvLyAgICAgICBpY29uOiAnbm9uZScsXHJcbiAgICAvLyAgICAgfSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG4gICAgLyoqKioqKioqKioqKioqKirku6XkuIrmmK/npLrkvosqKioqKioqKioqKioqKioqKioqL1xyXG4gIH0sXHJcbiAgLy8g5by556qX5Li76aKc6Imy77yI5LiN5aGr6buY6K6k57KJ6Imy77yJXHJcbiAgYXBwVXBkYXRlQ29sb3I6ICdmMDAnLFxyXG4gIC8vIOW8ueeql+Wbvuagh++8iOS4jeWhq+aYvuekuum7mOiupOWbvuagh++8jOmTvuaOpemFjee9ruekuuS+i+Wmgu+8miAnL3N0YXRpYy9kZW1vL2ljX2F0dGVudGlvbi5wbmcn77yJXHJcbiAgYXBwVXBkYXRlSWNvbjogJycsXHJcbn07XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///524\n"); /***/ }), /* 525 */