23287 lines
1.2 MiB
23287 lines
1.2 MiB
"use strict";
|
||
const _export_sfc = (sfc, props2) => {
|
||
const target = sfc.__vccOpts || sfc;
|
||
for (const [key, val] of props2) {
|
||
target[key] = val;
|
||
}
|
||
return target;
|
||
};
|
||
/**
|
||
* @vue/shared v3.4.21
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/
|
||
function makeMap(str, expectsLowerCase) {
|
||
const set2 = new Set(str.split(","));
|
||
return (val) => set2.has(val);
|
||
}
|
||
const EMPTY_OBJ = Object.freeze({});
|
||
const EMPTY_ARR = Object.freeze([]);
|
||
const NOOP = () => {
|
||
};
|
||
const NO = () => false;
|
||
const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter
|
||
(key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97);
|
||
const isModelListener = (key) => key.startsWith("onUpdate:");
|
||
const extend = Object.assign;
|
||
const remove = (arr, el) => {
|
||
const i = arr.indexOf(el);
|
||
if (i > -1) {
|
||
arr.splice(i, 1);
|
||
}
|
||
};
|
||
const hasOwnProperty$2 = Object.prototype.hasOwnProperty;
|
||
const hasOwn = (val, key) => hasOwnProperty$2.call(val, key);
|
||
const isArray$1 = Array.isArray;
|
||
const isMap = (val) => toTypeString(val) === "[object Map]";
|
||
const isSet = (val) => toTypeString(val) === "[object Set]";
|
||
const isFunction = (val) => typeof val === "function";
|
||
const isString = (val) => typeof val === "string";
|
||
const isSymbol = (val) => typeof val === "symbol";
|
||
const isObject$1 = (val) => val !== null && typeof val === "object";
|
||
const isPromise = (val) => {
|
||
return (isObject$1(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch);
|
||
};
|
||
const objectToString$1 = Object.prototype.toString;
|
||
const toTypeString = (value2) => objectToString$1.call(value2);
|
||
const toRawType = (value2) => {
|
||
return toTypeString(value2).slice(8, -1);
|
||
};
|
||
const isPlainObject$2 = (val) => toTypeString(val) === "[object Object]";
|
||
const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
|
||
const isReservedProp = /* @__PURE__ */ makeMap(
|
||
// the leading comma is intentional so empty string "" is also included
|
||
",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"
|
||
);
|
||
const isBuiltInDirective = /* @__PURE__ */ makeMap(
|
||
"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo"
|
||
);
|
||
const cacheStringFunction = (fn) => {
|
||
const cache = /* @__PURE__ */ Object.create(null);
|
||
return (str) => {
|
||
const hit = cache[str];
|
||
return hit || (cache[str] = fn(str));
|
||
};
|
||
};
|
||
const camelizeRE = /-(\w)/g;
|
||
const camelize = cacheStringFunction((str) => {
|
||
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
|
||
});
|
||
const hyphenateRE = /\B([A-Z])/g;
|
||
const hyphenate = cacheStringFunction(
|
||
(str) => str.replace(hyphenateRE, "-$1").toLowerCase()
|
||
);
|
||
const capitalize = cacheStringFunction((str) => {
|
||
return str.charAt(0).toUpperCase() + str.slice(1);
|
||
});
|
||
const toHandlerKey = cacheStringFunction((str) => {
|
||
const s2 = str ? `on${capitalize(str)}` : ``;
|
||
return s2;
|
||
});
|
||
const hasChanged = (value2, oldValue) => !Object.is(value2, oldValue);
|
||
const invokeArrayFns$1 = (fns, arg) => {
|
||
for (let i = 0; i < fns.length; i++) {
|
||
fns[i](arg);
|
||
}
|
||
};
|
||
const def = (obj, key, value2) => {
|
||
Object.defineProperty(obj, key, {
|
||
configurable: true,
|
||
enumerable: false,
|
||
value: value2
|
||
});
|
||
};
|
||
const looseToNumber = (val) => {
|
||
const n2 = parseFloat(val);
|
||
return isNaN(n2) ? val : n2;
|
||
};
|
||
const toNumber$1 = (val) => {
|
||
const n2 = isString(val) ? Number(val) : NaN;
|
||
return isNaN(n2) ? val : n2;
|
||
};
|
||
let _globalThis;
|
||
const getGlobalThis = () => {
|
||
return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {});
|
||
};
|
||
function normalizeStyle(value2) {
|
||
if (isArray$1(value2)) {
|
||
const res = {};
|
||
for (let i = 0; i < value2.length; i++) {
|
||
const item = value2[i];
|
||
const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);
|
||
if (normalized) {
|
||
for (const key in normalized) {
|
||
res[key] = normalized[key];
|
||
}
|
||
}
|
||
}
|
||
return res;
|
||
} else if (isString(value2) || isObject$1(value2)) {
|
||
return value2;
|
||
}
|
||
}
|
||
const listDelimiterRE = /;(?![^(]*\))/g;
|
||
const propertyDelimiterRE = /:([^]+)/;
|
||
const styleCommentRE = /\/\*[^]*?\*\//g;
|
||
function parseStringStyle(cssText) {
|
||
const ret = {};
|
||
cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => {
|
||
if (item) {
|
||
const tmp = item.split(propertyDelimiterRE);
|
||
tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
|
||
}
|
||
});
|
||
return ret;
|
||
}
|
||
function normalizeClass(value2) {
|
||
let res = "";
|
||
if (isString(value2)) {
|
||
res = value2;
|
||
} else if (isArray$1(value2)) {
|
||
for (let i = 0; i < value2.length; i++) {
|
||
const normalized = normalizeClass(value2[i]);
|
||
if (normalized) {
|
||
res += normalized + " ";
|
||
}
|
||
}
|
||
} else if (isObject$1(value2)) {
|
||
for (const name in value2) {
|
||
if (value2[name]) {
|
||
res += name + " ";
|
||
}
|
||
}
|
||
}
|
||
return res.trim();
|
||
}
|
||
const toDisplayString = (val) => {
|
||
return isString(val) ? val : val == null ? "" : isArray$1(val) || isObject$1(val) && (val.toString === objectToString$1 || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
|
||
};
|
||
const replacer = (_key, val) => {
|
||
if (val && val.__v_isRef) {
|
||
return replacer(_key, val.value);
|
||
} else if (isMap(val)) {
|
||
return {
|
||
[`Map(${val.size})`]: [...val.entries()].reduce(
|
||
(entries, [key, val2], i) => {
|
||
entries[stringifySymbol(key, i) + " =>"] = val2;
|
||
return entries;
|
||
},
|
||
{}
|
||
)
|
||
};
|
||
} else if (isSet(val)) {
|
||
return {
|
||
[`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v))
|
||
};
|
||
} else if (isSymbol(val)) {
|
||
return stringifySymbol(val);
|
||
} else if (isObject$1(val) && !isArray$1(val) && !isPlainObject$2(val)) {
|
||
return String(val);
|
||
}
|
||
return val;
|
||
};
|
||
const stringifySymbol = (v, i = "") => {
|
||
var _a;
|
||
return isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v;
|
||
};
|
||
const SLOT_DEFAULT_NAME = "d";
|
||
const ON_SHOW = "onShow";
|
||
const ON_HIDE = "onHide";
|
||
const ON_LAUNCH = "onLaunch";
|
||
const ON_ERROR = "onError";
|
||
const ON_THEME_CHANGE = "onThemeChange";
|
||
const ON_PAGE_NOT_FOUND = "onPageNotFound";
|
||
const ON_UNHANDLE_REJECTION = "onUnhandledRejection";
|
||
const ON_EXIT = "onExit";
|
||
const ON_LOAD = "onLoad";
|
||
const ON_READY = "onReady";
|
||
const ON_UNLOAD = "onUnload";
|
||
const ON_INIT = "onInit";
|
||
const ON_SAVE_EXIT_STATE = "onSaveExitState";
|
||
const ON_RESIZE = "onResize";
|
||
const ON_BACK_PRESS = "onBackPress";
|
||
const ON_PAGE_SCROLL = "onPageScroll";
|
||
const ON_TAB_ITEM_TAP = "onTabItemTap";
|
||
const ON_REACH_BOTTOM = "onReachBottom";
|
||
const ON_PULL_DOWN_REFRESH = "onPullDownRefresh";
|
||
const ON_SHARE_TIMELINE = "onShareTimeline";
|
||
const ON_SHARE_CHAT = "onShareChat";
|
||
const ON_ADD_TO_FAVORITES = "onAddToFavorites";
|
||
const ON_SHARE_APP_MESSAGE = "onShareAppMessage";
|
||
const ON_NAVIGATION_BAR_BUTTON_TAP = "onNavigationBarButtonTap";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED = "onNavigationBarSearchInputClicked";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED = "onNavigationBarSearchInputChanged";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED = "onNavigationBarSearchInputConfirmed";
|
||
const ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED = "onNavigationBarSearchInputFocusChanged";
|
||
function hasLeadingSlash(str) {
|
||
return str.indexOf("/") === 0;
|
||
}
|
||
function addLeadingSlash(str) {
|
||
return hasLeadingSlash(str) ? str : "/" + str;
|
||
}
|
||
const invokeArrayFns = (fns, arg) => {
|
||
let ret;
|
||
for (let i = 0; i < fns.length; i++) {
|
||
ret = fns[i](arg);
|
||
}
|
||
return ret;
|
||
};
|
||
function once(fn, ctx = null) {
|
||
let res;
|
||
return (...args) => {
|
||
if (fn) {
|
||
res = fn.apply(ctx, args);
|
||
fn = null;
|
||
}
|
||
return res;
|
||
};
|
||
}
|
||
function getValueByDataPath(obj, path) {
|
||
if (!isString(path)) {
|
||
return;
|
||
}
|
||
path = path.replace(/\[(\d+)\]/g, ".$1");
|
||
const parts = path.split(".");
|
||
let key = parts[0];
|
||
if (!obj) {
|
||
obj = {};
|
||
}
|
||
if (parts.length === 1) {
|
||
return obj[key];
|
||
}
|
||
return getValueByDataPath(obj[key], parts.slice(1).join("."));
|
||
}
|
||
function sortObject(obj) {
|
||
let sortObj = {};
|
||
if (isPlainObject$2(obj)) {
|
||
Object.keys(obj).sort().forEach((key) => {
|
||
const _key = key;
|
||
sortObj[_key] = obj[_key];
|
||
});
|
||
}
|
||
return !Object.keys(sortObj) ? obj : sortObj;
|
||
}
|
||
const customizeRE = /:/g;
|
||
function customizeEvent(str) {
|
||
return camelize(str.replace(customizeRE, "-"));
|
||
}
|
||
const encode$1 = encodeURIComponent;
|
||
function stringifyQuery(obj, encodeStr = encode$1) {
|
||
const res = obj ? Object.keys(obj).map((key) => {
|
||
let val = obj[key];
|
||
if (typeof val === void 0 || val === null) {
|
||
val = "";
|
||
} else if (isPlainObject$2(val)) {
|
||
val = JSON.stringify(val);
|
||
}
|
||
return encodeStr(key) + "=" + encodeStr(val);
|
||
}).filter((x) => x.length > 0).join("&") : null;
|
||
return res ? `?${res}` : "";
|
||
}
|
||
const PAGE_HOOKS = [
|
||
ON_INIT,
|
||
ON_LOAD,
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_UNLOAD,
|
||
ON_BACK_PRESS,
|
||
ON_PAGE_SCROLL,
|
||
ON_TAB_ITEM_TAP,
|
||
ON_REACH_BOTTOM,
|
||
ON_PULL_DOWN_REFRESH,
|
||
ON_SHARE_TIMELINE,
|
||
ON_SHARE_APP_MESSAGE,
|
||
ON_SHARE_CHAT,
|
||
ON_ADD_TO_FAVORITES,
|
||
ON_SAVE_EXIT_STATE,
|
||
ON_NAVIGATION_BAR_BUTTON_TAP,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
|
||
];
|
||
function isRootHook(name) {
|
||
return PAGE_HOOKS.indexOf(name) > -1;
|
||
}
|
||
const UniLifecycleHooks = [
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_LAUNCH,
|
||
ON_ERROR,
|
||
ON_THEME_CHANGE,
|
||
ON_PAGE_NOT_FOUND,
|
||
ON_UNHANDLE_REJECTION,
|
||
ON_EXIT,
|
||
ON_INIT,
|
||
ON_LOAD,
|
||
ON_READY,
|
||
ON_UNLOAD,
|
||
ON_RESIZE,
|
||
ON_BACK_PRESS,
|
||
ON_PAGE_SCROLL,
|
||
ON_TAB_ITEM_TAP,
|
||
ON_REACH_BOTTOM,
|
||
ON_PULL_DOWN_REFRESH,
|
||
ON_SHARE_TIMELINE,
|
||
ON_ADD_TO_FAVORITES,
|
||
ON_SHARE_APP_MESSAGE,
|
||
ON_SHARE_CHAT,
|
||
ON_SAVE_EXIT_STATE,
|
||
ON_NAVIGATION_BAR_BUTTON_TAP,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CLICKED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CHANGED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_CONFIRMED,
|
||
ON_NAVIGATION_BAR_SEARCH_INPUT_FOCUS_CHANGED
|
||
];
|
||
const MINI_PROGRAM_PAGE_RUNTIME_HOOKS = /* @__PURE__ */ (() => {
|
||
return {
|
||
onPageScroll: 1,
|
||
onShareAppMessage: 1 << 1,
|
||
onShareTimeline: 1 << 2
|
||
};
|
||
})();
|
||
function isUniLifecycleHook(name, value2, checkType = true) {
|
||
if (checkType && !isFunction(value2)) {
|
||
return false;
|
||
}
|
||
if (UniLifecycleHooks.indexOf(name) > -1) {
|
||
return true;
|
||
} else if (name.indexOf("on") === 0) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
let vueApp;
|
||
const createVueAppHooks = [];
|
||
function onCreateVueApp(hook) {
|
||
if (vueApp) {
|
||
return hook(vueApp);
|
||
}
|
||
createVueAppHooks.push(hook);
|
||
}
|
||
function invokeCreateVueAppHook(app) {
|
||
vueApp = app;
|
||
createVueAppHooks.forEach((hook) => hook(app));
|
||
}
|
||
const invokeCreateErrorHandler = once((app, createErrorHandler2) => {
|
||
if (isFunction(app._component.onError)) {
|
||
return createErrorHandler2(app);
|
||
}
|
||
});
|
||
const E = function() {
|
||
};
|
||
E.prototype = {
|
||
_id: 1,
|
||
on: function(name, callback, ctx) {
|
||
var e2 = this.e || (this.e = {});
|
||
(e2[name] || (e2[name] = [])).push({
|
||
fn: callback,
|
||
ctx,
|
||
_id: this._id
|
||
});
|
||
return this._id++;
|
||
},
|
||
once: function(name, callback, ctx) {
|
||
var self2 = this;
|
||
function listener() {
|
||
self2.off(name, listener);
|
||
callback.apply(ctx, arguments);
|
||
}
|
||
listener._ = callback;
|
||
return this.on(name, listener, ctx);
|
||
},
|
||
emit: function(name) {
|
||
var data = [].slice.call(arguments, 1);
|
||
var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
|
||
var i = 0;
|
||
var len = evtArr.length;
|
||
for (i; i < len; i++) {
|
||
evtArr[i].fn.apply(evtArr[i].ctx, data);
|
||
}
|
||
return this;
|
||
},
|
||
off: function(name, event) {
|
||
var e2 = this.e || (this.e = {});
|
||
var evts = e2[name];
|
||
var liveEvents = [];
|
||
if (evts && event) {
|
||
for (var i = evts.length - 1; i >= 0; i--) {
|
||
if (evts[i].fn === event || evts[i].fn._ === event || evts[i]._id === event) {
|
||
evts.splice(i, 1);
|
||
break;
|
||
}
|
||
}
|
||
liveEvents = evts;
|
||
}
|
||
liveEvents.length ? e2[name] = liveEvents : delete e2[name];
|
||
return this;
|
||
}
|
||
};
|
||
var E$1 = E;
|
||
const LOCALE_ZH_HANS = "zh-Hans";
|
||
const LOCALE_ZH_HANT = "zh-Hant";
|
||
const LOCALE_EN = "en";
|
||
const LOCALE_FR = "fr";
|
||
const LOCALE_ES = "es";
|
||
function include(str, parts) {
|
||
return !!parts.find((part) => str.indexOf(part) !== -1);
|
||
}
|
||
function startsWith(str, parts) {
|
||
return parts.find((part) => str.indexOf(part) === 0);
|
||
}
|
||
function normalizeLocale(locale, messages2) {
|
||
if (!locale) {
|
||
return;
|
||
}
|
||
locale = locale.trim().replace(/_/g, "-");
|
||
locale = locale.toLowerCase();
|
||
if (locale === "chinese") {
|
||
return LOCALE_ZH_HANS;
|
||
}
|
||
if (locale.indexOf("zh") === 0) {
|
||
if (locale.indexOf("-hans") > -1) {
|
||
return LOCALE_ZH_HANS;
|
||
}
|
||
if (locale.indexOf("-hant") > -1) {
|
||
return LOCALE_ZH_HANT;
|
||
}
|
||
if (include(locale, ["-tw", "-hk", "-mo", "-cht"])) {
|
||
return LOCALE_ZH_HANT;
|
||
}
|
||
return LOCALE_ZH_HANS;
|
||
}
|
||
let locales = [LOCALE_EN, LOCALE_FR, LOCALE_ES];
|
||
const lang = startsWith(locale, locales);
|
||
if (lang) {
|
||
return lang;
|
||
}
|
||
}
|
||
function getBaseSystemInfo() {
|
||
return wx.getSystemInfoSync();
|
||
}
|
||
function validateProtocolFail(name, msg) {
|
||
console.warn(`${name}: ${msg}`);
|
||
}
|
||
function validateProtocol(name, data, protocol, onFail) {
|
||
if (!onFail) {
|
||
onFail = validateProtocolFail;
|
||
}
|
||
for (const key in protocol) {
|
||
const errMsg = validateProp$1(key, data[key], protocol[key], !hasOwn(data, key));
|
||
if (isString(errMsg)) {
|
||
onFail(name, errMsg);
|
||
}
|
||
}
|
||
}
|
||
function validateProtocols(name, args, protocol, onFail) {
|
||
if (!protocol) {
|
||
return;
|
||
}
|
||
if (!isArray$1(protocol)) {
|
||
return validateProtocol(name, args[0] || /* @__PURE__ */ Object.create(null), protocol, onFail);
|
||
}
|
||
const len = protocol.length;
|
||
const argsLen = args.length;
|
||
for (let i = 0; i < len; i++) {
|
||
const opts = protocol[i];
|
||
const data = /* @__PURE__ */ Object.create(null);
|
||
if (argsLen > i) {
|
||
data[opts.name] = args[i];
|
||
}
|
||
validateProtocol(name, data, { [opts.name]: opts }, onFail);
|
||
}
|
||
}
|
||
function validateProp$1(name, value2, prop, isAbsent) {
|
||
if (!isPlainObject$2(prop)) {
|
||
prop = { type: prop };
|
||
}
|
||
const { type: type2, required: required2, validator } = prop;
|
||
if (required2 && isAbsent) {
|
||
return 'Missing required args: "' + name + '"';
|
||
}
|
||
if (value2 == null && !required2) {
|
||
return;
|
||
}
|
||
if (type2 != null) {
|
||
let isValid = false;
|
||
const types2 = isArray$1(type2) ? type2 : [type2];
|
||
const expectedTypes = [];
|
||
for (let i = 0; i < types2.length && !isValid; i++) {
|
||
const { valid, expectedType } = assertType$1(value2, types2[i]);
|
||
expectedTypes.push(expectedType || "");
|
||
isValid = valid;
|
||
}
|
||
if (!isValid) {
|
||
return getInvalidTypeMessage$1(name, value2, expectedTypes);
|
||
}
|
||
}
|
||
if (validator) {
|
||
return validator(value2);
|
||
}
|
||
}
|
||
const isSimpleType$1 = /* @__PURE__ */ makeMap("String,Number,Boolean,Function,Symbol");
|
||
function assertType$1(value2, type2) {
|
||
let valid;
|
||
const expectedType = getType$1(type2);
|
||
if (isSimpleType$1(expectedType)) {
|
||
const t2 = typeof value2;
|
||
valid = t2 === expectedType.toLowerCase();
|
||
if (!valid && t2 === "object") {
|
||
valid = value2 instanceof type2;
|
||
}
|
||
} else if (expectedType === "Object") {
|
||
valid = isObject$1(value2);
|
||
} else if (expectedType === "Array") {
|
||
valid = isArray$1(value2);
|
||
} else {
|
||
{
|
||
valid = value2 instanceof type2;
|
||
}
|
||
}
|
||
return {
|
||
valid,
|
||
expectedType
|
||
};
|
||
}
|
||
function getInvalidTypeMessage$1(name, value2, expectedTypes) {
|
||
let message = `Invalid args: type check failed for args "${name}". Expected ${expectedTypes.map(capitalize).join(", ")}`;
|
||
const expectedType = expectedTypes[0];
|
||
const receivedType = toRawType(value2);
|
||
const expectedValue = styleValue$1(value2, expectedType);
|
||
const receivedValue = styleValue$1(value2, receivedType);
|
||
if (expectedTypes.length === 1 && isExplicable$1(expectedType) && !isBoolean$2(expectedType, receivedType)) {
|
||
message += ` with value ${expectedValue}`;
|
||
}
|
||
message += `, got ${receivedType} `;
|
||
if (isExplicable$1(receivedType)) {
|
||
message += `with value ${receivedValue}.`;
|
||
}
|
||
return message;
|
||
}
|
||
function getType$1(ctor) {
|
||
const match = ctor && ctor.toString().match(/^\s*function (\w+)/);
|
||
return match ? match[1] : "";
|
||
}
|
||
function styleValue$1(value2, type2) {
|
||
if (type2 === "String") {
|
||
return `"${value2}"`;
|
||
} else if (type2 === "Number") {
|
||
return `${Number(value2)}`;
|
||
} else {
|
||
return `${value2}`;
|
||
}
|
||
}
|
||
function isExplicable$1(type2) {
|
||
const explicitTypes = ["string", "number", "boolean"];
|
||
return explicitTypes.some((elem) => type2.toLowerCase() === elem);
|
||
}
|
||
function isBoolean$2(...args) {
|
||
return args.some((elem) => elem.toLowerCase() === "boolean");
|
||
}
|
||
function tryCatch(fn) {
|
||
return function() {
|
||
try {
|
||
return fn.apply(fn, arguments);
|
||
} catch (e2) {
|
||
console.error(e2);
|
||
}
|
||
};
|
||
}
|
||
let invokeCallbackId = 1;
|
||
const invokeCallbacks = {};
|
||
function addInvokeCallback(id, name, callback, keepAlive = false) {
|
||
invokeCallbacks[id] = {
|
||
name,
|
||
keepAlive,
|
||
callback
|
||
};
|
||
return id;
|
||
}
|
||
function invokeCallback(id, res, extras) {
|
||
if (typeof id === "number") {
|
||
const opts = invokeCallbacks[id];
|
||
if (opts) {
|
||
if (!opts.keepAlive) {
|
||
delete invokeCallbacks[id];
|
||
}
|
||
return opts.callback(res, extras);
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
const API_SUCCESS = "success";
|
||
const API_FAIL = "fail";
|
||
const API_COMPLETE = "complete";
|
||
function getApiCallbacks(args) {
|
||
const apiCallbacks = {};
|
||
for (const name in args) {
|
||
const fn = args[name];
|
||
if (isFunction(fn)) {
|
||
apiCallbacks[name] = tryCatch(fn);
|
||
delete args[name];
|
||
}
|
||
}
|
||
return apiCallbacks;
|
||
}
|
||
function normalizeErrMsg(errMsg, name) {
|
||
if (!errMsg || errMsg.indexOf(":fail") === -1) {
|
||
return name + ":ok";
|
||
}
|
||
return name + errMsg.substring(errMsg.indexOf(":fail"));
|
||
}
|
||
function createAsyncApiCallback(name, args = {}, { beforeAll, beforeSuccess } = {}) {
|
||
if (!isPlainObject$2(args)) {
|
||
args = {};
|
||
}
|
||
const { success, fail, complete } = getApiCallbacks(args);
|
||
const hasSuccess = isFunction(success);
|
||
const hasFail = isFunction(fail);
|
||
const hasComplete = isFunction(complete);
|
||
const callbackId = invokeCallbackId++;
|
||
addInvokeCallback(callbackId, name, (res) => {
|
||
res = res || {};
|
||
res.errMsg = normalizeErrMsg(res.errMsg, name);
|
||
isFunction(beforeAll) && beforeAll(res);
|
||
if (res.errMsg === name + ":ok") {
|
||
isFunction(beforeSuccess) && beforeSuccess(res, args);
|
||
hasSuccess && success(res);
|
||
} else {
|
||
hasFail && fail(res);
|
||
}
|
||
hasComplete && complete(res);
|
||
});
|
||
return callbackId;
|
||
}
|
||
const HOOK_SUCCESS = "success";
|
||
const HOOK_FAIL = "fail";
|
||
const HOOK_COMPLETE = "complete";
|
||
const globalInterceptors = {};
|
||
const scopedInterceptors = {};
|
||
function wrapperHook(hook, params) {
|
||
return function(data) {
|
||
return hook(data, params) || data;
|
||
};
|
||
}
|
||
function queue$2(hooks, data, params) {
|
||
let promise2 = false;
|
||
for (let i = 0; i < hooks.length; i++) {
|
||
const hook = hooks[i];
|
||
if (promise2) {
|
||
promise2 = Promise.resolve(wrapperHook(hook, params));
|
||
} else {
|
||
const res = hook(data, params);
|
||
if (isPromise(res)) {
|
||
promise2 = Promise.resolve(res);
|
||
}
|
||
if (res === false) {
|
||
return {
|
||
then() {
|
||
},
|
||
catch() {
|
||
}
|
||
};
|
||
}
|
||
}
|
||
}
|
||
return promise2 || {
|
||
then(callback) {
|
||
return callback(data);
|
||
},
|
||
catch() {
|
||
}
|
||
};
|
||
}
|
||
function wrapperOptions(interceptors2, options = {}) {
|
||
[HOOK_SUCCESS, HOOK_FAIL, HOOK_COMPLETE].forEach((name) => {
|
||
const hooks = interceptors2[name];
|
||
if (!isArray$1(hooks)) {
|
||
return;
|
||
}
|
||
const oldCallback = options[name];
|
||
options[name] = function callbackInterceptor(res) {
|
||
queue$2(hooks, res, options).then((res2) => {
|
||
return isFunction(oldCallback) && oldCallback(res2) || res2;
|
||
});
|
||
};
|
||
});
|
||
return options;
|
||
}
|
||
function wrapperReturnValue(method2, returnValue) {
|
||
const returnValueHooks = [];
|
||
if (isArray$1(globalInterceptors.returnValue)) {
|
||
returnValueHooks.push(...globalInterceptors.returnValue);
|
||
}
|
||
const interceptor = scopedInterceptors[method2];
|
||
if (interceptor && isArray$1(interceptor.returnValue)) {
|
||
returnValueHooks.push(...interceptor.returnValue);
|
||
}
|
||
returnValueHooks.forEach((hook) => {
|
||
returnValue = hook(returnValue) || returnValue;
|
||
});
|
||
return returnValue;
|
||
}
|
||
function getApiInterceptorHooks(method2) {
|
||
const interceptor = /* @__PURE__ */ Object.create(null);
|
||
Object.keys(globalInterceptors).forEach((hook) => {
|
||
if (hook !== "returnValue") {
|
||
interceptor[hook] = globalInterceptors[hook].slice();
|
||
}
|
||
});
|
||
const scopedInterceptor = scopedInterceptors[method2];
|
||
if (scopedInterceptor) {
|
||
Object.keys(scopedInterceptor).forEach((hook) => {
|
||
if (hook !== "returnValue") {
|
||
interceptor[hook] = (interceptor[hook] || []).concat(scopedInterceptor[hook]);
|
||
}
|
||
});
|
||
}
|
||
return interceptor;
|
||
}
|
||
function invokeApi(method2, api, options, params) {
|
||
const interceptor = getApiInterceptorHooks(method2);
|
||
if (interceptor && Object.keys(interceptor).length) {
|
||
if (isArray$1(interceptor.invoke)) {
|
||
const res = queue$2(interceptor.invoke, options);
|
||
return res.then((options2) => {
|
||
return api(wrapperOptions(getApiInterceptorHooks(method2), options2), ...params);
|
||
});
|
||
} else {
|
||
return api(wrapperOptions(interceptor, options), ...params);
|
||
}
|
||
}
|
||
return api(options, ...params);
|
||
}
|
||
function hasCallback(args) {
|
||
if (isPlainObject$2(args) && [API_SUCCESS, API_FAIL, API_COMPLETE].find((cb) => isFunction(args[cb]))) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function handlePromise(promise2) {
|
||
return promise2;
|
||
}
|
||
function promisify$1(name, fn) {
|
||
return (args = {}, ...rest) => {
|
||
if (hasCallback(args)) {
|
||
return wrapperReturnValue(name, invokeApi(name, fn, args, rest));
|
||
}
|
||
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
|
||
invokeApi(name, fn, extend(args, { success: resolve2, fail: reject }), rest);
|
||
})));
|
||
};
|
||
}
|
||
function formatApiArgs(args, options) {
|
||
args[0];
|
||
{
|
||
return;
|
||
}
|
||
}
|
||
function invokeSuccess(id, name, res) {
|
||
const result = {
|
||
errMsg: name + ":ok"
|
||
};
|
||
return invokeCallback(id, extend(res || {}, result));
|
||
}
|
||
function invokeFail(id, name, errMsg, errRes = {}) {
|
||
const errMsgPrefix = name + ":fail";
|
||
let apiErrMsg = "";
|
||
if (!errMsg) {
|
||
apiErrMsg = errMsgPrefix;
|
||
} else if (errMsg.indexOf(errMsgPrefix) === 0) {
|
||
apiErrMsg = errMsg;
|
||
} else {
|
||
apiErrMsg = errMsgPrefix + " " + errMsg;
|
||
}
|
||
{
|
||
delete errRes.errCode;
|
||
}
|
||
let res = extend({ errMsg: apiErrMsg }, errRes);
|
||
return invokeCallback(id, res);
|
||
}
|
||
function beforeInvokeApi(name, args, protocol, options) {
|
||
{
|
||
validateProtocols(name, args, protocol);
|
||
}
|
||
const errMsg = formatApiArgs(args);
|
||
if (errMsg) {
|
||
return errMsg;
|
||
}
|
||
}
|
||
function parseErrMsg(errMsg) {
|
||
if (!errMsg || isString(errMsg)) {
|
||
return errMsg;
|
||
}
|
||
if (errMsg.stack) {
|
||
if (typeof globalThis === "undefined" || !globalThis.harmonyChannel) {
|
||
console.error(errMsg.message + "\n" + errMsg.stack);
|
||
}
|
||
return errMsg.message;
|
||
}
|
||
return errMsg;
|
||
}
|
||
function wrapperTaskApi(name, fn, protocol, options) {
|
||
return (args) => {
|
||
const id = createAsyncApiCallback(name, args, options);
|
||
const errMsg = beforeInvokeApi(name, [args], protocol);
|
||
if (errMsg) {
|
||
return invokeFail(id, name, errMsg);
|
||
}
|
||
return fn(args, {
|
||
resolve: (res) => invokeSuccess(id, name, res),
|
||
reject: (errMsg2, errRes) => invokeFail(id, name, parseErrMsg(errMsg2), errRes)
|
||
});
|
||
};
|
||
}
|
||
function wrapperSyncApi(name, fn, protocol, options) {
|
||
return (...args) => {
|
||
const errMsg = beforeInvokeApi(name, args, protocol);
|
||
if (errMsg) {
|
||
throw new Error(errMsg);
|
||
}
|
||
return fn.apply(null, args);
|
||
};
|
||
}
|
||
function wrapperAsyncApi(name, fn, protocol, options) {
|
||
return wrapperTaskApi(name, fn, protocol, options);
|
||
}
|
||
function defineSyncApi(name, fn, protocol, options) {
|
||
return wrapperSyncApi(name, fn, protocol);
|
||
}
|
||
function defineAsyncApi(name, fn, protocol, options) {
|
||
return promisify$1(name, wrapperAsyncApi(name, fn, protocol, options));
|
||
}
|
||
const API_UPX2PX = "upx2px";
|
||
const Upx2pxProtocol = [
|
||
{
|
||
name: "upx",
|
||
type: [Number, String],
|
||
required: true
|
||
}
|
||
];
|
||
const EPS = 1e-4;
|
||
const BASE_DEVICE_WIDTH = 750;
|
||
let isIOS = false;
|
||
let deviceWidth = 0;
|
||
let deviceDPR = 0;
|
||
function checkDeviceWidth() {
|
||
const { platform: platform2, pixelRatio, windowWidth } = getBaseSystemInfo();
|
||
deviceWidth = windowWidth;
|
||
deviceDPR = pixelRatio;
|
||
isIOS = platform2 === "ios";
|
||
}
|
||
const upx2px = defineSyncApi(API_UPX2PX, (number2, newDeviceWidth) => {
|
||
if (deviceWidth === 0) {
|
||
checkDeviceWidth();
|
||
}
|
||
number2 = Number(number2);
|
||
if (number2 === 0) {
|
||
return 0;
|
||
}
|
||
let width = newDeviceWidth || deviceWidth;
|
||
let result = number2 / BASE_DEVICE_WIDTH * width;
|
||
if (result < 0) {
|
||
result = -result;
|
||
}
|
||
result = Math.floor(result + EPS);
|
||
if (result === 0) {
|
||
if (deviceDPR === 1 || !isIOS) {
|
||
result = 1;
|
||
} else {
|
||
result = 0.5;
|
||
}
|
||
}
|
||
return number2 < 0 ? -result : result;
|
||
}, Upx2pxProtocol);
|
||
const API_ADD_INTERCEPTOR = "addInterceptor";
|
||
const API_REMOVE_INTERCEPTOR = "removeInterceptor";
|
||
const AddInterceptorProtocol = [
|
||
{
|
||
name: "method",
|
||
type: [String, Object],
|
||
required: true
|
||
}
|
||
];
|
||
const RemoveInterceptorProtocol = AddInterceptorProtocol;
|
||
function mergeInterceptorHook(interceptors2, interceptor) {
|
||
Object.keys(interceptor).forEach((hook) => {
|
||
if (isFunction(interceptor[hook])) {
|
||
interceptors2[hook] = mergeHook(interceptors2[hook], interceptor[hook]);
|
||
}
|
||
});
|
||
}
|
||
function removeInterceptorHook(interceptors2, interceptor) {
|
||
if (!interceptors2 || !interceptor) {
|
||
return;
|
||
}
|
||
Object.keys(interceptor).forEach((name) => {
|
||
const hooks = interceptors2[name];
|
||
const hook = interceptor[name];
|
||
if (isArray$1(hooks) && isFunction(hook)) {
|
||
remove(hooks, hook);
|
||
}
|
||
});
|
||
}
|
||
function mergeHook(parentVal, childVal) {
|
||
const res = childVal ? parentVal ? parentVal.concat(childVal) : isArray$1(childVal) ? childVal : [childVal] : parentVal;
|
||
return res ? dedupeHooks(res) : res;
|
||
}
|
||
function dedupeHooks(hooks) {
|
||
const res = [];
|
||
for (let i = 0; i < hooks.length; i++) {
|
||
if (res.indexOf(hooks[i]) === -1) {
|
||
res.push(hooks[i]);
|
||
}
|
||
}
|
||
return res;
|
||
}
|
||
const addInterceptor = defineSyncApi(API_ADD_INTERCEPTOR, (method2, interceptor) => {
|
||
if (isString(method2) && isPlainObject$2(interceptor)) {
|
||
mergeInterceptorHook(scopedInterceptors[method2] || (scopedInterceptors[method2] = {}), interceptor);
|
||
} else if (isPlainObject$2(method2)) {
|
||
mergeInterceptorHook(globalInterceptors, method2);
|
||
}
|
||
}, AddInterceptorProtocol);
|
||
const removeInterceptor = defineSyncApi(API_REMOVE_INTERCEPTOR, (method2, interceptor) => {
|
||
if (isString(method2)) {
|
||
if (isPlainObject$2(interceptor)) {
|
||
removeInterceptorHook(scopedInterceptors[method2], interceptor);
|
||
} else {
|
||
delete scopedInterceptors[method2];
|
||
}
|
||
} else if (isPlainObject$2(method2)) {
|
||
removeInterceptorHook(globalInterceptors, method2);
|
||
}
|
||
}, RemoveInterceptorProtocol);
|
||
const interceptors = {};
|
||
const API_ON = "$on";
|
||
const OnProtocol = [
|
||
{
|
||
name: "event",
|
||
type: String,
|
||
required: true
|
||
},
|
||
{
|
||
name: "callback",
|
||
type: Function,
|
||
required: true
|
||
}
|
||
];
|
||
const API_ONCE = "$once";
|
||
const OnceProtocol = OnProtocol;
|
||
const API_OFF = "$off";
|
||
const OffProtocol = [
|
||
{
|
||
name: "event",
|
||
type: [String, Array]
|
||
},
|
||
{
|
||
name: "callback",
|
||
type: [Function, Number]
|
||
}
|
||
];
|
||
const API_EMIT = "$emit";
|
||
const EmitProtocol = [
|
||
{
|
||
name: "event",
|
||
type: String,
|
||
required: true
|
||
}
|
||
];
|
||
class EventBus {
|
||
constructor() {
|
||
this.$emitter = new E$1();
|
||
}
|
||
on(name, callback) {
|
||
return this.$emitter.on(name, callback);
|
||
}
|
||
once(name, callback) {
|
||
return this.$emitter.once(name, callback);
|
||
}
|
||
off(name, callback) {
|
||
if (!name) {
|
||
this.$emitter.e = {};
|
||
return;
|
||
}
|
||
this.$emitter.off(name, callback);
|
||
}
|
||
emit(name, ...args) {
|
||
this.$emitter.emit(name, ...args);
|
||
}
|
||
}
|
||
const eventBus = new EventBus();
|
||
const $on = defineSyncApi(API_ON, (name, callback) => {
|
||
eventBus.on(name, callback);
|
||
return () => eventBus.off(name, callback);
|
||
}, OnProtocol);
|
||
const $once = defineSyncApi(API_ONCE, (name, callback) => {
|
||
eventBus.once(name, callback);
|
||
return () => eventBus.off(name, callback);
|
||
}, OnceProtocol);
|
||
const $off = defineSyncApi(API_OFF, (name, callback) => {
|
||
if (!isArray$1(name))
|
||
name = name ? [name] : [];
|
||
name.forEach((n2) => eventBus.off(n2, callback));
|
||
}, OffProtocol);
|
||
const $emit = defineSyncApi(API_EMIT, (name, ...args) => {
|
||
eventBus.emit(name, ...args);
|
||
}, EmitProtocol);
|
||
let cid;
|
||
let cidErrMsg;
|
||
let enabled;
|
||
function normalizePushMessage(message) {
|
||
try {
|
||
return JSON.parse(message);
|
||
} catch (e2) {
|
||
}
|
||
return message;
|
||
}
|
||
function invokePushCallback(args) {
|
||
if (args.type === "enabled") {
|
||
enabled = true;
|
||
} else if (args.type === "clientId") {
|
||
cid = args.cid;
|
||
cidErrMsg = args.errMsg;
|
||
invokeGetPushCidCallbacks(cid, args.errMsg);
|
||
} else if (args.type === "pushMsg") {
|
||
const message = {
|
||
type: "receive",
|
||
data: normalizePushMessage(args.message)
|
||
};
|
||
for (let i = 0; i < onPushMessageCallbacks.length; i++) {
|
||
const callback = onPushMessageCallbacks[i];
|
||
callback(message);
|
||
if (message.stopped) {
|
||
break;
|
||
}
|
||
}
|
||
} else if (args.type === "click") {
|
||
onPushMessageCallbacks.forEach((callback) => {
|
||
callback({
|
||
type: "click",
|
||
data: normalizePushMessage(args.message)
|
||
});
|
||
});
|
||
}
|
||
}
|
||
const getPushCidCallbacks = [];
|
||
function invokeGetPushCidCallbacks(cid2, errMsg) {
|
||
getPushCidCallbacks.forEach((callback) => {
|
||
callback(cid2, errMsg);
|
||
});
|
||
getPushCidCallbacks.length = 0;
|
||
}
|
||
const API_GET_PUSH_CLIENT_ID = "getPushClientId";
|
||
const getPushClientId = defineAsyncApi(API_GET_PUSH_CLIENT_ID, (_, { resolve: resolve2, reject }) => {
|
||
Promise.resolve().then(() => {
|
||
if (typeof enabled === "undefined") {
|
||
enabled = false;
|
||
cid = "";
|
||
cidErrMsg = "uniPush is not enabled";
|
||
}
|
||
getPushCidCallbacks.push((cid2, errMsg) => {
|
||
if (cid2) {
|
||
resolve2({ cid: cid2 });
|
||
} else {
|
||
reject(errMsg);
|
||
}
|
||
});
|
||
if (typeof cid !== "undefined") {
|
||
invokeGetPushCidCallbacks(cid, cidErrMsg);
|
||
}
|
||
});
|
||
});
|
||
const onPushMessageCallbacks = [];
|
||
const onPushMessage = (fn) => {
|
||
if (onPushMessageCallbacks.indexOf(fn) === -1) {
|
||
onPushMessageCallbacks.push(fn);
|
||
}
|
||
};
|
||
const offPushMessage = (fn) => {
|
||
if (!fn) {
|
||
onPushMessageCallbacks.length = 0;
|
||
} else {
|
||
const index2 = onPushMessageCallbacks.indexOf(fn);
|
||
if (index2 > -1) {
|
||
onPushMessageCallbacks.splice(index2, 1);
|
||
}
|
||
}
|
||
};
|
||
const SYNC_API_RE = /^\$|getLocale|setLocale|sendNativeEvent|restoreGlobal|requireGlobal|getCurrentSubNVue|getMenuButtonBoundingClientRect|^report|interceptors|Interceptor$|getSubNVueById|requireNativePlugin|upx2px|hideKeyboard|canIUse|^create|Sync$|Manager$|base64ToArrayBuffer|arrayBufferToBase64|getDeviceInfo|getAppBaseInfo|getWindowInfo|getSystemSetting|getAppAuthorizeSetting/;
|
||
const CONTEXT_API_RE = /^create|Manager$/;
|
||
const CONTEXT_API_RE_EXC = ["createBLEConnection"];
|
||
const ASYNC_API = ["createBLEConnection"];
|
||
const CALLBACK_API_RE = /^on|^off/;
|
||
function isContextApi(name) {
|
||
return CONTEXT_API_RE.test(name) && CONTEXT_API_RE_EXC.indexOf(name) === -1;
|
||
}
|
||
function isSyncApi(name) {
|
||
return SYNC_API_RE.test(name) && ASYNC_API.indexOf(name) === -1;
|
||
}
|
||
function isCallbackApi(name) {
|
||
return CALLBACK_API_RE.test(name) && name !== "onPush";
|
||
}
|
||
function shouldPromise(name) {
|
||
if (isContextApi(name) || isSyncApi(name) || isCallbackApi(name)) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
if (!Promise.prototype.finally) {
|
||
Promise.prototype.finally = function(onfinally) {
|
||
const promise2 = this.constructor;
|
||
return this.then((value2) => promise2.resolve(onfinally && onfinally()).then(() => value2), (reason) => promise2.resolve(onfinally && onfinally()).then(() => {
|
||
throw reason;
|
||
}));
|
||
};
|
||
}
|
||
function promisify(name, api) {
|
||
if (!shouldPromise(name)) {
|
||
return api;
|
||
}
|
||
if (!isFunction(api)) {
|
||
return api;
|
||
}
|
||
return function promiseApi(options = {}, ...rest) {
|
||
if (isFunction(options.success) || isFunction(options.fail) || isFunction(options.complete)) {
|
||
return wrapperReturnValue(name, invokeApi(name, api, options, rest));
|
||
}
|
||
return wrapperReturnValue(name, handlePromise(new Promise((resolve2, reject) => {
|
||
invokeApi(name, api, extend({}, options, {
|
||
success: resolve2,
|
||
fail: reject
|
||
}), rest);
|
||
})));
|
||
};
|
||
}
|
||
const CALLBACKS = ["success", "fail", "cancel", "complete"];
|
||
function initWrapper(protocols2) {
|
||
function processCallback(methodName, method2, returnValue) {
|
||
return function(res) {
|
||
return method2(processReturnValue(methodName, res, returnValue));
|
||
};
|
||
}
|
||
function processArgs(methodName, fromArgs, argsOption = {}, returnValue = {}, keepFromArgs = false) {
|
||
if (isPlainObject$2(fromArgs)) {
|
||
const toArgs = keepFromArgs === true ? fromArgs : {};
|
||
if (isFunction(argsOption)) {
|
||
argsOption = argsOption(fromArgs, toArgs) || {};
|
||
}
|
||
for (const key in fromArgs) {
|
||
if (hasOwn(argsOption, key)) {
|
||
let keyOption = argsOption[key];
|
||
if (isFunction(keyOption)) {
|
||
keyOption = keyOption(fromArgs[key], fromArgs, toArgs);
|
||
}
|
||
if (!keyOption) {
|
||
console.warn(`微信小程序 ${methodName} 暂不支持 ${key}`);
|
||
} else if (isString(keyOption)) {
|
||
toArgs[keyOption] = fromArgs[key];
|
||
} else if (isPlainObject$2(keyOption)) {
|
||
toArgs[keyOption.name ? keyOption.name : key] = keyOption.value;
|
||
}
|
||
} else if (CALLBACKS.indexOf(key) !== -1) {
|
||
const callback = fromArgs[key];
|
||
if (isFunction(callback)) {
|
||
toArgs[key] = processCallback(methodName, callback, returnValue);
|
||
}
|
||
} else {
|
||
if (!keepFromArgs && !hasOwn(toArgs, key)) {
|
||
toArgs[key] = fromArgs[key];
|
||
}
|
||
}
|
||
}
|
||
return toArgs;
|
||
} else if (isFunction(fromArgs)) {
|
||
fromArgs = processCallback(methodName, fromArgs, returnValue);
|
||
}
|
||
return fromArgs;
|
||
}
|
||
function processReturnValue(methodName, res, returnValue, keepReturnValue = false) {
|
||
if (isFunction(protocols2.returnValue)) {
|
||
res = protocols2.returnValue(methodName, res);
|
||
}
|
||
return processArgs(methodName, res, returnValue, {}, keepReturnValue);
|
||
}
|
||
return function wrapper(methodName, method2) {
|
||
if (!hasOwn(protocols2, methodName)) {
|
||
return method2;
|
||
}
|
||
const protocol = protocols2[methodName];
|
||
if (!protocol) {
|
||
return function() {
|
||
console.error(`微信小程序 暂不支持${methodName}`);
|
||
};
|
||
}
|
||
return function(arg1, arg2) {
|
||
let options = protocol;
|
||
if (isFunction(protocol)) {
|
||
options = protocol(arg1);
|
||
}
|
||
arg1 = processArgs(methodName, arg1, options.args, options.returnValue);
|
||
const args = [arg1];
|
||
if (typeof arg2 !== "undefined") {
|
||
args.push(arg2);
|
||
}
|
||
const returnValue = wx[options.name || methodName].apply(wx, args);
|
||
if (isSyncApi(methodName)) {
|
||
return processReturnValue(methodName, returnValue, options.returnValue, isContextApi(methodName));
|
||
}
|
||
return returnValue;
|
||
};
|
||
};
|
||
}
|
||
const getLocale = () => {
|
||
const app = isFunction(getApp) && getApp({ allowDefault: true });
|
||
if (app && app.$vm) {
|
||
return app.$vm.$locale;
|
||
}
|
||
return normalizeLocale(wx.getSystemInfoSync().language) || LOCALE_EN;
|
||
};
|
||
const setLocale = (locale) => {
|
||
const app = isFunction(getApp) && getApp();
|
||
if (!app) {
|
||
return false;
|
||
}
|
||
const oldLocale = app.$vm.$locale;
|
||
if (oldLocale !== locale) {
|
||
app.$vm.$locale = locale;
|
||
onLocaleChangeCallbacks.forEach((fn) => fn({ locale }));
|
||
return true;
|
||
}
|
||
return false;
|
||
};
|
||
const onLocaleChangeCallbacks = [];
|
||
const onLocaleChange = (fn) => {
|
||
if (onLocaleChangeCallbacks.indexOf(fn) === -1) {
|
||
onLocaleChangeCallbacks.push(fn);
|
||
}
|
||
};
|
||
if (typeof global !== "undefined") {
|
||
global.getLocale = getLocale;
|
||
}
|
||
const UUID_KEY = "__DC_STAT_UUID";
|
||
let deviceId;
|
||
function useDeviceId(global2 = wx) {
|
||
return function addDeviceId(_, toRes) {
|
||
deviceId = deviceId || global2.getStorageSync(UUID_KEY);
|
||
if (!deviceId) {
|
||
deviceId = Date.now() + "" + Math.floor(Math.random() * 1e7);
|
||
wx.setStorage({
|
||
key: UUID_KEY,
|
||
data: deviceId
|
||
});
|
||
}
|
||
toRes.deviceId = deviceId;
|
||
};
|
||
}
|
||
function addSafeAreaInsets(fromRes, toRes) {
|
||
if (fromRes.safeArea) {
|
||
const safeArea = fromRes.safeArea;
|
||
toRes.safeAreaInsets = {
|
||
top: safeArea.top,
|
||
left: safeArea.left,
|
||
right: fromRes.windowWidth - safeArea.right,
|
||
bottom: fromRes.screenHeight - safeArea.bottom
|
||
};
|
||
}
|
||
}
|
||
function getOSInfo(system, platform2) {
|
||
let osName = "";
|
||
let osVersion = "";
|
||
if (platform2 && false) {
|
||
osName = platform2;
|
||
osVersion = system;
|
||
} else {
|
||
osName = system.split(" ")[0] || "";
|
||
osVersion = system.split(" ")[1] || "";
|
||
}
|
||
return {
|
||
osName: osName.toLocaleLowerCase(),
|
||
osVersion
|
||
};
|
||
}
|
||
function populateParameters(fromRes, toRes) {
|
||
const { brand = "", model = "", system = "", language = "", theme, version: version2, platform: platform2, fontSizeSetting, SDKVersion, pixelRatio, deviceOrientation } = fromRes;
|
||
const { osName, osVersion } = getOSInfo(system, platform2);
|
||
let hostVersion = version2;
|
||
let deviceType = getGetDeviceType(fromRes, model);
|
||
let deviceBrand = getDeviceBrand(brand);
|
||
let _hostName = getHostName(fromRes);
|
||
let _deviceOrientation = deviceOrientation;
|
||
let _devicePixelRatio = pixelRatio;
|
||
let _SDKVersion = SDKVersion;
|
||
const hostLanguage = language.replace(/_/g, "-");
|
||
const parameters = {
|
||
appId: "__UNI__F9C76ED",
|
||
appName: "FuziAI",
|
||
appVersion: "1.0.0",
|
||
appVersionCode: "100",
|
||
appLanguage: getAppLanguage(hostLanguage),
|
||
uniCompileVersion: "4.36",
|
||
uniCompilerVersion: "4.36",
|
||
uniRuntimeVersion: "4.36",
|
||
uniPlatform: "mp-weixin",
|
||
deviceBrand,
|
||
deviceModel: model,
|
||
deviceType,
|
||
devicePixelRatio: _devicePixelRatio,
|
||
deviceOrientation: _deviceOrientation,
|
||
osName,
|
||
osVersion,
|
||
hostTheme: theme,
|
||
hostVersion,
|
||
hostLanguage,
|
||
hostName: _hostName,
|
||
hostSDKVersion: _SDKVersion,
|
||
hostFontSizeSetting: fontSizeSetting,
|
||
windowTop: 0,
|
||
windowBottom: 0,
|
||
// TODO
|
||
osLanguage: void 0,
|
||
osTheme: void 0,
|
||
ua: void 0,
|
||
hostPackageName: void 0,
|
||
browserName: void 0,
|
||
browserVersion: void 0,
|
||
isUniAppX: false
|
||
};
|
||
extend(toRes, parameters);
|
||
}
|
||
function getGetDeviceType(fromRes, model) {
|
||
let deviceType = fromRes.deviceType || "phone";
|
||
{
|
||
const deviceTypeMaps = {
|
||
ipad: "pad",
|
||
windows: "pc",
|
||
mac: "pc"
|
||
};
|
||
const deviceTypeMapsKeys = Object.keys(deviceTypeMaps);
|
||
const _model = model.toLocaleLowerCase();
|
||
for (let index2 = 0; index2 < deviceTypeMapsKeys.length; index2++) {
|
||
const _m = deviceTypeMapsKeys[index2];
|
||
if (_model.indexOf(_m) !== -1) {
|
||
deviceType = deviceTypeMaps[_m];
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
return deviceType;
|
||
}
|
||
function getDeviceBrand(brand) {
|
||
let deviceBrand = brand;
|
||
if (deviceBrand) {
|
||
deviceBrand = deviceBrand.toLocaleLowerCase();
|
||
}
|
||
return deviceBrand;
|
||
}
|
||
function getAppLanguage(defaultLanguage) {
|
||
return getLocale ? getLocale() : defaultLanguage;
|
||
}
|
||
function getHostName(fromRes) {
|
||
const _platform = "WeChat";
|
||
let _hostName = fromRes.hostName || _platform;
|
||
{
|
||
if (fromRes.environment) {
|
||
_hostName = fromRes.environment;
|
||
} else if (fromRes.host && fromRes.host.env) {
|
||
_hostName = fromRes.host.env;
|
||
}
|
||
}
|
||
return _hostName;
|
||
}
|
||
const getSystemInfo = {
|
||
returnValue: (fromRes, toRes) => {
|
||
addSafeAreaInsets(fromRes, toRes);
|
||
useDeviceId()(fromRes, toRes);
|
||
populateParameters(fromRes, toRes);
|
||
}
|
||
};
|
||
const getSystemInfoSync = getSystemInfo;
|
||
const redirectTo = {};
|
||
const previewImage = {
|
||
args(fromArgs, toArgs) {
|
||
let currentIndex = parseInt(fromArgs.current);
|
||
if (isNaN(currentIndex)) {
|
||
return;
|
||
}
|
||
const urls = fromArgs.urls;
|
||
if (!isArray$1(urls)) {
|
||
return;
|
||
}
|
||
const len = urls.length;
|
||
if (!len) {
|
||
return;
|
||
}
|
||
if (currentIndex < 0) {
|
||
currentIndex = 0;
|
||
} else if (currentIndex >= len) {
|
||
currentIndex = len - 1;
|
||
}
|
||
if (currentIndex > 0) {
|
||
toArgs.current = urls[currentIndex];
|
||
toArgs.urls = urls.filter((item, index2) => index2 < currentIndex ? item !== urls[currentIndex] : true);
|
||
} else {
|
||
toArgs.current = urls[0];
|
||
}
|
||
return {
|
||
indicator: false,
|
||
loop: false
|
||
};
|
||
}
|
||
};
|
||
const showActionSheet = {
|
||
args(fromArgs, toArgs) {
|
||
toArgs.alertText = fromArgs.title;
|
||
}
|
||
};
|
||
const getDeviceInfo = {
|
||
returnValue: (fromRes, toRes) => {
|
||
const { brand, model, system = "", platform: platform2 = "" } = fromRes;
|
||
let deviceType = getGetDeviceType(fromRes, model);
|
||
let deviceBrand = getDeviceBrand(brand);
|
||
useDeviceId()(fromRes, toRes);
|
||
const { osName, osVersion } = getOSInfo(system, platform2);
|
||
toRes = sortObject(extend(toRes, {
|
||
deviceType,
|
||
deviceBrand,
|
||
deviceModel: model,
|
||
osName,
|
||
osVersion
|
||
}));
|
||
}
|
||
};
|
||
const getAppBaseInfo = {
|
||
returnValue: (fromRes, toRes) => {
|
||
const { version: version2, language, SDKVersion, theme } = fromRes;
|
||
let _hostName = getHostName(fromRes);
|
||
let hostLanguage = language.replace(/_/g, "-");
|
||
toRes = sortObject(extend(toRes, {
|
||
hostVersion: version2,
|
||
hostLanguage,
|
||
hostName: _hostName,
|
||
hostSDKVersion: SDKVersion,
|
||
hostTheme: theme,
|
||
appId: "__UNI__F9C76ED",
|
||
appName: "FuziAI",
|
||
appVersion: "1.0.0",
|
||
appVersionCode: "100",
|
||
appLanguage: getAppLanguage(hostLanguage),
|
||
isUniAppX: false,
|
||
uniPlatform: "mp-weixin",
|
||
uniCompileVersion: "4.36",
|
||
uniCompilerVersion: "4.36",
|
||
uniRuntimeVersion: "4.36"
|
||
}));
|
||
}
|
||
};
|
||
const getWindowInfo = {
|
||
returnValue: (fromRes, toRes) => {
|
||
addSafeAreaInsets(fromRes, toRes);
|
||
toRes = sortObject(extend(toRes, {
|
||
windowTop: 0,
|
||
windowBottom: 0
|
||
}));
|
||
}
|
||
};
|
||
const getAppAuthorizeSetting = {
|
||
returnValue: function(fromRes, toRes) {
|
||
const { locationReducedAccuracy } = fromRes;
|
||
toRes.locationAccuracy = "unsupported";
|
||
if (locationReducedAccuracy === true) {
|
||
toRes.locationAccuracy = "reduced";
|
||
} else if (locationReducedAccuracy === false) {
|
||
toRes.locationAccuracy = "full";
|
||
}
|
||
}
|
||
};
|
||
const baseApis = {
|
||
$on,
|
||
$off,
|
||
$once,
|
||
$emit,
|
||
upx2px,
|
||
interceptors,
|
||
addInterceptor,
|
||
removeInterceptor,
|
||
onCreateVueApp,
|
||
invokeCreateVueAppHook,
|
||
getLocale,
|
||
setLocale,
|
||
onLocaleChange,
|
||
getPushClientId,
|
||
onPushMessage,
|
||
offPushMessage,
|
||
invokePushCallback
|
||
};
|
||
function initUni(api, protocols2, platform2 = wx) {
|
||
const wrapper = initWrapper(protocols2);
|
||
const UniProxyHandlers = {
|
||
get(target, key) {
|
||
if (hasOwn(target, key)) {
|
||
return target[key];
|
||
}
|
||
if (hasOwn(api, key)) {
|
||
return promisify(key, api[key]);
|
||
}
|
||
if (hasOwn(baseApis, key)) {
|
||
return promisify(key, baseApis[key]);
|
||
}
|
||
return promisify(key, wrapper(key, platform2[key]));
|
||
}
|
||
};
|
||
return new Proxy({}, UniProxyHandlers);
|
||
}
|
||
function initGetProvider(providers) {
|
||
return function getProvider2({ service, success, fail, complete }) {
|
||
let res;
|
||
if (providers[service]) {
|
||
res = {
|
||
errMsg: "getProvider:ok",
|
||
service,
|
||
provider: providers[service]
|
||
};
|
||
isFunction(success) && success(res);
|
||
} else {
|
||
res = {
|
||
errMsg: "getProvider:fail:服务[" + service + "]不存在"
|
||
};
|
||
isFunction(fail) && fail(res);
|
||
}
|
||
isFunction(complete) && complete(res);
|
||
};
|
||
}
|
||
const objectKeys = [
|
||
"qy",
|
||
"env",
|
||
"error",
|
||
"version",
|
||
"lanDebug",
|
||
"cloud",
|
||
"serviceMarket",
|
||
"router",
|
||
"worklet",
|
||
"__webpack_require_UNI_MP_PLUGIN__"
|
||
];
|
||
const singlePageDisableKey = ["lanDebug", "router", "worklet"];
|
||
const launchOption = wx.getLaunchOptionsSync ? wx.getLaunchOptionsSync() : null;
|
||
function isWxKey(key) {
|
||
if (launchOption && launchOption.scene === 1154 && singlePageDisableKey.includes(key)) {
|
||
return false;
|
||
}
|
||
return objectKeys.indexOf(key) > -1 || typeof wx[key] === "function";
|
||
}
|
||
function initWx() {
|
||
const newWx = {};
|
||
for (const key in wx) {
|
||
if (isWxKey(key)) {
|
||
newWx[key] = wx[key];
|
||
}
|
||
}
|
||
if (typeof globalThis !== "undefined" && typeof requireMiniProgram === "undefined") {
|
||
globalThis.wx = newWx;
|
||
}
|
||
return newWx;
|
||
}
|
||
const mocks$1 = ["__route__", "__wxExparserNodeId__", "__wxWebviewId__"];
|
||
const getProvider = initGetProvider({
|
||
oauth: ["weixin"],
|
||
share: ["weixin"],
|
||
payment: ["wxpay"],
|
||
push: ["weixin"]
|
||
});
|
||
function initComponentMocks(component) {
|
||
const res = /* @__PURE__ */ Object.create(null);
|
||
mocks$1.forEach((name) => {
|
||
res[name] = component[name];
|
||
});
|
||
return res;
|
||
}
|
||
function createSelectorQuery() {
|
||
const query = wx$2.createSelectorQuery();
|
||
const oldIn = query.in;
|
||
query.in = function newIn(component) {
|
||
return oldIn.call(this, initComponentMocks(component));
|
||
};
|
||
return query;
|
||
}
|
||
const wx$2 = initWx();
|
||
let baseInfo = wx$2.getAppBaseInfo && wx$2.getAppBaseInfo();
|
||
if (!baseInfo) {
|
||
baseInfo = wx$2.getSystemInfoSync();
|
||
}
|
||
const host = baseInfo ? baseInfo.host : null;
|
||
const shareVideoMessage = host && host.env === "SAAASDK" ? wx$2.miniapp.shareVideoMessage : wx$2.shareVideoMessage;
|
||
var shims = /* @__PURE__ */ Object.freeze({
|
||
__proto__: null,
|
||
createSelectorQuery,
|
||
getProvider,
|
||
shareVideoMessage
|
||
});
|
||
const compressImage = {
|
||
args(fromArgs, toArgs) {
|
||
if (fromArgs.compressedHeight && !toArgs.compressHeight) {
|
||
toArgs.compressHeight = fromArgs.compressedHeight;
|
||
}
|
||
if (fromArgs.compressedWidth && !toArgs.compressWidth) {
|
||
toArgs.compressWidth = fromArgs.compressedWidth;
|
||
}
|
||
}
|
||
};
|
||
var protocols = /* @__PURE__ */ Object.freeze({
|
||
__proto__: null,
|
||
compressImage,
|
||
getAppAuthorizeSetting,
|
||
getAppBaseInfo,
|
||
getDeviceInfo,
|
||
getSystemInfo,
|
||
getSystemInfoSync,
|
||
getWindowInfo,
|
||
previewImage,
|
||
redirectTo,
|
||
showActionSheet
|
||
});
|
||
const wx$1 = initWx();
|
||
var index$2 = initUni(shims, protocols, wx$1);
|
||
new Set(
|
||
/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
|
||
);
|
||
function toRaw$1(observed) {
|
||
const raw = observed && observed["__v_raw"];
|
||
return raw ? toRaw$1(raw) : observed;
|
||
}
|
||
function isRef$1(r2) {
|
||
return !!(r2 && r2.__v_isRef === true);
|
||
}
|
||
/**
|
||
* @vue/runtime-core v3.4.21
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/
|
||
const stack$1 = [];
|
||
function pushWarningContext$1(vnode) {
|
||
stack$1.push(vnode);
|
||
}
|
||
function popWarningContext$1() {
|
||
stack$1.pop();
|
||
}
|
||
function warn$1$1(msg, ...args) {
|
||
const instance = stack$1.length ? stack$1[stack$1.length - 1].component : null;
|
||
const appWarnHandler = instance && instance.appContext.config.warnHandler;
|
||
const trace = getComponentTrace$1();
|
||
if (appWarnHandler) {
|
||
callWithErrorHandling$1(
|
||
appWarnHandler,
|
||
instance,
|
||
11,
|
||
[
|
||
msg + args.map((a) => {
|
||
var _a, _b;
|
||
return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
|
||
}).join(""),
|
||
instance && instance.proxy,
|
||
trace.map(
|
||
({ vnode }) => `at <${formatComponentName$1(instance, vnode.type)}>`
|
||
).join("\n"),
|
||
trace
|
||
]
|
||
);
|
||
} else {
|
||
const warnArgs = [`[Vue warn]: ${msg}`, ...args];
|
||
if (trace.length && // avoid spamming console during tests
|
||
true) {
|
||
warnArgs.push(`
|
||
`, ...formatTrace$1(trace));
|
||
}
|
||
console.warn(...warnArgs);
|
||
}
|
||
}
|
||
function getComponentTrace$1() {
|
||
let currentVNode = stack$1[stack$1.length - 1];
|
||
if (!currentVNode) {
|
||
return [];
|
||
}
|
||
const normalizedStack = [];
|
||
while (currentVNode) {
|
||
const last = normalizedStack[0];
|
||
if (last && last.vnode === currentVNode) {
|
||
last.recurseCount++;
|
||
} else {
|
||
normalizedStack.push({
|
||
vnode: currentVNode,
|
||
recurseCount: 0
|
||
});
|
||
}
|
||
const parentInstance = currentVNode.component && currentVNode.component.parent;
|
||
currentVNode = parentInstance && parentInstance.vnode;
|
||
}
|
||
return normalizedStack;
|
||
}
|
||
function formatTrace$1(trace) {
|
||
const logs = [];
|
||
trace.forEach((entry, i) => {
|
||
logs.push(...i === 0 ? [] : [`
|
||
`], ...formatTraceEntry$1(entry));
|
||
});
|
||
return logs;
|
||
}
|
||
function formatTraceEntry$1({ vnode, recurseCount }) {
|
||
const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
|
||
const isRoot = vnode.component ? vnode.component.parent == null : false;
|
||
const open = ` at <${formatComponentName$1(
|
||
vnode.component,
|
||
vnode.type,
|
||
isRoot
|
||
)}`;
|
||
const close = `>` + postfix;
|
||
return vnode.props ? [open, ...formatProps$1(vnode.props), close] : [open + close];
|
||
}
|
||
function formatProps$1(props2) {
|
||
const res = [];
|
||
const keys = Object.keys(props2);
|
||
keys.slice(0, 3).forEach((key) => {
|
||
res.push(...formatProp$1(key, props2[key]));
|
||
});
|
||
if (keys.length > 3) {
|
||
res.push(` ...`);
|
||
}
|
||
return res;
|
||
}
|
||
function formatProp$1(key, value2, raw) {
|
||
if (isString(value2)) {
|
||
value2 = JSON.stringify(value2);
|
||
return raw ? value2 : [`${key}=${value2}`];
|
||
} else if (typeof value2 === "number" || typeof value2 === "boolean" || value2 == null) {
|
||
return raw ? value2 : [`${key}=${value2}`];
|
||
} else if (isRef$1(value2)) {
|
||
value2 = formatProp$1(key, toRaw$1(value2.value), true);
|
||
return raw ? value2 : [`${key}=Ref<`, value2, `>`];
|
||
} else if (isFunction(value2)) {
|
||
return [`${key}=fn${value2.name ? `<${value2.name}>` : ``}`];
|
||
} else {
|
||
value2 = toRaw$1(value2);
|
||
return raw ? value2 : [`${key}=`, value2];
|
||
}
|
||
}
|
||
const ErrorTypeStrings$1 = {
|
||
["sp"]: "serverPrefetch hook",
|
||
["bc"]: "beforeCreate hook",
|
||
["c"]: "created hook",
|
||
["bm"]: "beforeMount hook",
|
||
["m"]: "mounted hook",
|
||
["bu"]: "beforeUpdate hook",
|
||
["u"]: "updated",
|
||
["bum"]: "beforeUnmount hook",
|
||
["um"]: "unmounted hook",
|
||
["a"]: "activated hook",
|
||
["da"]: "deactivated hook",
|
||
["ec"]: "errorCaptured hook",
|
||
["rtc"]: "renderTracked hook",
|
||
["rtg"]: "renderTriggered hook",
|
||
[0]: "setup function",
|
||
[1]: "render function",
|
||
[2]: "watcher getter",
|
||
[3]: "watcher callback",
|
||
[4]: "watcher cleanup function",
|
||
[5]: "native event handler",
|
||
[6]: "component event handler",
|
||
[7]: "vnode hook",
|
||
[8]: "directive hook",
|
||
[9]: "transition hook",
|
||
[10]: "app errorHandler",
|
||
[11]: "app warnHandler",
|
||
[12]: "ref function",
|
||
[13]: "async component loader",
|
||
[14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."
|
||
};
|
||
function callWithErrorHandling$1(fn, instance, type2, args) {
|
||
try {
|
||
return args ? fn(...args) : fn();
|
||
} catch (err) {
|
||
handleError$1(err, instance, type2);
|
||
}
|
||
}
|
||
function handleError$1(err, instance, type2, throwInDev = true) {
|
||
const contextVNode = instance ? instance.vnode : null;
|
||
if (instance) {
|
||
let cur = instance.parent;
|
||
const exposedInstance = instance.proxy;
|
||
const errorInfo = ErrorTypeStrings$1[type2];
|
||
while (cur) {
|
||
const errorCapturedHooks = cur.ec;
|
||
if (errorCapturedHooks) {
|
||
for (let i = 0; i < errorCapturedHooks.length; i++) {
|
||
if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
cur = cur.parent;
|
||
}
|
||
const appErrorHandler = instance.appContext.config.errorHandler;
|
||
if (appErrorHandler) {
|
||
callWithErrorHandling$1(
|
||
appErrorHandler,
|
||
null,
|
||
10,
|
||
[err, exposedInstance, errorInfo]
|
||
);
|
||
return;
|
||
}
|
||
}
|
||
logError$1(err, type2, contextVNode, throwInDev);
|
||
}
|
||
function logError$1(err, type2, contextVNode, throwInDev = true) {
|
||
{
|
||
const info = ErrorTypeStrings$1[type2];
|
||
if (contextVNode) {
|
||
pushWarningContext$1(contextVNode);
|
||
}
|
||
warn$1$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
|
||
if (contextVNode) {
|
||
popWarningContext$1();
|
||
}
|
||
if (throwInDev) {
|
||
throw err;
|
||
} else {
|
||
console.error(err);
|
||
}
|
||
}
|
||
}
|
||
let isFlushing$1 = false;
|
||
let isFlushPending$1 = false;
|
||
const queue$1 = [];
|
||
let flushIndex$1 = 0;
|
||
const pendingPostFlushCbs$1 = [];
|
||
let activePostFlushCbs$1 = null;
|
||
let postFlushIndex$1 = 0;
|
||
const resolvedPromise$1 = /* @__PURE__ */ Promise.resolve();
|
||
const RECURSION_LIMIT$1 = 100;
|
||
function findInsertionIndex$1(id) {
|
||
let start = flushIndex$1 + 1;
|
||
let end = queue$1.length;
|
||
while (start < end) {
|
||
const middle = start + end >>> 1;
|
||
const middleJob = queue$1[middle];
|
||
const middleJobId = getId$1(middleJob);
|
||
if (middleJobId < id || middleJobId === id && middleJob.pre) {
|
||
start = middle + 1;
|
||
} else {
|
||
end = middle;
|
||
}
|
||
}
|
||
return start;
|
||
}
|
||
function queueJob$1(job) {
|
||
if (!queue$1.length || !queue$1.includes(
|
||
job,
|
||
isFlushing$1 && job.allowRecurse ? flushIndex$1 + 1 : flushIndex$1
|
||
)) {
|
||
if (job.id == null) {
|
||
queue$1.push(job);
|
||
} else {
|
||
queue$1.splice(findInsertionIndex$1(job.id), 0, job);
|
||
}
|
||
queueFlush$1();
|
||
}
|
||
}
|
||
function queueFlush$1() {
|
||
if (!isFlushing$1 && !isFlushPending$1) {
|
||
isFlushPending$1 = true;
|
||
resolvedPromise$1.then(flushJobs$1);
|
||
}
|
||
}
|
||
function queuePostFlushCb$1(cb) {
|
||
if (!isArray$1(cb)) {
|
||
if (!activePostFlushCbs$1 || !activePostFlushCbs$1.includes(
|
||
cb,
|
||
cb.allowRecurse ? postFlushIndex$1 + 1 : postFlushIndex$1
|
||
)) {
|
||
pendingPostFlushCbs$1.push(cb);
|
||
}
|
||
} else {
|
||
pendingPostFlushCbs$1.push(...cb);
|
||
}
|
||
queueFlush$1();
|
||
}
|
||
function flushPostFlushCbs$1(seen) {
|
||
if (pendingPostFlushCbs$1.length) {
|
||
const deduped = [...new Set(pendingPostFlushCbs$1)].sort(
|
||
(a, b) => getId$1(a) - getId$1(b)
|
||
);
|
||
pendingPostFlushCbs$1.length = 0;
|
||
if (activePostFlushCbs$1) {
|
||
activePostFlushCbs$1.push(...deduped);
|
||
return;
|
||
}
|
||
activePostFlushCbs$1 = deduped;
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
for (postFlushIndex$1 = 0; postFlushIndex$1 < activePostFlushCbs$1.length; postFlushIndex$1++) {
|
||
if (checkRecursiveUpdates$1(seen, activePostFlushCbs$1[postFlushIndex$1])) {
|
||
continue;
|
||
}
|
||
activePostFlushCbs$1[postFlushIndex$1]();
|
||
}
|
||
activePostFlushCbs$1 = null;
|
||
postFlushIndex$1 = 0;
|
||
}
|
||
}
|
||
const getId$1 = (job) => job.id == null ? Infinity : job.id;
|
||
const comparator$1 = (a, b) => {
|
||
const diff2 = getId$1(a) - getId$1(b);
|
||
if (diff2 === 0) {
|
||
if (a.pre && !b.pre)
|
||
return -1;
|
||
if (b.pre && !a.pre)
|
||
return 1;
|
||
}
|
||
return diff2;
|
||
};
|
||
function flushJobs$1(seen) {
|
||
isFlushPending$1 = false;
|
||
isFlushing$1 = true;
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
queue$1.sort(comparator$1);
|
||
const check = (job) => checkRecursiveUpdates$1(seen, job);
|
||
try {
|
||
for (flushIndex$1 = 0; flushIndex$1 < queue$1.length; flushIndex$1++) {
|
||
const job = queue$1[flushIndex$1];
|
||
if (job && job.active !== false) {
|
||
if (check(job)) {
|
||
continue;
|
||
}
|
||
callWithErrorHandling$1(job, null, 14);
|
||
}
|
||
}
|
||
} finally {
|
||
flushIndex$1 = 0;
|
||
queue$1.length = 0;
|
||
flushPostFlushCbs$1(seen);
|
||
isFlushing$1 = false;
|
||
if (queue$1.length || pendingPostFlushCbs$1.length) {
|
||
flushJobs$1(seen);
|
||
}
|
||
}
|
||
}
|
||
function checkRecursiveUpdates$1(seen, fn) {
|
||
if (!seen.has(fn)) {
|
||
seen.set(fn, 1);
|
||
} else {
|
||
const count = seen.get(fn);
|
||
if (count > RECURSION_LIMIT$1) {
|
||
const instance = fn.ownerInstance;
|
||
const componentName = instance && getComponentName$1(instance.type);
|
||
handleError$1(
|
||
`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
|
||
null,
|
||
10
|
||
);
|
||
return true;
|
||
} else {
|
||
seen.set(fn, count + 1);
|
||
}
|
||
}
|
||
}
|
||
const hmrDirtyComponents = /* @__PURE__ */ new Set();
|
||
{
|
||
getGlobalThis().__VUE_HMR_RUNTIME__ = {
|
||
createRecord: tryWrap(createRecord),
|
||
rerender: tryWrap(rerender),
|
||
reload: tryWrap(reload)
|
||
};
|
||
}
|
||
const map = /* @__PURE__ */ new Map();
|
||
function createRecord(id, initialDef) {
|
||
if (map.has(id)) {
|
||
return false;
|
||
}
|
||
map.set(id, {
|
||
initialDef: normalizeClassComponent(initialDef),
|
||
instances: /* @__PURE__ */ new Set()
|
||
});
|
||
return true;
|
||
}
|
||
function normalizeClassComponent(component) {
|
||
return isClassComponent$1(component) ? component.__vccOpts : component;
|
||
}
|
||
function rerender(id, newRender) {
|
||
const record = map.get(id);
|
||
if (!record) {
|
||
return;
|
||
}
|
||
record.initialDef.render = newRender;
|
||
[...record.instances].forEach((instance) => {
|
||
if (newRender) {
|
||
instance.render = newRender;
|
||
normalizeClassComponent(instance.type).render = newRender;
|
||
}
|
||
instance.renderCache = [];
|
||
instance.effect.dirty = true;
|
||
instance.update();
|
||
});
|
||
}
|
||
function reload(id, newComp) {
|
||
const record = map.get(id);
|
||
if (!record)
|
||
return;
|
||
newComp = normalizeClassComponent(newComp);
|
||
updateComponentDef(record.initialDef, newComp);
|
||
const instances = [...record.instances];
|
||
for (const instance of instances) {
|
||
const oldComp = normalizeClassComponent(instance.type);
|
||
if (!hmrDirtyComponents.has(oldComp)) {
|
||
if (oldComp !== record.initialDef) {
|
||
updateComponentDef(oldComp, newComp);
|
||
}
|
||
hmrDirtyComponents.add(oldComp);
|
||
}
|
||
instance.appContext.propsCache.delete(instance.type);
|
||
instance.appContext.emitsCache.delete(instance.type);
|
||
instance.appContext.optionsCache.delete(instance.type);
|
||
if (instance.ceReload) {
|
||
hmrDirtyComponents.add(oldComp);
|
||
instance.ceReload(newComp.styles);
|
||
hmrDirtyComponents.delete(oldComp);
|
||
} else if (instance.parent) {
|
||
instance.parent.effect.dirty = true;
|
||
queueJob$1(instance.parent.update);
|
||
} else if (instance.appContext.reload) {
|
||
instance.appContext.reload();
|
||
} else if (typeof window !== "undefined") {
|
||
window.location.reload();
|
||
} else {
|
||
console.warn(
|
||
"[HMR] Root or manually mounted instance modified. Full reload required."
|
||
);
|
||
}
|
||
}
|
||
queuePostFlushCb$1(() => {
|
||
for (const instance of instances) {
|
||
hmrDirtyComponents.delete(
|
||
normalizeClassComponent(instance.type)
|
||
);
|
||
}
|
||
});
|
||
}
|
||
function updateComponentDef(oldComp, newComp) {
|
||
extend(oldComp, newComp);
|
||
for (const key in oldComp) {
|
||
if (key !== "__file" && !(key in newComp)) {
|
||
delete oldComp[key];
|
||
}
|
||
}
|
||
}
|
||
function tryWrap(fn) {
|
||
return (id, arg) => {
|
||
try {
|
||
return fn(id, arg);
|
||
} catch (e2) {
|
||
console.error(e2);
|
||
console.warn(
|
||
`[HMR] Something went wrong during Vue component hot-reload. Full reload required.`
|
||
);
|
||
}
|
||
};
|
||
}
|
||
{
|
||
const g = getGlobalThis();
|
||
const registerGlobalSetter = (key, setter) => {
|
||
let setters;
|
||
if (!(setters = g[key]))
|
||
setters = g[key] = [];
|
||
setters.push(setter);
|
||
return (v) => {
|
||
if (setters.length > 1)
|
||
setters.forEach((set2) => set2(v));
|
||
else
|
||
setters[0](v);
|
||
};
|
||
};
|
||
registerGlobalSetter(
|
||
`__VUE_INSTANCE_SETTERS__`,
|
||
(v) => v
|
||
);
|
||
registerGlobalSetter(
|
||
`__VUE_SSR_SETTERS__`,
|
||
(v) => v
|
||
);
|
||
}
|
||
const classifyRE$1 = /(?:^|[-_])(\w)/g;
|
||
const classify$1 = (str) => str.replace(classifyRE$1, (c2) => c2.toUpperCase()).replace(/[-_]/g, "");
|
||
function getComponentName$1(Component2, includeInferred = true) {
|
||
return isFunction(Component2) ? Component2.displayName || Component2.name : Component2.name || includeInferred && Component2.__name;
|
||
}
|
||
function formatComponentName$1(instance, Component2, isRoot = false) {
|
||
let name = getComponentName$1(Component2);
|
||
if (!name && Component2.__file) {
|
||
const match = Component2.__file.match(/([^/\\]+)\.\w+$/);
|
||
if (match) {
|
||
name = match[1];
|
||
}
|
||
}
|
||
if (!name && instance && instance.parent) {
|
||
const inferFromRegistry = (registry) => {
|
||
for (const key in registry) {
|
||
if (registry[key] === Component2) {
|
||
return key;
|
||
}
|
||
}
|
||
};
|
||
name = inferFromRegistry(
|
||
instance.components || instance.parent.type.components
|
||
) || inferFromRegistry(instance.appContext.components);
|
||
}
|
||
return name ? classify$1(name) : isRoot ? `App` : `Anonymous`;
|
||
}
|
||
function isClassComponent$1(value2) {
|
||
return isFunction(value2) && "__vccOpts" in value2;
|
||
}
|
||
/**
|
||
* @dcloudio/uni-mp-vue v3.4.21
|
||
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
||
* @license MIT
|
||
**/
|
||
function warn$2(msg, ...args) {
|
||
console.warn(`[Vue warn] ${msg}`, ...args);
|
||
}
|
||
let activeEffectScope;
|
||
class EffectScope {
|
||
constructor(detached = false) {
|
||
this.detached = detached;
|
||
this._active = true;
|
||
this.effects = [];
|
||
this.cleanups = [];
|
||
this.parent = activeEffectScope;
|
||
if (!detached && activeEffectScope) {
|
||
this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(
|
||
this
|
||
) - 1;
|
||
}
|
||
}
|
||
get active() {
|
||
return this._active;
|
||
}
|
||
run(fn) {
|
||
if (this._active) {
|
||
const currentEffectScope = activeEffectScope;
|
||
try {
|
||
activeEffectScope = this;
|
||
return fn();
|
||
} finally {
|
||
activeEffectScope = currentEffectScope;
|
||
}
|
||
} else {
|
||
warn$2(`cannot run an inactive effect scope.`);
|
||
}
|
||
}
|
||
/**
|
||
* This should only be called on non-detached scopes
|
||
* @internal
|
||
*/
|
||
on() {
|
||
activeEffectScope = this;
|
||
}
|
||
/**
|
||
* This should only be called on non-detached scopes
|
||
* @internal
|
||
*/
|
||
off() {
|
||
activeEffectScope = this.parent;
|
||
}
|
||
stop(fromParent) {
|
||
if (this._active) {
|
||
let i, l;
|
||
for (i = 0, l = this.effects.length; i < l; i++) {
|
||
this.effects[i].stop();
|
||
}
|
||
for (i = 0, l = this.cleanups.length; i < l; i++) {
|
||
this.cleanups[i]();
|
||
}
|
||
if (this.scopes) {
|
||
for (i = 0, l = this.scopes.length; i < l; i++) {
|
||
this.scopes[i].stop(true);
|
||
}
|
||
}
|
||
if (!this.detached && this.parent && !fromParent) {
|
||
const last = this.parent.scopes.pop();
|
||
if (last && last !== this) {
|
||
this.parent.scopes[this.index] = last;
|
||
last.index = this.index;
|
||
}
|
||
}
|
||
this.parent = void 0;
|
||
this._active = false;
|
||
}
|
||
}
|
||
}
|
||
function effectScope(detached) {
|
||
return new EffectScope(detached);
|
||
}
|
||
function recordEffectScope(effect2, scope = activeEffectScope) {
|
||
if (scope && scope.active) {
|
||
scope.effects.push(effect2);
|
||
}
|
||
}
|
||
function getCurrentScope() {
|
||
return activeEffectScope;
|
||
}
|
||
function onScopeDispose(fn) {
|
||
if (activeEffectScope) {
|
||
activeEffectScope.cleanups.push(fn);
|
||
} else {
|
||
warn$2(
|
||
`onScopeDispose() is called when there is no active effect scope to be associated with.`
|
||
);
|
||
}
|
||
}
|
||
let activeEffect;
|
||
class ReactiveEffect2 {
|
||
constructor(fn, trigger2, scheduler, scope) {
|
||
this.fn = fn;
|
||
this.trigger = trigger2;
|
||
this.scheduler = scheduler;
|
||
this.active = true;
|
||
this.deps = [];
|
||
this._dirtyLevel = 4;
|
||
this._trackId = 0;
|
||
this._runnings = 0;
|
||
this._shouldSchedule = false;
|
||
this._depsLength = 0;
|
||
recordEffectScope(this, scope);
|
||
}
|
||
get dirty() {
|
||
if (this._dirtyLevel === 2 || this._dirtyLevel === 3) {
|
||
this._dirtyLevel = 1;
|
||
pauseTracking();
|
||
for (let i = 0; i < this._depsLength; i++) {
|
||
const dep = this.deps[i];
|
||
if (dep.computed) {
|
||
triggerComputed(dep.computed);
|
||
if (this._dirtyLevel >= 4) {
|
||
break;
|
||
}
|
||
}
|
||
}
|
||
if (this._dirtyLevel === 1) {
|
||
this._dirtyLevel = 0;
|
||
}
|
||
resetTracking();
|
||
}
|
||
return this._dirtyLevel >= 4;
|
||
}
|
||
set dirty(v) {
|
||
this._dirtyLevel = v ? 4 : 0;
|
||
}
|
||
run() {
|
||
this._dirtyLevel = 0;
|
||
if (!this.active) {
|
||
return this.fn();
|
||
}
|
||
let lastShouldTrack = shouldTrack;
|
||
let lastEffect = activeEffect;
|
||
try {
|
||
shouldTrack = true;
|
||
activeEffect = this;
|
||
this._runnings++;
|
||
preCleanupEffect(this);
|
||
return this.fn();
|
||
} finally {
|
||
postCleanupEffect(this);
|
||
this._runnings--;
|
||
activeEffect = lastEffect;
|
||
shouldTrack = lastShouldTrack;
|
||
}
|
||
}
|
||
stop() {
|
||
var _a;
|
||
if (this.active) {
|
||
preCleanupEffect(this);
|
||
postCleanupEffect(this);
|
||
(_a = this.onStop) == null ? void 0 : _a.call(this);
|
||
this.active = false;
|
||
}
|
||
}
|
||
}
|
||
function triggerComputed(computed2) {
|
||
return computed2.value;
|
||
}
|
||
function preCleanupEffect(effect2) {
|
||
effect2._trackId++;
|
||
effect2._depsLength = 0;
|
||
}
|
||
function postCleanupEffect(effect2) {
|
||
if (effect2.deps.length > effect2._depsLength) {
|
||
for (let i = effect2._depsLength; i < effect2.deps.length; i++) {
|
||
cleanupDepEffect(effect2.deps[i], effect2);
|
||
}
|
||
effect2.deps.length = effect2._depsLength;
|
||
}
|
||
}
|
||
function cleanupDepEffect(dep, effect2) {
|
||
const trackId = dep.get(effect2);
|
||
if (trackId !== void 0 && effect2._trackId !== trackId) {
|
||
dep.delete(effect2);
|
||
if (dep.size === 0) {
|
||
dep.cleanup();
|
||
}
|
||
}
|
||
}
|
||
let shouldTrack = true;
|
||
let pauseScheduleStack = 0;
|
||
const trackStack = [];
|
||
function pauseTracking() {
|
||
trackStack.push(shouldTrack);
|
||
shouldTrack = false;
|
||
}
|
||
function resetTracking() {
|
||
const last = trackStack.pop();
|
||
shouldTrack = last === void 0 ? true : last;
|
||
}
|
||
function pauseScheduling() {
|
||
pauseScheduleStack++;
|
||
}
|
||
function resetScheduling() {
|
||
pauseScheduleStack--;
|
||
while (!pauseScheduleStack && queueEffectSchedulers.length) {
|
||
queueEffectSchedulers.shift()();
|
||
}
|
||
}
|
||
function trackEffect(effect2, dep, debuggerEventExtraInfo) {
|
||
var _a;
|
||
if (dep.get(effect2) !== effect2._trackId) {
|
||
dep.set(effect2, effect2._trackId);
|
||
const oldDep = effect2.deps[effect2._depsLength];
|
||
if (oldDep !== dep) {
|
||
if (oldDep) {
|
||
cleanupDepEffect(oldDep, effect2);
|
||
}
|
||
effect2.deps[effect2._depsLength++] = dep;
|
||
} else {
|
||
effect2._depsLength++;
|
||
}
|
||
{
|
||
(_a = effect2.onTrack) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
|
||
}
|
||
}
|
||
}
|
||
const queueEffectSchedulers = [];
|
||
function triggerEffects(dep, dirtyLevel, debuggerEventExtraInfo) {
|
||
var _a;
|
||
pauseScheduling();
|
||
for (const effect2 of dep.keys()) {
|
||
let tracking;
|
||
if (effect2._dirtyLevel < dirtyLevel && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
|
||
effect2._shouldSchedule || (effect2._shouldSchedule = effect2._dirtyLevel === 0);
|
||
effect2._dirtyLevel = dirtyLevel;
|
||
}
|
||
if (effect2._shouldSchedule && (tracking != null ? tracking : tracking = dep.get(effect2) === effect2._trackId)) {
|
||
{
|
||
(_a = effect2.onTrigger) == null ? void 0 : _a.call(effect2, extend({ effect: effect2 }, debuggerEventExtraInfo));
|
||
}
|
||
effect2.trigger();
|
||
if ((!effect2._runnings || effect2.allowRecurse) && effect2._dirtyLevel !== 2) {
|
||
effect2._shouldSchedule = false;
|
||
if (effect2.scheduler) {
|
||
queueEffectSchedulers.push(effect2.scheduler);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
resetScheduling();
|
||
}
|
||
const createDep = (cleanup, computed2) => {
|
||
const dep = /* @__PURE__ */ new Map();
|
||
dep.cleanup = cleanup;
|
||
dep.computed = computed2;
|
||
return dep;
|
||
};
|
||
const targetMap = /* @__PURE__ */ new WeakMap();
|
||
const ITERATE_KEY = Symbol("iterate");
|
||
const MAP_KEY_ITERATE_KEY = Symbol("Map key iterate");
|
||
function track(target, type2, key) {
|
||
if (shouldTrack && activeEffect) {
|
||
let depsMap = targetMap.get(target);
|
||
if (!depsMap) {
|
||
targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
|
||
}
|
||
let dep = depsMap.get(key);
|
||
if (!dep) {
|
||
depsMap.set(key, dep = createDep(() => depsMap.delete(key)));
|
||
}
|
||
trackEffect(
|
||
activeEffect,
|
||
dep,
|
||
{
|
||
target,
|
||
type: type2,
|
||
key
|
||
}
|
||
);
|
||
}
|
||
}
|
||
function trigger(target, type2, key, newValue, oldValue, oldTarget) {
|
||
const depsMap = targetMap.get(target);
|
||
if (!depsMap) {
|
||
return;
|
||
}
|
||
let deps = [];
|
||
if (type2 === "clear") {
|
||
deps = [...depsMap.values()];
|
||
} else if (key === "length" && isArray$1(target)) {
|
||
const newLength = Number(newValue);
|
||
depsMap.forEach((dep, key2) => {
|
||
if (key2 === "length" || !isSymbol(key2) && key2 >= newLength) {
|
||
deps.push(dep);
|
||
}
|
||
});
|
||
} else {
|
||
if (key !== void 0) {
|
||
deps.push(depsMap.get(key));
|
||
}
|
||
switch (type2) {
|
||
case "add":
|
||
if (!isArray$1(target)) {
|
||
deps.push(depsMap.get(ITERATE_KEY));
|
||
if (isMap(target)) {
|
||
deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
|
||
}
|
||
} else if (isIntegerKey(key)) {
|
||
deps.push(depsMap.get("length"));
|
||
}
|
||
break;
|
||
case "delete":
|
||
if (!isArray$1(target)) {
|
||
deps.push(depsMap.get(ITERATE_KEY));
|
||
if (isMap(target)) {
|
||
deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
|
||
}
|
||
}
|
||
break;
|
||
case "set":
|
||
if (isMap(target)) {
|
||
deps.push(depsMap.get(ITERATE_KEY));
|
||
}
|
||
break;
|
||
}
|
||
}
|
||
pauseScheduling();
|
||
for (const dep of deps) {
|
||
if (dep) {
|
||
triggerEffects(
|
||
dep,
|
||
4,
|
||
{
|
||
target,
|
||
type: type2,
|
||
key,
|
||
newValue,
|
||
oldValue,
|
||
oldTarget
|
||
}
|
||
);
|
||
}
|
||
}
|
||
resetScheduling();
|
||
}
|
||
function getDepFromReactive(object2, key) {
|
||
var _a;
|
||
return (_a = targetMap.get(object2)) == null ? void 0 : _a.get(key);
|
||
}
|
||
const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
|
||
const builtInSymbols = new Set(
|
||
/* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol)
|
||
);
|
||
const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
|
||
function createArrayInstrumentations() {
|
||
const instrumentations = {};
|
||
["includes", "indexOf", "lastIndexOf"].forEach((key) => {
|
||
instrumentations[key] = function(...args) {
|
||
const arr = toRaw(this);
|
||
for (let i = 0, l = this.length; i < l; i++) {
|
||
track(arr, "get", i + "");
|
||
}
|
||
const res = arr[key](...args);
|
||
if (res === -1 || res === false) {
|
||
return arr[key](...args.map(toRaw));
|
||
} else {
|
||
return res;
|
||
}
|
||
};
|
||
});
|
||
["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
|
||
instrumentations[key] = function(...args) {
|
||
pauseTracking();
|
||
pauseScheduling();
|
||
const res = toRaw(this)[key].apply(this, args);
|
||
resetScheduling();
|
||
resetTracking();
|
||
return res;
|
||
};
|
||
});
|
||
return instrumentations;
|
||
}
|
||
function hasOwnProperty$1(key) {
|
||
const obj = toRaw(this);
|
||
track(obj, "has", key);
|
||
return obj.hasOwnProperty(key);
|
||
}
|
||
class BaseReactiveHandler2 {
|
||
constructor(_isReadonly = false, _isShallow = false) {
|
||
this._isReadonly = _isReadonly;
|
||
this._isShallow = _isShallow;
|
||
}
|
||
get(target, key, receiver) {
|
||
const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow;
|
||
if (key === "__v_isReactive") {
|
||
return !isReadonly2;
|
||
} else if (key === "__v_isReadonly") {
|
||
return isReadonly2;
|
||
} else if (key === "__v_isShallow") {
|
||
return isShallow2;
|
||
} else if (key === "__v_raw") {
|
||
if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype
|
||
// this means the reciever is a user proxy of the reactive proxy
|
||
Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) {
|
||
return target;
|
||
}
|
||
return;
|
||
}
|
||
const targetIsArray = isArray$1(target);
|
||
if (!isReadonly2) {
|
||
if (targetIsArray && hasOwn(arrayInstrumentations, key)) {
|
||
return Reflect.get(arrayInstrumentations, key, receiver);
|
||
}
|
||
if (key === "hasOwnProperty") {
|
||
return hasOwnProperty$1;
|
||
}
|
||
}
|
||
const res = Reflect.get(target, key, receiver);
|
||
if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
|
||
return res;
|
||
}
|
||
if (!isReadonly2) {
|
||
track(target, "get", key);
|
||
}
|
||
if (isShallow2) {
|
||
return res;
|
||
}
|
||
if (isRef(res)) {
|
||
return targetIsArray && isIntegerKey(key) ? res : res.value;
|
||
}
|
||
if (isObject$1(res)) {
|
||
return isReadonly2 ? readonly(res) : reactive(res);
|
||
}
|
||
return res;
|
||
}
|
||
}
|
||
class MutableReactiveHandler2 extends BaseReactiveHandler2 {
|
||
constructor(isShallow2 = false) {
|
||
super(false, isShallow2);
|
||
}
|
||
set(target, key, value2, receiver) {
|
||
let oldValue = target[key];
|
||
if (!this._isShallow) {
|
||
const isOldValueReadonly = isReadonly(oldValue);
|
||
if (!isShallow(value2) && !isReadonly(value2)) {
|
||
oldValue = toRaw(oldValue);
|
||
value2 = toRaw(value2);
|
||
}
|
||
if (!isArray$1(target) && isRef(oldValue) && !isRef(value2)) {
|
||
if (isOldValueReadonly) {
|
||
return false;
|
||
} else {
|
||
oldValue.value = value2;
|
||
return true;
|
||
}
|
||
}
|
||
}
|
||
const hadKey = isArray$1(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
|
||
const result = Reflect.set(target, key, value2, receiver);
|
||
if (target === toRaw(receiver)) {
|
||
if (!hadKey) {
|
||
trigger(target, "add", key, value2);
|
||
} else if (hasChanged(value2, oldValue)) {
|
||
trigger(target, "set", key, value2, oldValue);
|
||
}
|
||
}
|
||
return result;
|
||
}
|
||
deleteProperty(target, key) {
|
||
const hadKey = hasOwn(target, key);
|
||
const oldValue = target[key];
|
||
const result = Reflect.deleteProperty(target, key);
|
||
if (result && hadKey) {
|
||
trigger(target, "delete", key, void 0, oldValue);
|
||
}
|
||
return result;
|
||
}
|
||
has(target, key) {
|
||
const result = Reflect.has(target, key);
|
||
if (!isSymbol(key) || !builtInSymbols.has(key)) {
|
||
track(target, "has", key);
|
||
}
|
||
return result;
|
||
}
|
||
ownKeys(target) {
|
||
track(
|
||
target,
|
||
"iterate",
|
||
isArray$1(target) ? "length" : ITERATE_KEY
|
||
);
|
||
return Reflect.ownKeys(target);
|
||
}
|
||
}
|
||
class ReadonlyReactiveHandler2 extends BaseReactiveHandler2 {
|
||
constructor(isShallow2 = false) {
|
||
super(true, isShallow2);
|
||
}
|
||
set(target, key) {
|
||
{
|
||
warn$2(
|
||
`Set operation on key "${String(key)}" failed: target is readonly.`,
|
||
target
|
||
);
|
||
}
|
||
return true;
|
||
}
|
||
deleteProperty(target, key) {
|
||
{
|
||
warn$2(
|
||
`Delete operation on key "${String(key)}" failed: target is readonly.`,
|
||
target
|
||
);
|
||
}
|
||
return true;
|
||
}
|
||
}
|
||
const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler2();
|
||
const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler2();
|
||
const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler2(
|
||
true
|
||
);
|
||
const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler2(true);
|
||
const toShallow = (value2) => value2;
|
||
const getProto = (v) => Reflect.getPrototypeOf(v);
|
||
function get$1(target, key, isReadonly2 = false, isShallow2 = false) {
|
||
target = target["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const rawKey = toRaw(key);
|
||
if (!isReadonly2) {
|
||
if (hasChanged(key, rawKey)) {
|
||
track(rawTarget, "get", key);
|
||
}
|
||
track(rawTarget, "get", rawKey);
|
||
}
|
||
const { has: has2 } = getProto(rawTarget);
|
||
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
|
||
if (has2.call(rawTarget, key)) {
|
||
return wrap(target.get(key));
|
||
} else if (has2.call(rawTarget, rawKey)) {
|
||
return wrap(target.get(rawKey));
|
||
} else if (target !== rawTarget) {
|
||
target.get(key);
|
||
}
|
||
}
|
||
function has(key, isReadonly2 = false) {
|
||
const target = this["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const rawKey = toRaw(key);
|
||
if (!isReadonly2) {
|
||
if (hasChanged(key, rawKey)) {
|
||
track(rawTarget, "has", key);
|
||
}
|
||
track(rawTarget, "has", rawKey);
|
||
}
|
||
return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
|
||
}
|
||
function size(target, isReadonly2 = false) {
|
||
target = target["__v_raw"];
|
||
!isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY);
|
||
return Reflect.get(target, "size", target);
|
||
}
|
||
function add(value2) {
|
||
value2 = toRaw(value2);
|
||
const target = toRaw(this);
|
||
const proto = getProto(target);
|
||
const hadKey = proto.has.call(target, value2);
|
||
if (!hadKey) {
|
||
target.add(value2);
|
||
trigger(target, "add", value2, value2);
|
||
}
|
||
return this;
|
||
}
|
||
function set$1$1(key, value2) {
|
||
value2 = toRaw(value2);
|
||
const target = toRaw(this);
|
||
const { has: has2, get: get2 } = getProto(target);
|
||
let hadKey = has2.call(target, key);
|
||
if (!hadKey) {
|
||
key = toRaw(key);
|
||
hadKey = has2.call(target, key);
|
||
} else {
|
||
checkIdentityKeys(target, has2, key);
|
||
}
|
||
const oldValue = get2.call(target, key);
|
||
target.set(key, value2);
|
||
if (!hadKey) {
|
||
trigger(target, "add", key, value2);
|
||
} else if (hasChanged(value2, oldValue)) {
|
||
trigger(target, "set", key, value2, oldValue);
|
||
}
|
||
return this;
|
||
}
|
||
function deleteEntry(key) {
|
||
const target = toRaw(this);
|
||
const { has: has2, get: get2 } = getProto(target);
|
||
let hadKey = has2.call(target, key);
|
||
if (!hadKey) {
|
||
key = toRaw(key);
|
||
hadKey = has2.call(target, key);
|
||
} else {
|
||
checkIdentityKeys(target, has2, key);
|
||
}
|
||
const oldValue = get2 ? get2.call(target, key) : void 0;
|
||
const result = target.delete(key);
|
||
if (hadKey) {
|
||
trigger(target, "delete", key, void 0, oldValue);
|
||
}
|
||
return result;
|
||
}
|
||
function clear() {
|
||
const target = toRaw(this);
|
||
const hadItems = target.size !== 0;
|
||
const oldTarget = isMap(target) ? new Map(target) : new Set(target);
|
||
const result = target.clear();
|
||
if (hadItems) {
|
||
trigger(target, "clear", void 0, void 0, oldTarget);
|
||
}
|
||
return result;
|
||
}
|
||
function createForEach(isReadonly2, isShallow2) {
|
||
return function forEach3(callback, thisArg) {
|
||
const observed = this;
|
||
const target = observed["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
|
||
!isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY);
|
||
return target.forEach((value2, key) => {
|
||
return callback.call(thisArg, wrap(value2), wrap(key), observed);
|
||
});
|
||
};
|
||
}
|
||
function createIterableMethod(method2, isReadonly2, isShallow2) {
|
||
return function(...args) {
|
||
const target = this["__v_raw"];
|
||
const rawTarget = toRaw(target);
|
||
const targetIsMap = isMap(rawTarget);
|
||
const isPair = method2 === "entries" || method2 === Symbol.iterator && targetIsMap;
|
||
const isKeyOnly = method2 === "keys" && targetIsMap;
|
||
const innerIterator = target[method2](...args);
|
||
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
|
||
!isReadonly2 && track(
|
||
rawTarget,
|
||
"iterate",
|
||
isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY
|
||
);
|
||
return {
|
||
// iterator protocol
|
||
next() {
|
||
const { value: value2, done } = innerIterator.next();
|
||
return done ? { value: value2, done } : {
|
||
value: isPair ? [wrap(value2[0]), wrap(value2[1])] : wrap(value2),
|
||
done
|
||
};
|
||
},
|
||
// iterable protocol
|
||
[Symbol.iterator]() {
|
||
return this;
|
||
}
|
||
};
|
||
};
|
||
}
|
||
function createReadonlyMethod(type2) {
|
||
return function(...args) {
|
||
{
|
||
const key = args[0] ? `on key "${args[0]}" ` : ``;
|
||
warn$2(
|
||
`${capitalize(type2)} operation ${key}failed: target is readonly.`,
|
||
toRaw(this)
|
||
);
|
||
}
|
||
return type2 === "delete" ? false : type2 === "clear" ? void 0 : this;
|
||
};
|
||
}
|
||
function createInstrumentations() {
|
||
const mutableInstrumentations2 = {
|
||
get(key) {
|
||
return get$1(this, key);
|
||
},
|
||
get size() {
|
||
return size(this);
|
||
},
|
||
has,
|
||
add,
|
||
set: set$1$1,
|
||
delete: deleteEntry,
|
||
clear,
|
||
forEach: createForEach(false, false)
|
||
};
|
||
const shallowInstrumentations2 = {
|
||
get(key) {
|
||
return get$1(this, key, false, true);
|
||
},
|
||
get size() {
|
||
return size(this);
|
||
},
|
||
has,
|
||
add,
|
||
set: set$1$1,
|
||
delete: deleteEntry,
|
||
clear,
|
||
forEach: createForEach(false, true)
|
||
};
|
||
const readonlyInstrumentations2 = {
|
||
get(key) {
|
||
return get$1(this, key, true);
|
||
},
|
||
get size() {
|
||
return size(this, true);
|
||
},
|
||
has(key) {
|
||
return has.call(this, key, true);
|
||
},
|
||
add: createReadonlyMethod("add"),
|
||
set: createReadonlyMethod("set"),
|
||
delete: createReadonlyMethod("delete"),
|
||
clear: createReadonlyMethod("clear"),
|
||
forEach: createForEach(true, false)
|
||
};
|
||
const shallowReadonlyInstrumentations2 = {
|
||
get(key) {
|
||
return get$1(this, key, true, true);
|
||
},
|
||
get size() {
|
||
return size(this, true);
|
||
},
|
||
has(key) {
|
||
return has.call(this, key, true);
|
||
},
|
||
add: createReadonlyMethod("add"),
|
||
set: createReadonlyMethod("set"),
|
||
delete: createReadonlyMethod("delete"),
|
||
clear: createReadonlyMethod("clear"),
|
||
forEach: createForEach(true, true)
|
||
};
|
||
const iteratorMethods = [
|
||
"keys",
|
||
"values",
|
||
"entries",
|
||
Symbol.iterator
|
||
];
|
||
iteratorMethods.forEach((method2) => {
|
||
mutableInstrumentations2[method2] = createIterableMethod(method2, false, false);
|
||
readonlyInstrumentations2[method2] = createIterableMethod(method2, true, false);
|
||
shallowInstrumentations2[method2] = createIterableMethod(method2, false, true);
|
||
shallowReadonlyInstrumentations2[method2] = createIterableMethod(
|
||
method2,
|
||
true,
|
||
true
|
||
);
|
||
});
|
||
return [
|
||
mutableInstrumentations2,
|
||
readonlyInstrumentations2,
|
||
shallowInstrumentations2,
|
||
shallowReadonlyInstrumentations2
|
||
];
|
||
}
|
||
const [
|
||
mutableInstrumentations,
|
||
readonlyInstrumentations,
|
||
shallowInstrumentations,
|
||
shallowReadonlyInstrumentations
|
||
] = /* @__PURE__ */ createInstrumentations();
|
||
function createInstrumentationGetter(isReadonly2, shallow) {
|
||
const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;
|
||
return (target, key, receiver) => {
|
||
if (key === "__v_isReactive") {
|
||
return !isReadonly2;
|
||
} else if (key === "__v_isReadonly") {
|
||
return isReadonly2;
|
||
} else if (key === "__v_raw") {
|
||
return target;
|
||
}
|
||
return Reflect.get(
|
||
hasOwn(instrumentations, key) && key in target ? instrumentations : target,
|
||
key,
|
||
receiver
|
||
);
|
||
};
|
||
}
|
||
const mutableCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(false, false)
|
||
};
|
||
const shallowCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(false, true)
|
||
};
|
||
const readonlyCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(true, false)
|
||
};
|
||
const shallowReadonlyCollectionHandlers = {
|
||
get: /* @__PURE__ */ createInstrumentationGetter(true, true)
|
||
};
|
||
function checkIdentityKeys(target, has2, key) {
|
||
const rawKey = toRaw(key);
|
||
if (rawKey !== key && has2.call(target, rawKey)) {
|
||
const type2 = toRawType(target);
|
||
warn$2(
|
||
`Reactive ${type2} contains both the raw and reactive versions of the same object${type2 === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`
|
||
);
|
||
}
|
||
}
|
||
const reactiveMap = /* @__PURE__ */ new WeakMap();
|
||
const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
|
||
const readonlyMap = /* @__PURE__ */ new WeakMap();
|
||
const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
|
||
function targetTypeMap(rawType) {
|
||
switch (rawType) {
|
||
case "Object":
|
||
case "Array":
|
||
return 1;
|
||
case "Map":
|
||
case "Set":
|
||
case "WeakMap":
|
||
case "WeakSet":
|
||
return 2;
|
||
default:
|
||
return 0;
|
||
}
|
||
}
|
||
function getTargetType(value2) {
|
||
return value2["__v_skip"] || !Object.isExtensible(value2) ? 0 : targetTypeMap(toRawType(value2));
|
||
}
|
||
function reactive(target) {
|
||
if (isReadonly(target)) {
|
||
return target;
|
||
}
|
||
return createReactiveObject(
|
||
target,
|
||
false,
|
||
mutableHandlers,
|
||
mutableCollectionHandlers,
|
||
reactiveMap
|
||
);
|
||
}
|
||
function shallowReactive(target) {
|
||
return createReactiveObject(
|
||
target,
|
||
false,
|
||
shallowReactiveHandlers,
|
||
shallowCollectionHandlers,
|
||
shallowReactiveMap
|
||
);
|
||
}
|
||
function readonly(target) {
|
||
return createReactiveObject(
|
||
target,
|
||
true,
|
||
readonlyHandlers,
|
||
readonlyCollectionHandlers,
|
||
readonlyMap
|
||
);
|
||
}
|
||
function shallowReadonly(target) {
|
||
return createReactiveObject(
|
||
target,
|
||
true,
|
||
shallowReadonlyHandlers,
|
||
shallowReadonlyCollectionHandlers,
|
||
shallowReadonlyMap
|
||
);
|
||
}
|
||
function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
|
||
if (!isObject$1(target)) {
|
||
{
|
||
warn$2(`value cannot be made reactive: ${String(target)}`);
|
||
}
|
||
return target;
|
||
}
|
||
if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
|
||
return target;
|
||
}
|
||
const existingProxy = proxyMap.get(target);
|
||
if (existingProxy) {
|
||
return existingProxy;
|
||
}
|
||
const targetType = getTargetType(target);
|
||
if (targetType === 0) {
|
||
return target;
|
||
}
|
||
const proxy = new Proxy(
|
||
target,
|
||
targetType === 2 ? collectionHandlers : baseHandlers
|
||
);
|
||
proxyMap.set(target, proxy);
|
||
return proxy;
|
||
}
|
||
function isReactive(value2) {
|
||
if (isReadonly(value2)) {
|
||
return isReactive(value2["__v_raw"]);
|
||
}
|
||
return !!(value2 && value2["__v_isReactive"]);
|
||
}
|
||
function isReadonly(value2) {
|
||
return !!(value2 && value2["__v_isReadonly"]);
|
||
}
|
||
function isShallow(value2) {
|
||
return !!(value2 && value2["__v_isShallow"]);
|
||
}
|
||
function isProxy(value2) {
|
||
return isReactive(value2) || isReadonly(value2);
|
||
}
|
||
function toRaw(observed) {
|
||
const raw = observed && observed["__v_raw"];
|
||
return raw ? toRaw(raw) : observed;
|
||
}
|
||
function markRaw(value2) {
|
||
if (Object.isExtensible(value2)) {
|
||
def(value2, "__v_skip", true);
|
||
}
|
||
return value2;
|
||
}
|
||
const toReactive = (value2) => isObject$1(value2) ? reactive(value2) : value2;
|
||
const toReadonly = (value2) => isObject$1(value2) ? readonly(value2) : value2;
|
||
const COMPUTED_SIDE_EFFECT_WARN = `Computed is still dirty after getter evaluation, likely because a computed is mutating its own dependency in its getter. State mutations in computed getters should be avoided. Check the docs for more details: https://vuejs.org/guide/essentials/computed.html#getters-should-be-side-effect-free`;
|
||
class ComputedRefImpl {
|
||
constructor(getter, _setter, isReadonly2, isSSR) {
|
||
this.getter = getter;
|
||
this._setter = _setter;
|
||
this.dep = void 0;
|
||
this.__v_isRef = true;
|
||
this["__v_isReadonly"] = false;
|
||
this.effect = new ReactiveEffect2(
|
||
() => getter(this._value),
|
||
() => triggerRefValue(
|
||
this,
|
||
this.effect._dirtyLevel === 2 ? 2 : 3
|
||
)
|
||
);
|
||
this.effect.computed = this;
|
||
this.effect.active = this._cacheable = !isSSR;
|
||
this["__v_isReadonly"] = isReadonly2;
|
||
}
|
||
get value() {
|
||
const self2 = toRaw(this);
|
||
if ((!self2._cacheable || self2.effect.dirty) && hasChanged(self2._value, self2._value = self2.effect.run())) {
|
||
triggerRefValue(self2, 4);
|
||
}
|
||
trackRefValue(self2);
|
||
if (self2.effect._dirtyLevel >= 2) {
|
||
if (this._warnRecursive) {
|
||
warn$2(COMPUTED_SIDE_EFFECT_WARN, `
|
||
|
||
getter: `, this.getter);
|
||
}
|
||
triggerRefValue(self2, 2);
|
||
}
|
||
return self2._value;
|
||
}
|
||
set value(newValue) {
|
||
this._setter(newValue);
|
||
}
|
||
// #region polyfill _dirty for backward compatibility third party code for Vue <= 3.3.x
|
||
get _dirty() {
|
||
return this.effect.dirty;
|
||
}
|
||
set _dirty(v) {
|
||
this.effect.dirty = v;
|
||
}
|
||
// #endregion
|
||
}
|
||
function computed$1(getterOrOptions, debugOptions, isSSR = false) {
|
||
let getter;
|
||
let setter;
|
||
const onlyGetter = isFunction(getterOrOptions);
|
||
if (onlyGetter) {
|
||
getter = getterOrOptions;
|
||
setter = () => {
|
||
warn$2("Write operation failed: computed value is readonly");
|
||
};
|
||
} else {
|
||
getter = getterOrOptions.get;
|
||
setter = getterOrOptions.set;
|
||
}
|
||
const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
|
||
return cRef;
|
||
}
|
||
function trackRefValue(ref2) {
|
||
var _a;
|
||
if (shouldTrack && activeEffect) {
|
||
ref2 = toRaw(ref2);
|
||
trackEffect(
|
||
activeEffect,
|
||
(_a = ref2.dep) != null ? _a : ref2.dep = createDep(
|
||
() => ref2.dep = void 0,
|
||
ref2 instanceof ComputedRefImpl ? ref2 : void 0
|
||
),
|
||
{
|
||
target: ref2,
|
||
type: "get",
|
||
key: "value"
|
||
}
|
||
);
|
||
}
|
||
}
|
||
function triggerRefValue(ref2, dirtyLevel = 4, newVal) {
|
||
ref2 = toRaw(ref2);
|
||
const dep = ref2.dep;
|
||
if (dep) {
|
||
triggerEffects(
|
||
dep,
|
||
dirtyLevel,
|
||
{
|
||
target: ref2,
|
||
type: "set",
|
||
key: "value",
|
||
newValue: newVal
|
||
}
|
||
);
|
||
}
|
||
}
|
||
function isRef(r2) {
|
||
return !!(r2 && r2.__v_isRef === true);
|
||
}
|
||
function ref(value2) {
|
||
return createRef(value2, false);
|
||
}
|
||
function shallowRef(value2) {
|
||
return createRef(value2, true);
|
||
}
|
||
function createRef(rawValue, shallow) {
|
||
if (isRef(rawValue)) {
|
||
return rawValue;
|
||
}
|
||
return new RefImpl(rawValue, shallow);
|
||
}
|
||
class RefImpl {
|
||
constructor(value2, __v_isShallow) {
|
||
this.__v_isShallow = __v_isShallow;
|
||
this.dep = void 0;
|
||
this.__v_isRef = true;
|
||
this._rawValue = __v_isShallow ? value2 : toRaw(value2);
|
||
this._value = __v_isShallow ? value2 : toReactive(value2);
|
||
}
|
||
get value() {
|
||
trackRefValue(this);
|
||
return this._value;
|
||
}
|
||
set value(newVal) {
|
||
const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);
|
||
newVal = useDirectValue ? newVal : toRaw(newVal);
|
||
if (hasChanged(newVal, this._rawValue)) {
|
||
this._rawValue = newVal;
|
||
this._value = useDirectValue ? newVal : toReactive(newVal);
|
||
triggerRefValue(this, 4, newVal);
|
||
}
|
||
}
|
||
}
|
||
function unref(ref2) {
|
||
return isRef(ref2) ? ref2.value : ref2;
|
||
}
|
||
const shallowUnwrapHandlers = {
|
||
get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
|
||
set: (target, key, value2, receiver) => {
|
||
const oldValue = target[key];
|
||
if (isRef(oldValue) && !isRef(value2)) {
|
||
oldValue.value = value2;
|
||
return true;
|
||
} else {
|
||
return Reflect.set(target, key, value2, receiver);
|
||
}
|
||
}
|
||
};
|
||
function proxyRefs(objectWithRefs) {
|
||
return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
|
||
}
|
||
class CustomRefImpl {
|
||
constructor(factory) {
|
||
this.dep = void 0;
|
||
this.__v_isRef = true;
|
||
const { get: get2, set: set2 } = factory(
|
||
() => trackRefValue(this),
|
||
() => triggerRefValue(this)
|
||
);
|
||
this._get = get2;
|
||
this._set = set2;
|
||
}
|
||
get value() {
|
||
return this._get();
|
||
}
|
||
set value(newVal) {
|
||
this._set(newVal);
|
||
}
|
||
}
|
||
function customRef(factory) {
|
||
return new CustomRefImpl(factory);
|
||
}
|
||
function toRefs(object2) {
|
||
if (!isProxy(object2)) {
|
||
warn$2(`toRefs() expects a reactive object but received a plain one.`);
|
||
}
|
||
const ret = isArray$1(object2) ? new Array(object2.length) : {};
|
||
for (const key in object2) {
|
||
ret[key] = propertyToRef(object2, key);
|
||
}
|
||
return ret;
|
||
}
|
||
class ObjectRefImpl {
|
||
constructor(_object, _key, _defaultValue) {
|
||
this._object = _object;
|
||
this._key = _key;
|
||
this._defaultValue = _defaultValue;
|
||
this.__v_isRef = true;
|
||
}
|
||
get value() {
|
||
const val = this._object[this._key];
|
||
return val === void 0 ? this._defaultValue : val;
|
||
}
|
||
set value(newVal) {
|
||
this._object[this._key] = newVal;
|
||
}
|
||
get dep() {
|
||
return getDepFromReactive(toRaw(this._object), this._key);
|
||
}
|
||
}
|
||
class GetterRefImpl {
|
||
constructor(_getter) {
|
||
this._getter = _getter;
|
||
this.__v_isRef = true;
|
||
this.__v_isReadonly = true;
|
||
}
|
||
get value() {
|
||
return this._getter();
|
||
}
|
||
}
|
||
function toRef(source, key, defaultValue) {
|
||
if (isRef(source)) {
|
||
return source;
|
||
} else if (isFunction(source)) {
|
||
return new GetterRefImpl(source);
|
||
} else if (isObject$1(source) && arguments.length > 1) {
|
||
return propertyToRef(source, key, defaultValue);
|
||
} else {
|
||
return ref(source);
|
||
}
|
||
}
|
||
function propertyToRef(source, key, defaultValue) {
|
||
const val = source[key];
|
||
return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue);
|
||
}
|
||
const stack = [];
|
||
function pushWarningContext(vnode) {
|
||
stack.push(vnode);
|
||
}
|
||
function popWarningContext() {
|
||
stack.pop();
|
||
}
|
||
function warn$1(msg, ...args) {
|
||
pauseTracking();
|
||
const instance = stack.length ? stack[stack.length - 1].component : null;
|
||
const appWarnHandler = instance && instance.appContext.config.warnHandler;
|
||
const trace = getComponentTrace();
|
||
if (appWarnHandler) {
|
||
callWithErrorHandling(
|
||
appWarnHandler,
|
||
instance,
|
||
11,
|
||
[
|
||
msg + args.map((a) => {
|
||
var _a, _b;
|
||
return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a);
|
||
}).join(""),
|
||
instance && instance.proxy,
|
||
trace.map(
|
||
({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`
|
||
).join("\n"),
|
||
trace
|
||
]
|
||
);
|
||
} else {
|
||
const warnArgs = [`[Vue warn]: ${msg}`, ...args];
|
||
if (trace.length && // avoid spamming console during tests
|
||
true) {
|
||
warnArgs.push(`
|
||
`, ...formatTrace(trace));
|
||
}
|
||
console.warn(...warnArgs);
|
||
}
|
||
resetTracking();
|
||
}
|
||
function getComponentTrace() {
|
||
let currentVNode = stack[stack.length - 1];
|
||
if (!currentVNode) {
|
||
return [];
|
||
}
|
||
const normalizedStack = [];
|
||
while (currentVNode) {
|
||
const last = normalizedStack[0];
|
||
if (last && last.vnode === currentVNode) {
|
||
last.recurseCount++;
|
||
} else {
|
||
normalizedStack.push({
|
||
vnode: currentVNode,
|
||
recurseCount: 0
|
||
});
|
||
}
|
||
const parentInstance = currentVNode.component && currentVNode.component.parent;
|
||
currentVNode = parentInstance && parentInstance.vnode;
|
||
}
|
||
return normalizedStack;
|
||
}
|
||
function formatTrace(trace) {
|
||
const logs = [];
|
||
trace.forEach((entry, i) => {
|
||
logs.push(...i === 0 ? [] : [`
|
||
`], ...formatTraceEntry(entry));
|
||
});
|
||
return logs;
|
||
}
|
||
function formatTraceEntry({ vnode, recurseCount }) {
|
||
const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
|
||
const isRoot = vnode.component ? vnode.component.parent == null : false;
|
||
const open = ` at <${formatComponentName(
|
||
vnode.component,
|
||
vnode.type,
|
||
isRoot
|
||
)}`;
|
||
const close = `>` + postfix;
|
||
return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];
|
||
}
|
||
function formatProps(props2) {
|
||
const res = [];
|
||
const keys = Object.keys(props2);
|
||
keys.slice(0, 3).forEach((key) => {
|
||
res.push(...formatProp(key, props2[key]));
|
||
});
|
||
if (keys.length > 3) {
|
||
res.push(` ...`);
|
||
}
|
||
return res;
|
||
}
|
||
function formatProp(key, value2, raw) {
|
||
if (isString(value2)) {
|
||
value2 = JSON.stringify(value2);
|
||
return raw ? value2 : [`${key}=${value2}`];
|
||
} else if (typeof value2 === "number" || typeof value2 === "boolean" || value2 == null) {
|
||
return raw ? value2 : [`${key}=${value2}`];
|
||
} else if (isRef(value2)) {
|
||
value2 = formatProp(key, toRaw(value2.value), true);
|
||
return raw ? value2 : [`${key}=Ref<`, value2, `>`];
|
||
} else if (isFunction(value2)) {
|
||
return [`${key}=fn${value2.name ? `<${value2.name}>` : ``}`];
|
||
} else {
|
||
value2 = toRaw(value2);
|
||
return raw ? value2 : [`${key}=`, value2];
|
||
}
|
||
}
|
||
const ErrorTypeStrings = {
|
||
["sp"]: "serverPrefetch hook",
|
||
["bc"]: "beforeCreate hook",
|
||
["c"]: "created hook",
|
||
["bm"]: "beforeMount hook",
|
||
["m"]: "mounted hook",
|
||
["bu"]: "beforeUpdate hook",
|
||
["u"]: "updated",
|
||
["bum"]: "beforeUnmount hook",
|
||
["um"]: "unmounted hook",
|
||
["a"]: "activated hook",
|
||
["da"]: "deactivated hook",
|
||
["ec"]: "errorCaptured hook",
|
||
["rtc"]: "renderTracked hook",
|
||
["rtg"]: "renderTriggered hook",
|
||
[0]: "setup function",
|
||
[1]: "render function",
|
||
[2]: "watcher getter",
|
||
[3]: "watcher callback",
|
||
[4]: "watcher cleanup function",
|
||
[5]: "native event handler",
|
||
[6]: "component event handler",
|
||
[7]: "vnode hook",
|
||
[8]: "directive hook",
|
||
[9]: "transition hook",
|
||
[10]: "app errorHandler",
|
||
[11]: "app warnHandler",
|
||
[12]: "ref function",
|
||
[13]: "async component loader",
|
||
[14]: "scheduler flush. This is likely a Vue internals bug. Please open an issue at https://github.com/vuejs/core ."
|
||
};
|
||
function callWithErrorHandling(fn, instance, type2, args) {
|
||
try {
|
||
return args ? fn(...args) : fn();
|
||
} catch (err) {
|
||
handleError(err, instance, type2);
|
||
}
|
||
}
|
||
function callWithAsyncErrorHandling(fn, instance, type2, args) {
|
||
if (isFunction(fn)) {
|
||
const res = callWithErrorHandling(fn, instance, type2, args);
|
||
if (res && isPromise(res)) {
|
||
res.catch((err) => {
|
||
handleError(err, instance, type2);
|
||
});
|
||
}
|
||
return res;
|
||
}
|
||
const values = [];
|
||
for (let i = 0; i < fn.length; i++) {
|
||
values.push(callWithAsyncErrorHandling(fn[i], instance, type2, args));
|
||
}
|
||
return values;
|
||
}
|
||
function handleError(err, instance, type2, throwInDev = true) {
|
||
const contextVNode = instance ? instance.vnode : null;
|
||
if (instance) {
|
||
let cur = instance.parent;
|
||
const exposedInstance = instance.proxy;
|
||
const errorInfo = ErrorTypeStrings[type2] || type2;
|
||
while (cur) {
|
||
const errorCapturedHooks = cur.ec;
|
||
if (errorCapturedHooks) {
|
||
for (let i = 0; i < errorCapturedHooks.length; i++) {
|
||
if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
|
||
return;
|
||
}
|
||
}
|
||
}
|
||
cur = cur.parent;
|
||
}
|
||
const appErrorHandler = instance.appContext.config.errorHandler;
|
||
if (appErrorHandler) {
|
||
callWithErrorHandling(
|
||
appErrorHandler,
|
||
null,
|
||
10,
|
||
[err, exposedInstance, errorInfo]
|
||
);
|
||
return;
|
||
}
|
||
}
|
||
logError(err, type2, contextVNode, throwInDev);
|
||
}
|
||
function logError(err, type2, contextVNode, throwInDev = true) {
|
||
{
|
||
const info = ErrorTypeStrings[type2] || type2;
|
||
if (contextVNode) {
|
||
pushWarningContext(contextVNode);
|
||
}
|
||
warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
|
||
if (contextVNode) {
|
||
popWarningContext();
|
||
}
|
||
if (throwInDev) {
|
||
console.error(err);
|
||
} else {
|
||
console.error(err);
|
||
}
|
||
}
|
||
}
|
||
let isFlushing = false;
|
||
let isFlushPending = false;
|
||
const queue = [];
|
||
let flushIndex = 0;
|
||
const pendingPostFlushCbs = [];
|
||
let activePostFlushCbs = null;
|
||
let postFlushIndex = 0;
|
||
const resolvedPromise = /* @__PURE__ */ Promise.resolve();
|
||
let currentFlushPromise = null;
|
||
const RECURSION_LIMIT = 100;
|
||
function nextTick$1(fn) {
|
||
const p2 = currentFlushPromise || resolvedPromise;
|
||
return fn ? p2.then(this ? fn.bind(this) : fn) : p2;
|
||
}
|
||
function findInsertionIndex(id) {
|
||
let start = flushIndex + 1;
|
||
let end = queue.length;
|
||
while (start < end) {
|
||
const middle = start + end >>> 1;
|
||
const middleJob = queue[middle];
|
||
const middleJobId = getId(middleJob);
|
||
if (middleJobId < id || middleJobId === id && middleJob.pre) {
|
||
start = middle + 1;
|
||
} else {
|
||
end = middle;
|
||
}
|
||
}
|
||
return start;
|
||
}
|
||
function queueJob(job) {
|
||
if (!queue.length || !queue.includes(
|
||
job,
|
||
isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex
|
||
)) {
|
||
if (job.id == null) {
|
||
queue.push(job);
|
||
} else {
|
||
queue.splice(findInsertionIndex(job.id), 0, job);
|
||
}
|
||
queueFlush();
|
||
}
|
||
}
|
||
function queueFlush() {
|
||
if (!isFlushing && !isFlushPending) {
|
||
isFlushPending = true;
|
||
currentFlushPromise = resolvedPromise.then(flushJobs);
|
||
}
|
||
}
|
||
function hasQueueJob(job) {
|
||
return queue.indexOf(job) > -1;
|
||
}
|
||
function invalidateJob(job) {
|
||
const i = queue.indexOf(job);
|
||
if (i > flushIndex) {
|
||
queue.splice(i, 1);
|
||
}
|
||
}
|
||
function queuePostFlushCb(cb) {
|
||
if (!isArray$1(cb)) {
|
||
if (!activePostFlushCbs || !activePostFlushCbs.includes(
|
||
cb,
|
||
cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex
|
||
)) {
|
||
pendingPostFlushCbs.push(cb);
|
||
}
|
||
} else {
|
||
pendingPostFlushCbs.push(...cb);
|
||
}
|
||
queueFlush();
|
||
}
|
||
function flushPreFlushCbs(instance, seen, i = isFlushing ? flushIndex + 1 : 0) {
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
for (; i < queue.length; i++) {
|
||
const cb = queue[i];
|
||
if (cb && cb.pre) {
|
||
if (checkRecursiveUpdates(seen, cb)) {
|
||
continue;
|
||
}
|
||
queue.splice(i, 1);
|
||
i--;
|
||
cb();
|
||
}
|
||
}
|
||
}
|
||
function flushPostFlushCbs(seen) {
|
||
if (pendingPostFlushCbs.length) {
|
||
const deduped = [...new Set(pendingPostFlushCbs)].sort(
|
||
(a, b) => getId(a) - getId(b)
|
||
);
|
||
pendingPostFlushCbs.length = 0;
|
||
if (activePostFlushCbs) {
|
||
activePostFlushCbs.push(...deduped);
|
||
return;
|
||
}
|
||
activePostFlushCbs = deduped;
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
|
||
if (checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {
|
||
continue;
|
||
}
|
||
activePostFlushCbs[postFlushIndex]();
|
||
}
|
||
activePostFlushCbs = null;
|
||
postFlushIndex = 0;
|
||
}
|
||
}
|
||
const getId = (job) => job.id == null ? Infinity : job.id;
|
||
const comparator = (a, b) => {
|
||
const diff2 = getId(a) - getId(b);
|
||
if (diff2 === 0) {
|
||
if (a.pre && !b.pre)
|
||
return -1;
|
||
if (b.pre && !a.pre)
|
||
return 1;
|
||
}
|
||
return diff2;
|
||
};
|
||
function flushJobs(seen) {
|
||
isFlushPending = false;
|
||
isFlushing = true;
|
||
{
|
||
seen = seen || /* @__PURE__ */ new Map();
|
||
}
|
||
queue.sort(comparator);
|
||
const check = (job) => checkRecursiveUpdates(seen, job);
|
||
try {
|
||
for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
|
||
const job = queue[flushIndex];
|
||
if (job && job.active !== false) {
|
||
if (check(job)) {
|
||
continue;
|
||
}
|
||
callWithErrorHandling(job, null, 14);
|
||
}
|
||
}
|
||
} finally {
|
||
flushIndex = 0;
|
||
queue.length = 0;
|
||
flushPostFlushCbs(seen);
|
||
isFlushing = false;
|
||
currentFlushPromise = null;
|
||
if (queue.length || pendingPostFlushCbs.length) {
|
||
flushJobs(seen);
|
||
}
|
||
}
|
||
}
|
||
function checkRecursiveUpdates(seen, fn) {
|
||
if (!seen.has(fn)) {
|
||
seen.set(fn, 1);
|
||
} else {
|
||
const count = seen.get(fn);
|
||
if (count > RECURSION_LIMIT) {
|
||
const instance = fn.ownerInstance;
|
||
const componentName = instance && getComponentName(instance.type);
|
||
handleError(
|
||
`Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`,
|
||
null,
|
||
10
|
||
);
|
||
return true;
|
||
} else {
|
||
seen.set(fn, count + 1);
|
||
}
|
||
}
|
||
}
|
||
let devtools;
|
||
let buffer = [];
|
||
let devtoolsNotInstalled = false;
|
||
function emit$1(event, ...args) {
|
||
if (devtools) {
|
||
devtools.emit(event, ...args);
|
||
} else if (!devtoolsNotInstalled) {
|
||
buffer.push({ event, args });
|
||
}
|
||
}
|
||
function setDevtoolsHook(hook, target) {
|
||
var _a, _b;
|
||
devtools = hook;
|
||
if (devtools) {
|
||
devtools.enabled = true;
|
||
buffer.forEach(({ event, args }) => devtools.emit(event, ...args));
|
||
buffer = [];
|
||
} else if (
|
||
// handle late devtools injection - only do this if we are in an actual
|
||
// browser environment to avoid the timer handle stalling test runner exit
|
||
// (#4815)
|
||
typeof window !== "undefined" && // some envs mock window but not fully
|
||
window.HTMLElement && // also exclude jsdom
|
||
!((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom"))
|
||
) {
|
||
const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];
|
||
replay.push((newHook) => {
|
||
setDevtoolsHook(newHook, target);
|
||
});
|
||
setTimeout(() => {
|
||
if (!devtools) {
|
||
target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;
|
||
devtoolsNotInstalled = true;
|
||
buffer = [];
|
||
}
|
||
}, 3e3);
|
||
} else {
|
||
devtoolsNotInstalled = true;
|
||
buffer = [];
|
||
}
|
||
}
|
||
function devtoolsInitApp(app, version2) {
|
||
emit$1("app:init", app, version2, {
|
||
Fragment,
|
||
Text: Text$1,
|
||
Comment,
|
||
Static
|
||
});
|
||
}
|
||
const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(
|
||
"component:added"
|
||
/* COMPONENT_ADDED */
|
||
);
|
||
const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(
|
||
"component:updated"
|
||
/* COMPONENT_UPDATED */
|
||
);
|
||
const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(
|
||
"component:removed"
|
||
/* COMPONENT_REMOVED */
|
||
);
|
||
const devtoolsComponentRemoved = (component) => {
|
||
if (devtools && typeof devtools.cleanupBuffer === "function" && // remove the component if it wasn't buffered
|
||
!devtools.cleanupBuffer(component)) {
|
||
_devtoolsComponentRemoved(component);
|
||
}
|
||
};
|
||
/*! #__NO_SIDE_EFFECTS__ */
|
||
// @__NO_SIDE_EFFECTS__
|
||
function createDevtoolsComponentHook(hook) {
|
||
return (component) => {
|
||
emit$1(
|
||
hook,
|
||
component.appContext.app,
|
||
component.uid,
|
||
// fixed by xxxxxx
|
||
// 为 0 是 App,无 parent 是 Page 指向 App
|
||
component.uid === 0 ? void 0 : component.parent ? component.parent.uid : 0,
|
||
component
|
||
);
|
||
};
|
||
}
|
||
const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(
|
||
"perf:start"
|
||
/* PERFORMANCE_START */
|
||
);
|
||
const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(
|
||
"perf:end"
|
||
/* PERFORMANCE_END */
|
||
);
|
||
function createDevtoolsPerformanceHook(hook) {
|
||
return (component, type2, time) => {
|
||
emit$1(hook, component.appContext.app, component.uid, component, type2, time);
|
||
};
|
||
}
|
||
function devtoolsComponentEmit(component, event, params) {
|
||
emit$1(
|
||
"component:emit",
|
||
component.appContext.app,
|
||
component,
|
||
event,
|
||
params
|
||
);
|
||
}
|
||
function emit(instance, event, ...rawArgs) {
|
||
if (instance.isUnmounted)
|
||
return;
|
||
const props2 = instance.vnode.props || EMPTY_OBJ;
|
||
{
|
||
const {
|
||
emitsOptions,
|
||
propsOptions: [propsOptions]
|
||
} = instance;
|
||
if (emitsOptions) {
|
||
if (!(event in emitsOptions) && true) {
|
||
if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {
|
||
warn$1(
|
||
`Component emitted event "${event}" but it is neither declared in the emits option nor as an "${toHandlerKey(event)}" prop.`
|
||
);
|
||
}
|
||
} else {
|
||
const validator = emitsOptions[event];
|
||
if (isFunction(validator)) {
|
||
const isValid = validator(...rawArgs);
|
||
if (!isValid) {
|
||
warn$1(
|
||
`Invalid event arguments: event validation failed for event "${event}".`
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
let args = rawArgs;
|
||
const isModelListener2 = event.startsWith("update:");
|
||
const modelArg = isModelListener2 && event.slice(7);
|
||
if (modelArg && modelArg in props2) {
|
||
const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`;
|
||
const { number: number2, trim: trim2 } = props2[modifiersKey] || EMPTY_OBJ;
|
||
if (trim2) {
|
||
args = rawArgs.map((a) => isString(a) ? a.trim() : a);
|
||
}
|
||
if (number2) {
|
||
args = rawArgs.map(looseToNumber);
|
||
}
|
||
}
|
||
{
|
||
devtoolsComponentEmit(instance, event, args);
|
||
}
|
||
{
|
||
const lowerCaseEvent = event.toLowerCase();
|
||
if (lowerCaseEvent !== event && props2[toHandlerKey(lowerCaseEvent)]) {
|
||
warn$1(
|
||
`Event "${lowerCaseEvent}" is emitted in component ${formatComponentName(
|
||
instance,
|
||
instance.type
|
||
)} but the handler is registered for "${event}". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use "${hyphenate(
|
||
event
|
||
)}" instead of "${event}".`
|
||
);
|
||
}
|
||
}
|
||
let handlerName;
|
||
let handler = props2[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)
|
||
props2[handlerName = toHandlerKey(camelize(event))];
|
||
if (!handler && isModelListener2) {
|
||
handler = props2[handlerName = toHandlerKey(hyphenate(event))];
|
||
}
|
||
if (handler) {
|
||
callWithAsyncErrorHandling(
|
||
handler,
|
||
instance,
|
||
6,
|
||
args
|
||
);
|
||
}
|
||
const onceHandler = props2[handlerName + `Once`];
|
||
if (onceHandler) {
|
||
if (!instance.emitted) {
|
||
instance.emitted = {};
|
||
} else if (instance.emitted[handlerName]) {
|
||
return;
|
||
}
|
||
instance.emitted[handlerName] = true;
|
||
callWithAsyncErrorHandling(
|
||
onceHandler,
|
||
instance,
|
||
6,
|
||
args
|
||
);
|
||
}
|
||
}
|
||
function normalizeEmitsOptions(comp, appContext, asMixin = false) {
|
||
const cache = appContext.emitsCache;
|
||
const cached = cache.get(comp);
|
||
if (cached !== void 0) {
|
||
return cached;
|
||
}
|
||
const raw = comp.emits;
|
||
let normalized = {};
|
||
let hasExtends = false;
|
||
if (!isFunction(comp)) {
|
||
const extendEmits = (raw2) => {
|
||
const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);
|
||
if (normalizedFromExtend) {
|
||
hasExtends = true;
|
||
extend(normalized, normalizedFromExtend);
|
||
}
|
||
};
|
||
if (!asMixin && appContext.mixins.length) {
|
||
appContext.mixins.forEach(extendEmits);
|
||
}
|
||
if (comp.extends) {
|
||
extendEmits(comp.extends);
|
||
}
|
||
if (comp.mixins) {
|
||
comp.mixins.forEach(extendEmits);
|
||
}
|
||
}
|
||
if (!raw && !hasExtends) {
|
||
if (isObject$1(comp)) {
|
||
cache.set(comp, null);
|
||
}
|
||
return null;
|
||
}
|
||
if (isArray$1(raw)) {
|
||
raw.forEach((key) => normalized[key] = null);
|
||
} else {
|
||
extend(normalized, raw);
|
||
}
|
||
if (isObject$1(comp)) {
|
||
cache.set(comp, normalized);
|
||
}
|
||
return normalized;
|
||
}
|
||
function isEmitListener(options, key) {
|
||
if (!options || !isOn(key)) {
|
||
return false;
|
||
}
|
||
key = key.slice(2).replace(/Once$/, "");
|
||
return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);
|
||
}
|
||
let currentRenderingInstance = null;
|
||
function setCurrentRenderingInstance(instance) {
|
||
const prev = currentRenderingInstance;
|
||
currentRenderingInstance = instance;
|
||
instance && instance.type.__scopeId || null;
|
||
return prev;
|
||
}
|
||
const COMPONENTS = "components";
|
||
function resolveComponent(name, maybeSelfReference) {
|
||
return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;
|
||
}
|
||
function resolveAsset(type2, name, warnMissing = true, maybeSelfReference = false) {
|
||
const instance = currentRenderingInstance || currentInstance;
|
||
if (instance) {
|
||
const Component2 = instance.type;
|
||
{
|
||
const selfName = getComponentName(
|
||
Component2,
|
||
false
|
||
);
|
||
if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {
|
||
return Component2;
|
||
}
|
||
}
|
||
const res = (
|
||
// local registration
|
||
// check instance[type] first which is resolved for options API
|
||
resolve(instance[type2] || Component2[type2], name) || // global registration
|
||
resolve(instance.appContext[type2], name)
|
||
);
|
||
if (!res && maybeSelfReference) {
|
||
return Component2;
|
||
}
|
||
if (warnMissing && !res) {
|
||
const extra = `
|
||
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.`;
|
||
warn$1(`Failed to resolve ${type2.slice(0, -1)}: ${name}${extra}`);
|
||
}
|
||
return res;
|
||
} else {
|
||
warn$1(
|
||
`resolve${capitalize(type2.slice(0, -1))} can only be used in render() or setup().`
|
||
);
|
||
}
|
||
}
|
||
function resolve(registry, name) {
|
||
return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);
|
||
}
|
||
function watchSyncEffect(effect2, options) {
|
||
return doWatch(
|
||
effect2,
|
||
null,
|
||
extend({}, options, { flush: "sync" })
|
||
);
|
||
}
|
||
const INITIAL_WATCHER_VALUE = {};
|
||
function watch(source, cb, options) {
|
||
if (!isFunction(cb)) {
|
||
warn$1(
|
||
`\`watch(fn, options?)\` signature has been moved to a separate API. Use \`watchEffect(fn, options?)\` instead. \`watch\` now only supports \`watch(source, cb, options?) signature.`
|
||
);
|
||
}
|
||
return doWatch(source, cb, options);
|
||
}
|
||
function doWatch(source, cb, {
|
||
immediate,
|
||
deep,
|
||
flush,
|
||
once: once2,
|
||
onTrack,
|
||
onTrigger
|
||
} = EMPTY_OBJ) {
|
||
if (cb && once2) {
|
||
const _cb = cb;
|
||
cb = (...args) => {
|
||
_cb(...args);
|
||
unwatch();
|
||
};
|
||
}
|
||
if (deep !== void 0 && typeof deep === "number") {
|
||
warn$1(
|
||
`watch() "deep" option with number value will be used as watch depth in future versions. Please use a boolean instead to avoid potential breakage.`
|
||
);
|
||
}
|
||
if (!cb) {
|
||
if (immediate !== void 0) {
|
||
warn$1(
|
||
`watch() "immediate" option is only respected when using the watch(source, callback, options?) signature.`
|
||
);
|
||
}
|
||
if (deep !== void 0) {
|
||
warn$1(
|
||
`watch() "deep" option is only respected when using the watch(source, callback, options?) signature.`
|
||
);
|
||
}
|
||
if (once2 !== void 0) {
|
||
warn$1(
|
||
`watch() "once" option is only respected when using the watch(source, callback, options?) signature.`
|
||
);
|
||
}
|
||
}
|
||
const warnInvalidSource = (s2) => {
|
||
warn$1(
|
||
`Invalid watch source: `,
|
||
s2,
|
||
`A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`
|
||
);
|
||
};
|
||
const instance = currentInstance;
|
||
const reactiveGetter = (source2) => deep === true ? source2 : (
|
||
// for deep: false, only traverse root-level properties
|
||
traverse(source2, deep === false ? 1 : void 0)
|
||
);
|
||
let getter;
|
||
let forceTrigger = false;
|
||
let isMultiSource = false;
|
||
if (isRef(source)) {
|
||
getter = () => source.value;
|
||
forceTrigger = isShallow(source);
|
||
} else if (isReactive(source)) {
|
||
getter = () => reactiveGetter(source);
|
||
forceTrigger = true;
|
||
} else if (isArray$1(source)) {
|
||
isMultiSource = true;
|
||
forceTrigger = source.some((s2) => isReactive(s2) || isShallow(s2));
|
||
getter = () => source.map((s2) => {
|
||
if (isRef(s2)) {
|
||
return s2.value;
|
||
} else if (isReactive(s2)) {
|
||
return reactiveGetter(s2);
|
||
} else if (isFunction(s2)) {
|
||
return callWithErrorHandling(s2, instance, 2);
|
||
} else {
|
||
warnInvalidSource(s2);
|
||
}
|
||
});
|
||
} else if (isFunction(source)) {
|
||
if (cb) {
|
||
getter = () => callWithErrorHandling(source, instance, 2);
|
||
} else {
|
||
getter = () => {
|
||
if (cleanup) {
|
||
cleanup();
|
||
}
|
||
return callWithAsyncErrorHandling(
|
||
source,
|
||
instance,
|
||
3,
|
||
[onCleanup]
|
||
);
|
||
};
|
||
}
|
||
} else {
|
||
getter = NOOP;
|
||
warnInvalidSource(source);
|
||
}
|
||
if (cb && deep) {
|
||
const baseGetter = getter;
|
||
getter = () => traverse(baseGetter());
|
||
}
|
||
let cleanup;
|
||
let onCleanup = (fn) => {
|
||
cleanup = effect2.onStop = () => {
|
||
callWithErrorHandling(fn, instance, 4);
|
||
cleanup = effect2.onStop = void 0;
|
||
};
|
||
};
|
||
let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;
|
||
const job = () => {
|
||
if (!effect2.active || !effect2.dirty) {
|
||
return;
|
||
}
|
||
if (cb) {
|
||
const newValue = effect2.run();
|
||
if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {
|
||
if (cleanup) {
|
||
cleanup();
|
||
}
|
||
callWithAsyncErrorHandling(cb, instance, 3, [
|
||
newValue,
|
||
// pass undefined as the old value when it's changed for the first time
|
||
oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,
|
||
onCleanup
|
||
]);
|
||
oldValue = newValue;
|
||
}
|
||
} else {
|
||
effect2.run();
|
||
}
|
||
};
|
||
job.allowRecurse = !!cb;
|
||
let scheduler;
|
||
if (flush === "sync") {
|
||
scheduler = job;
|
||
} else if (flush === "post") {
|
||
scheduler = () => queuePostRenderEffect$1(job, instance && instance.suspense);
|
||
} else {
|
||
job.pre = true;
|
||
if (instance)
|
||
job.id = instance.uid;
|
||
scheduler = () => queueJob(job);
|
||
}
|
||
const effect2 = new ReactiveEffect2(getter, NOOP, scheduler);
|
||
const scope = getCurrentScope();
|
||
const unwatch = () => {
|
||
effect2.stop();
|
||
if (scope) {
|
||
remove(scope.effects, effect2);
|
||
}
|
||
};
|
||
{
|
||
effect2.onTrack = onTrack;
|
||
effect2.onTrigger = onTrigger;
|
||
}
|
||
if (cb) {
|
||
if (immediate) {
|
||
job();
|
||
} else {
|
||
oldValue = effect2.run();
|
||
}
|
||
} else if (flush === "post") {
|
||
queuePostRenderEffect$1(
|
||
effect2.run.bind(effect2),
|
||
instance && instance.suspense
|
||
);
|
||
} else {
|
||
effect2.run();
|
||
}
|
||
return unwatch;
|
||
}
|
||
function instanceWatch(source, value2, options) {
|
||
const publicThis = this.proxy;
|
||
const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);
|
||
let cb;
|
||
if (isFunction(value2)) {
|
||
cb = value2;
|
||
} else {
|
||
cb = value2.handler;
|
||
options = value2;
|
||
}
|
||
const reset = setCurrentInstance(this);
|
||
const res = doWatch(getter, cb.bind(publicThis), options);
|
||
reset();
|
||
return res;
|
||
}
|
||
function createPathGetter(ctx, path) {
|
||
const segments = path.split(".");
|
||
return () => {
|
||
let cur = ctx;
|
||
for (let i = 0; i < segments.length && cur; i++) {
|
||
cur = cur[segments[i]];
|
||
}
|
||
return cur;
|
||
};
|
||
}
|
||
function traverse(value2, depth, currentDepth = 0, seen) {
|
||
if (!isObject$1(value2) || value2["__v_skip"]) {
|
||
return value2;
|
||
}
|
||
if (depth && depth > 0) {
|
||
if (currentDepth >= depth) {
|
||
return value2;
|
||
}
|
||
currentDepth++;
|
||
}
|
||
seen = seen || /* @__PURE__ */ new Set();
|
||
if (seen.has(value2)) {
|
||
return value2;
|
||
}
|
||
seen.add(value2);
|
||
if (isRef(value2)) {
|
||
traverse(value2.value, depth, currentDepth, seen);
|
||
} else if (isArray$1(value2)) {
|
||
for (let i = 0; i < value2.length; i++) {
|
||
traverse(value2[i], depth, currentDepth, seen);
|
||
}
|
||
} else if (isSet(value2) || isMap(value2)) {
|
||
value2.forEach((v) => {
|
||
traverse(v, depth, currentDepth, seen);
|
||
});
|
||
} else if (isPlainObject$2(value2)) {
|
||
for (const key in value2) {
|
||
traverse(value2[key], depth, currentDepth, seen);
|
||
}
|
||
}
|
||
return value2;
|
||
}
|
||
function validateDirectiveName(name) {
|
||
if (isBuiltInDirective(name)) {
|
||
warn$1("Do not use built-in directive ids as custom directive id: " + name);
|
||
}
|
||
}
|
||
function createAppContext() {
|
||
return {
|
||
app: null,
|
||
config: {
|
||
isNativeTag: NO,
|
||
performance: false,
|
||
globalProperties: {},
|
||
optionMergeStrategies: {},
|
||
errorHandler: void 0,
|
||
warnHandler: void 0,
|
||
compilerOptions: {}
|
||
},
|
||
mixins: [],
|
||
components: {},
|
||
directives: {},
|
||
provides: /* @__PURE__ */ Object.create(null),
|
||
optionsCache: /* @__PURE__ */ new WeakMap(),
|
||
propsCache: /* @__PURE__ */ new WeakMap(),
|
||
emitsCache: /* @__PURE__ */ new WeakMap()
|
||
};
|
||
}
|
||
let uid$1 = 0;
|
||
function createAppAPI(render, hydrate) {
|
||
return function createApp2(rootComponent, rootProps = null) {
|
||
if (!isFunction(rootComponent)) {
|
||
rootComponent = extend({}, rootComponent);
|
||
}
|
||
if (rootProps != null && !isObject$1(rootProps)) {
|
||
warn$1(`root props passed to app.mount() must be an object.`);
|
||
rootProps = null;
|
||
}
|
||
const context = createAppContext();
|
||
const installedPlugins = /* @__PURE__ */ new WeakSet();
|
||
const app = context.app = {
|
||
_uid: uid$1++,
|
||
_component: rootComponent,
|
||
_props: rootProps,
|
||
_container: null,
|
||
_context: context,
|
||
_instance: null,
|
||
version: version$1,
|
||
get config() {
|
||
return context.config;
|
||
},
|
||
set config(v) {
|
||
{
|
||
warn$1(
|
||
`app.config cannot be replaced. Modify individual options instead.`
|
||
);
|
||
}
|
||
},
|
||
use(plugin2, ...options) {
|
||
if (installedPlugins.has(plugin2)) {
|
||
warn$1(`Plugin has already been applied to target app.`);
|
||
} else if (plugin2 && isFunction(plugin2.install)) {
|
||
installedPlugins.add(plugin2);
|
||
plugin2.install(app, ...options);
|
||
} else if (isFunction(plugin2)) {
|
||
installedPlugins.add(plugin2);
|
||
plugin2(app, ...options);
|
||
} else {
|
||
warn$1(
|
||
`A plugin must either be a function or an object with an "install" function.`
|
||
);
|
||
}
|
||
return app;
|
||
},
|
||
mixin(mixin2) {
|
||
{
|
||
if (!context.mixins.includes(mixin2)) {
|
||
context.mixins.push(mixin2);
|
||
} else {
|
||
warn$1(
|
||
"Mixin has already been applied to target app" + (mixin2.name ? `: ${mixin2.name}` : "")
|
||
);
|
||
}
|
||
}
|
||
return app;
|
||
},
|
||
component(name, component) {
|
||
{
|
||
validateComponentName(name, context.config);
|
||
}
|
||
if (!component) {
|
||
return context.components[name];
|
||
}
|
||
if (context.components[name]) {
|
||
warn$1(`Component "${name}" has already been registered in target app.`);
|
||
}
|
||
context.components[name] = component;
|
||
return app;
|
||
},
|
||
directive(name, directive) {
|
||
{
|
||
validateDirectiveName(name);
|
||
}
|
||
if (!directive) {
|
||
return context.directives[name];
|
||
}
|
||
if (context.directives[name]) {
|
||
warn$1(`Directive "${name}" has already been registered in target app.`);
|
||
}
|
||
context.directives[name] = directive;
|
||
return app;
|
||
},
|
||
// fixed by xxxxxx
|
||
mount() {
|
||
},
|
||
// fixed by xxxxxx
|
||
unmount() {
|
||
},
|
||
provide(key, value2) {
|
||
if (key in context.provides) {
|
||
warn$1(
|
||
`App already provides property with key "${String(key)}". It will be overwritten with the new value.`
|
||
);
|
||
}
|
||
context.provides[key] = value2;
|
||
return app;
|
||
},
|
||
runWithContext(fn) {
|
||
const lastApp = currentApp;
|
||
currentApp = app;
|
||
try {
|
||
return fn();
|
||
} finally {
|
||
currentApp = lastApp;
|
||
}
|
||
}
|
||
};
|
||
return app;
|
||
};
|
||
}
|
||
let currentApp = null;
|
||
function provide(key, value2) {
|
||
if (!currentInstance) {
|
||
{
|
||
warn$1(`provide() can only be used inside setup().`);
|
||
}
|
||
} else {
|
||
let provides = currentInstance.provides;
|
||
const parentProvides = currentInstance.parent && currentInstance.parent.provides;
|
||
if (parentProvides === provides) {
|
||
provides = currentInstance.provides = Object.create(parentProvides);
|
||
}
|
||
provides[key] = value2;
|
||
if (currentInstance.type.mpType === "app") {
|
||
currentInstance.appContext.app.provide(key, value2);
|
||
}
|
||
}
|
||
}
|
||
function inject(key, defaultValue, treatDefaultAsFactory = false) {
|
||
const instance = currentInstance || currentRenderingInstance;
|
||
if (instance || currentApp) {
|
||
const provides = instance ? instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides : currentApp._context.provides;
|
||
if (provides && key in provides) {
|
||
return provides[key];
|
||
} else if (arguments.length > 1) {
|
||
return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance && instance.proxy) : defaultValue;
|
||
} else {
|
||
warn$1(`injection "${String(key)}" not found.`);
|
||
}
|
||
} else {
|
||
warn$1(`inject() can only be used inside setup() or functional components.`);
|
||
}
|
||
}
|
||
function hasInjectionContext() {
|
||
return !!(currentInstance || currentRenderingInstance || currentApp);
|
||
}
|
||
/*! #__NO_SIDE_EFFECTS__ */
|
||
// @__NO_SIDE_EFFECTS__
|
||
function defineComponent(options, extraOptions) {
|
||
return isFunction(options) ? (
|
||
// #8326: extend call and options.name access are considered side-effects
|
||
// by Rollup, so we have to wrap it in a pure-annotated IIFE.
|
||
/* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()
|
||
) : options;
|
||
}
|
||
const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
|
||
function onActivated(hook, target) {
|
||
registerKeepAliveHook(hook, "a", target);
|
||
}
|
||
function onDeactivated(hook, target) {
|
||
registerKeepAliveHook(hook, "da", target);
|
||
}
|
||
function registerKeepAliveHook(hook, type2, target = currentInstance) {
|
||
const wrappedHook = hook.__wdc || (hook.__wdc = () => {
|
||
let current = target;
|
||
while (current) {
|
||
if (current.isDeactivated) {
|
||
return;
|
||
}
|
||
current = current.parent;
|
||
}
|
||
return hook();
|
||
});
|
||
injectHook(type2, wrappedHook, target);
|
||
if (target) {
|
||
let current = target.parent;
|
||
while (current && current.parent) {
|
||
if (isKeepAlive(current.parent.vnode)) {
|
||
injectToKeepAliveRoot(wrappedHook, type2, target, current);
|
||
}
|
||
current = current.parent;
|
||
}
|
||
}
|
||
}
|
||
function injectToKeepAliveRoot(hook, type2, target, keepAliveRoot) {
|
||
const injected = injectHook(
|
||
type2,
|
||
hook,
|
||
keepAliveRoot,
|
||
true
|
||
/* prepend */
|
||
);
|
||
onUnmounted(() => {
|
||
remove(keepAliveRoot[type2], injected);
|
||
}, target);
|
||
}
|
||
function injectHook(type2, hook, target = currentInstance, prepend = false) {
|
||
if (target) {
|
||
if (isRootHook(type2)) {
|
||
target = target.root;
|
||
}
|
||
const hooks = target[type2] || (target[type2] = []);
|
||
const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
|
||
if (target.isUnmounted) {
|
||
return;
|
||
}
|
||
pauseTracking();
|
||
const reset = setCurrentInstance(target);
|
||
const res = callWithAsyncErrorHandling(hook, target, type2, args);
|
||
reset();
|
||
resetTracking();
|
||
return res;
|
||
});
|
||
if (prepend) {
|
||
hooks.unshift(wrappedHook);
|
||
} else {
|
||
hooks.push(wrappedHook);
|
||
}
|
||
return wrappedHook;
|
||
} else {
|
||
const apiName = toHandlerKey(
|
||
(ErrorTypeStrings[type2] || type2.replace(/^on/, "")).replace(/ hook$/, "")
|
||
);
|
||
warn$1(
|
||
`${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().`
|
||
);
|
||
}
|
||
}
|
||
const createHook$1 = (lifecycle) => (hook, target = currentInstance) => (
|
||
// post-create lifecycle registrations are noops during SSR (except for serverPrefetch)
|
||
(!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, (...args) => hook(...args), target)
|
||
);
|
||
const onBeforeMount = createHook$1("bm");
|
||
const onMounted = createHook$1("m");
|
||
const onBeforeUpdate = createHook$1("bu");
|
||
const onUpdated = createHook$1("u");
|
||
const onBeforeUnmount = createHook$1("bum");
|
||
const onUnmounted = createHook$1("um");
|
||
const onServerPrefetch = createHook$1("sp");
|
||
const onRenderTriggered = createHook$1(
|
||
"rtg"
|
||
);
|
||
const onRenderTracked = createHook$1(
|
||
"rtc"
|
||
);
|
||
function onErrorCaptured(hook, target = currentInstance) {
|
||
injectHook("ec", hook, target);
|
||
}
|
||
const getPublicInstance = (i) => {
|
||
if (!i)
|
||
return null;
|
||
if (isStatefulComponent(i))
|
||
return getExposeProxy(i) || i.proxy;
|
||
return getPublicInstance(i.parent);
|
||
};
|
||
const publicPropertiesMap = (
|
||
// Move PURE marker to new line to workaround compiler discarding it
|
||
// due to type annotation
|
||
/* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {
|
||
$: (i) => i,
|
||
// fixed by xxxxxx vue-i18n 在 dev 模式,访问了 $el,故模拟一个假的
|
||
// $el: i => i.vnode.el,
|
||
$el: (i) => i.__$el || (i.__$el = {}),
|
||
$data: (i) => i.data,
|
||
$props: (i) => shallowReadonly(i.props),
|
||
$attrs: (i) => shallowReadonly(i.attrs),
|
||
$slots: (i) => shallowReadonly(i.slots),
|
||
$refs: (i) => shallowReadonly(i.refs),
|
||
$parent: (i) => getPublicInstance(i.parent),
|
||
$root: (i) => getPublicInstance(i.root),
|
||
$emit: (i) => i.emit,
|
||
$options: (i) => resolveMergedOptions(i),
|
||
$forceUpdate: (i) => i.f || (i.f = () => {
|
||
i.effect.dirty = true;
|
||
queueJob(i.update);
|
||
}),
|
||
// $nextTick: i => i.n || (i.n = nextTick.bind(i.proxy!)),// fixed by xxxxxx
|
||
$watch: (i) => instanceWatch.bind(i)
|
||
})
|
||
);
|
||
const isReservedPrefix = (key) => key === "_" || key === "$";
|
||
const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);
|
||
const PublicInstanceProxyHandlers = {
|
||
get({ _: instance }, key) {
|
||
const { ctx, setupState, data, props: props2, accessCache, type: type2, appContext } = instance;
|
||
if (key === "__isVue") {
|
||
return true;
|
||
}
|
||
let normalizedProps;
|
||
if (key[0] !== "$") {
|
||
const n2 = accessCache[key];
|
||
if (n2 !== void 0) {
|
||
switch (n2) {
|
||
case 1:
|
||
return setupState[key];
|
||
case 2:
|
||
return data[key];
|
||
case 4:
|
||
return ctx[key];
|
||
case 3:
|
||
return props2[key];
|
||
}
|
||
} else if (hasSetupBinding(setupState, key)) {
|
||
accessCache[key] = 1;
|
||
return setupState[key];
|
||
} else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
|
||
accessCache[key] = 2;
|
||
return data[key];
|
||
} else if (
|
||
// only cache other properties when instance has declared (thus stable)
|
||
// props
|
||
(normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)
|
||
) {
|
||
accessCache[key] = 3;
|
||
return props2[key];
|
||
} else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
|
||
accessCache[key] = 4;
|
||
return ctx[key];
|
||
} else if (shouldCacheAccess) {
|
||
accessCache[key] = 0;
|
||
}
|
||
}
|
||
const publicGetter = publicPropertiesMap[key];
|
||
let cssModule, globalProperties;
|
||
if (publicGetter) {
|
||
if (key === "$attrs") {
|
||
track(instance, "get", key);
|
||
} else if (key === "$slots") {
|
||
track(instance, "get", key);
|
||
}
|
||
return publicGetter(instance);
|
||
} else if (
|
||
// css module (injected by vue-loader)
|
||
(cssModule = type2.__cssModules) && (cssModule = cssModule[key])
|
||
) {
|
||
return cssModule;
|
||
} else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
|
||
accessCache[key] = 4;
|
||
return ctx[key];
|
||
} else if (
|
||
// global properties
|
||
globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)
|
||
) {
|
||
{
|
||
return globalProperties[key];
|
||
}
|
||
} else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading
|
||
// to infinite warning loop
|
||
key.indexOf("__v") !== 0)) {
|
||
if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {
|
||
warn$1(
|
||
`Property ${JSON.stringify(
|
||
key
|
||
)} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.`
|
||
);
|
||
} else if (instance === currentRenderingInstance) {
|
||
warn$1(
|
||
`Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`
|
||
);
|
||
}
|
||
}
|
||
},
|
||
set({ _: instance }, key, value2) {
|
||
const { data, setupState, ctx } = instance;
|
||
if (hasSetupBinding(setupState, key)) {
|
||
setupState[key] = value2;
|
||
return true;
|
||
} else if (setupState.__isScriptSetup && hasOwn(setupState, key)) {
|
||
warn$1(`Cannot mutate <script setup> binding "${key}" from Options API.`);
|
||
return false;
|
||
} else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
|
||
data[key] = value2;
|
||
return true;
|
||
} else if (hasOwn(instance.props, key)) {
|
||
warn$1(`Attempting to mutate prop "${key}". Props are readonly.`);
|
||
return false;
|
||
}
|
||
if (key[0] === "$" && key.slice(1) in instance) {
|
||
warn$1(
|
||
`Attempting to mutate public property "${key}". Properties starting with $ are reserved and readonly.`
|
||
);
|
||
return false;
|
||
} else {
|
||
if (key in instance.appContext.config.globalProperties) {
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
value: value2
|
||
});
|
||
} else {
|
||
ctx[key] = value2;
|
||
}
|
||
}
|
||
return true;
|
||
},
|
||
has({
|
||
_: { data, setupState, accessCache, ctx, appContext, propsOptions }
|
||
}, key) {
|
||
let normalizedProps;
|
||
return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || hasSetupBinding(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key);
|
||
},
|
||
defineProperty(target, key, descriptor) {
|
||
if (descriptor.get != null) {
|
||
target._.accessCache[key] = 0;
|
||
} else if (hasOwn(descriptor, "value")) {
|
||
this.set(target, key, descriptor.value, null);
|
||
}
|
||
return Reflect.defineProperty(target, key, descriptor);
|
||
}
|
||
};
|
||
{
|
||
PublicInstanceProxyHandlers.ownKeys = (target) => {
|
||
warn$1(
|
||
`Avoid app logic that relies on enumerating keys on a component instance. The keys will be empty in production mode to avoid performance overhead.`
|
||
);
|
||
return Reflect.ownKeys(target);
|
||
};
|
||
}
|
||
function createDevRenderContext(instance) {
|
||
const target = {};
|
||
Object.defineProperty(target, `_`, {
|
||
configurable: true,
|
||
enumerable: false,
|
||
get: () => instance
|
||
});
|
||
Object.keys(publicPropertiesMap).forEach((key) => {
|
||
Object.defineProperty(target, key, {
|
||
configurable: true,
|
||
enumerable: false,
|
||
get: () => publicPropertiesMap[key](instance),
|
||
// intercepted by the proxy so no need for implementation,
|
||
// but needed to prevent set errors
|
||
set: NOOP
|
||
});
|
||
});
|
||
return target;
|
||
}
|
||
function exposePropsOnRenderContext(instance) {
|
||
const {
|
||
ctx,
|
||
propsOptions: [propsOptions]
|
||
} = instance;
|
||
if (propsOptions) {
|
||
Object.keys(propsOptions).forEach((key) => {
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => instance.props[key],
|
||
set: NOOP
|
||
});
|
||
});
|
||
}
|
||
}
|
||
function exposeSetupStateOnRenderContext(instance) {
|
||
const { ctx, setupState } = instance;
|
||
Object.keys(toRaw(setupState)).forEach((key) => {
|
||
if (!setupState.__isScriptSetup) {
|
||
if (isReservedPrefix(key[0])) {
|
||
warn$1(
|
||
`setup() return property ${JSON.stringify(
|
||
key
|
||
)} should not start with "$" or "_" which are reserved prefixes for Vue internals.`
|
||
);
|
||
return;
|
||
}
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => setupState[key],
|
||
set: NOOP
|
||
});
|
||
}
|
||
});
|
||
}
|
||
function useSlots() {
|
||
return getContext().slots;
|
||
}
|
||
function getContext() {
|
||
const i = getCurrentInstance();
|
||
if (!i) {
|
||
warn$1(`useContext() called without active instance.`);
|
||
}
|
||
return i.setupContext || (i.setupContext = createSetupContext(i));
|
||
}
|
||
function normalizePropsOrEmits(props2) {
|
||
return isArray$1(props2) ? props2.reduce(
|
||
(normalized, p2) => (normalized[p2] = null, normalized),
|
||
{}
|
||
) : props2;
|
||
}
|
||
function mergeModels(a, b) {
|
||
if (!a || !b)
|
||
return a || b;
|
||
if (isArray$1(a) && isArray$1(b))
|
||
return a.concat(b);
|
||
return extend({}, normalizePropsOrEmits(a), normalizePropsOrEmits(b));
|
||
}
|
||
function createDuplicateChecker() {
|
||
const cache = /* @__PURE__ */ Object.create(null);
|
||
return (type2, key) => {
|
||
if (cache[key]) {
|
||
warn$1(`${type2} property "${key}" is already defined in ${cache[key]}.`);
|
||
} else {
|
||
cache[key] = type2;
|
||
}
|
||
};
|
||
}
|
||
let shouldCacheAccess = true;
|
||
function applyOptions$1(instance) {
|
||
const options = resolveMergedOptions(instance);
|
||
const publicThis = instance.proxy;
|
||
const ctx = instance.ctx;
|
||
shouldCacheAccess = false;
|
||
if (options.beforeCreate) {
|
||
callHook$1(options.beforeCreate, instance, "bc");
|
||
}
|
||
const {
|
||
// state
|
||
data: dataOptions,
|
||
computed: computedOptions,
|
||
methods,
|
||
watch: watchOptions,
|
||
provide: provideOptions,
|
||
inject: injectOptions,
|
||
// lifecycle
|
||
created,
|
||
beforeMount,
|
||
mounted,
|
||
beforeUpdate,
|
||
updated,
|
||
activated,
|
||
deactivated,
|
||
beforeDestroy,
|
||
beforeUnmount,
|
||
destroyed,
|
||
unmounted,
|
||
render,
|
||
renderTracked,
|
||
renderTriggered,
|
||
errorCaptured,
|
||
serverPrefetch,
|
||
// public API
|
||
expose,
|
||
inheritAttrs,
|
||
// assets
|
||
components,
|
||
directives,
|
||
filters
|
||
} = options;
|
||
const checkDuplicateProperties = createDuplicateChecker();
|
||
{
|
||
const [propsOptions] = instance.propsOptions;
|
||
if (propsOptions) {
|
||
for (const key in propsOptions) {
|
||
checkDuplicateProperties("Props", key);
|
||
}
|
||
}
|
||
}
|
||
function initInjections() {
|
||
if (injectOptions) {
|
||
resolveInjections(injectOptions, ctx, checkDuplicateProperties);
|
||
}
|
||
}
|
||
{
|
||
initInjections();
|
||
}
|
||
if (methods) {
|
||
for (const key in methods) {
|
||
const methodHandler = methods[key];
|
||
if (isFunction(methodHandler)) {
|
||
{
|
||
Object.defineProperty(ctx, key, {
|
||
value: methodHandler.bind(publicThis),
|
||
configurable: true,
|
||
enumerable: true,
|
||
writable: true
|
||
});
|
||
}
|
||
{
|
||
checkDuplicateProperties("Methods", key);
|
||
}
|
||
} else {
|
||
warn$1(
|
||
`Method "${key}" has type "${typeof methodHandler}" in the component definition. Did you reference the function correctly?`
|
||
);
|
||
}
|
||
}
|
||
}
|
||
if (dataOptions) {
|
||
if (!isFunction(dataOptions)) {
|
||
warn$1(
|
||
`The data option must be a function. Plain object usage is no longer supported.`
|
||
);
|
||
}
|
||
const data = dataOptions.call(publicThis, publicThis);
|
||
if (isPromise(data)) {
|
||
warn$1(
|
||
`data() returned a Promise - note data() cannot be async; If you intend to perform data fetching before component renders, use async setup() + <Suspense>.`
|
||
);
|
||
}
|
||
if (!isObject$1(data)) {
|
||
warn$1(`data() should return an object.`);
|
||
} else {
|
||
instance.data = reactive(data);
|
||
{
|
||
for (const key in data) {
|
||
checkDuplicateProperties("Data", key);
|
||
if (!isReservedPrefix(key[0])) {
|
||
Object.defineProperty(ctx, key, {
|
||
configurable: true,
|
||
enumerable: true,
|
||
get: () => data[key],
|
||
set: NOOP
|
||
});
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
shouldCacheAccess = true;
|
||
if (computedOptions) {
|
||
for (const key in computedOptions) {
|
||
const opt = computedOptions[key];
|
||
const get2 = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;
|
||
if (get2 === NOOP) {
|
||
warn$1(`Computed property "${key}" has no getter.`);
|
||
}
|
||
const set2 = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : () => {
|
||
warn$1(
|
||
`Write operation failed: computed property "${key}" is readonly.`
|
||
);
|
||
};
|
||
const c2 = computed({
|
||
get: get2,
|
||
set: set2
|
||
});
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => c2.value,
|
||
set: (v) => c2.value = v
|
||
});
|
||
{
|
||
checkDuplicateProperties("Computed", key);
|
||
}
|
||
}
|
||
}
|
||
if (watchOptions) {
|
||
for (const key in watchOptions) {
|
||
createWatcher(watchOptions[key], ctx, publicThis, key);
|
||
}
|
||
}
|
||
function initProvides() {
|
||
if (provideOptions) {
|
||
const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;
|
||
Reflect.ownKeys(provides).forEach((key) => {
|
||
provide(key, provides[key]);
|
||
});
|
||
}
|
||
}
|
||
{
|
||
initProvides();
|
||
}
|
||
{
|
||
if (created) {
|
||
callHook$1(created, instance, "c");
|
||
}
|
||
}
|
||
function registerLifecycleHook(register, hook) {
|
||
if (isArray$1(hook)) {
|
||
hook.forEach((_hook) => register(_hook.bind(publicThis)));
|
||
} else if (hook) {
|
||
register(hook.bind(publicThis));
|
||
}
|
||
}
|
||
registerLifecycleHook(onBeforeMount, beforeMount);
|
||
registerLifecycleHook(onMounted, mounted);
|
||
registerLifecycleHook(onBeforeUpdate, beforeUpdate);
|
||
registerLifecycleHook(onUpdated, updated);
|
||
registerLifecycleHook(onActivated, activated);
|
||
registerLifecycleHook(onDeactivated, deactivated);
|
||
registerLifecycleHook(onErrorCaptured, errorCaptured);
|
||
registerLifecycleHook(onRenderTracked, renderTracked);
|
||
registerLifecycleHook(onRenderTriggered, renderTriggered);
|
||
registerLifecycleHook(onBeforeUnmount, beforeUnmount);
|
||
registerLifecycleHook(onUnmounted, unmounted);
|
||
registerLifecycleHook(onServerPrefetch, serverPrefetch);
|
||
if (isArray$1(expose)) {
|
||
if (expose.length) {
|
||
const exposed = instance.exposed || (instance.exposed = {});
|
||
expose.forEach((key) => {
|
||
Object.defineProperty(exposed, key, {
|
||
get: () => publicThis[key],
|
||
set: (val) => publicThis[key] = val
|
||
});
|
||
});
|
||
} else if (!instance.exposed) {
|
||
instance.exposed = {};
|
||
}
|
||
}
|
||
if (render && instance.render === NOOP) {
|
||
instance.render = render;
|
||
}
|
||
if (inheritAttrs != null) {
|
||
instance.inheritAttrs = inheritAttrs;
|
||
}
|
||
if (components)
|
||
instance.components = components;
|
||
if (directives)
|
||
instance.directives = directives;
|
||
if (instance.ctx.$onApplyOptions) {
|
||
instance.ctx.$onApplyOptions(options, instance, publicThis);
|
||
}
|
||
}
|
||
function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP) {
|
||
if (isArray$1(injectOptions)) {
|
||
injectOptions = normalizeInject(injectOptions);
|
||
}
|
||
for (const key in injectOptions) {
|
||
const opt = injectOptions[key];
|
||
let injected;
|
||
if (isObject$1(opt)) {
|
||
if ("default" in opt) {
|
||
injected = inject(
|
||
opt.from || key,
|
||
opt.default,
|
||
true
|
||
);
|
||
} else {
|
||
injected = inject(opt.from || key);
|
||
}
|
||
} else {
|
||
injected = inject(opt);
|
||
}
|
||
if (isRef(injected)) {
|
||
Object.defineProperty(ctx, key, {
|
||
enumerable: true,
|
||
configurable: true,
|
||
get: () => injected.value,
|
||
set: (v) => injected.value = v
|
||
});
|
||
} else {
|
||
ctx[key] = injected;
|
||
}
|
||
{
|
||
checkDuplicateProperties("Inject", key);
|
||
}
|
||
}
|
||
}
|
||
function callHook$1(hook, instance, type2) {
|
||
callWithAsyncErrorHandling(
|
||
isArray$1(hook) ? hook.map((h2) => h2.bind(instance.proxy)) : hook.bind(instance.proxy),
|
||
instance,
|
||
type2
|
||
);
|
||
}
|
||
function createWatcher(raw, ctx, publicThis, key) {
|
||
const getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key];
|
||
if (isString(raw)) {
|
||
const handler = ctx[raw];
|
||
if (isFunction(handler)) {
|
||
watch(getter, handler);
|
||
} else {
|
||
warn$1(`Invalid watch handler specified by key "${raw}"`, handler);
|
||
}
|
||
} else if (isFunction(raw)) {
|
||
watch(getter, raw.bind(publicThis));
|
||
} else if (isObject$1(raw)) {
|
||
if (isArray$1(raw)) {
|
||
raw.forEach((r2) => createWatcher(r2, ctx, publicThis, key));
|
||
} else {
|
||
const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];
|
||
if (isFunction(handler)) {
|
||
watch(getter, handler, raw);
|
||
} else {
|
||
warn$1(`Invalid watch handler specified by key "${raw.handler}"`, handler);
|
||
}
|
||
}
|
||
} else {
|
||
warn$1(`Invalid watch option: "${key}"`, raw);
|
||
}
|
||
}
|
||
function resolveMergedOptions(instance) {
|
||
const base = instance.type;
|
||
const { mixins, extends: extendsOptions } = base;
|
||
const {
|
||
mixins: globalMixins,
|
||
optionsCache: cache,
|
||
config: { optionMergeStrategies }
|
||
} = instance.appContext;
|
||
const cached = cache.get(base);
|
||
let resolved;
|
||
if (cached) {
|
||
resolved = cached;
|
||
} else if (!globalMixins.length && !mixins && !extendsOptions) {
|
||
{
|
||
resolved = base;
|
||
}
|
||
} else {
|
||
resolved = {};
|
||
if (globalMixins.length) {
|
||
globalMixins.forEach(
|
||
(m2) => mergeOptions(resolved, m2, optionMergeStrategies, true)
|
||
);
|
||
}
|
||
mergeOptions(resolved, base, optionMergeStrategies);
|
||
}
|
||
if (isObject$1(base)) {
|
||
cache.set(base, resolved);
|
||
}
|
||
return resolved;
|
||
}
|
||
function mergeOptions(to, from, strats, asMixin = false) {
|
||
const { mixins, extends: extendsOptions } = from;
|
||
if (extendsOptions) {
|
||
mergeOptions(to, extendsOptions, strats, true);
|
||
}
|
||
if (mixins) {
|
||
mixins.forEach(
|
||
(m2) => mergeOptions(to, m2, strats, true)
|
||
);
|
||
}
|
||
for (const key in from) {
|
||
if (asMixin && key === "expose") {
|
||
warn$1(
|
||
`"expose" option is ignored when declared in mixins or extends. It should only be declared in the base component itself.`
|
||
);
|
||
} else {
|
||
const strat = internalOptionMergeStrats[key] || strats && strats[key];
|
||
to[key] = strat ? strat(to[key], from[key]) : from[key];
|
||
}
|
||
}
|
||
return to;
|
||
}
|
||
const internalOptionMergeStrats = {
|
||
data: mergeDataFn,
|
||
props: mergeEmitsOrPropsOptions,
|
||
emits: mergeEmitsOrPropsOptions,
|
||
// objects
|
||
methods: mergeObjectOptions,
|
||
computed: mergeObjectOptions,
|
||
// lifecycle
|
||
beforeCreate: mergeAsArray$1,
|
||
created: mergeAsArray$1,
|
||
beforeMount: mergeAsArray$1,
|
||
mounted: mergeAsArray$1,
|
||
beforeUpdate: mergeAsArray$1,
|
||
updated: mergeAsArray$1,
|
||
beforeDestroy: mergeAsArray$1,
|
||
beforeUnmount: mergeAsArray$1,
|
||
destroyed: mergeAsArray$1,
|
||
unmounted: mergeAsArray$1,
|
||
activated: mergeAsArray$1,
|
||
deactivated: mergeAsArray$1,
|
||
errorCaptured: mergeAsArray$1,
|
||
serverPrefetch: mergeAsArray$1,
|
||
// assets
|
||
components: mergeObjectOptions,
|
||
directives: mergeObjectOptions,
|
||
// watch
|
||
watch: mergeWatchOptions,
|
||
// provide / inject
|
||
provide: mergeDataFn,
|
||
inject: mergeInject
|
||
};
|
||
function mergeDataFn(to, from) {
|
||
if (!from) {
|
||
return to;
|
||
}
|
||
if (!to) {
|
||
return from;
|
||
}
|
||
return function mergedDataFn() {
|
||
return extend(
|
||
isFunction(to) ? to.call(this, this) : to,
|
||
isFunction(from) ? from.call(this, this) : from
|
||
);
|
||
};
|
||
}
|
||
function mergeInject(to, from) {
|
||
return mergeObjectOptions(normalizeInject(to), normalizeInject(from));
|
||
}
|
||
function normalizeInject(raw) {
|
||
if (isArray$1(raw)) {
|
||
const res = {};
|
||
for (let i = 0; i < raw.length; i++) {
|
||
res[raw[i]] = raw[i];
|
||
}
|
||
return res;
|
||
}
|
||
return raw;
|
||
}
|
||
function mergeAsArray$1(to, from) {
|
||
return to ? [...new Set([].concat(to, from))] : from;
|
||
}
|
||
function mergeObjectOptions(to, from) {
|
||
return to ? extend(/* @__PURE__ */ Object.create(null), to, from) : from;
|
||
}
|
||
function mergeEmitsOrPropsOptions(to, from) {
|
||
if (to) {
|
||
if (isArray$1(to) && isArray$1(from)) {
|
||
return [.../* @__PURE__ */ new Set([...to, ...from])];
|
||
}
|
||
return extend(
|
||
/* @__PURE__ */ Object.create(null),
|
||
normalizePropsOrEmits(to),
|
||
normalizePropsOrEmits(from != null ? from : {})
|
||
);
|
||
} else {
|
||
return from;
|
||
}
|
||
}
|
||
function mergeWatchOptions(to, from) {
|
||
if (!to)
|
||
return from;
|
||
if (!from)
|
||
return to;
|
||
const merged = extend(/* @__PURE__ */ Object.create(null), to);
|
||
for (const key in from) {
|
||
merged[key] = mergeAsArray$1(to[key], from[key]);
|
||
}
|
||
return merged;
|
||
}
|
||
function initProps$1(instance, rawProps, isStateful, isSSR = false) {
|
||
const props2 = {};
|
||
const attrs = {};
|
||
instance.propsDefaults = /* @__PURE__ */ Object.create(null);
|
||
setFullProps(instance, rawProps, props2, attrs);
|
||
for (const key in instance.propsOptions[0]) {
|
||
if (!(key in props2)) {
|
||
props2[key] = void 0;
|
||
}
|
||
}
|
||
{
|
||
validateProps(rawProps || {}, props2, instance);
|
||
}
|
||
if (isStateful) {
|
||
instance.props = isSSR ? props2 : shallowReactive(props2);
|
||
} else {
|
||
if (!instance.type.props) {
|
||
instance.props = attrs;
|
||
} else {
|
||
instance.props = props2;
|
||
}
|
||
}
|
||
instance.attrs = attrs;
|
||
}
|
||
function isInHmrContext(instance) {
|
||
}
|
||
function updateProps(instance, rawProps, rawPrevProps, optimized) {
|
||
const {
|
||
props: props2,
|
||
attrs,
|
||
vnode: { patchFlag }
|
||
} = instance;
|
||
const rawCurrentProps = toRaw(props2);
|
||
const [options] = instance.propsOptions;
|
||
let hasAttrsChanged = false;
|
||
if (
|
||
// always force full diff in dev
|
||
// - #1942 if hmr is enabled with sfc component
|
||
// - vite#872 non-sfc component used by sfc component
|
||
!isInHmrContext() && patchFlag > 0 && !(patchFlag & 16)
|
||
) {
|
||
if (patchFlag & 8) {
|
||
const propsToUpdate = instance.vnode.dynamicProps;
|
||
for (let i = 0; i < propsToUpdate.length; i++) {
|
||
let key = propsToUpdate[i];
|
||
if (isEmitListener(instance.emitsOptions, key)) {
|
||
continue;
|
||
}
|
||
const value2 = rawProps[key];
|
||
if (options) {
|
||
if (hasOwn(attrs, key)) {
|
||
if (value2 !== attrs[key]) {
|
||
attrs[key] = value2;
|
||
hasAttrsChanged = true;
|
||
}
|
||
} else {
|
||
const camelizedKey = camelize(key);
|
||
props2[camelizedKey] = resolvePropValue$1(
|
||
options,
|
||
rawCurrentProps,
|
||
camelizedKey,
|
||
value2,
|
||
instance,
|
||
false
|
||
);
|
||
}
|
||
} else {
|
||
if (value2 !== attrs[key]) {
|
||
attrs[key] = value2;
|
||
hasAttrsChanged = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
if (setFullProps(instance, rawProps, props2, attrs)) {
|
||
hasAttrsChanged = true;
|
||
}
|
||
let kebabKey;
|
||
for (const key in rawCurrentProps) {
|
||
if (!rawProps || // for camelCase
|
||
!hasOwn(rawProps, key) && // it's possible the original props was passed in as kebab-case
|
||
// and converted to camelCase (#955)
|
||
((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {
|
||
if (options) {
|
||
if (rawPrevProps && // for camelCase
|
||
(rawPrevProps[key] !== void 0 || // for kebab-case
|
||
rawPrevProps[kebabKey] !== void 0)) {
|
||
props2[key] = resolvePropValue$1(
|
||
options,
|
||
rawCurrentProps,
|
||
key,
|
||
void 0,
|
||
instance,
|
||
true
|
||
);
|
||
}
|
||
} else {
|
||
delete props2[key];
|
||
}
|
||
}
|
||
}
|
||
if (attrs !== rawCurrentProps) {
|
||
for (const key in attrs) {
|
||
if (!rawProps || !hasOwn(rawProps, key) && true) {
|
||
delete attrs[key];
|
||
hasAttrsChanged = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (hasAttrsChanged) {
|
||
trigger(instance, "set", "$attrs");
|
||
}
|
||
{
|
||
validateProps(rawProps || {}, props2, instance);
|
||
}
|
||
}
|
||
function setFullProps(instance, rawProps, props2, attrs) {
|
||
const [options, needCastKeys] = instance.propsOptions;
|
||
let hasAttrsChanged = false;
|
||
let rawCastValues;
|
||
if (rawProps) {
|
||
for (let key in rawProps) {
|
||
if (isReservedProp(key)) {
|
||
continue;
|
||
}
|
||
const value2 = rawProps[key];
|
||
let camelKey;
|
||
if (options && hasOwn(options, camelKey = camelize(key))) {
|
||
if (!needCastKeys || !needCastKeys.includes(camelKey)) {
|
||
props2[camelKey] = value2;
|
||
} else {
|
||
(rawCastValues || (rawCastValues = {}))[camelKey] = value2;
|
||
}
|
||
} else if (!isEmitListener(instance.emitsOptions, key)) {
|
||
if (!(key in attrs) || value2 !== attrs[key]) {
|
||
attrs[key] = value2;
|
||
hasAttrsChanged = true;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
if (needCastKeys) {
|
||
const rawCurrentProps = toRaw(props2);
|
||
const castValues = rawCastValues || EMPTY_OBJ;
|
||
for (let i = 0; i < needCastKeys.length; i++) {
|
||
const key = needCastKeys[i];
|
||
props2[key] = resolvePropValue$1(
|
||
options,
|
||
rawCurrentProps,
|
||
key,
|
||
castValues[key],
|
||
instance,
|
||
!hasOwn(castValues, key)
|
||
);
|
||
}
|
||
}
|
||
return hasAttrsChanged;
|
||
}
|
||
function resolvePropValue$1(options, props2, key, value2, instance, isAbsent) {
|
||
const opt = options[key];
|
||
if (opt != null) {
|
||
const hasDefault = hasOwn(opt, "default");
|
||
if (hasDefault && value2 === void 0) {
|
||
const defaultValue = opt.default;
|
||
if (opt.type !== Function && !opt.skipFactory && isFunction(defaultValue)) {
|
||
const { propsDefaults } = instance;
|
||
if (key in propsDefaults) {
|
||
value2 = propsDefaults[key];
|
||
} else {
|
||
const reset = setCurrentInstance(instance);
|
||
value2 = propsDefaults[key] = defaultValue.call(
|
||
null,
|
||
props2
|
||
);
|
||
reset();
|
||
}
|
||
} else {
|
||
value2 = defaultValue;
|
||
}
|
||
}
|
||
if (opt[
|
||
0
|
||
/* shouldCast */
|
||
]) {
|
||
if (isAbsent && !hasDefault) {
|
||
value2 = false;
|
||
} else if (opt[
|
||
1
|
||
/* shouldCastTrue */
|
||
] && (value2 === "" || value2 === hyphenate(key))) {
|
||
value2 = true;
|
||
}
|
||
}
|
||
}
|
||
return value2;
|
||
}
|
||
function normalizePropsOptions(comp, appContext, asMixin = false) {
|
||
const cache = appContext.propsCache;
|
||
const cached = cache.get(comp);
|
||
if (cached) {
|
||
return cached;
|
||
}
|
||
const raw = comp.props;
|
||
const normalized = {};
|
||
const needCastKeys = [];
|
||
let hasExtends = false;
|
||
if (!isFunction(comp)) {
|
||
const extendProps = (raw2) => {
|
||
hasExtends = true;
|
||
const [props2, keys] = normalizePropsOptions(raw2, appContext, true);
|
||
extend(normalized, props2);
|
||
if (keys)
|
||
needCastKeys.push(...keys);
|
||
};
|
||
if (!asMixin && appContext.mixins.length) {
|
||
appContext.mixins.forEach(extendProps);
|
||
}
|
||
if (comp.extends) {
|
||
extendProps(comp.extends);
|
||
}
|
||
if (comp.mixins) {
|
||
comp.mixins.forEach(extendProps);
|
||
}
|
||
}
|
||
if (!raw && !hasExtends) {
|
||
if (isObject$1(comp)) {
|
||
cache.set(comp, EMPTY_ARR);
|
||
}
|
||
return EMPTY_ARR;
|
||
}
|
||
if (isArray$1(raw)) {
|
||
for (let i = 0; i < raw.length; i++) {
|
||
if (!isString(raw[i])) {
|
||
warn$1(`props must be strings when using array syntax.`, raw[i]);
|
||
}
|
||
const normalizedKey = camelize(raw[i]);
|
||
if (validatePropName(normalizedKey)) {
|
||
normalized[normalizedKey] = EMPTY_OBJ;
|
||
}
|
||
}
|
||
} else if (raw) {
|
||
if (!isObject$1(raw)) {
|
||
warn$1(`invalid props options`, raw);
|
||
}
|
||
for (const key in raw) {
|
||
const normalizedKey = camelize(key);
|
||
if (validatePropName(normalizedKey)) {
|
||
const opt = raw[key];
|
||
const prop = normalized[normalizedKey] = isArray$1(opt) || isFunction(opt) ? { type: opt } : extend({}, opt);
|
||
if (prop) {
|
||
const booleanIndex = getTypeIndex(Boolean, prop.type);
|
||
const stringIndex = getTypeIndex(String, prop.type);
|
||
prop[
|
||
0
|
||
/* shouldCast */
|
||
] = booleanIndex > -1;
|
||
prop[
|
||
1
|
||
/* shouldCastTrue */
|
||
] = stringIndex < 0 || booleanIndex < stringIndex;
|
||
if (booleanIndex > -1 || hasOwn(prop, "default")) {
|
||
needCastKeys.push(normalizedKey);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
const res = [normalized, needCastKeys];
|
||
if (isObject$1(comp)) {
|
||
cache.set(comp, res);
|
||
}
|
||
return res;
|
||
}
|
||
function validatePropName(key) {
|
||
if (key[0] !== "$" && !isReservedProp(key)) {
|
||
return true;
|
||
} else {
|
||
warn$1(`Invalid prop name: "${key}" is a reserved property.`);
|
||
}
|
||
return false;
|
||
}
|
||
function getType(ctor) {
|
||
if (ctor === null) {
|
||
return "null";
|
||
}
|
||
if (typeof ctor === "function") {
|
||
return ctor.name || "";
|
||
} else if (typeof ctor === "object") {
|
||
const name = ctor.constructor && ctor.constructor.name;
|
||
return name || "";
|
||
}
|
||
return "";
|
||
}
|
||
function isSameType(a, b) {
|
||
return getType(a) === getType(b);
|
||
}
|
||
function getTypeIndex(type2, expectedTypes) {
|
||
if (isArray$1(expectedTypes)) {
|
||
return expectedTypes.findIndex((t2) => isSameType(t2, type2));
|
||
} else if (isFunction(expectedTypes)) {
|
||
return isSameType(expectedTypes, type2) ? 0 : -1;
|
||
}
|
||
return -1;
|
||
}
|
||
function validateProps(rawProps, props2, instance) {
|
||
const resolvedValues = toRaw(props2);
|
||
const options = instance.propsOptions[0];
|
||
for (const key in options) {
|
||
let opt = options[key];
|
||
if (opt == null)
|
||
continue;
|
||
validateProp(
|
||
key,
|
||
resolvedValues[key],
|
||
opt,
|
||
shallowReadonly(resolvedValues),
|
||
!hasOwn(rawProps, key) && !hasOwn(rawProps, hyphenate(key))
|
||
);
|
||
}
|
||
}
|
||
function validateProp(name, value2, prop, props2, isAbsent) {
|
||
const { type: type2, required: required2, validator, skipCheck } = prop;
|
||
if (required2 && isAbsent) {
|
||
warn$1('Missing required prop: "' + name + '"');
|
||
return;
|
||
}
|
||
if (value2 == null && !required2) {
|
||
return;
|
||
}
|
||
if (type2 != null && type2 !== true && !skipCheck) {
|
||
let isValid = false;
|
||
const types2 = isArray$1(type2) ? type2 : [type2];
|
||
const expectedTypes = [];
|
||
for (let i = 0; i < types2.length && !isValid; i++) {
|
||
const { valid, expectedType } = assertType(value2, types2[i]);
|
||
expectedTypes.push(expectedType || "");
|
||
isValid = valid;
|
||
}
|
||
if (!isValid) {
|
||
warn$1(getInvalidTypeMessage(name, value2, expectedTypes));
|
||
return;
|
||
}
|
||
}
|
||
if (validator && !validator(value2, props2)) {
|
||
warn$1('Invalid prop: custom validator check failed for prop "' + name + '".');
|
||
}
|
||
}
|
||
const isSimpleType = /* @__PURE__ */ makeMap(
|
||
"String,Number,Boolean,Function,Symbol,BigInt"
|
||
);
|
||
function assertType(value2, type2) {
|
||
let valid;
|
||
const expectedType = getType(type2);
|
||
if (isSimpleType(expectedType)) {
|
||
const t2 = typeof value2;
|
||
valid = t2 === expectedType.toLowerCase();
|
||
if (!valid && t2 === "object") {
|
||
valid = value2 instanceof type2;
|
||
}
|
||
} else if (expectedType === "Object") {
|
||
valid = isObject$1(value2);
|
||
} else if (expectedType === "Array") {
|
||
valid = isArray$1(value2);
|
||
} else if (expectedType === "null") {
|
||
valid = value2 === null;
|
||
} else {
|
||
valid = value2 instanceof type2;
|
||
}
|
||
return {
|
||
valid,
|
||
expectedType
|
||
};
|
||
}
|
||
function getInvalidTypeMessage(name, value2, expectedTypes) {
|
||
if (expectedTypes.length === 0) {
|
||
return `Prop type [] for prop "${name}" won't match anything. Did you mean to use type Array instead?`;
|
||
}
|
||
let message = `Invalid prop: type check failed for prop "${name}". Expected ${expectedTypes.map(capitalize).join(" | ")}`;
|
||
const expectedType = expectedTypes[0];
|
||
const receivedType = toRawType(value2);
|
||
const expectedValue = styleValue(value2, expectedType);
|
||
const receivedValue = styleValue(value2, receivedType);
|
||
if (expectedTypes.length === 1 && isExplicable(expectedType) && !isBoolean$1(expectedType, receivedType)) {
|
||
message += ` with value ${expectedValue}`;
|
||
}
|
||
message += `, got ${receivedType} `;
|
||
if (isExplicable(receivedType)) {
|
||
message += `with value ${receivedValue}.`;
|
||
}
|
||
return message;
|
||
}
|
||
function styleValue(value2, type2) {
|
||
if (type2 === "String") {
|
||
return `"${value2}"`;
|
||
} else if (type2 === "Number") {
|
||
return `${Number(value2)}`;
|
||
} else {
|
||
return `${value2}`;
|
||
}
|
||
}
|
||
function isExplicable(type2) {
|
||
const explicitTypes = ["string", "number", "boolean"];
|
||
return explicitTypes.some((elem) => type2.toLowerCase() === elem);
|
||
}
|
||
function isBoolean$1(...args) {
|
||
return args.some((elem) => elem.toLowerCase() === "boolean");
|
||
}
|
||
let supported;
|
||
let perf;
|
||
function startMeasure(instance, type2) {
|
||
if (instance.appContext.config.performance && isSupported()) {
|
||
perf.mark(`vue-${type2}-${instance.uid}`);
|
||
}
|
||
{
|
||
devtoolsPerfStart(instance, type2, isSupported() ? perf.now() : Date.now());
|
||
}
|
||
}
|
||
function endMeasure(instance, type2) {
|
||
if (instance.appContext.config.performance && isSupported()) {
|
||
const startTag = `vue-${type2}-${instance.uid}`;
|
||
const endTag = startTag + `:end`;
|
||
perf.mark(endTag);
|
||
perf.measure(
|
||
`<${formatComponentName(instance, instance.type)}> ${type2}`,
|
||
startTag,
|
||
endTag
|
||
);
|
||
perf.clearMarks(startTag);
|
||
perf.clearMarks(endTag);
|
||
}
|
||
{
|
||
devtoolsPerfEnd(instance, type2, isSupported() ? perf.now() : Date.now());
|
||
}
|
||
}
|
||
function isSupported() {
|
||
if (supported !== void 0) {
|
||
return supported;
|
||
}
|
||
if (typeof window !== "undefined" && window.performance) {
|
||
supported = true;
|
||
perf = window.performance;
|
||
} else {
|
||
supported = false;
|
||
}
|
||
return supported;
|
||
}
|
||
const queuePostRenderEffect$1 = queuePostFlushCb;
|
||
const Fragment = Symbol.for("v-fgt");
|
||
const Text$1 = Symbol.for("v-txt");
|
||
const Comment = Symbol.for("v-cmt");
|
||
const Static = Symbol.for("v-stc");
|
||
function isVNode(value2) {
|
||
return value2 ? value2.__v_isVNode === true : false;
|
||
}
|
||
const InternalObjectKey = `__vInternal`;
|
||
function guardReactiveProps(props2) {
|
||
if (!props2)
|
||
return null;
|
||
return isProxy(props2) || InternalObjectKey in props2 ? extend({}, props2) : props2;
|
||
}
|
||
const emptyAppContext = createAppContext();
|
||
let uid = 0;
|
||
function createComponentInstance(vnode, parent, suspense) {
|
||
const type2 = vnode.type;
|
||
const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;
|
||
const instance = {
|
||
uid: uid++,
|
||
vnode,
|
||
type: type2,
|
||
parent,
|
||
appContext,
|
||
root: null,
|
||
// to be immediately set
|
||
next: null,
|
||
subTree: null,
|
||
// will be set synchronously right after creation
|
||
effect: null,
|
||
update: null,
|
||
// will be set synchronously right after creation
|
||
scope: new EffectScope(
|
||
true
|
||
/* detached */
|
||
),
|
||
render: null,
|
||
proxy: null,
|
||
exposed: null,
|
||
exposeProxy: null,
|
||
withProxy: null,
|
||
provides: parent ? parent.provides : Object.create(appContext.provides),
|
||
accessCache: null,
|
||
renderCache: [],
|
||
// local resolved assets
|
||
components: null,
|
||
directives: null,
|
||
// resolved props and emits options
|
||
propsOptions: normalizePropsOptions(type2, appContext),
|
||
emitsOptions: normalizeEmitsOptions(type2, appContext),
|
||
// emit
|
||
emit: null,
|
||
// to be set immediately
|
||
emitted: null,
|
||
// props default value
|
||
propsDefaults: EMPTY_OBJ,
|
||
// inheritAttrs
|
||
inheritAttrs: type2.inheritAttrs,
|
||
// state
|
||
ctx: EMPTY_OBJ,
|
||
data: EMPTY_OBJ,
|
||
props: EMPTY_OBJ,
|
||
attrs: EMPTY_OBJ,
|
||
slots: EMPTY_OBJ,
|
||
refs: EMPTY_OBJ,
|
||
setupState: EMPTY_OBJ,
|
||
setupContext: null,
|
||
attrsProxy: null,
|
||
slotsProxy: null,
|
||
// suspense related
|
||
suspense,
|
||
suspenseId: suspense ? suspense.pendingId : 0,
|
||
asyncDep: null,
|
||
asyncResolved: false,
|
||
// lifecycle hooks
|
||
// not using enums here because it results in computed properties
|
||
isMounted: false,
|
||
isUnmounted: false,
|
||
isDeactivated: false,
|
||
bc: null,
|
||
c: null,
|
||
bm: null,
|
||
m: null,
|
||
bu: null,
|
||
u: null,
|
||
um: null,
|
||
bum: null,
|
||
da: null,
|
||
a: null,
|
||
rtg: null,
|
||
rtc: null,
|
||
ec: null,
|
||
sp: null,
|
||
// fixed by xxxxxx 用于存储uni-app的元素缓存
|
||
$uniElements: /* @__PURE__ */ new Map(),
|
||
$templateUniElementRefs: [],
|
||
$templateUniElementStyles: {},
|
||
$eS: {}
|
||
};
|
||
{
|
||
instance.ctx = createDevRenderContext(instance);
|
||
}
|
||
instance.root = parent ? parent.root : instance;
|
||
instance.emit = emit.bind(null, instance);
|
||
if (vnode.ce) {
|
||
vnode.ce(instance);
|
||
}
|
||
return instance;
|
||
}
|
||
let currentInstance = null;
|
||
const getCurrentInstance = () => currentInstance || currentRenderingInstance;
|
||
let internalSetCurrentInstance;
|
||
let setInSSRSetupState;
|
||
{
|
||
internalSetCurrentInstance = (i) => {
|
||
currentInstance = i;
|
||
};
|
||
setInSSRSetupState = (v) => {
|
||
isInSSRComponentSetup = v;
|
||
};
|
||
}
|
||
const setCurrentInstance = (instance) => {
|
||
const prev = currentInstance;
|
||
internalSetCurrentInstance(instance);
|
||
instance.scope.on();
|
||
return () => {
|
||
instance.scope.off();
|
||
internalSetCurrentInstance(prev);
|
||
};
|
||
};
|
||
const unsetCurrentInstance = () => {
|
||
currentInstance && currentInstance.scope.off();
|
||
internalSetCurrentInstance(null);
|
||
};
|
||
const isBuiltInTag = /* @__PURE__ */ makeMap("slot,component");
|
||
function validateComponentName(name, { isNativeTag }) {
|
||
if (isBuiltInTag(name) || isNativeTag(name)) {
|
||
warn$1(
|
||
"Do not use built-in or reserved HTML elements as component id: " + name
|
||
);
|
||
}
|
||
}
|
||
function isStatefulComponent(instance) {
|
||
return instance.vnode.shapeFlag & 4;
|
||
}
|
||
let isInSSRComponentSetup = false;
|
||
function setupComponent(instance, isSSR = false) {
|
||
isSSR && setInSSRSetupState(isSSR);
|
||
const {
|
||
props: props2
|
||
/*, children*/
|
||
} = instance.vnode;
|
||
const isStateful = isStatefulComponent(instance);
|
||
initProps$1(instance, props2, isStateful, isSSR);
|
||
const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;
|
||
isSSR && setInSSRSetupState(false);
|
||
return setupResult;
|
||
}
|
||
function setupStatefulComponent(instance, isSSR) {
|
||
const Component2 = instance.type;
|
||
{
|
||
if (Component2.name) {
|
||
validateComponentName(Component2.name, instance.appContext.config);
|
||
}
|
||
if (Component2.components) {
|
||
const names = Object.keys(Component2.components);
|
||
for (let i = 0; i < names.length; i++) {
|
||
validateComponentName(names[i], instance.appContext.config);
|
||
}
|
||
}
|
||
if (Component2.directives) {
|
||
const names = Object.keys(Component2.directives);
|
||
for (let i = 0; i < names.length; i++) {
|
||
validateDirectiveName(names[i]);
|
||
}
|
||
}
|
||
if (Component2.compilerOptions && isRuntimeOnly()) {
|
||
warn$1(
|
||
`"compilerOptions" is only supported when using a build of Vue that includes the runtime compiler. Since you are using a runtime-only build, the options should be passed via your build tool config instead.`
|
||
);
|
||
}
|
||
}
|
||
instance.accessCache = /* @__PURE__ */ Object.create(null);
|
||
instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));
|
||
{
|
||
exposePropsOnRenderContext(instance);
|
||
}
|
||
const { setup } = Component2;
|
||
if (setup) {
|
||
const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;
|
||
const reset = setCurrentInstance(instance);
|
||
pauseTracking();
|
||
const setupResult = callWithErrorHandling(
|
||
setup,
|
||
instance,
|
||
0,
|
||
[
|
||
shallowReadonly(instance.props),
|
||
setupContext
|
||
]
|
||
);
|
||
resetTracking();
|
||
reset();
|
||
if (isPromise(setupResult)) {
|
||
setupResult.then(unsetCurrentInstance, unsetCurrentInstance);
|
||
{
|
||
warn$1(
|
||
`setup() returned a Promise, but the version of Vue you are using does not support it yet.`
|
||
);
|
||
}
|
||
} else {
|
||
handleSetupResult(instance, setupResult, isSSR);
|
||
}
|
||
} else {
|
||
finishComponentSetup(instance, isSSR);
|
||
}
|
||
}
|
||
function handleSetupResult(instance, setupResult, isSSR) {
|
||
if (isFunction(setupResult)) {
|
||
{
|
||
instance.render = setupResult;
|
||
}
|
||
} else if (isObject$1(setupResult)) {
|
||
if (isVNode(setupResult)) {
|
||
warn$1(
|
||
`setup() should not return VNodes directly - return a render function instead.`
|
||
);
|
||
}
|
||
{
|
||
instance.devtoolsRawSetupState = setupResult;
|
||
}
|
||
instance.setupState = proxyRefs(setupResult);
|
||
{
|
||
exposeSetupStateOnRenderContext(instance);
|
||
}
|
||
} else if (setupResult !== void 0) {
|
||
warn$1(
|
||
`setup() should return an object. Received: ${setupResult === null ? "null" : typeof setupResult}`
|
||
);
|
||
}
|
||
finishComponentSetup(instance, isSSR);
|
||
}
|
||
let compile;
|
||
const isRuntimeOnly = () => !compile;
|
||
function finishComponentSetup(instance, isSSR, skipOptions) {
|
||
const Component2 = instance.type;
|
||
if (!instance.render) {
|
||
instance.render = Component2.render || NOOP;
|
||
}
|
||
{
|
||
const reset = setCurrentInstance(instance);
|
||
pauseTracking();
|
||
try {
|
||
applyOptions$1(instance);
|
||
} finally {
|
||
resetTracking();
|
||
reset();
|
||
}
|
||
}
|
||
if (!Component2.render && instance.render === NOOP && !isSSR) {
|
||
if (Component2.template) {
|
||
warn$1(
|
||
`Component provided template option but runtime compilation is not supported in this build of Vue. Configure your bundler to alias "vue" to "vue/dist/vue.esm-bundler.js".`
|
||
);
|
||
} else {
|
||
warn$1(`Component is missing template or render function.`);
|
||
}
|
||
}
|
||
}
|
||
function getAttrsProxy(instance) {
|
||
return instance.attrsProxy || (instance.attrsProxy = new Proxy(
|
||
instance.attrs,
|
||
{
|
||
get(target, key) {
|
||
track(instance, "get", "$attrs");
|
||
return target[key];
|
||
},
|
||
set() {
|
||
warn$1(`setupContext.attrs is readonly.`);
|
||
return false;
|
||
},
|
||
deleteProperty() {
|
||
warn$1(`setupContext.attrs is readonly.`);
|
||
return false;
|
||
}
|
||
}
|
||
));
|
||
}
|
||
function getSlotsProxy(instance) {
|
||
return instance.slotsProxy || (instance.slotsProxy = new Proxy(instance.slots, {
|
||
get(target, key) {
|
||
track(instance, "get", "$slots");
|
||
return target[key];
|
||
}
|
||
}));
|
||
}
|
||
function createSetupContext(instance) {
|
||
const expose = (exposed) => {
|
||
{
|
||
if (instance.exposed) {
|
||
warn$1(`expose() should be called only once per setup().`);
|
||
}
|
||
if (exposed != null) {
|
||
let exposedType = typeof exposed;
|
||
if (exposedType === "object") {
|
||
if (isArray$1(exposed)) {
|
||
exposedType = "array";
|
||
} else if (isRef(exposed)) {
|
||
exposedType = "ref";
|
||
}
|
||
}
|
||
if (exposedType !== "object") {
|
||
warn$1(
|
||
`expose() should be passed a plain object, received ${exposedType}.`
|
||
);
|
||
}
|
||
}
|
||
}
|
||
instance.exposed = exposed || {};
|
||
};
|
||
{
|
||
return Object.freeze({
|
||
get attrs() {
|
||
return getAttrsProxy(instance);
|
||
},
|
||
get slots() {
|
||
return getSlotsProxy(instance);
|
||
},
|
||
get emit() {
|
||
return (event, ...args) => instance.emit(event, ...args);
|
||
},
|
||
expose
|
||
});
|
||
}
|
||
}
|
||
function getExposeProxy(instance) {
|
||
if (instance.exposed) {
|
||
return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {
|
||
get(target, key) {
|
||
if (key in target) {
|
||
return target[key];
|
||
}
|
||
return instance.proxy[key];
|
||
},
|
||
has(target, key) {
|
||
return key in target || key in publicPropertiesMap;
|
||
}
|
||
}));
|
||
}
|
||
}
|
||
const classifyRE = /(?:^|[-_])(\w)/g;
|
||
const classify = (str) => str.replace(classifyRE, (c2) => c2.toUpperCase()).replace(/[-_]/g, "");
|
||
function getComponentName(Component2, includeInferred = true) {
|
||
return isFunction(Component2) ? Component2.displayName || Component2.name : Component2.name || includeInferred && Component2.__name;
|
||
}
|
||
function formatComponentName(instance, Component2, isRoot = false) {
|
||
let name = getComponentName(Component2);
|
||
if (!name && Component2.__file) {
|
||
const match = Component2.__file.match(/([^/\\]+)\.\w+$/);
|
||
if (match) {
|
||
name = match[1];
|
||
}
|
||
}
|
||
if (!name && instance && instance.parent) {
|
||
const inferFromRegistry = (registry) => {
|
||
for (const key in registry) {
|
||
if (registry[key] === Component2) {
|
||
return key;
|
||
}
|
||
}
|
||
};
|
||
name = inferFromRegistry(
|
||
instance.components || instance.parent.type.components
|
||
) || inferFromRegistry(instance.appContext.components);
|
||
}
|
||
return name ? classify(name) : isRoot ? `App` : `Anonymous`;
|
||
}
|
||
const computed = (getterOrOptions, debugOptions) => {
|
||
const c2 = computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);
|
||
{
|
||
const i = getCurrentInstance();
|
||
if (i && i.appContext.config.warnRecursiveComputed) {
|
||
c2._warnRecursive = true;
|
||
}
|
||
}
|
||
return c2;
|
||
};
|
||
function useModel(props2, name, options = EMPTY_OBJ) {
|
||
const i = getCurrentInstance();
|
||
if (!i) {
|
||
warn$1(`useModel() called without active instance.`);
|
||
return ref();
|
||
}
|
||
if (!i.propsOptions[0][name]) {
|
||
warn$1(`useModel() called with prop "${name}" which is not declared.`);
|
||
return ref();
|
||
}
|
||
const camelizedName = camelize(name);
|
||
const hyphenatedName = hyphenate(name);
|
||
const res = customRef((track2, trigger2) => {
|
||
let localValue;
|
||
watchSyncEffect(() => {
|
||
const propValue = props2[name];
|
||
if (hasChanged(localValue, propValue)) {
|
||
localValue = propValue;
|
||
trigger2();
|
||
}
|
||
});
|
||
return {
|
||
get() {
|
||
track2();
|
||
return options.get ? options.get(localValue) : localValue;
|
||
},
|
||
set(value2) {
|
||
const rawProps = i.vnode.props;
|
||
if (!(rawProps && // check if parent has passed v-model
|
||
(name in rawProps || camelizedName in rawProps || hyphenatedName in rawProps) && (`onUpdate:${name}` in rawProps || `onUpdate:${camelizedName}` in rawProps || `onUpdate:${hyphenatedName}` in rawProps)) && hasChanged(value2, localValue)) {
|
||
localValue = value2;
|
||
trigger2();
|
||
}
|
||
i.emit(`update:${name}`, options.set ? options.set(value2) : value2);
|
||
}
|
||
};
|
||
});
|
||
const modifierKey = "modelModifiers";
|
||
res[Symbol.iterator] = () => {
|
||
let i2 = 0;
|
||
return {
|
||
next() {
|
||
if (i2 < 2) {
|
||
return { value: i2++ ? props2[modifierKey] || {} : res, done: false };
|
||
} else {
|
||
return { done: true };
|
||
}
|
||
}
|
||
};
|
||
};
|
||
return res;
|
||
}
|
||
const version$1 = "3.4.21";
|
||
const warn = warn$1;
|
||
function unwrapper(target) {
|
||
return unref(target);
|
||
}
|
||
const ARRAYTYPE = "[object Array]";
|
||
const OBJECTTYPE = "[object Object]";
|
||
function diff(current, pre) {
|
||
const result = {};
|
||
syncKeys(current, pre);
|
||
_diff(current, pre, "", result);
|
||
return result;
|
||
}
|
||
function syncKeys(current, pre) {
|
||
current = unwrapper(current);
|
||
if (current === pre)
|
||
return;
|
||
const rootCurrentType = toTypeString(current);
|
||
const rootPreType = toTypeString(pre);
|
||
if (rootCurrentType == OBJECTTYPE && rootPreType == OBJECTTYPE) {
|
||
for (let key in pre) {
|
||
const currentValue = current[key];
|
||
if (currentValue === void 0) {
|
||
current[key] = null;
|
||
} else {
|
||
syncKeys(currentValue, pre[key]);
|
||
}
|
||
}
|
||
} else if (rootCurrentType == ARRAYTYPE && rootPreType == ARRAYTYPE) {
|
||
if (current.length >= pre.length) {
|
||
pre.forEach((item, index2) => {
|
||
syncKeys(current[index2], item);
|
||
});
|
||
}
|
||
}
|
||
}
|
||
function _diff(current, pre, path, result) {
|
||
current = unwrapper(current);
|
||
if (current === pre)
|
||
return;
|
||
const rootCurrentType = toTypeString(current);
|
||
const rootPreType = toTypeString(pre);
|
||
if (rootCurrentType == OBJECTTYPE) {
|
||
if (rootPreType != OBJECTTYPE || Object.keys(current).length < Object.keys(pre).length) {
|
||
setResult(result, path, current);
|
||
} else {
|
||
for (let key in current) {
|
||
const currentValue = unwrapper(current[key]);
|
||
const preValue = pre[key];
|
||
const currentType = toTypeString(currentValue);
|
||
const preType = toTypeString(preValue);
|
||
if (currentType != ARRAYTYPE && currentType != OBJECTTYPE) {
|
||
if (currentValue != preValue) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
}
|
||
} else if (currentType == ARRAYTYPE) {
|
||
if (preType != ARRAYTYPE) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
} else {
|
||
if (currentValue.length < preValue.length) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
} else {
|
||
currentValue.forEach((item, index2) => {
|
||
_diff(
|
||
item,
|
||
preValue[index2],
|
||
(path == "" ? "" : path + ".") + key + "[" + index2 + "]",
|
||
result
|
||
);
|
||
});
|
||
}
|
||
}
|
||
} else if (currentType == OBJECTTYPE) {
|
||
if (preType != OBJECTTYPE || Object.keys(currentValue).length < Object.keys(preValue).length) {
|
||
setResult(
|
||
result,
|
||
(path == "" ? "" : path + ".") + key,
|
||
currentValue
|
||
);
|
||
} else {
|
||
for (let subKey in currentValue) {
|
||
_diff(
|
||
currentValue[subKey],
|
||
preValue[subKey],
|
||
(path == "" ? "" : path + ".") + key + "." + subKey,
|
||
result
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
} else if (rootCurrentType == ARRAYTYPE) {
|
||
if (rootPreType != ARRAYTYPE) {
|
||
setResult(result, path, current);
|
||
} else {
|
||
if (current.length < pre.length) {
|
||
setResult(result, path, current);
|
||
} else {
|
||
current.forEach((item, index2) => {
|
||
_diff(item, pre[index2], path + "[" + index2 + "]", result);
|
||
});
|
||
}
|
||
}
|
||
} else {
|
||
setResult(result, path, current);
|
||
}
|
||
}
|
||
function setResult(result, k, v) {
|
||
result[k] = v;
|
||
}
|
||
function hasComponentEffect(instance) {
|
||
return queue.includes(instance.update);
|
||
}
|
||
function flushCallbacks(instance) {
|
||
const ctx = instance.ctx;
|
||
const callbacks = ctx.__next_tick_callbacks;
|
||
if (callbacks && callbacks.length) {
|
||
const copies = callbacks.slice(0);
|
||
callbacks.length = 0;
|
||
for (let i = 0; i < copies.length; i++) {
|
||
copies[i]();
|
||
}
|
||
}
|
||
}
|
||
function nextTick(instance, fn) {
|
||
const ctx = instance.ctx;
|
||
if (!ctx.__next_tick_pending && !hasComponentEffect(instance)) {
|
||
return nextTick$1(fn && fn.bind(instance.proxy));
|
||
}
|
||
let _resolve;
|
||
if (!ctx.__next_tick_callbacks) {
|
||
ctx.__next_tick_callbacks = [];
|
||
}
|
||
ctx.__next_tick_callbacks.push(() => {
|
||
if (fn) {
|
||
callWithErrorHandling(
|
||
fn.bind(instance.proxy),
|
||
instance,
|
||
14
|
||
);
|
||
} else if (_resolve) {
|
||
_resolve(instance.proxy);
|
||
}
|
||
});
|
||
return new Promise((resolve2) => {
|
||
_resolve = resolve2;
|
||
});
|
||
}
|
||
function clone$1(src, seen) {
|
||
src = unwrapper(src);
|
||
const type2 = typeof src;
|
||
if (type2 === "object" && src !== null) {
|
||
let copy = seen.get(src);
|
||
if (typeof copy !== "undefined") {
|
||
return copy;
|
||
}
|
||
if (isArray$1(src)) {
|
||
const len = src.length;
|
||
copy = new Array(len);
|
||
seen.set(src, copy);
|
||
for (let i = 0; i < len; i++) {
|
||
copy[i] = clone$1(src[i], seen);
|
||
}
|
||
} else {
|
||
copy = {};
|
||
seen.set(src, copy);
|
||
for (const name in src) {
|
||
if (hasOwn(src, name)) {
|
||
copy[name] = clone$1(src[name], seen);
|
||
}
|
||
}
|
||
}
|
||
return copy;
|
||
}
|
||
if (type2 !== "symbol") {
|
||
return src;
|
||
}
|
||
}
|
||
function deepCopy(src) {
|
||
return clone$1(src, typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : /* @__PURE__ */ new Map());
|
||
}
|
||
function getMPInstanceData(instance, keys) {
|
||
const data = instance.data;
|
||
const ret = /* @__PURE__ */ Object.create(null);
|
||
keys.forEach((key) => {
|
||
ret[key] = data[key];
|
||
});
|
||
return ret;
|
||
}
|
||
function patch(instance, data, oldData) {
|
||
if (!data) {
|
||
return;
|
||
}
|
||
data = deepCopy(data);
|
||
data.$eS = instance.$eS || {};
|
||
const ctx = instance.ctx;
|
||
const mpType = ctx.mpType;
|
||
if (mpType === "page" || mpType === "component") {
|
||
data.r0 = 1;
|
||
const mpInstance = ctx.$scope;
|
||
const keys = Object.keys(data);
|
||
const diffData = diff(data, getMPInstanceData(mpInstance, keys));
|
||
if (Object.keys(diffData).length) {
|
||
ctx.__next_tick_pending = true;
|
||
mpInstance.setData(diffData, () => {
|
||
ctx.__next_tick_pending = false;
|
||
flushCallbacks(instance);
|
||
});
|
||
flushPreFlushCbs();
|
||
} else {
|
||
flushCallbacks(instance);
|
||
}
|
||
}
|
||
}
|
||
function initAppConfig(appConfig) {
|
||
appConfig.globalProperties.$nextTick = function $nextTick(fn) {
|
||
return nextTick(this.$, fn);
|
||
};
|
||
}
|
||
function onApplyOptions(options, instance, publicThis) {
|
||
instance.appContext.config.globalProperties.$applyOptions(
|
||
options,
|
||
instance,
|
||
publicThis
|
||
);
|
||
const computedOptions = options.computed;
|
||
if (computedOptions) {
|
||
const keys = Object.keys(computedOptions);
|
||
if (keys.length) {
|
||
const ctx = instance.ctx;
|
||
if (!ctx.$computedKeys) {
|
||
ctx.$computedKeys = [];
|
||
}
|
||
ctx.$computedKeys.push(...keys);
|
||
}
|
||
}
|
||
delete instance.ctx.$onApplyOptions;
|
||
}
|
||
function setRef$1(instance, isUnmount = false) {
|
||
const {
|
||
setupState,
|
||
$templateRefs,
|
||
$templateUniElementRefs,
|
||
ctx: { $scope, $mpPlatform }
|
||
} = instance;
|
||
if ($mpPlatform === "mp-alipay") {
|
||
return;
|
||
}
|
||
if (!$scope || !$templateRefs && !$templateUniElementRefs) {
|
||
return;
|
||
}
|
||
if (isUnmount) {
|
||
$templateRefs && $templateRefs.forEach(
|
||
(templateRef) => setTemplateRef(templateRef, null, setupState)
|
||
);
|
||
$templateUniElementRefs && $templateUniElementRefs.forEach(
|
||
(templateRef) => setTemplateRef(templateRef, null, setupState)
|
||
);
|
||
return;
|
||
}
|
||
const check = $mpPlatform === "mp-baidu" || $mpPlatform === "mp-toutiao";
|
||
const doSetByRefs = (refs) => {
|
||
if (refs.length === 0) {
|
||
return [];
|
||
}
|
||
const mpComponents = (
|
||
// 字节小程序 selectAllComponents 可能返回 null
|
||
// https://github.com/dcloudio/uni-app/issues/3954
|
||
($scope.selectAllComponents(".r") || []).concat(
|
||
$scope.selectAllComponents(".r-i-f") || []
|
||
)
|
||
);
|
||
return refs.filter((templateRef) => {
|
||
const refValue = findComponentPublicInstance(mpComponents, templateRef.i);
|
||
if (check && refValue === null) {
|
||
return true;
|
||
}
|
||
setTemplateRef(templateRef, refValue, setupState);
|
||
return false;
|
||
});
|
||
};
|
||
const doSet = () => {
|
||
if ($templateRefs) {
|
||
const refs = doSetByRefs($templateRefs);
|
||
if (refs.length && instance.proxy && instance.proxy.$scope) {
|
||
instance.proxy.$scope.setData({ r1: 1 }, () => {
|
||
doSetByRefs(refs);
|
||
});
|
||
}
|
||
}
|
||
};
|
||
if ($templateUniElementRefs && $templateUniElementRefs.length) {
|
||
nextTick(instance, () => {
|
||
$templateUniElementRefs.forEach((templateRef) => {
|
||
if (isArray$1(templateRef.v)) {
|
||
templateRef.v.forEach((v) => {
|
||
setTemplateRef(templateRef, v, setupState);
|
||
});
|
||
} else {
|
||
setTemplateRef(templateRef, templateRef.v, setupState);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
if ($scope._$setRef) {
|
||
$scope._$setRef(doSet);
|
||
} else {
|
||
nextTick(instance, doSet);
|
||
}
|
||
}
|
||
function toSkip(value2) {
|
||
if (isObject$1(value2)) {
|
||
markRaw(value2);
|
||
}
|
||
return value2;
|
||
}
|
||
function findComponentPublicInstance(mpComponents, id) {
|
||
const mpInstance = mpComponents.find(
|
||
(com) => com && (com.properties || com.props).uI === id
|
||
);
|
||
if (mpInstance) {
|
||
const vm = mpInstance.$vm;
|
||
if (vm) {
|
||
return getExposeProxy(vm.$) || vm;
|
||
}
|
||
return toSkip(mpInstance);
|
||
}
|
||
return null;
|
||
}
|
||
function setTemplateRef({ r: r2, f: f2 }, refValue, setupState) {
|
||
if (isFunction(r2)) {
|
||
r2(refValue, {});
|
||
} else {
|
||
const _isString = isString(r2);
|
||
const _isRef = isRef(r2);
|
||
if (_isString || _isRef) {
|
||
if (f2) {
|
||
if (!_isRef) {
|
||
return;
|
||
}
|
||
if (!isArray$1(r2.value)) {
|
||
r2.value = [];
|
||
}
|
||
const existing = r2.value;
|
||
if (existing.indexOf(refValue) === -1) {
|
||
existing.push(refValue);
|
||
if (!refValue) {
|
||
return;
|
||
}
|
||
if (refValue.$) {
|
||
onBeforeUnmount(() => remove(existing, refValue), refValue.$);
|
||
}
|
||
}
|
||
} else if (_isString) {
|
||
if (hasOwn(setupState, r2)) {
|
||
setupState[r2] = refValue;
|
||
}
|
||
} else if (isRef(r2)) {
|
||
r2.value = refValue;
|
||
} else {
|
||
warnRef(r2);
|
||
}
|
||
} else {
|
||
warnRef(r2);
|
||
}
|
||
}
|
||
}
|
||
function warnRef(ref2) {
|
||
warn("Invalid template ref type:", ref2, `(${typeof ref2})`);
|
||
}
|
||
const queuePostRenderEffect = queuePostFlushCb;
|
||
function mountComponent(initialVNode, options) {
|
||
const instance = initialVNode.component = createComponentInstance(initialVNode, options.parentComponent, null);
|
||
{
|
||
instance.ctx.$onApplyOptions = onApplyOptions;
|
||
instance.ctx.$children = [];
|
||
}
|
||
if (options.mpType === "app") {
|
||
instance.render = NOOP;
|
||
}
|
||
if (options.onBeforeSetup) {
|
||
options.onBeforeSetup(instance, options);
|
||
}
|
||
{
|
||
pushWarningContext(initialVNode);
|
||
startMeasure(instance, `mount`);
|
||
}
|
||
{
|
||
startMeasure(instance, `init`);
|
||
}
|
||
setupComponent(instance);
|
||
{
|
||
endMeasure(instance, `init`);
|
||
}
|
||
{
|
||
if (options.parentComponent && instance.proxy) {
|
||
options.parentComponent.ctx.$children.push(getExposeProxy(instance) || instance.proxy);
|
||
}
|
||
}
|
||
setupRenderEffect(instance);
|
||
{
|
||
popWarningContext();
|
||
endMeasure(instance, `mount`);
|
||
}
|
||
return instance.proxy;
|
||
}
|
||
const getFunctionalFallthrough = (attrs) => {
|
||
let res;
|
||
for (const key in attrs) {
|
||
if (key === "class" || key === "style" || isOn(key)) {
|
||
(res || (res = {}))[key] = attrs[key];
|
||
}
|
||
}
|
||
return res;
|
||
};
|
||
function renderComponentRoot(instance) {
|
||
const {
|
||
type: Component2,
|
||
vnode,
|
||
proxy,
|
||
withProxy,
|
||
props: props2,
|
||
propsOptions: [propsOptions],
|
||
slots,
|
||
attrs,
|
||
emit: emit2,
|
||
render,
|
||
renderCache,
|
||
data,
|
||
setupState,
|
||
ctx,
|
||
uid: uid2,
|
||
appContext: {
|
||
app: {
|
||
config: {
|
||
globalProperties: { pruneComponentPropsCache: pruneComponentPropsCache2 }
|
||
}
|
||
}
|
||
},
|
||
inheritAttrs
|
||
} = instance;
|
||
instance.$uniElementIds = /* @__PURE__ */ new Map();
|
||
instance.$templateRefs = [];
|
||
instance.$templateUniElementRefs = [];
|
||
instance.$templateUniElementStyles = {};
|
||
instance.$ei = 0;
|
||
pruneComponentPropsCache2(uid2);
|
||
instance.__counter = instance.__counter === 0 ? 1 : 0;
|
||
let result;
|
||
const prev = setCurrentRenderingInstance(instance);
|
||
try {
|
||
if (vnode.shapeFlag & 4) {
|
||
fallthroughAttrs(inheritAttrs, props2, propsOptions, attrs);
|
||
const proxyToUse = withProxy || proxy;
|
||
result = render.call(
|
||
proxyToUse,
|
||
proxyToUse,
|
||
renderCache,
|
||
props2,
|
||
setupState,
|
||
data,
|
||
ctx
|
||
);
|
||
} else {
|
||
fallthroughAttrs(
|
||
inheritAttrs,
|
||
props2,
|
||
propsOptions,
|
||
Component2.props ? attrs : getFunctionalFallthrough(attrs)
|
||
);
|
||
const render2 = Component2;
|
||
result = render2.length > 1 ? render2(props2, { attrs, slots, emit: emit2 }) : render2(
|
||
props2,
|
||
null
|
||
/* we know it doesn't need it */
|
||
);
|
||
}
|
||
} catch (err) {
|
||
handleError(err, instance, 1);
|
||
result = false;
|
||
}
|
||
setRef$1(instance);
|
||
setCurrentRenderingInstance(prev);
|
||
return result;
|
||
}
|
||
function fallthroughAttrs(inheritAttrs, props2, propsOptions, fallthroughAttrs2) {
|
||
if (props2 && fallthroughAttrs2 && inheritAttrs !== false) {
|
||
const keys = Object.keys(fallthroughAttrs2).filter(
|
||
(key) => key !== "class" && key !== "style"
|
||
);
|
||
if (!keys.length) {
|
||
return;
|
||
}
|
||
if (propsOptions && keys.some(isModelListener)) {
|
||
keys.forEach((key) => {
|
||
if (!isModelListener(key) || !(key.slice(9) in propsOptions)) {
|
||
props2[key] = fallthroughAttrs2[key];
|
||
}
|
||
});
|
||
} else {
|
||
keys.forEach((key) => props2[key] = fallthroughAttrs2[key]);
|
||
}
|
||
}
|
||
}
|
||
const updateComponentPreRender = (instance) => {
|
||
pauseTracking();
|
||
flushPreFlushCbs();
|
||
resetTracking();
|
||
};
|
||
function componentUpdateScopedSlotsFn() {
|
||
const scopedSlotsData = this.$scopedSlotsData;
|
||
if (!scopedSlotsData || scopedSlotsData.length === 0) {
|
||
return;
|
||
}
|
||
const mpInstance = this.ctx.$scope;
|
||
const oldData = mpInstance.data;
|
||
const diffData = /* @__PURE__ */ Object.create(null);
|
||
scopedSlotsData.forEach(({ path, index: index2, data }) => {
|
||
const oldScopedSlotData = getValueByDataPath(oldData, path);
|
||
const diffPath = isString(index2) ? `${path}.${index2}` : `${path}[${index2}]`;
|
||
if (typeof oldScopedSlotData === "undefined" || typeof oldScopedSlotData[index2] === "undefined") {
|
||
diffData[diffPath] = data;
|
||
} else {
|
||
const diffScopedSlotData = diff(
|
||
data,
|
||
oldScopedSlotData[index2]
|
||
);
|
||
Object.keys(diffScopedSlotData).forEach((name) => {
|
||
diffData[diffPath + "." + name] = diffScopedSlotData[name];
|
||
});
|
||
}
|
||
});
|
||
scopedSlotsData.length = 0;
|
||
if (Object.keys(diffData).length) {
|
||
mpInstance.setData(diffData);
|
||
}
|
||
}
|
||
function toggleRecurse({ effect: effect2, update }, allowed) {
|
||
effect2.allowRecurse = update.allowRecurse = allowed;
|
||
}
|
||
function setupRenderEffect(instance) {
|
||
const updateScopedSlots = componentUpdateScopedSlotsFn.bind(
|
||
instance
|
||
);
|
||
instance.$updateScopedSlots = () => nextTick$1(() => queueJob(updateScopedSlots));
|
||
const componentUpdateFn = () => {
|
||
if (!instance.isMounted) {
|
||
onBeforeUnmount(() => {
|
||
setRef$1(instance, true);
|
||
}, instance);
|
||
{
|
||
startMeasure(instance, `patch`);
|
||
}
|
||
patch(instance, renderComponentRoot(instance));
|
||
{
|
||
endMeasure(instance, `patch`);
|
||
}
|
||
{
|
||
devtoolsComponentAdded(instance);
|
||
}
|
||
} else {
|
||
const { next, bu, u } = instance;
|
||
{
|
||
pushWarningContext(next || instance.vnode);
|
||
}
|
||
toggleRecurse(instance, false);
|
||
updateComponentPreRender();
|
||
if (bu) {
|
||
invokeArrayFns$1(bu);
|
||
}
|
||
toggleRecurse(instance, true);
|
||
{
|
||
startMeasure(instance, `patch`);
|
||
}
|
||
patch(instance, renderComponentRoot(instance));
|
||
{
|
||
endMeasure(instance, `patch`);
|
||
}
|
||
if (u) {
|
||
queuePostRenderEffect(u);
|
||
}
|
||
{
|
||
devtoolsComponentUpdated(instance);
|
||
}
|
||
{
|
||
popWarningContext();
|
||
}
|
||
}
|
||
};
|
||
const effect2 = instance.effect = new ReactiveEffect2(
|
||
componentUpdateFn,
|
||
NOOP,
|
||
() => queueJob(update),
|
||
instance.scope
|
||
// track it in component's effect scope
|
||
);
|
||
const update = instance.update = () => {
|
||
if (effect2.dirty) {
|
||
effect2.run();
|
||
}
|
||
};
|
||
update.id = instance.uid;
|
||
toggleRecurse(instance, true);
|
||
{
|
||
effect2.onTrack = instance.rtc ? (e2) => invokeArrayFns$1(instance.rtc, e2) : void 0;
|
||
effect2.onTrigger = instance.rtg ? (e2) => invokeArrayFns$1(instance.rtg, e2) : void 0;
|
||
update.ownerInstance = instance;
|
||
}
|
||
{
|
||
update();
|
||
}
|
||
}
|
||
function unmountComponent(instance) {
|
||
const { bum, scope, update, um } = instance;
|
||
if (bum) {
|
||
invokeArrayFns$1(bum);
|
||
}
|
||
{
|
||
const parentInstance = instance.parent;
|
||
if (parentInstance) {
|
||
const $children = parentInstance.ctx.$children;
|
||
const target = getExposeProxy(instance) || instance.proxy;
|
||
const index2 = $children.indexOf(target);
|
||
if (index2 > -1) {
|
||
$children.splice(index2, 1);
|
||
}
|
||
}
|
||
}
|
||
scope.stop();
|
||
if (update) {
|
||
update.active = false;
|
||
}
|
||
if (um) {
|
||
queuePostRenderEffect(um);
|
||
}
|
||
queuePostRenderEffect(() => {
|
||
instance.isUnmounted = true;
|
||
});
|
||
{
|
||
devtoolsComponentRemoved(instance);
|
||
}
|
||
}
|
||
const oldCreateApp = createAppAPI();
|
||
function getTarget() {
|
||
if (typeof window !== "undefined") {
|
||
return window;
|
||
}
|
||
if (typeof globalThis !== "undefined") {
|
||
return globalThis;
|
||
}
|
||
if (typeof global !== "undefined") {
|
||
return global;
|
||
}
|
||
if (typeof my !== "undefined") {
|
||
return my;
|
||
}
|
||
}
|
||
function createVueApp(rootComponent, rootProps = null) {
|
||
const target = getTarget();
|
||
target.__VUE__ = true;
|
||
{
|
||
setDevtoolsHook(target.__VUE_DEVTOOLS_GLOBAL_HOOK__, target);
|
||
}
|
||
const app = oldCreateApp(rootComponent, rootProps);
|
||
const appContext = app._context;
|
||
initAppConfig(appContext.config);
|
||
const createVNode2 = (initialVNode) => {
|
||
initialVNode.appContext = appContext;
|
||
initialVNode.shapeFlag = 6;
|
||
return initialVNode;
|
||
};
|
||
const createComponent2 = function createComponent22(initialVNode, options) {
|
||
return mountComponent(createVNode2(initialVNode), options);
|
||
};
|
||
const destroyComponent = function destroyComponent2(component) {
|
||
return component && unmountComponent(component.$);
|
||
};
|
||
app.mount = function mount() {
|
||
rootComponent.render = NOOP;
|
||
const instance = mountComponent(
|
||
createVNode2({ type: rootComponent }),
|
||
{
|
||
mpType: "app",
|
||
mpInstance: null,
|
||
parentComponent: null,
|
||
slots: [],
|
||
props: null
|
||
}
|
||
);
|
||
app._instance = instance.$;
|
||
{
|
||
devtoolsInitApp(app, version$1);
|
||
}
|
||
instance.$app = app;
|
||
instance.$createComponent = createComponent2;
|
||
instance.$destroyComponent = destroyComponent;
|
||
appContext.$appInstance = instance;
|
||
return instance;
|
||
};
|
||
app.unmount = function unmount() {
|
||
warn(`Cannot unmount an app.`);
|
||
};
|
||
return app;
|
||
}
|
||
function injectLifecycleHook(name, hook, publicThis, instance) {
|
||
if (isFunction(hook)) {
|
||
injectHook(name, hook.bind(publicThis), instance);
|
||
}
|
||
}
|
||
function initHooks$1(options, instance, publicThis) {
|
||
const mpType = options.mpType || publicThis.$mpType;
|
||
if (!mpType || mpType === "component") {
|
||
return;
|
||
}
|
||
Object.keys(options).forEach((name) => {
|
||
if (isUniLifecycleHook(name, options[name], false)) {
|
||
const hooks = options[name];
|
||
if (isArray$1(hooks)) {
|
||
hooks.forEach((hook) => injectLifecycleHook(name, hook, publicThis, instance));
|
||
} else {
|
||
injectLifecycleHook(name, hooks, publicThis, instance);
|
||
}
|
||
}
|
||
});
|
||
}
|
||
function applyOptions$2(options, instance, publicThis) {
|
||
initHooks$1(options, instance, publicThis);
|
||
}
|
||
function set$2(target, key, val) {
|
||
return target[key] = val;
|
||
}
|
||
function $callMethod(method2, ...args) {
|
||
const fn = this[method2];
|
||
if (fn) {
|
||
return fn(...args);
|
||
}
|
||
console.error(`method ${method2} not found`);
|
||
return null;
|
||
}
|
||
function createErrorHandler(app) {
|
||
return function errorHandler(err, instance, _info) {
|
||
if (!instance) {
|
||
throw err;
|
||
}
|
||
const appInstance = app._instance;
|
||
if (!appInstance || !appInstance.proxy) {
|
||
throw err;
|
||
}
|
||
{
|
||
appInstance.proxy.$callHook(ON_ERROR, err);
|
||
}
|
||
};
|
||
}
|
||
function mergeAsArray(to, from) {
|
||
return to ? [...new Set([].concat(to, from))] : from;
|
||
}
|
||
function initOptionMergeStrategies(optionMergeStrategies) {
|
||
UniLifecycleHooks.forEach((name) => {
|
||
optionMergeStrategies[name] = mergeAsArray;
|
||
});
|
||
}
|
||
let realAtob;
|
||
const b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||
const b64re = /^(?:[A-Za-z\d+/]{4})*?(?:[A-Za-z\d+/]{2}(?:==)?|[A-Za-z\d+/]{3}=?)?$/;
|
||
if (typeof atob !== "function") {
|
||
realAtob = function(str) {
|
||
str = String(str).replace(/[\t\n\f\r ]+/g, "");
|
||
if (!b64re.test(str)) {
|
||
throw new Error("Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded.");
|
||
}
|
||
str += "==".slice(2 - (str.length & 3));
|
||
var bitmap;
|
||
var result = "";
|
||
var r1;
|
||
var r2;
|
||
var i = 0;
|
||
for (; i < str.length; ) {
|
||
bitmap = b64.indexOf(str.charAt(i++)) << 18 | b64.indexOf(str.charAt(i++)) << 12 | (r1 = b64.indexOf(str.charAt(i++))) << 6 | (r2 = b64.indexOf(str.charAt(i++)));
|
||
result += r1 === 64 ? String.fromCharCode(bitmap >> 16 & 255) : r2 === 64 ? String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255) : String.fromCharCode(bitmap >> 16 & 255, bitmap >> 8 & 255, bitmap & 255);
|
||
}
|
||
return result;
|
||
};
|
||
} else {
|
||
realAtob = atob;
|
||
}
|
||
function b64DecodeUnicode(str) {
|
||
return decodeURIComponent(realAtob(str).split("").map(function(c2) {
|
||
return "%" + ("00" + c2.charCodeAt(0).toString(16)).slice(-2);
|
||
}).join(""));
|
||
}
|
||
function getCurrentUserInfo() {
|
||
const token = index$2.getStorageSync("uni_id_token") || "";
|
||
const tokenArr = token.split(".");
|
||
if (!token || tokenArr.length !== 3) {
|
||
return {
|
||
uid: null,
|
||
role: [],
|
||
permission: [],
|
||
tokenExpired: 0
|
||
};
|
||
}
|
||
let userInfo;
|
||
try {
|
||
userInfo = JSON.parse(b64DecodeUnicode(tokenArr[1]));
|
||
} catch (error2) {
|
||
throw new Error("获取当前用户信息出错,详细错误信息为:" + error2.message);
|
||
}
|
||
userInfo.tokenExpired = userInfo.exp * 1e3;
|
||
delete userInfo.exp;
|
||
delete userInfo.iat;
|
||
return userInfo;
|
||
}
|
||
function uniIdMixin(globalProperties) {
|
||
globalProperties.uniIDHasRole = function(roleId) {
|
||
const { role } = getCurrentUserInfo();
|
||
return role.indexOf(roleId) > -1;
|
||
};
|
||
globalProperties.uniIDHasPermission = function(permissionId) {
|
||
const { permission } = getCurrentUserInfo();
|
||
return this.uniIDHasRole("admin") || permission.indexOf(permissionId) > -1;
|
||
};
|
||
globalProperties.uniIDTokenValid = function() {
|
||
const { tokenExpired } = getCurrentUserInfo();
|
||
return tokenExpired > Date.now();
|
||
};
|
||
}
|
||
function initApp(app) {
|
||
const appConfig = app._context.config;
|
||
appConfig.errorHandler = invokeCreateErrorHandler(app, createErrorHandler);
|
||
initOptionMergeStrategies(appConfig.optionMergeStrategies);
|
||
const globalProperties = appConfig.globalProperties;
|
||
{
|
||
uniIdMixin(globalProperties);
|
||
}
|
||
{
|
||
globalProperties.$set = set$2;
|
||
globalProperties.$applyOptions = applyOptions$2;
|
||
globalProperties.$callMethod = $callMethod;
|
||
}
|
||
{
|
||
index$2.invokeCreateVueAppHook(app);
|
||
}
|
||
}
|
||
const propsCaches = /* @__PURE__ */ Object.create(null);
|
||
function renderProps(props2) {
|
||
const { uid: uid2, __counter } = getCurrentInstance();
|
||
const propsId = (propsCaches[uid2] || (propsCaches[uid2] = [])).push(guardReactiveProps(props2)) - 1;
|
||
return uid2 + "," + propsId + "," + __counter;
|
||
}
|
||
function pruneComponentPropsCache(uid2) {
|
||
delete propsCaches[uid2];
|
||
}
|
||
function findComponentPropsData(up) {
|
||
if (!up) {
|
||
return;
|
||
}
|
||
const [uid2, propsId] = up.split(",");
|
||
if (!propsCaches[uid2]) {
|
||
return;
|
||
}
|
||
return propsCaches[uid2][parseInt(propsId)];
|
||
}
|
||
var plugin = {
|
||
install(app) {
|
||
initApp(app);
|
||
app.config.globalProperties.pruneComponentPropsCache = pruneComponentPropsCache;
|
||
const oldMount = app.mount;
|
||
app.mount = function mount(rootContainer) {
|
||
const instance = oldMount.call(app, rootContainer);
|
||
const createApp2 = getCreateApp();
|
||
if (createApp2) {
|
||
createApp2(instance);
|
||
} else {
|
||
if (typeof createMiniProgramApp !== "undefined") {
|
||
createMiniProgramApp(instance);
|
||
}
|
||
}
|
||
return instance;
|
||
};
|
||
}
|
||
};
|
||
function getCreateApp() {
|
||
const method2 = "createApp";
|
||
if (typeof global !== "undefined" && typeof global[method2] !== "undefined") {
|
||
return global[method2];
|
||
} else if (typeof my !== "undefined") {
|
||
return my[method2];
|
||
}
|
||
}
|
||
function vOn(value2, key) {
|
||
const instance = getCurrentInstance();
|
||
const ctx = instance.ctx;
|
||
const extraKey = typeof key !== "undefined" && (ctx.$mpPlatform === "mp-weixin" || ctx.$mpPlatform === "mp-qq" || ctx.$mpPlatform === "mp-xhs") && (isString(key) || typeof key === "number") ? "_" + key : "";
|
||
const name = "e" + instance.$ei++ + extraKey;
|
||
const mpInstance = ctx.$scope;
|
||
if (!value2) {
|
||
delete mpInstance[name];
|
||
return name;
|
||
}
|
||
const existingInvoker = mpInstance[name];
|
||
if (existingInvoker) {
|
||
existingInvoker.value = value2;
|
||
} else {
|
||
mpInstance[name] = createInvoker(value2, instance);
|
||
}
|
||
return name;
|
||
}
|
||
function createInvoker(initialValue, instance) {
|
||
const invoker = (e2) => {
|
||
patchMPEvent(e2);
|
||
let args = [e2];
|
||
if (instance && instance.ctx.$getTriggerEventDetail) {
|
||
if (typeof e2.detail === "number") {
|
||
e2.detail = instance.ctx.$getTriggerEventDetail(e2.detail);
|
||
}
|
||
}
|
||
if (e2.detail && e2.detail.__args__) {
|
||
args = e2.detail.__args__;
|
||
}
|
||
const eventValue = invoker.value;
|
||
const invoke = () => callWithAsyncErrorHandling(patchStopImmediatePropagation(e2, eventValue), instance, 5, args);
|
||
const eventTarget = e2.target;
|
||
const eventSync = eventTarget ? eventTarget.dataset ? String(eventTarget.dataset.eventsync) === "true" : false : false;
|
||
if (bubbles.includes(e2.type) && !eventSync) {
|
||
setTimeout(invoke);
|
||
} else {
|
||
const res = invoke();
|
||
if (e2.type === "input" && (isArray$1(res) || isPromise(res))) {
|
||
return;
|
||
}
|
||
return res;
|
||
}
|
||
};
|
||
invoker.value = initialValue;
|
||
return invoker;
|
||
}
|
||
const bubbles = [
|
||
// touch事件暂不做延迟,否则在 Android 上会影响性能,比如一些拖拽跟手手势等
|
||
// 'touchstart',
|
||
// 'touchmove',
|
||
// 'touchcancel',
|
||
// 'touchend',
|
||
"tap",
|
||
"longpress",
|
||
"longtap",
|
||
"transitionend",
|
||
"animationstart",
|
||
"animationiteration",
|
||
"animationend",
|
||
"touchforcechange"
|
||
];
|
||
function patchMPEvent(event) {
|
||
if (event.type && event.target) {
|
||
event.preventDefault = NOOP;
|
||
event.stopPropagation = NOOP;
|
||
event.stopImmediatePropagation = NOOP;
|
||
if (!hasOwn(event, "detail")) {
|
||
event.detail = {};
|
||
}
|
||
if (hasOwn(event, "markerId")) {
|
||
event.detail = typeof event.detail === "object" ? event.detail : {};
|
||
event.detail.markerId = event.markerId;
|
||
}
|
||
if (isPlainObject$2(event.detail) && hasOwn(event.detail, "checked") && !hasOwn(event.detail, "value")) {
|
||
event.detail.value = event.detail.checked;
|
||
}
|
||
if (isPlainObject$2(event.detail)) {
|
||
event.target = extend({}, event.target, event.detail);
|
||
}
|
||
}
|
||
}
|
||
function patchStopImmediatePropagation(e2, value2) {
|
||
if (isArray$1(value2)) {
|
||
const originalStop = e2.stopImmediatePropagation;
|
||
e2.stopImmediatePropagation = () => {
|
||
originalStop && originalStop.call(e2);
|
||
e2._stopped = true;
|
||
};
|
||
return value2.map((fn) => (e3) => !e3._stopped && fn(e3));
|
||
} else {
|
||
return value2;
|
||
}
|
||
}
|
||
function vFor(source, renderItem) {
|
||
let ret;
|
||
if (isArray$1(source) || isString(source)) {
|
||
ret = new Array(source.length);
|
||
for (let i = 0, l = source.length; i < l; i++) {
|
||
ret[i] = renderItem(source[i], i, i);
|
||
}
|
||
} else if (typeof source === "number") {
|
||
if (!Number.isInteger(source)) {
|
||
warn(`The v-for range expect an integer value but got ${source}.`);
|
||
return [];
|
||
}
|
||
ret = new Array(source);
|
||
for (let i = 0; i < source; i++) {
|
||
ret[i] = renderItem(i + 1, i, i);
|
||
}
|
||
} else if (isObject$1(source)) {
|
||
if (source[Symbol.iterator]) {
|
||
ret = Array.from(source, (item, i) => renderItem(item, i, i));
|
||
} else {
|
||
const keys = Object.keys(source);
|
||
ret = new Array(keys.length);
|
||
for (let i = 0, l = keys.length; i < l; i++) {
|
||
const key = keys[i];
|
||
ret[i] = renderItem(source[key], key, i);
|
||
}
|
||
}
|
||
} else {
|
||
ret = [];
|
||
}
|
||
return ret;
|
||
}
|
||
function renderSlot(name, props2 = {}, key) {
|
||
const instance = getCurrentInstance();
|
||
const { parent, isMounted, ctx: { $scope } } = instance;
|
||
const vueIds = ($scope.properties || $scope.props).uI;
|
||
if (!vueIds) {
|
||
return;
|
||
}
|
||
if (!parent && !isMounted) {
|
||
onMounted(() => {
|
||
renderSlot(name, props2, key);
|
||
}, instance);
|
||
return;
|
||
}
|
||
const invoker = findScopedSlotInvoker(vueIds, instance);
|
||
if (invoker) {
|
||
invoker(name, props2, key);
|
||
}
|
||
}
|
||
function findScopedSlotInvoker(vueId, instance) {
|
||
let parent = instance.parent;
|
||
while (parent) {
|
||
const invokers = parent.$ssi;
|
||
if (invokers && invokers[vueId]) {
|
||
return invokers[vueId];
|
||
}
|
||
parent = parent.parent;
|
||
}
|
||
}
|
||
function withScopedSlot(fn, { name, path, vueId }) {
|
||
const instance = getCurrentInstance();
|
||
fn.path = path;
|
||
const scopedSlots = instance.$ssi || (instance.$ssi = {});
|
||
const invoker = scopedSlots[vueId] || (scopedSlots[vueId] = createScopedSlotInvoker(instance));
|
||
if (!invoker.slots[name]) {
|
||
invoker.slots[name] = {
|
||
fn
|
||
};
|
||
} else {
|
||
invoker.slots[name].fn = fn;
|
||
}
|
||
return getValueByDataPath(instance.ctx.$scope.data, path);
|
||
}
|
||
function createScopedSlotInvoker(instance) {
|
||
const invoker = (slotName, args, index2) => {
|
||
const slot = invoker.slots[slotName];
|
||
if (!slot) {
|
||
return;
|
||
}
|
||
const hasIndex = typeof index2 !== "undefined";
|
||
index2 = index2 || 0;
|
||
const prevInstance = setCurrentRenderingInstance(instance);
|
||
const data = slot.fn(args, slotName + (hasIndex ? "-" + index2 : ""), index2);
|
||
const path = slot.fn.path;
|
||
setCurrentRenderingInstance(prevInstance);
|
||
(instance.$scopedSlotsData || (instance.$scopedSlotsData = [])).push({
|
||
path,
|
||
index: index2,
|
||
data
|
||
});
|
||
instance.$updateScopedSlots();
|
||
};
|
||
invoker.slots = {};
|
||
return invoker;
|
||
}
|
||
function stringifyStyle(value2) {
|
||
if (isString(value2)) {
|
||
return value2;
|
||
}
|
||
return stringify(normalizeStyle(value2));
|
||
}
|
||
function stringify(styles) {
|
||
let ret = "";
|
||
if (!styles || isString(styles)) {
|
||
return ret;
|
||
}
|
||
for (const key in styles) {
|
||
ret += `${key.startsWith(`--`) ? key : hyphenate(key)}:${styles[key]};`;
|
||
}
|
||
return ret;
|
||
}
|
||
function setRef(ref2, id, opts = {}) {
|
||
const { $templateRefs } = getCurrentInstance();
|
||
$templateRefs.push({ i: id, r: ref2, k: opts.k, f: opts.f });
|
||
}
|
||
function withModelModifiers(fn, { number: number2, trim: trim2 }, isComponent = false) {
|
||
if (isComponent) {
|
||
return (...args) => {
|
||
if (trim2) {
|
||
args = args.map((a) => a.trim());
|
||
} else if (number2) {
|
||
args = args.map(toNumber$1);
|
||
}
|
||
return fn(...args);
|
||
};
|
||
}
|
||
return (event) => {
|
||
const value2 = event.detail.value;
|
||
if (trim2) {
|
||
event.detail.value = value2.trim();
|
||
} else if (number2) {
|
||
event.detail.value = toNumber$1(value2);
|
||
}
|
||
return fn(event);
|
||
};
|
||
}
|
||
const o = (value2, key) => vOn(value2, key);
|
||
const f = (source, renderItem) => vFor(source, renderItem);
|
||
const r = (name, props2, key) => renderSlot(name, props2, key);
|
||
const w = (fn, options) => withScopedSlot(fn, options);
|
||
const s = (value2) => stringifyStyle(value2);
|
||
const e = (target, ...sources) => extend(target, ...sources);
|
||
const n = (value2) => normalizeClass(value2);
|
||
const t = (val) => toDisplayString(val);
|
||
const p = (props2) => renderProps(props2);
|
||
const sr = (ref2, id, opts) => setRef(ref2, id, opts);
|
||
const m = (fn, modifiers, isComponent = false) => withModelModifiers(fn, modifiers, isComponent);
|
||
function createApp$1(rootComponent, rootProps = null) {
|
||
rootComponent && (rootComponent.mpType = "app");
|
||
return createVueApp(rootComponent, rootProps).use(plugin);
|
||
}
|
||
const createSSRApp = createApp$1;
|
||
function initVueIds(vueIds, mpInstance) {
|
||
if (!vueIds) {
|
||
return;
|
||
}
|
||
const ids = vueIds.split(",");
|
||
const len = ids.length;
|
||
if (len === 1) {
|
||
mpInstance._$vueId = ids[0];
|
||
} else if (len === 2) {
|
||
mpInstance._$vueId = ids[0];
|
||
mpInstance._$vuePid = ids[1];
|
||
}
|
||
}
|
||
const EXTRAS = ["externalClasses"];
|
||
function initExtraOptions(miniProgramComponentOptions, vueOptions) {
|
||
EXTRAS.forEach((name) => {
|
||
if (hasOwn(vueOptions, name)) {
|
||
miniProgramComponentOptions[name] = vueOptions[name];
|
||
}
|
||
});
|
||
}
|
||
const WORKLET_RE = /_(.*)_worklet_factory_/;
|
||
function initWorkletMethods(mpMethods, vueMethods) {
|
||
if (vueMethods) {
|
||
Object.keys(vueMethods).forEach((name) => {
|
||
const matches = name.match(WORKLET_RE);
|
||
if (matches) {
|
||
const workletName = matches[1];
|
||
mpMethods[name] = vueMethods[name];
|
||
mpMethods[workletName] = vueMethods[workletName];
|
||
}
|
||
});
|
||
}
|
||
}
|
||
function initWxsCallMethods(methods, wxsCallMethods) {
|
||
if (!isArray$1(wxsCallMethods)) {
|
||
return;
|
||
}
|
||
wxsCallMethods.forEach((callMethod) => {
|
||
methods[callMethod] = function(args) {
|
||
return this.$vm[callMethod](args);
|
||
};
|
||
});
|
||
}
|
||
function selectAllComponents(mpInstance, selector, $refs) {
|
||
const components = mpInstance.selectAllComponents(selector);
|
||
components.forEach((component) => {
|
||
const ref2 = component.properties.uR;
|
||
$refs[ref2] = component.$vm || component;
|
||
});
|
||
}
|
||
function initRefs(instance, mpInstance) {
|
||
Object.defineProperty(instance, "refs", {
|
||
get() {
|
||
const $refs = {};
|
||
selectAllComponents(mpInstance, ".r", $refs);
|
||
const forComponents = mpInstance.selectAllComponents(".r-i-f");
|
||
forComponents.forEach((component) => {
|
||
const ref2 = component.properties.uR;
|
||
if (!ref2) {
|
||
return;
|
||
}
|
||
if (!$refs[ref2]) {
|
||
$refs[ref2] = [];
|
||
}
|
||
$refs[ref2].push(component.$vm || component);
|
||
});
|
||
return $refs;
|
||
}
|
||
});
|
||
}
|
||
function findVmByVueId(instance, vuePid) {
|
||
const $children = instance.$children;
|
||
for (let i = $children.length - 1; i >= 0; i--) {
|
||
const childVm = $children[i];
|
||
if (childVm.$scope._$vueId === vuePid) {
|
||
return childVm;
|
||
}
|
||
}
|
||
let parentVm;
|
||
for (let i = $children.length - 1; i >= 0; i--) {
|
||
parentVm = findVmByVueId($children[i], vuePid);
|
||
if (parentVm) {
|
||
return parentVm;
|
||
}
|
||
}
|
||
}
|
||
const MP_METHODS = [
|
||
"createSelectorQuery",
|
||
"createIntersectionObserver",
|
||
"selectAllComponents",
|
||
"selectComponent"
|
||
];
|
||
function createEmitFn(oldEmit, ctx) {
|
||
return function emit2(event, ...args) {
|
||
const scope = ctx.$scope;
|
||
if (scope && event) {
|
||
const detail = { __args__: args };
|
||
{
|
||
scope.triggerEvent(event, detail);
|
||
}
|
||
}
|
||
return oldEmit.apply(this, [event, ...args]);
|
||
};
|
||
}
|
||
function initBaseInstance(instance, options) {
|
||
const ctx = instance.ctx;
|
||
ctx.mpType = options.mpType;
|
||
ctx.$mpType = options.mpType;
|
||
ctx.$mpPlatform = "mp-weixin";
|
||
ctx.$scope = options.mpInstance;
|
||
ctx.$mp = {};
|
||
{
|
||
ctx._self = {};
|
||
}
|
||
instance.slots = {};
|
||
if (isArray$1(options.slots) && options.slots.length) {
|
||
options.slots.forEach((name) => {
|
||
instance.slots[name] = true;
|
||
});
|
||
if (instance.slots[SLOT_DEFAULT_NAME]) {
|
||
instance.slots.default = true;
|
||
}
|
||
}
|
||
ctx.getOpenerEventChannel = function() {
|
||
{
|
||
return options.mpInstance.getOpenerEventChannel();
|
||
}
|
||
};
|
||
ctx.$hasHook = hasHook;
|
||
ctx.$callHook = callHook;
|
||
instance.emit = createEmitFn(instance.emit, ctx);
|
||
}
|
||
function initComponentInstance(instance, options) {
|
||
initBaseInstance(instance, options);
|
||
const ctx = instance.ctx;
|
||
MP_METHODS.forEach((method2) => {
|
||
ctx[method2] = function(...args) {
|
||
const mpInstance = ctx.$scope;
|
||
if (mpInstance && mpInstance[method2]) {
|
||
return mpInstance[method2].apply(mpInstance, args);
|
||
}
|
||
};
|
||
});
|
||
}
|
||
function initMocks(instance, mpInstance, mocks2) {
|
||
const ctx = instance.ctx;
|
||
mocks2.forEach((mock) => {
|
||
if (hasOwn(mpInstance, mock)) {
|
||
instance[mock] = ctx[mock] = mpInstance[mock];
|
||
}
|
||
});
|
||
}
|
||
function hasHook(name) {
|
||
const hooks = this.$[name];
|
||
if (hooks && hooks.length) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function callHook(name, args) {
|
||
if (name === "mounted") {
|
||
callHook.call(this, "bm");
|
||
this.$.isMounted = true;
|
||
name = "m";
|
||
}
|
||
const hooks = this.$[name];
|
||
return hooks && invokeArrayFns(hooks, args);
|
||
}
|
||
const PAGE_INIT_HOOKS = [
|
||
ON_LOAD,
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_UNLOAD,
|
||
ON_RESIZE,
|
||
ON_TAB_ITEM_TAP,
|
||
ON_REACH_BOTTOM,
|
||
ON_PULL_DOWN_REFRESH,
|
||
ON_ADD_TO_FAVORITES
|
||
// 'onReady', // lifetimes.ready
|
||
// 'onPageScroll', // 影响性能,开发者手动注册
|
||
// 'onShareTimeline', // 右上角菜单,开发者手动注册
|
||
// 'onShareAppMessage' // 右上角菜单,开发者手动注册
|
||
];
|
||
function findHooks(vueOptions, hooks = /* @__PURE__ */ new Set()) {
|
||
if (vueOptions) {
|
||
Object.keys(vueOptions).forEach((name) => {
|
||
if (isUniLifecycleHook(name, vueOptions[name])) {
|
||
hooks.add(name);
|
||
}
|
||
});
|
||
{
|
||
const { extends: extendsOptions, mixins } = vueOptions;
|
||
if (mixins) {
|
||
mixins.forEach((mixin2) => findHooks(mixin2, hooks));
|
||
}
|
||
if (extendsOptions) {
|
||
findHooks(extendsOptions, hooks);
|
||
}
|
||
}
|
||
}
|
||
return hooks;
|
||
}
|
||
function initHook(mpOptions, hook, excludes) {
|
||
if (excludes.indexOf(hook) === -1 && !hasOwn(mpOptions, hook)) {
|
||
mpOptions[hook] = function(args) {
|
||
return this.$vm && this.$vm.$callHook(hook, args);
|
||
};
|
||
}
|
||
}
|
||
const EXCLUDE_HOOKS = [ON_READY];
|
||
function initHooks(mpOptions, hooks, excludes = EXCLUDE_HOOKS) {
|
||
hooks.forEach((hook) => initHook(mpOptions, hook, excludes));
|
||
}
|
||
function initUnknownHooks(mpOptions, vueOptions, excludes = EXCLUDE_HOOKS) {
|
||
findHooks(vueOptions).forEach((hook) => initHook(mpOptions, hook, excludes));
|
||
}
|
||
function initRuntimeHooks(mpOptions, runtimeHooks) {
|
||
if (!runtimeHooks) {
|
||
return;
|
||
}
|
||
const hooks = Object.keys(MINI_PROGRAM_PAGE_RUNTIME_HOOKS);
|
||
hooks.forEach((hook) => {
|
||
if (runtimeHooks & MINI_PROGRAM_PAGE_RUNTIME_HOOKS[hook]) {
|
||
initHook(mpOptions, hook, []);
|
||
}
|
||
});
|
||
}
|
||
const findMixinRuntimeHooks = /* @__PURE__ */ once(() => {
|
||
const runtimeHooks = [];
|
||
const app = isFunction(getApp) && getApp({ allowDefault: true });
|
||
if (app && app.$vm && app.$vm.$) {
|
||
const mixins = app.$vm.$.appContext.mixins;
|
||
if (isArray$1(mixins)) {
|
||
const hooks = Object.keys(MINI_PROGRAM_PAGE_RUNTIME_HOOKS);
|
||
mixins.forEach((mixin2) => {
|
||
hooks.forEach((hook) => {
|
||
if (hasOwn(mixin2, hook) && !runtimeHooks.includes(hook)) {
|
||
runtimeHooks.push(hook);
|
||
}
|
||
});
|
||
});
|
||
}
|
||
}
|
||
return runtimeHooks;
|
||
});
|
||
function initMixinRuntimeHooks(mpOptions) {
|
||
initHooks(mpOptions, findMixinRuntimeHooks());
|
||
}
|
||
const HOOKS = [
|
||
ON_SHOW,
|
||
ON_HIDE,
|
||
ON_ERROR,
|
||
ON_THEME_CHANGE,
|
||
ON_PAGE_NOT_FOUND,
|
||
ON_UNHANDLE_REJECTION
|
||
];
|
||
function parseApp(instance, parseAppOptions) {
|
||
const internalInstance = instance.$;
|
||
const appOptions = {
|
||
globalData: instance.$options && instance.$options.globalData || {},
|
||
$vm: instance,
|
||
// mp-alipay 组件 data 初始化比 onLaunch 早,提前挂载
|
||
onLaunch(options) {
|
||
this.$vm = instance;
|
||
const ctx = internalInstance.ctx;
|
||
if (this.$vm && ctx.$scope && ctx.$callHook) {
|
||
return;
|
||
}
|
||
initBaseInstance(internalInstance, {
|
||
mpType: "app",
|
||
mpInstance: this,
|
||
slots: []
|
||
});
|
||
ctx.globalData = this.globalData;
|
||
instance.$callHook(ON_LAUNCH, options);
|
||
}
|
||
};
|
||
const { onError } = internalInstance;
|
||
if (onError) {
|
||
internalInstance.appContext.config.errorHandler = (err) => {
|
||
instance.$callHook(ON_ERROR, err);
|
||
};
|
||
}
|
||
initLocale(instance);
|
||
const vueOptions = instance.$.type;
|
||
initHooks(appOptions, HOOKS);
|
||
initUnknownHooks(appOptions, vueOptions);
|
||
{
|
||
const methods = vueOptions.methods;
|
||
methods && extend(appOptions, methods);
|
||
}
|
||
return appOptions;
|
||
}
|
||
function initCreateApp(parseAppOptions) {
|
||
return function createApp2(vm) {
|
||
return App(parseApp(vm));
|
||
};
|
||
}
|
||
function initCreateSubpackageApp(parseAppOptions) {
|
||
return function createApp2(vm) {
|
||
const appOptions = parseApp(vm);
|
||
const app = isFunction(getApp) && getApp({
|
||
allowDefault: true
|
||
});
|
||
if (!app)
|
||
return;
|
||
vm.$.ctx.$scope = app;
|
||
const globalData = app.globalData;
|
||
if (globalData) {
|
||
Object.keys(appOptions.globalData).forEach((name) => {
|
||
if (!hasOwn(globalData, name)) {
|
||
globalData[name] = appOptions.globalData[name];
|
||
}
|
||
});
|
||
}
|
||
Object.keys(appOptions).forEach((name) => {
|
||
if (!hasOwn(app, name)) {
|
||
app[name] = appOptions[name];
|
||
}
|
||
});
|
||
initAppLifecycle(appOptions, vm);
|
||
};
|
||
}
|
||
function initAppLifecycle(appOptions, vm) {
|
||
if (isFunction(appOptions.onLaunch)) {
|
||
const args = wx.getLaunchOptionsSync && wx.getLaunchOptionsSync();
|
||
appOptions.onLaunch(args);
|
||
}
|
||
if (isFunction(appOptions.onShow) && wx.onAppShow) {
|
||
wx.onAppShow((args) => {
|
||
vm.$callHook("onShow", args);
|
||
});
|
||
}
|
||
if (isFunction(appOptions.onHide) && wx.onAppHide) {
|
||
wx.onAppHide((args) => {
|
||
vm.$callHook("onHide", args);
|
||
});
|
||
}
|
||
}
|
||
function initLocale(appVm) {
|
||
const locale = ref(normalizeLocale(wx.getSystemInfoSync().language) || LOCALE_EN);
|
||
Object.defineProperty(appVm, "$locale", {
|
||
get() {
|
||
return locale.value;
|
||
},
|
||
set(v) {
|
||
locale.value = v;
|
||
}
|
||
});
|
||
}
|
||
const builtInProps = [
|
||
// 百度小程序,快手小程序自定义组件不支持绑定动态事件,动态dataset,故通过props传递事件信息
|
||
// event-opts
|
||
"eO",
|
||
// 组件 ref
|
||
"uR",
|
||
// 组件 ref-in-for
|
||
"uRIF",
|
||
// 组件 id
|
||
"uI",
|
||
// 组件类型 m: 小程序组件
|
||
"uT",
|
||
// 组件 props
|
||
"uP",
|
||
// 小程序不能直接定义 $slots 的 props,所以通过 vueSlots 转换到 $slots
|
||
"uS"
|
||
];
|
||
function initDefaultProps(options, isBehavior = false) {
|
||
const properties = {};
|
||
if (!isBehavior) {
|
||
let observerSlots = function(newVal) {
|
||
const $slots = /* @__PURE__ */ Object.create(null);
|
||
newVal && newVal.forEach((slotName) => {
|
||
$slots[slotName] = true;
|
||
});
|
||
this.setData({
|
||
$slots
|
||
});
|
||
};
|
||
builtInProps.forEach((name) => {
|
||
properties[name] = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
});
|
||
properties.uS = {
|
||
type: null,
|
||
value: []
|
||
};
|
||
{
|
||
properties.uS.observer = observerSlots;
|
||
}
|
||
}
|
||
if (options.behaviors) {
|
||
if (options.behaviors.includes("wx://form-field")) {
|
||
if (!options.properties || !options.properties.name) {
|
||
properties.name = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
}
|
||
if (!options.properties || !options.properties.value) {
|
||
properties.value = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
}
|
||
}
|
||
}
|
||
return properties;
|
||
}
|
||
function initVirtualHostProps(options) {
|
||
const properties = {};
|
||
{
|
||
if (options && options.virtualHost) {
|
||
properties.virtualHostStyle = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
properties.virtualHostClass = {
|
||
type: null,
|
||
value: ""
|
||
};
|
||
}
|
||
}
|
||
return properties;
|
||
}
|
||
function initProps(mpComponentOptions) {
|
||
if (!mpComponentOptions.properties) {
|
||
mpComponentOptions.properties = {};
|
||
}
|
||
extend(mpComponentOptions.properties, initDefaultProps(mpComponentOptions), initVirtualHostProps(mpComponentOptions.options));
|
||
}
|
||
const PROP_TYPES = [String, Number, Boolean, Object, Array, null];
|
||
function parsePropType(type2, defaultValue) {
|
||
if (isArray$1(type2) && type2.length === 1) {
|
||
return type2[0];
|
||
}
|
||
return type2;
|
||
}
|
||
function normalizePropType(type2, defaultValue) {
|
||
const res = parsePropType(type2);
|
||
return PROP_TYPES.indexOf(res) !== -1 ? res : null;
|
||
}
|
||
function initPageProps({ properties }, rawProps) {
|
||
if (isArray$1(rawProps)) {
|
||
rawProps.forEach((key) => {
|
||
properties[key] = {
|
||
type: String,
|
||
value: ""
|
||
};
|
||
});
|
||
} else if (isPlainObject$2(rawProps)) {
|
||
Object.keys(rawProps).forEach((key) => {
|
||
const opts = rawProps[key];
|
||
if (isPlainObject$2(opts)) {
|
||
let value2 = opts.default;
|
||
if (isFunction(value2)) {
|
||
value2 = value2();
|
||
}
|
||
const type2 = opts.type;
|
||
opts.type = normalizePropType(type2);
|
||
properties[key] = {
|
||
type: opts.type,
|
||
value: value2
|
||
};
|
||
} else {
|
||
properties[key] = {
|
||
type: normalizePropType(opts)
|
||
};
|
||
}
|
||
});
|
||
}
|
||
}
|
||
function findPropsData(properties, isPage2) {
|
||
return (isPage2 ? findPagePropsData(properties) : findComponentPropsData(resolvePropValue(properties.uP))) || {};
|
||
}
|
||
function findPagePropsData(properties) {
|
||
const propsData = {};
|
||
if (isPlainObject$2(properties)) {
|
||
Object.keys(properties).forEach((name) => {
|
||
if (builtInProps.indexOf(name) === -1) {
|
||
propsData[name] = resolvePropValue(properties[name]);
|
||
}
|
||
});
|
||
}
|
||
return propsData;
|
||
}
|
||
function initFormField(vm) {
|
||
const vueOptions = vm.$options;
|
||
if (isArray$1(vueOptions.behaviors) && vueOptions.behaviors.includes("uni://form-field")) {
|
||
vm.$watch("modelValue", () => {
|
||
vm.$scope && vm.$scope.setData({
|
||
name: vm.name,
|
||
value: vm.modelValue
|
||
});
|
||
}, {
|
||
immediate: true
|
||
});
|
||
}
|
||
}
|
||
function resolvePropValue(prop) {
|
||
return prop;
|
||
}
|
||
function initData(_) {
|
||
return {};
|
||
}
|
||
function initPropsObserver(componentOptions) {
|
||
const observe = function observe2() {
|
||
const up = this.properties.uP;
|
||
if (!up) {
|
||
return;
|
||
}
|
||
if (this.$vm) {
|
||
updateComponentProps(resolvePropValue(up), this.$vm.$);
|
||
} else if (resolvePropValue(this.properties.uT) === "m") {
|
||
updateMiniProgramComponentProperties(resolvePropValue(up), this);
|
||
}
|
||
};
|
||
{
|
||
if (!componentOptions.observers) {
|
||
componentOptions.observers = {};
|
||
}
|
||
componentOptions.observers.uP = observe;
|
||
}
|
||
}
|
||
function updateMiniProgramComponentProperties(up, mpInstance) {
|
||
const prevProps = mpInstance.properties;
|
||
const nextProps = findComponentPropsData(up) || {};
|
||
if (hasPropsChanged(prevProps, nextProps, false)) {
|
||
mpInstance.setData(nextProps);
|
||
}
|
||
}
|
||
function updateComponentProps(up, instance) {
|
||
const prevProps = toRaw(instance.props);
|
||
const nextProps = findComponentPropsData(up) || {};
|
||
if (hasPropsChanged(prevProps, nextProps)) {
|
||
updateProps(instance, nextProps, prevProps);
|
||
if (hasQueueJob(instance.update)) {
|
||
invalidateJob(instance.update);
|
||
}
|
||
{
|
||
instance.update();
|
||
}
|
||
}
|
||
}
|
||
function hasPropsChanged(prevProps, nextProps, checkLen = true) {
|
||
const nextKeys = Object.keys(nextProps);
|
||
if (checkLen && nextKeys.length !== Object.keys(prevProps).length) {
|
||
return true;
|
||
}
|
||
for (let i = 0; i < nextKeys.length; i++) {
|
||
const key = nextKeys[i];
|
||
if (nextProps[key] !== prevProps[key]) {
|
||
return true;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
function initBehaviors(vueOptions) {
|
||
const vueBehaviors = vueOptions.behaviors;
|
||
let vueProps = vueOptions.props;
|
||
if (!vueProps) {
|
||
vueOptions.props = vueProps = [];
|
||
}
|
||
const behaviors = [];
|
||
if (isArray$1(vueBehaviors)) {
|
||
vueBehaviors.forEach((behavior) => {
|
||
behaviors.push(behavior.replace("uni://", "wx://"));
|
||
if (behavior === "uni://form-field") {
|
||
if (isArray$1(vueProps)) {
|
||
vueProps.push("name");
|
||
vueProps.push("modelValue");
|
||
} else {
|
||
vueProps.name = {
|
||
type: String,
|
||
default: ""
|
||
};
|
||
vueProps.modelValue = {
|
||
type: [String, Number, Boolean, Array, Object, Date],
|
||
default: ""
|
||
};
|
||
}
|
||
}
|
||
});
|
||
}
|
||
return behaviors;
|
||
}
|
||
function applyOptions(componentOptions, vueOptions) {
|
||
componentOptions.data = initData();
|
||
componentOptions.behaviors = initBehaviors(vueOptions);
|
||
}
|
||
function parseComponent(vueOptions, { parse, mocks: mocks2, isPage: isPage2, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 }) {
|
||
vueOptions = vueOptions.default || vueOptions;
|
||
const options = {
|
||
multipleSlots: true,
|
||
// styleIsolation: 'apply-shared',
|
||
addGlobalClass: true,
|
||
pureDataPattern: /^uP$/
|
||
};
|
||
if (isArray$1(vueOptions.mixins)) {
|
||
vueOptions.mixins.forEach((item) => {
|
||
if (isObject$1(item.options)) {
|
||
extend(options, item.options);
|
||
}
|
||
});
|
||
}
|
||
if (vueOptions.options) {
|
||
extend(options, vueOptions.options);
|
||
}
|
||
const mpComponentOptions = {
|
||
options,
|
||
lifetimes: initLifetimes2({ mocks: mocks2, isPage: isPage2, initRelation: initRelation2, vueOptions }),
|
||
pageLifetimes: {
|
||
show() {
|
||
this.$vm && this.$vm.$callHook("onPageShow");
|
||
},
|
||
hide() {
|
||
this.$vm && this.$vm.$callHook("onPageHide");
|
||
},
|
||
resize(size2) {
|
||
this.$vm && this.$vm.$callHook("onPageResize", size2);
|
||
}
|
||
},
|
||
methods: {
|
||
__l: handleLink2
|
||
}
|
||
};
|
||
{
|
||
applyOptions(mpComponentOptions, vueOptions);
|
||
}
|
||
initProps(mpComponentOptions);
|
||
initPropsObserver(mpComponentOptions);
|
||
initExtraOptions(mpComponentOptions, vueOptions);
|
||
initWxsCallMethods(mpComponentOptions.methods, vueOptions.wxsCallMethods);
|
||
{
|
||
initWorkletMethods(mpComponentOptions.methods, vueOptions.methods);
|
||
}
|
||
if (parse) {
|
||
parse(mpComponentOptions, { handleLink: handleLink2 });
|
||
}
|
||
return mpComponentOptions;
|
||
}
|
||
function initCreateComponent(parseOptions2) {
|
||
return function createComponent2(vueComponentOptions) {
|
||
return Component(parseComponent(vueComponentOptions, parseOptions2));
|
||
};
|
||
}
|
||
let $createComponentFn;
|
||
let $destroyComponentFn;
|
||
function getAppVm() {
|
||
return getApp().$vm;
|
||
}
|
||
function $createComponent(initialVNode, options) {
|
||
if (!$createComponentFn) {
|
||
$createComponentFn = getAppVm().$createComponent;
|
||
}
|
||
const proxy = $createComponentFn(initialVNode, options);
|
||
return getExposeProxy(proxy.$) || proxy;
|
||
}
|
||
function $destroyComponent(instance) {
|
||
if (!$destroyComponentFn) {
|
||
$destroyComponentFn = getAppVm().$destroyComponent;
|
||
}
|
||
return $destroyComponentFn(instance);
|
||
}
|
||
function parsePage(vueOptions, parseOptions2) {
|
||
const { parse, mocks: mocks2, isPage: isPage2, initRelation: initRelation2, handleLink: handleLink2, initLifetimes: initLifetimes2 } = parseOptions2;
|
||
const miniProgramPageOptions = parseComponent(vueOptions, {
|
||
mocks: mocks2,
|
||
isPage: isPage2,
|
||
initRelation: initRelation2,
|
||
handleLink: handleLink2,
|
||
initLifetimes: initLifetimes2
|
||
});
|
||
initPageProps(miniProgramPageOptions, (vueOptions.default || vueOptions).props);
|
||
const methods = miniProgramPageOptions.methods;
|
||
methods.onLoad = function(query) {
|
||
this.options = query;
|
||
this.$page = {
|
||
fullPath: addLeadingSlash(this.route + stringifyQuery(query))
|
||
};
|
||
return this.$vm && this.$vm.$callHook(ON_LOAD, query);
|
||
};
|
||
initHooks(methods, PAGE_INIT_HOOKS);
|
||
{
|
||
initUnknownHooks(methods, vueOptions);
|
||
}
|
||
initRuntimeHooks(methods, vueOptions.__runtimeHooks);
|
||
initMixinRuntimeHooks(methods);
|
||
parse && parse(miniProgramPageOptions, { handleLink: handleLink2 });
|
||
return miniProgramPageOptions;
|
||
}
|
||
function initCreatePage(parseOptions2) {
|
||
return function createPage2(vuePageOptions) {
|
||
return Component(parsePage(vuePageOptions, parseOptions2));
|
||
};
|
||
}
|
||
function initCreatePluginApp(parseAppOptions) {
|
||
return function createApp2(vm) {
|
||
initAppLifecycle(parseApp(vm), vm);
|
||
};
|
||
}
|
||
const MPPage = Page;
|
||
const MPComponent = Component;
|
||
function initTriggerEvent(mpInstance) {
|
||
const oldTriggerEvent = mpInstance.triggerEvent;
|
||
const newTriggerEvent = function(event, ...args) {
|
||
return oldTriggerEvent.apply(mpInstance, [
|
||
customizeEvent(event),
|
||
...args
|
||
]);
|
||
};
|
||
try {
|
||
mpInstance.triggerEvent = newTriggerEvent;
|
||
} catch (error2) {
|
||
mpInstance._triggerEvent = newTriggerEvent;
|
||
}
|
||
}
|
||
function initMiniProgramHook(name, options, isComponent) {
|
||
const oldHook = options[name];
|
||
if (!oldHook) {
|
||
options[name] = function() {
|
||
initTriggerEvent(this);
|
||
};
|
||
} else {
|
||
options[name] = function(...args) {
|
||
initTriggerEvent(this);
|
||
return oldHook.apply(this, args);
|
||
};
|
||
}
|
||
}
|
||
Page = function(options) {
|
||
initMiniProgramHook(ON_LOAD, options);
|
||
return MPPage(options);
|
||
};
|
||
Component = function(options) {
|
||
initMiniProgramHook("created", options);
|
||
const isVueComponent = options.properties && options.properties.uP;
|
||
if (!isVueComponent) {
|
||
initProps(options);
|
||
initPropsObserver(options);
|
||
}
|
||
return MPComponent(options);
|
||
};
|
||
function initLifetimes({ mocks: mocks2, isPage: isPage2, initRelation: initRelation2, vueOptions }) {
|
||
return {
|
||
attached() {
|
||
let properties = this.properties;
|
||
initVueIds(properties.uI, this);
|
||
const relationOptions = {
|
||
vuePid: this._$vuePid
|
||
};
|
||
initRelation2(this, relationOptions);
|
||
const mpInstance = this;
|
||
const isMiniProgramPage = isPage2(mpInstance);
|
||
let propsData = properties;
|
||
this.$vm = $createComponent({
|
||
type: vueOptions,
|
||
props: findPropsData(propsData, isMiniProgramPage)
|
||
}, {
|
||
mpType: isMiniProgramPage ? "page" : "component",
|
||
mpInstance,
|
||
slots: properties.uS || {},
|
||
// vueSlots
|
||
parentComponent: relationOptions.parent && relationOptions.parent.$,
|
||
onBeforeSetup(instance, options) {
|
||
initRefs(instance, mpInstance);
|
||
initMocks(instance, mpInstance, mocks2);
|
||
initComponentInstance(instance, options);
|
||
}
|
||
});
|
||
if (!isMiniProgramPage) {
|
||
initFormField(this.$vm);
|
||
}
|
||
},
|
||
ready() {
|
||
if (this.$vm) {
|
||
{
|
||
this.$vm.$callHook("mounted");
|
||
this.$vm.$callHook(ON_READY);
|
||
}
|
||
}
|
||
},
|
||
detached() {
|
||
if (this.$vm) {
|
||
pruneComponentPropsCache(this.$vm.$.uid);
|
||
$destroyComponent(this.$vm);
|
||
}
|
||
}
|
||
};
|
||
}
|
||
const mocks = ["__route__", "__wxExparserNodeId__", "__wxWebviewId__"];
|
||
function isPage(mpInstance) {
|
||
return !!mpInstance.route;
|
||
}
|
||
function initRelation(mpInstance, detail) {
|
||
mpInstance.triggerEvent("__l", detail);
|
||
}
|
||
function handleLink(event) {
|
||
const detail = event.detail || event.value;
|
||
const vuePid = detail.vuePid;
|
||
let parentVm;
|
||
if (vuePid) {
|
||
parentVm = findVmByVueId(this.$vm, vuePid);
|
||
}
|
||
if (!parentVm) {
|
||
parentVm = this.$vm;
|
||
}
|
||
detail.parent = parentVm;
|
||
}
|
||
var parseOptions = /* @__PURE__ */ Object.freeze({
|
||
__proto__: null,
|
||
handleLink,
|
||
initLifetimes,
|
||
initRelation,
|
||
isPage,
|
||
mocks
|
||
});
|
||
const createApp = initCreateApp();
|
||
const createPage = initCreatePage(parseOptions);
|
||
const createComponent = initCreateComponent(parseOptions);
|
||
const createPluginApp = initCreatePluginApp();
|
||
const createSubpackageApp = initCreateSubpackageApp();
|
||
{
|
||
wx.createApp = global.createApp = createApp;
|
||
wx.createPage = createPage;
|
||
wx.createComponent = createComponent;
|
||
wx.createPluginApp = global.createPluginApp = createPluginApp;
|
||
wx.createSubpackageApp = global.createSubpackageApp = createSubpackageApp;
|
||
}
|
||
const createHook = (lifecycle) => (hook, target = getCurrentInstance()) => {
|
||
!isInSSRComponentSetup && injectHook(lifecycle, hook, target);
|
||
};
|
||
const onShow = /* @__PURE__ */ createHook(ON_SHOW);
|
||
const onHide = /* @__PURE__ */ createHook(ON_HIDE);
|
||
const onLoad = /* @__PURE__ */ createHook(ON_LOAD);
|
||
const onReady = /* @__PURE__ */ createHook(ON_READY);
|
||
const onUnload = /* @__PURE__ */ createHook(ON_UNLOAD);
|
||
const onPageScroll = /* @__PURE__ */ createHook(ON_PAGE_SCROLL);
|
||
var isVue2 = false;
|
||
function set$1(target, key, val) {
|
||
if (Array.isArray(target)) {
|
||
target.length = Math.max(target.length, key);
|
||
target.splice(key, 1, val);
|
||
return val;
|
||
}
|
||
target[key] = val;
|
||
return val;
|
||
}
|
||
function del(target, key) {
|
||
if (Array.isArray(target)) {
|
||
target.splice(key, 1);
|
||
return;
|
||
}
|
||
delete target[key];
|
||
}
|
||
/*!
|
||
* pinia v2.3.0
|
||
* (c) 2024 Eduardo San Martin Morote
|
||
* @license MIT
|
||
*/
|
||
let activePinia;
|
||
const setActivePinia = (pinia) => activePinia = pinia;
|
||
const piniaSymbol = Symbol("pinia");
|
||
function isPlainObject$1(o2) {
|
||
return o2 && typeof o2 === "object" && Object.prototype.toString.call(o2) === "[object Object]" && typeof o2.toJSON !== "function";
|
||
}
|
||
var MutationType;
|
||
(function(MutationType2) {
|
||
MutationType2["direct"] = "direct";
|
||
MutationType2["patchObject"] = "patch object";
|
||
MutationType2["patchFunction"] = "patch function";
|
||
})(MutationType || (MutationType = {}));
|
||
const IS_CLIENT = typeof window !== "undefined";
|
||
const componentStateTypes = [];
|
||
const getStoreType = (id) => "🍍 " + id;
|
||
function addStoreToDevtools(app, store) {
|
||
if (!componentStateTypes.includes(getStoreType(store.$id))) {
|
||
componentStateTypes.push(getStoreType(store.$id));
|
||
}
|
||
}
|
||
function patchActionForGrouping(store, actionNames, wrapWithProxy) {
|
||
const actions = actionNames.reduce((storeActions, actionName) => {
|
||
storeActions[actionName] = toRaw(store)[actionName];
|
||
return storeActions;
|
||
}, {});
|
||
for (const actionName in actions) {
|
||
store[actionName] = function() {
|
||
const trackedStore = wrapWithProxy ? new Proxy(store, {
|
||
get(...args) {
|
||
return Reflect.get(...args);
|
||
},
|
||
set(...args) {
|
||
return Reflect.set(...args);
|
||
}
|
||
}) : store;
|
||
const retValue = actions[actionName].apply(trackedStore, arguments);
|
||
return retValue;
|
||
};
|
||
}
|
||
}
|
||
function devtoolsPlugin({ app, store, options }) {
|
||
if (store.$id.startsWith("__hot:")) {
|
||
return;
|
||
}
|
||
store._isOptionsAPI = !!options.state;
|
||
if (!store._p._testing) {
|
||
patchActionForGrouping(store, Object.keys(options.actions), store._isOptionsAPI);
|
||
const originalHotUpdate = store._hotUpdate;
|
||
toRaw(store)._hotUpdate = function(newStore) {
|
||
originalHotUpdate.apply(this, arguments);
|
||
patchActionForGrouping(store, Object.keys(newStore._hmrPayload.actions), !!store._isOptionsAPI);
|
||
};
|
||
}
|
||
addStoreToDevtools(
|
||
app,
|
||
// FIXME: is there a way to allow the assignment from Store<Id, S, G, A> to StoreGeneric?
|
||
store
|
||
);
|
||
}
|
||
function createPinia() {
|
||
const scope = effectScope(true);
|
||
const state = scope.run(() => ref({}));
|
||
let _p = [];
|
||
let toBeInstalled = [];
|
||
const pinia = markRaw({
|
||
install(app) {
|
||
setActivePinia(pinia);
|
||
{
|
||
pinia._a = app;
|
||
app.provide(piniaSymbol, pinia);
|
||
app.config.globalProperties.$pinia = pinia;
|
||
toBeInstalled.forEach((plugin2) => _p.push(plugin2));
|
||
toBeInstalled = [];
|
||
}
|
||
},
|
||
use(plugin2) {
|
||
if (!this._a && !isVue2) {
|
||
toBeInstalled.push(plugin2);
|
||
} else {
|
||
_p.push(plugin2);
|
||
}
|
||
return this;
|
||
},
|
||
_p,
|
||
// it's actually undefined here
|
||
// @ts-expect-error
|
||
_a: null,
|
||
_e: scope,
|
||
_s: /* @__PURE__ */ new Map(),
|
||
state
|
||
});
|
||
if (IS_CLIENT && typeof Proxy !== "undefined") {
|
||
pinia.use(devtoolsPlugin);
|
||
}
|
||
return pinia;
|
||
}
|
||
function patchObject(newState, oldState) {
|
||
for (const key in oldState) {
|
||
const subPatch = oldState[key];
|
||
if (!(key in newState)) {
|
||
continue;
|
||
}
|
||
const targetValue = newState[key];
|
||
if (isPlainObject$1(targetValue) && isPlainObject$1(subPatch) && !isRef(subPatch) && !isReactive(subPatch)) {
|
||
newState[key] = patchObject(targetValue, subPatch);
|
||
} else {
|
||
{
|
||
newState[key] = subPatch;
|
||
}
|
||
}
|
||
}
|
||
return newState;
|
||
}
|
||
const noop = () => {
|
||
};
|
||
function addSubscription(subscriptions, callback, detached, onCleanup = noop) {
|
||
subscriptions.push(callback);
|
||
const removeSubscription = () => {
|
||
const idx = subscriptions.indexOf(callback);
|
||
if (idx > -1) {
|
||
subscriptions.splice(idx, 1);
|
||
onCleanup();
|
||
}
|
||
};
|
||
if (!detached && getCurrentScope()) {
|
||
onScopeDispose(removeSubscription);
|
||
}
|
||
return removeSubscription;
|
||
}
|
||
function triggerSubscriptions(subscriptions, ...args) {
|
||
subscriptions.slice().forEach((callback) => {
|
||
callback(...args);
|
||
});
|
||
}
|
||
const fallbackRunWithContext = (fn) => fn();
|
||
const ACTION_MARKER = Symbol();
|
||
const ACTION_NAME = Symbol();
|
||
function mergeReactiveObjects(target, patchToApply) {
|
||
if (target instanceof Map && patchToApply instanceof Map) {
|
||
patchToApply.forEach((value2, key) => target.set(key, value2));
|
||
} else if (target instanceof Set && patchToApply instanceof Set) {
|
||
patchToApply.forEach(target.add, target);
|
||
}
|
||
for (const key in patchToApply) {
|
||
if (!patchToApply.hasOwnProperty(key))
|
||
continue;
|
||
const subPatch = patchToApply[key];
|
||
const targetValue = target[key];
|
||
if (isPlainObject$1(targetValue) && isPlainObject$1(subPatch) && target.hasOwnProperty(key) && !isRef(subPatch) && !isReactive(subPatch)) {
|
||
target[key] = mergeReactiveObjects(targetValue, subPatch);
|
||
} else {
|
||
target[key] = subPatch;
|
||
}
|
||
}
|
||
return target;
|
||
}
|
||
const skipHydrateSymbol = Symbol("pinia:skipHydration");
|
||
function shouldHydrate(obj) {
|
||
return !isPlainObject$1(obj) || !obj.hasOwnProperty(skipHydrateSymbol);
|
||
}
|
||
const { assign } = Object;
|
||
function isComputed(o2) {
|
||
return !!(isRef(o2) && o2.effect);
|
||
}
|
||
function createOptionsStore(id, options, pinia, hot) {
|
||
const { state, actions, getters } = options;
|
||
const initialState = pinia.state.value[id];
|
||
let store;
|
||
function setup() {
|
||
if (!initialState && !hot) {
|
||
{
|
||
pinia.state.value[id] = state ? state() : {};
|
||
}
|
||
}
|
||
const localState = hot ? (
|
||
// use ref() to unwrap refs inside state TODO: check if this is still necessary
|
||
toRefs(ref(state ? state() : {}).value)
|
||
) : toRefs(pinia.state.value[id]);
|
||
return assign(localState, actions, Object.keys(getters || {}).reduce((computedGetters, name) => {
|
||
if (name in localState) {
|
||
console.warn(`[🍍]: A getter cannot have the same name as another state property. Rename one of them. Found with "${name}" in store "${id}".`);
|
||
}
|
||
computedGetters[name] = markRaw(computed(() => {
|
||
setActivePinia(pinia);
|
||
const store2 = pinia._s.get(id);
|
||
return getters[name].call(store2, store2);
|
||
}));
|
||
return computedGetters;
|
||
}, {}));
|
||
}
|
||
store = createSetupStore(id, setup, options, pinia, hot, true);
|
||
return store;
|
||
}
|
||
function createSetupStore($id, setup, options = {}, pinia, hot, isOptionsStore) {
|
||
let scope;
|
||
const optionsForPlugin = assign({ actions: {} }, options);
|
||
if (!pinia._e.active) {
|
||
throw new Error("Pinia destroyed");
|
||
}
|
||
const $subscribeOptions = { deep: true };
|
||
{
|
||
$subscribeOptions.onTrigger = (event) => {
|
||
if (isListening) {
|
||
debuggerEvents = event;
|
||
} else if (isListening == false && !store._hotUpdating) {
|
||
if (Array.isArray(debuggerEvents)) {
|
||
debuggerEvents.push(event);
|
||
} else {
|
||
console.error("🍍 debuggerEvents should be an array. This is most likely an internal Pinia bug.");
|
||
}
|
||
}
|
||
};
|
||
}
|
||
let isListening;
|
||
let isSyncListening;
|
||
let subscriptions = [];
|
||
let actionSubscriptions = [];
|
||
let debuggerEvents;
|
||
const initialState = pinia.state.value[$id];
|
||
if (!isOptionsStore && !initialState && !hot) {
|
||
{
|
||
pinia.state.value[$id] = {};
|
||
}
|
||
}
|
||
const hotState = ref({});
|
||
let activeListener;
|
||
function $patch(partialStateOrMutator) {
|
||
let subscriptionMutation;
|
||
isListening = isSyncListening = false;
|
||
{
|
||
debuggerEvents = [];
|
||
}
|
||
if (typeof partialStateOrMutator === "function") {
|
||
partialStateOrMutator(pinia.state.value[$id]);
|
||
subscriptionMutation = {
|
||
type: MutationType.patchFunction,
|
||
storeId: $id,
|
||
events: debuggerEvents
|
||
};
|
||
} else {
|
||
mergeReactiveObjects(pinia.state.value[$id], partialStateOrMutator);
|
||
subscriptionMutation = {
|
||
type: MutationType.patchObject,
|
||
payload: partialStateOrMutator,
|
||
storeId: $id,
|
||
events: debuggerEvents
|
||
};
|
||
}
|
||
const myListenerId = activeListener = Symbol();
|
||
nextTick$1().then(() => {
|
||
if (activeListener === myListenerId) {
|
||
isListening = true;
|
||
}
|
||
});
|
||
isSyncListening = true;
|
||
triggerSubscriptions(subscriptions, subscriptionMutation, pinia.state.value[$id]);
|
||
}
|
||
const $reset = isOptionsStore ? function $reset2() {
|
||
const { state } = options;
|
||
const newState = state ? state() : {};
|
||
this.$patch(($state) => {
|
||
assign($state, newState);
|
||
});
|
||
} : (
|
||
/* istanbul ignore next */
|
||
() => {
|
||
throw new Error(`🍍: Store "${$id}" is built using the setup syntax and does not implement $reset().`);
|
||
}
|
||
);
|
||
function $dispose() {
|
||
scope.stop();
|
||
subscriptions = [];
|
||
actionSubscriptions = [];
|
||
pinia._s.delete($id);
|
||
}
|
||
const action = (fn, name = "") => {
|
||
if (ACTION_MARKER in fn) {
|
||
fn[ACTION_NAME] = name;
|
||
return fn;
|
||
}
|
||
const wrappedAction = function() {
|
||
setActivePinia(pinia);
|
||
const args = Array.from(arguments);
|
||
const afterCallbackList = [];
|
||
const onErrorCallbackList = [];
|
||
function after(callback) {
|
||
afterCallbackList.push(callback);
|
||
}
|
||
function onError(callback) {
|
||
onErrorCallbackList.push(callback);
|
||
}
|
||
triggerSubscriptions(actionSubscriptions, {
|
||
args,
|
||
name: wrappedAction[ACTION_NAME],
|
||
store,
|
||
after,
|
||
onError
|
||
});
|
||
let ret;
|
||
try {
|
||
ret = fn.apply(this && this.$id === $id ? this : store, args);
|
||
} catch (error2) {
|
||
triggerSubscriptions(onErrorCallbackList, error2);
|
||
throw error2;
|
||
}
|
||
if (ret instanceof Promise) {
|
||
return ret.then((value2) => {
|
||
triggerSubscriptions(afterCallbackList, value2);
|
||
return value2;
|
||
}).catch((error2) => {
|
||
triggerSubscriptions(onErrorCallbackList, error2);
|
||
return Promise.reject(error2);
|
||
});
|
||
}
|
||
triggerSubscriptions(afterCallbackList, ret);
|
||
return ret;
|
||
};
|
||
wrappedAction[ACTION_MARKER] = true;
|
||
wrappedAction[ACTION_NAME] = name;
|
||
return wrappedAction;
|
||
};
|
||
const _hmrPayload = /* @__PURE__ */ markRaw({
|
||
actions: {},
|
||
getters: {},
|
||
state: [],
|
||
hotState
|
||
});
|
||
const partialStore = {
|
||
_p: pinia,
|
||
// _s: scope,
|
||
$id,
|
||
$onAction: addSubscription.bind(null, actionSubscriptions),
|
||
$patch,
|
||
$reset,
|
||
$subscribe(callback, options2 = {}) {
|
||
const removeSubscription = addSubscription(subscriptions, callback, options2.detached, () => stopWatcher());
|
||
const stopWatcher = scope.run(() => watch(() => pinia.state.value[$id], (state) => {
|
||
if (options2.flush === "sync" ? isSyncListening : isListening) {
|
||
callback({
|
||
storeId: $id,
|
||
type: MutationType.direct,
|
||
events: debuggerEvents
|
||
}, state);
|
||
}
|
||
}, assign({}, $subscribeOptions, options2)));
|
||
return removeSubscription;
|
||
},
|
||
$dispose
|
||
};
|
||
const store = reactive(assign(
|
||
{
|
||
_hmrPayload,
|
||
_customProperties: markRaw(/* @__PURE__ */ new Set())
|
||
// devtools custom properties
|
||
},
|
||
partialStore
|
||
// must be added later
|
||
// setupStore
|
||
));
|
||
pinia._s.set($id, store);
|
||
const runWithContext = pinia._a && pinia._a.runWithContext || fallbackRunWithContext;
|
||
const setupStore = runWithContext(() => pinia._e.run(() => (scope = effectScope()).run(() => setup({ action }))));
|
||
for (const key in setupStore) {
|
||
const prop = setupStore[key];
|
||
if (isRef(prop) && !isComputed(prop) || isReactive(prop)) {
|
||
if (hot) {
|
||
set$1(hotState.value, key, toRef(setupStore, key));
|
||
} else if (!isOptionsStore) {
|
||
if (initialState && shouldHydrate(prop)) {
|
||
if (isRef(prop)) {
|
||
prop.value = initialState[key];
|
||
} else {
|
||
mergeReactiveObjects(prop, initialState[key]);
|
||
}
|
||
}
|
||
{
|
||
pinia.state.value[$id][key] = prop;
|
||
}
|
||
}
|
||
{
|
||
_hmrPayload.state.push(key);
|
||
}
|
||
} else if (typeof prop === "function") {
|
||
const actionValue = hot ? prop : action(prop, key);
|
||
{
|
||
setupStore[key] = actionValue;
|
||
}
|
||
{
|
||
_hmrPayload.actions[key] = prop;
|
||
}
|
||
optionsForPlugin.actions[key] = prop;
|
||
} else {
|
||
if (isComputed(prop)) {
|
||
_hmrPayload.getters[key] = isOptionsStore ? (
|
||
// @ts-expect-error
|
||
options.getters[key]
|
||
) : prop;
|
||
if (IS_CLIENT) {
|
||
const getters = setupStore._getters || // @ts-expect-error: same
|
||
(setupStore._getters = markRaw([]));
|
||
getters.push(key);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
{
|
||
assign(store, setupStore);
|
||
assign(toRaw(store), setupStore);
|
||
}
|
||
Object.defineProperty(store, "$state", {
|
||
get: () => hot ? hotState.value : pinia.state.value[$id],
|
||
set: (state) => {
|
||
if (hot) {
|
||
throw new Error("cannot set hotState");
|
||
}
|
||
$patch(($state) => {
|
||
assign($state, state);
|
||
});
|
||
}
|
||
});
|
||
{
|
||
store._hotUpdate = markRaw((newStore) => {
|
||
store._hotUpdating = true;
|
||
newStore._hmrPayload.state.forEach((stateKey) => {
|
||
if (stateKey in store.$state) {
|
||
const newStateTarget = newStore.$state[stateKey];
|
||
const oldStateSource = store.$state[stateKey];
|
||
if (typeof newStateTarget === "object" && isPlainObject$1(newStateTarget) && isPlainObject$1(oldStateSource)) {
|
||
patchObject(newStateTarget, oldStateSource);
|
||
} else {
|
||
newStore.$state[stateKey] = oldStateSource;
|
||
}
|
||
}
|
||
set$1(store, stateKey, toRef(newStore.$state, stateKey));
|
||
});
|
||
Object.keys(store.$state).forEach((stateKey) => {
|
||
if (!(stateKey in newStore.$state)) {
|
||
del(store, stateKey);
|
||
}
|
||
});
|
||
isListening = false;
|
||
isSyncListening = false;
|
||
pinia.state.value[$id] = toRef(newStore._hmrPayload, "hotState");
|
||
isSyncListening = true;
|
||
nextTick$1().then(() => {
|
||
isListening = true;
|
||
});
|
||
for (const actionName in newStore._hmrPayload.actions) {
|
||
const actionFn = newStore[actionName];
|
||
set$1(store, actionName, action(actionFn, actionName));
|
||
}
|
||
for (const getterName in newStore._hmrPayload.getters) {
|
||
const getter = newStore._hmrPayload.getters[getterName];
|
||
const getterValue = isOptionsStore ? (
|
||
// special handling of options api
|
||
computed(() => {
|
||
setActivePinia(pinia);
|
||
return getter.call(store, store);
|
||
})
|
||
) : getter;
|
||
set$1(store, getterName, getterValue);
|
||
}
|
||
Object.keys(store._hmrPayload.getters).forEach((key) => {
|
||
if (!(key in newStore._hmrPayload.getters)) {
|
||
del(store, key);
|
||
}
|
||
});
|
||
Object.keys(store._hmrPayload.actions).forEach((key) => {
|
||
if (!(key in newStore._hmrPayload.actions)) {
|
||
del(store, key);
|
||
}
|
||
});
|
||
store._hmrPayload = newStore._hmrPayload;
|
||
store._getters = newStore._getters;
|
||
store._hotUpdating = false;
|
||
});
|
||
}
|
||
if (IS_CLIENT) {
|
||
const nonEnumerable = {
|
||
writable: true,
|
||
configurable: true,
|
||
// avoid warning on devtools trying to display this property
|
||
enumerable: false
|
||
};
|
||
["_p", "_hmrPayload", "_getters", "_customProperties"].forEach((p2) => {
|
||
Object.defineProperty(store, p2, assign({ value: store[p2] }, nonEnumerable));
|
||
});
|
||
}
|
||
pinia._p.forEach((extender) => {
|
||
if (IS_CLIENT) {
|
||
const extensions = scope.run(() => extender({
|
||
store,
|
||
app: pinia._a,
|
||
pinia,
|
||
options: optionsForPlugin
|
||
}));
|
||
Object.keys(extensions || {}).forEach((key) => store._customProperties.add(key));
|
||
assign(store, extensions);
|
||
} else {
|
||
assign(store, scope.run(() => extender({
|
||
store,
|
||
app: pinia._a,
|
||
pinia,
|
||
options: optionsForPlugin
|
||
})));
|
||
}
|
||
});
|
||
if (store.$state && typeof store.$state === "object" && typeof store.$state.constructor === "function" && !store.$state.constructor.toString().includes("[native code]")) {
|
||
console.warn(`[🍍]: The "state" must be a plain object. It cannot be
|
||
state: () => new MyClass()
|
||
Found in store "${store.$id}".`);
|
||
}
|
||
if (initialState && isOptionsStore && options.hydrate) {
|
||
options.hydrate(store.$state, initialState);
|
||
}
|
||
isListening = true;
|
||
isSyncListening = true;
|
||
return store;
|
||
}
|
||
/*! #__NO_SIDE_EFFECTS__ */
|
||
// @__NO_SIDE_EFFECTS__
|
||
function defineStore(idOrOptions, setup, setupOptions) {
|
||
let id;
|
||
let options;
|
||
const isSetupStore = typeof setup === "function";
|
||
if (typeof idOrOptions === "string") {
|
||
id = idOrOptions;
|
||
options = isSetupStore ? setupOptions : setup;
|
||
} else {
|
||
options = idOrOptions;
|
||
id = idOrOptions.id;
|
||
if (typeof id !== "string") {
|
||
throw new Error(`[🍍]: "defineStore()" must be passed a store id as its first argument.`);
|
||
}
|
||
}
|
||
function useStore(pinia, hot) {
|
||
const hasContext = hasInjectionContext();
|
||
pinia = // in test mode, ignore the argument provided as we can always retrieve a
|
||
// pinia instance with getActivePinia()
|
||
pinia || (hasContext ? inject(piniaSymbol, null) : null);
|
||
if (pinia)
|
||
setActivePinia(pinia);
|
||
if (!activePinia) {
|
||
throw new Error(`[🍍]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"?
|
||
See https://pinia.vuejs.org/core-concepts/outside-component-usage.html for help.
|
||
This will fail in production.`);
|
||
}
|
||
pinia = activePinia;
|
||
if (!pinia._s.has(id)) {
|
||
if (isSetupStore) {
|
||
createSetupStore(id, setup, options, pinia);
|
||
} else {
|
||
createOptionsStore(id, options, pinia);
|
||
}
|
||
{
|
||
useStore._pinia = pinia;
|
||
}
|
||
}
|
||
const store = pinia._s.get(id);
|
||
if (hot) {
|
||
const hotId = "__hot:" + id;
|
||
const newStore = isSetupStore ? createSetupStore(hotId, setup, options, pinia, true) : createOptionsStore(hotId, assign({}, options), pinia, true);
|
||
hot._hotUpdate(newStore);
|
||
delete pinia.state.value[hotId];
|
||
pinia._s.delete(hotId);
|
||
}
|
||
if (IS_CLIENT) {
|
||
const currentInstance2 = getCurrentInstance();
|
||
if (currentInstance2 && currentInstance2.proxy && // avoid adding stores that are just built for hot module replacement
|
||
!hot) {
|
||
const vm = currentInstance2.proxy;
|
||
const cache = "_pStores" in vm ? vm._pStores : vm._pStores = {};
|
||
cache[id] = store;
|
||
}
|
||
}
|
||
return store;
|
||
}
|
||
useStore.$id = id;
|
||
return useStore;
|
||
}
|
||
function storeToRefs(store) {
|
||
{
|
||
const rawStore = toRaw(store);
|
||
const refs = {};
|
||
for (const key in rawStore) {
|
||
const value2 = rawStore[key];
|
||
if (value2.effect) {
|
||
refs[key] = // ...
|
||
computed({
|
||
get: () => store[key],
|
||
set(value22) {
|
||
store[key] = value22;
|
||
}
|
||
});
|
||
} else if (isRef(value2) || isReactive(value2)) {
|
||
refs[key] = // ---
|
||
toRef(store, key);
|
||
}
|
||
}
|
||
return refs;
|
||
}
|
||
}
|
||
const defineMixin = (options) => {
|
||
return options;
|
||
};
|
||
function email(value2) {
|
||
return /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/.test(value2);
|
||
}
|
||
function mobile(value2) {
|
||
return /^1[23456789]\d{9}$/.test(value2);
|
||
}
|
||
function url(value2) {
|
||
return /^((https|http|ftp|rtsp|mms):\/\/)(([0-9a-zA-Z_!~*'().&=+$%-]+: )?[0-9a-zA-Z_!~*'().&=+$%-]+@)?(([0-9]{1,3}.){3}[0-9]{1,3}|([0-9a-zA-Z_!~*'()-]+.)*([0-9a-zA-Z][0-9a-zA-Z-]{0,61})?[0-9a-zA-Z].[a-zA-Z]{2,6})(:[0-9]{1,4})?((\/?)|(\/[0-9a-zA-Z_!~*'().;?:@&=+$,%#-]+)+\/?)$/.test(value2);
|
||
}
|
||
function date$1(value2) {
|
||
if (!value2)
|
||
return false;
|
||
if (typeof value2 === "number") {
|
||
if (value2.toString().length !== 10 && value2.toString().length !== 13) {
|
||
return false;
|
||
}
|
||
return !isNaN(new Date(value2).getTime());
|
||
}
|
||
if (typeof value2 === "string") {
|
||
const numV = Number(value2);
|
||
if (!isNaN(numV)) {
|
||
if (numV.toString().length === 10 || numV.toString().length === 13) {
|
||
return !isNaN(new Date(numV).getTime());
|
||
}
|
||
}
|
||
if (value2.length < 10 || value2.length > 19) {
|
||
return false;
|
||
}
|
||
const dateRegex = /^\d{4}[-\/]\d{2}[-\/]\d{2}( \d{1,2}:\d{2}(:\d{2})?)?$/;
|
||
if (!dateRegex.test(value2)) {
|
||
return false;
|
||
}
|
||
const dateValue = new Date(value2);
|
||
return !isNaN(dateValue.getTime());
|
||
}
|
||
return false;
|
||
}
|
||
function dateISO(value2) {
|
||
return /^\d{4}[\/\-](0?[1-9]|1[012])[\/\-](0?[1-9]|[12][0-9]|3[01])$/.test(value2);
|
||
}
|
||
function number$1(value2) {
|
||
return /^[\+-]?(\d+\.?\d*|\.\d+|\d\.\d+e\+\d+)$/.test(value2);
|
||
}
|
||
function string$1(value2) {
|
||
return typeof value2 === "string";
|
||
}
|
||
function digits(value2) {
|
||
return /^\d+$/.test(value2);
|
||
}
|
||
function idCard(value2) {
|
||
return /^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/.test(
|
||
value2
|
||
);
|
||
}
|
||
function carNo(value2) {
|
||
const xreg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
|
||
const creg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9挂学警港澳]{1}$/;
|
||
if (value2.length === 7) {
|
||
return creg.test(value2);
|
||
}
|
||
if (value2.length === 8) {
|
||
return xreg.test(value2);
|
||
}
|
||
return false;
|
||
}
|
||
function amount(value2) {
|
||
return /^[1-9]\d*(,\d{3})*(\.\d{1,2})?$|^0\.\d{1,2}$/.test(value2);
|
||
}
|
||
function chinese(value2) {
|
||
const reg = /^[\u4e00-\u9fa5]+$/gi;
|
||
return reg.test(value2);
|
||
}
|
||
function letter(value2) {
|
||
return /^[a-zA-Z]*$/.test(value2);
|
||
}
|
||
function enOrNum(value2) {
|
||
const reg = /^[0-9a-zA-Z]*$/g;
|
||
return reg.test(value2);
|
||
}
|
||
function contains(value2, param) {
|
||
return value2.indexOf(param) >= 0;
|
||
}
|
||
function range$2(value2, param) {
|
||
return value2 >= param[0] && value2 <= param[1];
|
||
}
|
||
function rangeLength(value2, param) {
|
||
return value2.length >= param[0] && value2.length <= param[1];
|
||
}
|
||
function landline(value2) {
|
||
const reg = /^\d{3,4}-\d{7,8}(-\d{3,4})?$/;
|
||
return reg.test(value2);
|
||
}
|
||
function empty(value2) {
|
||
switch (typeof value2) {
|
||
case "undefined":
|
||
return true;
|
||
case "string":
|
||
if (value2.replace(/(^[ \t\n\r]*)|([ \t\n\r]*$)/g, "").length == 0)
|
||
return true;
|
||
break;
|
||
case "boolean":
|
||
if (!value2)
|
||
return true;
|
||
break;
|
||
case "number":
|
||
if (value2 === 0 || isNaN(value2))
|
||
return true;
|
||
break;
|
||
case "object":
|
||
if (value2 === null || value2.length === 0)
|
||
return true;
|
||
for (const i in value2) {
|
||
return false;
|
||
}
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function jsonString(value2) {
|
||
if (typeof value2 === "string") {
|
||
try {
|
||
const obj = JSON.parse(value2);
|
||
if (typeof obj === "object" && obj) {
|
||
return true;
|
||
}
|
||
return false;
|
||
} catch (e2) {
|
||
return false;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
function array$1(value2) {
|
||
if (typeof Array.isArray === "function") {
|
||
return Array.isArray(value2);
|
||
}
|
||
return Object.prototype.toString.call(value2) === "[object Array]";
|
||
}
|
||
function object$1(value2) {
|
||
return Object.prototype.toString.call(value2) === "[object Object]";
|
||
}
|
||
function code(value2, len = 6) {
|
||
return new RegExp(`^\\d{${len}}$`).test(value2);
|
||
}
|
||
function func(value2) {
|
||
return typeof value2 === "function";
|
||
}
|
||
function promise(value2) {
|
||
return object$1(value2) && func(value2.then) && func(value2.catch);
|
||
}
|
||
function image(value2) {
|
||
const newValue = value2.split("?")[0];
|
||
const IMAGE_REGEXP = /\.(jpeg|jpg|gif|png|svg|webp|jfif|bmp|dpg)/i;
|
||
return IMAGE_REGEXP.test(newValue);
|
||
}
|
||
function video(value2) {
|
||
const VIDEO_REGEXP = /\.(mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|m3u8)/i;
|
||
return VIDEO_REGEXP.test(value2);
|
||
}
|
||
function regExp(o2) {
|
||
return o2 && Object.prototype.toString.call(o2) === "[object RegExp]";
|
||
}
|
||
const test = {
|
||
email,
|
||
mobile,
|
||
url,
|
||
date: date$1,
|
||
dateISO,
|
||
number: number$1,
|
||
digits,
|
||
idCard,
|
||
carNo,
|
||
amount,
|
||
chinese,
|
||
letter,
|
||
enOrNum,
|
||
contains,
|
||
range: range$2,
|
||
rangeLength,
|
||
empty,
|
||
isEmpty: empty,
|
||
jsonString,
|
||
landline,
|
||
object: object$1,
|
||
array: array$1,
|
||
code,
|
||
func,
|
||
promise,
|
||
video,
|
||
image,
|
||
regExp,
|
||
string: string$1
|
||
};
|
||
function strip(num, precision = 15) {
|
||
return +parseFloat(Number(num).toPrecision(precision));
|
||
}
|
||
function digitLength(num) {
|
||
const eSplit = num.toString().split(/[eE]/);
|
||
const len = (eSplit[0].split(".")[1] || "").length - +(eSplit[1] || 0);
|
||
return len > 0 ? len : 0;
|
||
}
|
||
function float2Fixed(num) {
|
||
if (num.toString().indexOf("e") === -1) {
|
||
return Number(num.toString().replace(".", ""));
|
||
}
|
||
const dLen = digitLength(num);
|
||
return dLen > 0 ? strip(Number(num) * Math.pow(10, dLen)) : Number(num);
|
||
}
|
||
function checkBoundary(num) {
|
||
{
|
||
if (num > Number.MAX_SAFE_INTEGER || num < Number.MIN_SAFE_INTEGER) {
|
||
console.warn(`${num} 超出了精度限制,结果可能不正确`);
|
||
}
|
||
}
|
||
}
|
||
function iteratorOperation(arr, operation) {
|
||
const [num1, num2, ...others] = arr;
|
||
let res = operation(num1, num2);
|
||
others.forEach((num) => {
|
||
res = operation(res, num);
|
||
});
|
||
return res;
|
||
}
|
||
function times(...nums) {
|
||
if (nums.length > 2) {
|
||
return iteratorOperation(nums, times);
|
||
}
|
||
const [num1, num2] = nums;
|
||
const num1Changed = float2Fixed(num1);
|
||
const num2Changed = float2Fixed(num2);
|
||
const baseNum = digitLength(num1) + digitLength(num2);
|
||
const leftValue = num1Changed * num2Changed;
|
||
checkBoundary(leftValue);
|
||
return leftValue / Math.pow(10, baseNum);
|
||
}
|
||
function divide(...nums) {
|
||
if (nums.length > 2) {
|
||
return iteratorOperation(nums, divide);
|
||
}
|
||
const [num1, num2] = nums;
|
||
const num1Changed = float2Fixed(num1);
|
||
const num2Changed = float2Fixed(num2);
|
||
checkBoundary(num1Changed);
|
||
checkBoundary(num2Changed);
|
||
return times(num1Changed / num2Changed, strip(Math.pow(10, digitLength(num2) - digitLength(num1))));
|
||
}
|
||
function round(num, ratio) {
|
||
const base = Math.pow(10, ratio);
|
||
let result = divide(Math.round(Math.abs(times(num, base))), base);
|
||
if (num < 0 && result !== 0) {
|
||
result = times(result, -1);
|
||
}
|
||
return result;
|
||
}
|
||
const version = "3";
|
||
{
|
||
console.log(`
|
||
%c uview-plus V${version} %c https://ijry.github.io/uview-plus/
|
||
|
||
`, "color: #ffffff; background: #3c9cff; padding:5px 0;", "color: #3c9cff;background: #ffffff; padding:5px 0;");
|
||
}
|
||
const config = {
|
||
v: version,
|
||
version,
|
||
// 主题名称
|
||
type: [
|
||
"primary",
|
||
"success",
|
||
"info",
|
||
"error",
|
||
"warning"
|
||
],
|
||
// 颜色部分,本来可以通过scss的:export导出供js使用,但是奈何nvue不支持
|
||
color: {
|
||
"u-primary": "#2979ff",
|
||
"u-warning": "#ff9900",
|
||
"u-success": "#19be6b",
|
||
"u-error": "#fa3534",
|
||
"u-info": "#909399",
|
||
"u-main-color": "#303133",
|
||
"u-content-color": "#606266",
|
||
"u-tips-color": "#909399",
|
||
"u-light-color": "#c0c4cc",
|
||
"up-primary": "#2979ff",
|
||
"up-warning": "#ff9900",
|
||
"up-success": "#19be6b",
|
||
"up-error": "#fa3534",
|
||
"up-info": "#909399",
|
||
"up-main-color": "#303133",
|
||
"up-content-color": "#606266",
|
||
"up-tips-color": "#909399",
|
||
"up-light-color": "#c0c4cc"
|
||
},
|
||
// 默认单位,可以通过配置为rpx,那么在用于传入组件大小参数为数值时,就默认为rpx
|
||
unit: "px"
|
||
};
|
||
function range$1(min = 0, max = 0, value2 = 0) {
|
||
return Math.max(min, Math.min(max, Number(value2)));
|
||
}
|
||
function getPx(value2, unit = false) {
|
||
if (number$1(value2)) {
|
||
return unit ? `${value2}px` : Number(value2);
|
||
}
|
||
if (/(rpx|upx)$/.test(value2)) {
|
||
return unit ? `${index$2.upx2px(parseInt(value2))}px` : Number(index$2.upx2px(parseInt(value2)));
|
||
}
|
||
return unit ? `${parseInt(value2)}px` : parseInt(value2);
|
||
}
|
||
function sleep(value2 = 30) {
|
||
return new Promise((resolve2) => {
|
||
setTimeout(() => {
|
||
resolve2();
|
||
}, value2);
|
||
});
|
||
}
|
||
function os() {
|
||
return index$2.getSystemInfoSync().platform.toLowerCase();
|
||
}
|
||
function sys() {
|
||
return index$2.getSystemInfoSync();
|
||
}
|
||
function random(min, max) {
|
||
if (min >= 0 && max > 0 && max >= min) {
|
||
const gab = max - min + 1;
|
||
return Math.floor(Math.random() * gab + min);
|
||
}
|
||
return 0;
|
||
}
|
||
function guid(len = 32, firstU = true, radix = null) {
|
||
const chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split("");
|
||
const uuid = [];
|
||
radix = radix || chars.length;
|
||
if (len) {
|
||
for (let i = 0; i < len; i++)
|
||
uuid[i] = chars[0 | Math.random() * radix];
|
||
} else {
|
||
let r2;
|
||
uuid[8] = uuid[13] = uuid[18] = uuid[23] = "-";
|
||
uuid[14] = "4";
|
||
for (let i = 0; i < 36; i++) {
|
||
if (!uuid[i]) {
|
||
r2 = 0 | Math.random() * 16;
|
||
uuid[i] = chars[i == 19 ? r2 & 3 | 8 : r2];
|
||
}
|
||
}
|
||
}
|
||
if (firstU) {
|
||
uuid.shift();
|
||
return `u${uuid.join("")}`;
|
||
}
|
||
return uuid.join("");
|
||
}
|
||
function $parent(name = void 0) {
|
||
let parent = this.$parent;
|
||
while (parent) {
|
||
name = name.replace(/up-([a-zA-Z0-9-_]+)/g, "u-$1");
|
||
if (parent.$options && parent.$options.name !== name) {
|
||
parent = parent.$parent;
|
||
} else {
|
||
return parent;
|
||
}
|
||
}
|
||
return false;
|
||
}
|
||
function addStyle(customStyle, target = "object") {
|
||
if (empty(customStyle) || typeof customStyle === "object" && target === "object" || target === "string" && typeof customStyle === "string") {
|
||
return customStyle;
|
||
}
|
||
if (target === "object") {
|
||
customStyle = trim$1(customStyle);
|
||
const styleArray = customStyle.split(";");
|
||
const style = {};
|
||
for (let i = 0; i < styleArray.length; i++) {
|
||
if (styleArray[i]) {
|
||
const item = styleArray[i].split(":");
|
||
style[trim$1(item[0])] = trim$1(item[1]);
|
||
}
|
||
}
|
||
return style;
|
||
}
|
||
let string2 = "";
|
||
if (typeof customStyle === "object") {
|
||
customStyle.forEach((val, i) => {
|
||
const key = i.replace(/([A-Z])/g, "-$1").toLowerCase();
|
||
string2 += `${key}:${val};`;
|
||
});
|
||
}
|
||
return trim$1(string2);
|
||
}
|
||
function addUnit(value2 = "auto", unit = "") {
|
||
if (!unit) {
|
||
unit = config.unit || "px";
|
||
}
|
||
if (unit == "rpx" && number$1(String(value2))) {
|
||
value2 = value2 * 2;
|
||
}
|
||
value2 = String(value2);
|
||
return number$1(value2) ? `${value2}${unit}` : value2;
|
||
}
|
||
function deepClone(obj) {
|
||
if ([null, void 0, NaN, false].includes(obj))
|
||
return obj;
|
||
if (typeof obj !== "object" && typeof obj !== "function") {
|
||
return obj;
|
||
}
|
||
const o2 = array$1(obj) ? [] : {};
|
||
for (const i in obj) {
|
||
if (obj.hasOwnProperty(i)) {
|
||
o2[i] = typeof obj[i] === "object" ? deepClone(obj[i]) : obj[i];
|
||
}
|
||
}
|
||
return o2;
|
||
}
|
||
function deepMerge$2(targetOrigin = {}, source = {}) {
|
||
let target = deepClone(targetOrigin);
|
||
if (typeof target !== "object" || typeof source !== "object")
|
||
return false;
|
||
for (const prop in source) {
|
||
if (!source.hasOwnProperty(prop))
|
||
continue;
|
||
if (prop in target) {
|
||
if (source[prop] == null) {
|
||
target[prop] = source[prop];
|
||
} else if (typeof target[prop] !== "object") {
|
||
target[prop] = source[prop];
|
||
} else if (typeof source[prop] !== "object") {
|
||
target[prop] = source[prop];
|
||
} else if (target[prop].concat && source[prop].concat) {
|
||
target[prop] = target[prop].concat(source[prop]);
|
||
} else {
|
||
target[prop] = deepMerge$2(target[prop], source[prop]);
|
||
}
|
||
} else {
|
||
target[prop] = source[prop];
|
||
}
|
||
}
|
||
return target;
|
||
}
|
||
function shallowMerge(target, source = {}) {
|
||
if (typeof target !== "object" || typeof source !== "object")
|
||
return false;
|
||
for (const prop in source) {
|
||
if (!source.hasOwnProperty(prop))
|
||
continue;
|
||
if (prop in target) {
|
||
if (source[prop] == null) {
|
||
target[prop] = source[prop];
|
||
} else if (typeof target[prop] !== "object") {
|
||
target[prop] = source[prop];
|
||
} else if (typeof source[prop] !== "object") {
|
||
target[prop] = source[prop];
|
||
} else if (target[prop].concat && source[prop].concat) {
|
||
target[prop] = target[prop].concat(source[prop]);
|
||
} else {
|
||
target[prop] = shallowMerge(target[prop], source[prop]);
|
||
}
|
||
} else {
|
||
target[prop] = source[prop];
|
||
}
|
||
}
|
||
return target;
|
||
}
|
||
function error(err) {
|
||
{
|
||
console.error(`uView提示:${err}`);
|
||
}
|
||
}
|
||
function randomArray(array2 = []) {
|
||
return array2.sort(() => Math.random() - 0.5);
|
||
}
|
||
if (!String.prototype.padStart) {
|
||
String.prototype.padStart = function(maxLength, fillString = " ") {
|
||
if (Object.prototype.toString.call(fillString) !== "[object String]") {
|
||
throw new TypeError(
|
||
"fillString must be String"
|
||
);
|
||
}
|
||
const str = this;
|
||
if (str.length >= maxLength)
|
||
return String(str);
|
||
const fillLength = maxLength - str.length;
|
||
let times2 = Math.ceil(fillLength / fillString.length);
|
||
while (times2 >>= 1) {
|
||
fillString += fillString;
|
||
if (times2 === 1) {
|
||
fillString += fillString;
|
||
}
|
||
}
|
||
return fillString.slice(0, fillLength) + str;
|
||
};
|
||
}
|
||
function timeFormat(dateTime = null, formatStr = "yyyy-mm-dd") {
|
||
let date2;
|
||
if (!dateTime) {
|
||
date2 = /* @__PURE__ */ new Date();
|
||
} else if (/^\d{10}$/.test(dateTime.toString().trim())) {
|
||
date2 = new Date(dateTime * 1e3);
|
||
} else if (typeof dateTime === "string" && /^\d+$/.test(dateTime.trim())) {
|
||
date2 = new Date(Number(dateTime));
|
||
} else {
|
||
date2 = new Date(
|
||
typeof dateTime === "string" ? dateTime.replace(/-/g, "/") : dateTime
|
||
);
|
||
}
|
||
const timeSource = {
|
||
"y": date2.getFullYear().toString(),
|
||
// 年
|
||
"m": (date2.getMonth() + 1).toString().padStart(2, "0"),
|
||
// 月
|
||
"d": date2.getDate().toString().padStart(2, "0"),
|
||
// 日
|
||
"h": date2.getHours().toString().padStart(2, "0"),
|
||
// 时
|
||
"M": date2.getMinutes().toString().padStart(2, "0"),
|
||
// 分
|
||
"s": date2.getSeconds().toString().padStart(2, "0")
|
||
// 秒
|
||
// 有其他格式化字符需求可以继续添加,必须转化成字符串
|
||
};
|
||
for (const key in timeSource) {
|
||
const [ret] = new RegExp(`${key}+`).exec(formatStr) || [];
|
||
if (ret) {
|
||
const beginIndex = key === "y" && ret.length === 2 ? 2 : 0;
|
||
formatStr = formatStr.replace(ret, timeSource[key].slice(beginIndex));
|
||
}
|
||
}
|
||
return formatStr;
|
||
}
|
||
function timeFrom(timestamp = null, format2 = "yyyy-mm-dd") {
|
||
if (timestamp == null)
|
||
timestamp = Number(/* @__PURE__ */ new Date());
|
||
timestamp = parseInt(timestamp);
|
||
if (timestamp.toString().length == 10)
|
||
timestamp *= 1e3;
|
||
let timer = (/* @__PURE__ */ new Date()).getTime() - timestamp;
|
||
timer = parseInt(timer / 1e3);
|
||
let tips = "";
|
||
switch (true) {
|
||
case timer < 300:
|
||
tips = "刚刚";
|
||
break;
|
||
case (timer >= 300 && timer < 3600):
|
||
tips = `${parseInt(timer / 60)}分钟前`;
|
||
break;
|
||
case (timer >= 3600 && timer < 86400):
|
||
tips = `${parseInt(timer / 3600)}小时前`;
|
||
break;
|
||
case (timer >= 86400 && timer < 2592e3):
|
||
tips = `${parseInt(timer / 86400)}天前`;
|
||
break;
|
||
default:
|
||
if (format2 === false) {
|
||
if (timer >= 2592e3 && timer < 365 * 86400) {
|
||
tips = `${parseInt(timer / (86400 * 30))}个月前`;
|
||
} else {
|
||
tips = `${parseInt(timer / (86400 * 365))}年前`;
|
||
}
|
||
} else {
|
||
tips = timeFormat(timestamp, format2);
|
||
}
|
||
}
|
||
return tips;
|
||
}
|
||
function trim$1(str, pos = "both") {
|
||
str = String(str);
|
||
if (pos == "both") {
|
||
return str.replace(/^\s+|\s+$/g, "");
|
||
}
|
||
if (pos == "left") {
|
||
return str.replace(/^\s*/, "");
|
||
}
|
||
if (pos == "right") {
|
||
return str.replace(/(\s*$)/g, "");
|
||
}
|
||
if (pos == "all") {
|
||
return str.replace(/\s+/g, "");
|
||
}
|
||
return str;
|
||
}
|
||
function queryParams(data = {}, isPrefix = true, arrayFormat = "brackets") {
|
||
const prefix = isPrefix ? "?" : "";
|
||
const _result = [];
|
||
if (["indices", "brackets", "repeat", "comma"].indexOf(arrayFormat) == -1)
|
||
arrayFormat = "brackets";
|
||
for (const key in data) {
|
||
const value2 = data[key];
|
||
if (["", void 0, null].indexOf(value2) >= 0) {
|
||
continue;
|
||
}
|
||
if (value2.constructor === Array) {
|
||
switch (arrayFormat) {
|
||
case "indices":
|
||
for (let i = 0; i < value2.length; i++) {
|
||
_result.push(`${key}[${i}]=${value2[i]}`);
|
||
}
|
||
break;
|
||
case "brackets":
|
||
value2.forEach((_value) => {
|
||
_result.push(`${key}[]=${_value}`);
|
||
});
|
||
break;
|
||
case "repeat":
|
||
value2.forEach((_value) => {
|
||
_result.push(`${key}=${_value}`);
|
||
});
|
||
break;
|
||
case "comma":
|
||
let commaStr = "";
|
||
value2.forEach((_value) => {
|
||
commaStr += (commaStr ? "," : "") + _value;
|
||
});
|
||
_result.push(`${key}=${commaStr}`);
|
||
break;
|
||
default:
|
||
value2.forEach((_value) => {
|
||
_result.push(`${key}[]=${_value}`);
|
||
});
|
||
}
|
||
} else {
|
||
_result.push(`${key}=${value2}`);
|
||
}
|
||
}
|
||
return _result.length ? prefix + _result.join("&") : "";
|
||
}
|
||
function toast(title, duration = 2e3) {
|
||
index$2.showToast({
|
||
title: String(title),
|
||
icon: "none",
|
||
duration
|
||
});
|
||
}
|
||
function type2icon(type2 = "success", fill = false) {
|
||
if (["primary", "info", "error", "warning", "success"].indexOf(type2) == -1)
|
||
type2 = "success";
|
||
let iconName = "";
|
||
switch (type2) {
|
||
case "primary":
|
||
iconName = "info-circle";
|
||
break;
|
||
case "info":
|
||
iconName = "info-circle";
|
||
break;
|
||
case "error":
|
||
iconName = "close-circle";
|
||
break;
|
||
case "warning":
|
||
iconName = "error-circle";
|
||
break;
|
||
case "success":
|
||
iconName = "checkmark-circle";
|
||
break;
|
||
default:
|
||
iconName = "checkmark-circle";
|
||
}
|
||
if (fill)
|
||
iconName += "-fill";
|
||
return iconName;
|
||
}
|
||
function priceFormat(number2, decimals = 0, decimalPoint = ".", thousandsSeparator = ",") {
|
||
number2 = `${number2}`.replace(/[^0-9+-Ee.]/g, "");
|
||
const n2 = !isFinite(+number2) ? 0 : +number2;
|
||
const prec = !isFinite(+decimals) ? 0 : Math.abs(decimals);
|
||
const sep = typeof thousandsSeparator === "undefined" ? "," : thousandsSeparator;
|
||
const dec = typeof decimalPoint === "undefined" ? "." : decimalPoint;
|
||
let s2 = "";
|
||
s2 = (prec ? round(n2, prec) + "" : `${Math.round(n2)}`).split(".");
|
||
const re = /(-?\d+)(\d{3})/;
|
||
while (re.test(s2[0])) {
|
||
s2[0] = s2[0].replace(re, `$1${sep}$2`);
|
||
}
|
||
if ((s2[1] || "").length < prec) {
|
||
s2[1] = s2[1] || "";
|
||
s2[1] += new Array(prec - s2[1].length + 1).join("0");
|
||
}
|
||
return s2.join(dec);
|
||
}
|
||
function getDuration(value2, unit = true) {
|
||
const valueNum = parseInt(value2);
|
||
if (unit) {
|
||
if (/s$/.test(value2))
|
||
return value2;
|
||
return value2 > 30 ? `${value2}ms` : `${value2}s`;
|
||
}
|
||
if (/ms$/.test(value2))
|
||
return valueNum;
|
||
if (/s$/.test(value2))
|
||
return valueNum > 30 ? valueNum : valueNum * 1e3;
|
||
return valueNum;
|
||
}
|
||
function padZero(value2) {
|
||
return `00${value2}`.slice(-2);
|
||
}
|
||
function formValidate(instance, event) {
|
||
const formItem = $parent.call(instance, "u-form-item");
|
||
const form = $parent.call(instance, "u-form");
|
||
if (formItem && form) {
|
||
form.validateField(formItem.prop, () => {
|
||
}, event);
|
||
}
|
||
}
|
||
function getProperty(obj, key) {
|
||
if (typeof obj !== "object" || null == obj) {
|
||
return "";
|
||
}
|
||
if (typeof key !== "string" || key === "") {
|
||
return "";
|
||
}
|
||
if (key.indexOf(".") !== -1) {
|
||
const keys = key.split(".");
|
||
let firstObj = obj[keys[0]] || {};
|
||
for (let i = 1; i < keys.length; i++) {
|
||
if (firstObj) {
|
||
firstObj = firstObj[keys[i]];
|
||
}
|
||
}
|
||
return firstObj;
|
||
}
|
||
return obj[key];
|
||
}
|
||
function setProperty(obj, key, value2) {
|
||
if (typeof obj !== "object" || null == obj) {
|
||
return;
|
||
}
|
||
const inFn = function(_obj, keys, v) {
|
||
if (keys.length === 1) {
|
||
_obj[keys[0]] = v;
|
||
return;
|
||
}
|
||
while (keys.length > 1) {
|
||
const k = keys[0];
|
||
if (!_obj[k] || typeof _obj[k] !== "object") {
|
||
_obj[k] = {};
|
||
}
|
||
keys.shift();
|
||
inFn(_obj[k], keys, v);
|
||
}
|
||
};
|
||
if (typeof key !== "string" || key === "")
|
||
;
|
||
else if (key.indexOf(".") !== -1) {
|
||
const keys = key.split(".");
|
||
inFn(obj, keys, value2);
|
||
} else {
|
||
obj[key] = value2;
|
||
}
|
||
}
|
||
function page() {
|
||
const pages2 = getCurrentPages();
|
||
return `/${pages2[pages2.length - 1].route || ""}`;
|
||
}
|
||
function pages() {
|
||
const pages2 = getCurrentPages();
|
||
return pages2;
|
||
}
|
||
function getValueByPath(obj, path) {
|
||
const pathArr = path.split(".");
|
||
return pathArr.reduce((acc, curr) => {
|
||
return acc && acc[curr] !== void 0 ? acc[curr] : void 0;
|
||
}, obj);
|
||
}
|
||
const index$1 = {
|
||
range: range$1,
|
||
getPx,
|
||
sleep,
|
||
os,
|
||
sys,
|
||
random,
|
||
guid,
|
||
$parent,
|
||
addStyle,
|
||
addUnit,
|
||
deepClone,
|
||
deepMerge: deepMerge$2,
|
||
shallowMerge,
|
||
error,
|
||
randomArray,
|
||
timeFormat,
|
||
timeFrom,
|
||
trim: trim$1,
|
||
queryParams,
|
||
toast,
|
||
type2icon,
|
||
priceFormat,
|
||
getDuration,
|
||
padZero,
|
||
formValidate,
|
||
getProperty,
|
||
setProperty,
|
||
page,
|
||
pages,
|
||
getValueByPath
|
||
// setConfig
|
||
};
|
||
class Router {
|
||
constructor() {
|
||
this.config = {
|
||
type: "navigateTo",
|
||
url: "",
|
||
delta: 1,
|
||
// navigateBack页面后退时,回退的层数
|
||
params: {},
|
||
// 传递的参数
|
||
animationType: "pop-in",
|
||
// 窗口动画,只在APP有效
|
||
animationDuration: 300,
|
||
// 窗口动画持续时间,单位毫秒,只在APP有效
|
||
intercept: false
|
||
// 是否需要拦截
|
||
};
|
||
this.route = this.route.bind(this);
|
||
}
|
||
// 判断url前面是否有"/",如果没有则加上,否则无法跳转
|
||
addRootPath(url2) {
|
||
return url2[0] === "/" ? url2 : `/${url2}`;
|
||
}
|
||
// 整合路由参数
|
||
mixinParam(url2, params) {
|
||
url2 = url2 && this.addRootPath(url2);
|
||
let query = "";
|
||
if (/.*\/.*\?.*=.*/.test(url2)) {
|
||
query = queryParams(params, false);
|
||
return url2 += `&${query}`;
|
||
}
|
||
query = queryParams(params);
|
||
return url2 += query;
|
||
}
|
||
// 对外的方法名称
|
||
async route(options = {}, params = {}) {
|
||
let mergeConfig2 = {};
|
||
if (typeof options === "string") {
|
||
mergeConfig2.url = this.mixinParam(options, params);
|
||
mergeConfig2.type = "navigateTo";
|
||
} else {
|
||
mergeConfig2 = deepMerge$2(this.config, options);
|
||
mergeConfig2.url = this.mixinParam(options.url, options.params);
|
||
}
|
||
if (mergeConfig2.url === page())
|
||
return;
|
||
if (params.intercept) {
|
||
this.config.intercept = params.intercept;
|
||
}
|
||
mergeConfig2.params = params;
|
||
mergeConfig2 = deepMerge$2(this.config, mergeConfig2);
|
||
if (typeof index$2.$u.routeIntercept === "function") {
|
||
const isNext = await new Promise((resolve2, reject) => {
|
||
index$2.$u.routeIntercept(mergeConfig2, resolve2);
|
||
});
|
||
isNext && this.openPage(mergeConfig2);
|
||
} else {
|
||
this.openPage(mergeConfig2);
|
||
}
|
||
}
|
||
// 执行路由跳转
|
||
openPage(config2) {
|
||
const {
|
||
url: url2,
|
||
type: type2,
|
||
delta,
|
||
animationType,
|
||
animationDuration
|
||
} = config2;
|
||
if (config2.type == "navigateTo" || config2.type == "to") {
|
||
index$2.navigateTo({
|
||
url: url2,
|
||
animationType,
|
||
animationDuration
|
||
});
|
||
}
|
||
if (config2.type == "redirectTo" || config2.type == "redirect") {
|
||
index$2.redirectTo({
|
||
url: url2
|
||
});
|
||
}
|
||
if (config2.type == "switchTab" || config2.type == "tab") {
|
||
index$2.switchTab({
|
||
url: url2
|
||
});
|
||
}
|
||
if (config2.type == "reLaunch" || config2.type == "launch") {
|
||
index$2.reLaunch({
|
||
url: url2
|
||
});
|
||
}
|
||
if (config2.type == "navigateBack" || config2.type == "back") {
|
||
index$2.navigateBack({
|
||
delta
|
||
});
|
||
}
|
||
}
|
||
}
|
||
const route = new Router().route;
|
||
const mixin = defineMixin({
|
||
// 定义每个组件都可能需要用到的外部样式以及类名
|
||
props: {
|
||
// 每个组件都有的父组件传递的样式,可以为字符串或者对象形式
|
||
customStyle: {
|
||
type: [Object, String],
|
||
default: () => ({})
|
||
},
|
||
customClass: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
// 跳转的页面路径
|
||
url: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
// 页面跳转的类型
|
||
linkType: {
|
||
type: String,
|
||
default: "navigateTo"
|
||
}
|
||
},
|
||
data() {
|
||
return {};
|
||
},
|
||
onLoad() {
|
||
this.$u.getRect = this.$uGetRect;
|
||
},
|
||
created() {
|
||
this.$u.getRect = this.$uGetRect;
|
||
},
|
||
computed: {
|
||
// 在2.x版本中,将会把$u挂载到uni对象下,导致在模板中无法使用uni.$u.xxx形式
|
||
// 所以这里通过computed计算属性将其附加到this.$u上,就可以在模板或者js中使用uni.$u.xxx
|
||
// 只在nvue环境通过此方式引入完整的$u,其他平台会出现性能问题,非nvue则按需引入(主要原因是props过大)
|
||
$u() {
|
||
return deepMerge$2(index$2.$u, {
|
||
props: void 0,
|
||
http: void 0,
|
||
mixin: void 0
|
||
});
|
||
},
|
||
/**
|
||
* 生成bem规则类名
|
||
* 由于微信小程序,H5,nvue之间绑定class的差异,无法通过:class="[bem()]"的形式进行同用
|
||
* 故采用如下折中做法,最后返回的是数组(一般平台)或字符串(支付宝和字节跳动平台),类似['a', 'b', 'c']或'a b c'的形式
|
||
* @param {String} name 组件名称
|
||
* @param {Array} fixed 一直会存在的类名
|
||
* @param {Array} change 会根据变量值为true或者false而出现或者隐藏的类名
|
||
* @returns {Array|string}
|
||
*/
|
||
bem() {
|
||
return function(name, fixed, change) {
|
||
const prefix = `u-${name}--`;
|
||
const classes = {};
|
||
if (fixed) {
|
||
fixed.map((item) => {
|
||
classes[prefix + this[item]] = true;
|
||
});
|
||
}
|
||
if (change) {
|
||
change.map((item) => {
|
||
this[item] ? classes[prefix + item] = this[item] : delete classes[prefix + item];
|
||
});
|
||
}
|
||
return Object.keys(classes);
|
||
};
|
||
}
|
||
},
|
||
methods: {
|
||
// 跳转某一个页面
|
||
openPage(urlKey = "url") {
|
||
const url2 = this[urlKey];
|
||
if (url2) {
|
||
route({ type: this.linkType, url: url2 });
|
||
}
|
||
},
|
||
navTo(url2 = "", linkType = "navigateTo") {
|
||
route({ type: this.linkType, url: url2 });
|
||
},
|
||
// 查询节点信息
|
||
// 目前此方法在支付宝小程序中无法获取组件跟接点的尺寸,为支付宝的bug(2020-07-21)
|
||
// 解决办法为在组件根部再套一个没有任何作用的view元素
|
||
$uGetRect(selector, all) {
|
||
return new Promise((resolve2) => {
|
||
index$2.createSelectorQuery().in(this)[all ? "selectAll" : "select"](selector).boundingClientRect((rect) => {
|
||
if (all && Array.isArray(rect) && rect.length) {
|
||
resolve2(rect);
|
||
}
|
||
if (!all && rect) {
|
||
resolve2(rect);
|
||
}
|
||
}).exec();
|
||
});
|
||
},
|
||
getParentData(parentName = "") {
|
||
if (!this.parent)
|
||
this.parent = {};
|
||
this.parent = $parent.call(this, parentName);
|
||
if (this.parent.children) {
|
||
this.parent.children.indexOf(this) === -1 && this.parent.children.push(this);
|
||
}
|
||
if (this.parent && this.parentData) {
|
||
Object.keys(this.parentData).map((key) => {
|
||
this.parentData[key] = this.parent[key];
|
||
});
|
||
}
|
||
},
|
||
// 阻止事件冒泡
|
||
preventEvent(e2) {
|
||
e2 && typeof e2.stopPropagation === "function" && e2.stopPropagation();
|
||
},
|
||
// 空操作
|
||
noop(e2) {
|
||
this.preventEvent(e2);
|
||
}
|
||
},
|
||
onReachBottom() {
|
||
index$2.$emit("uOnReachBottom");
|
||
},
|
||
beforeUnmount() {
|
||
if (this.parent && test.array(this.parent.children)) {
|
||
const childrenList = this.parent.children;
|
||
childrenList.map((child, index2) => {
|
||
if (child === this) {
|
||
childrenList.splice(index2, 1);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
});
|
||
const mpMixin = defineMixin({
|
||
// 将自定义节点设置成虚拟的,更加接近Vue组件的表现,能更好的使用flex属性
|
||
options: {
|
||
virtualHost: true
|
||
}
|
||
});
|
||
const { toString: toString$1 } = Object.prototype;
|
||
function isArray(val) {
|
||
return toString$1.call(val) === "[object Array]";
|
||
}
|
||
function isObject(val) {
|
||
return val !== null && typeof val === "object";
|
||
}
|
||
function isDate(val) {
|
||
return toString$1.call(val) === "[object Date]";
|
||
}
|
||
function isURLSearchParams(val) {
|
||
return typeof URLSearchParams !== "undefined" && val instanceof URLSearchParams;
|
||
}
|
||
function forEach(obj, fn) {
|
||
if (obj === null || typeof obj === "undefined") {
|
||
return;
|
||
}
|
||
if (typeof obj !== "object") {
|
||
obj = [obj];
|
||
}
|
||
if (isArray(obj)) {
|
||
for (let i = 0, l = obj.length; i < l; i++) {
|
||
fn.call(null, obj[i], i, obj);
|
||
}
|
||
} else {
|
||
for (const key in obj) {
|
||
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
||
fn.call(null, obj[key], key, obj);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
function isPlainObject(obj) {
|
||
return Object.prototype.toString.call(obj) === "[object Object]";
|
||
}
|
||
function deepMerge$1() {
|
||
const result = {};
|
||
function assignValue2(val, key) {
|
||
if (typeof result[key] === "object" && typeof val === "object") {
|
||
result[key] = deepMerge$1(result[key], val);
|
||
} else if (typeof val === "object") {
|
||
result[key] = deepMerge$1({}, val);
|
||
} else {
|
||
result[key] = val;
|
||
}
|
||
}
|
||
for (let i = 0, l = arguments.length; i < l; i++) {
|
||
forEach(arguments[i], assignValue2);
|
||
}
|
||
return result;
|
||
}
|
||
function isUndefined(val) {
|
||
return typeof val === "undefined";
|
||
}
|
||
function encode(val) {
|
||
return encodeURIComponent(val).replace(/%40/gi, "@").replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
|
||
}
|
||
function buildURL(url2, params) {
|
||
if (!params) {
|
||
return url2;
|
||
}
|
||
let serializedParams;
|
||
if (isURLSearchParams(params)) {
|
||
serializedParams = params.toString();
|
||
} else {
|
||
const parts = [];
|
||
forEach(params, (val, key) => {
|
||
if (val === null || typeof val === "undefined") {
|
||
return;
|
||
}
|
||
if (isArray(val)) {
|
||
key = `${key}[]`;
|
||
} else {
|
||
val = [val];
|
||
}
|
||
forEach(val, (v) => {
|
||
if (isDate(v)) {
|
||
v = v.toISOString();
|
||
} else if (isObject(v)) {
|
||
v = JSON.stringify(v);
|
||
}
|
||
parts.push(`${encode(key)}=${encode(v)}`);
|
||
});
|
||
});
|
||
serializedParams = parts.join("&");
|
||
}
|
||
if (serializedParams) {
|
||
const hashmarkIndex = url2.indexOf("#");
|
||
if (hashmarkIndex !== -1) {
|
||
url2 = url2.slice(0, hashmarkIndex);
|
||
}
|
||
url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams;
|
||
}
|
||
return url2;
|
||
}
|
||
function isAbsoluteURL(url2) {
|
||
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
|
||
}
|
||
function combineURLs(baseURL, relativeURL) {
|
||
return relativeURL ? `${baseURL.replace(/\/+$/, "")}/${relativeURL.replace(/^\/+/, "")}` : baseURL;
|
||
}
|
||
function buildFullPath(baseURL, requestedURL) {
|
||
if (baseURL && !isAbsoluteURL(requestedURL)) {
|
||
return combineURLs(baseURL, requestedURL);
|
||
}
|
||
return requestedURL;
|
||
}
|
||
function settle(resolve2, reject, response) {
|
||
const { validateStatus: validateStatus2 } = response.config;
|
||
const status = response.statusCode;
|
||
if (status && (!validateStatus2 || validateStatus2(status))) {
|
||
resolve2(response);
|
||
} else {
|
||
reject(response);
|
||
}
|
||
}
|
||
const mergeKeys$1 = (keys, config2) => {
|
||
const config3 = {};
|
||
keys.forEach((prop) => {
|
||
if (!isUndefined(config2[prop])) {
|
||
config3[prop] = config2[prop];
|
||
}
|
||
});
|
||
return config3;
|
||
};
|
||
const adapter = (config2) => new Promise((resolve2, reject) => {
|
||
const fullPath = buildURL(buildFullPath(config2.baseURL, config2.url), config2.params);
|
||
const _config = {
|
||
url: fullPath,
|
||
header: config2.header,
|
||
complete: (response) => {
|
||
config2.fullPath = fullPath;
|
||
response.config = config2;
|
||
try {
|
||
if (typeof response.data === "string") {
|
||
response.data = JSON.parse(response.data);
|
||
}
|
||
} catch (e2) {
|
||
}
|
||
settle(resolve2, reject, response);
|
||
}
|
||
};
|
||
let requestTask;
|
||
if (config2.method === "UPLOAD") {
|
||
delete _config.header["content-type"];
|
||
delete _config.header["Content-Type"];
|
||
const otherConfig = {
|
||
filePath: config2.filePath,
|
||
name: config2.name
|
||
};
|
||
const optionalKeys = [
|
||
"formData"
|
||
];
|
||
requestTask = index$2.uploadFile({ ..._config, ...otherConfig, ...mergeKeys$1(optionalKeys, config2) });
|
||
} else if (config2.method === "DOWNLOAD") {
|
||
requestTask = index$2.downloadFile(_config);
|
||
} else {
|
||
const optionalKeys = [
|
||
"data",
|
||
"method",
|
||
"timeout",
|
||
"dataType",
|
||
"responseType"
|
||
];
|
||
requestTask = index$2.request({ ..._config, ...mergeKeys$1(optionalKeys, config2) });
|
||
}
|
||
if (config2.getTask) {
|
||
config2.getTask(requestTask, config2);
|
||
}
|
||
});
|
||
const dispatchRequest = (config2) => adapter(config2);
|
||
function InterceptorManager() {
|
||
this.handlers = [];
|
||
}
|
||
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
|
||
this.handlers.push({
|
||
fulfilled,
|
||
rejected
|
||
});
|
||
return this.handlers.length - 1;
|
||
};
|
||
InterceptorManager.prototype.eject = function eject(id) {
|
||
if (this.handlers[id]) {
|
||
this.handlers[id] = null;
|
||
}
|
||
};
|
||
InterceptorManager.prototype.forEach = function forEach2(fn) {
|
||
this.handlers.forEach((h) => {
|
||
if (h !== null) {
|
||
fn(h);
|
||
}
|
||
});
|
||
};
|
||
const mergeKeys = (keys, globalsConfig, config2) => {
|
||
const config3 = {};
|
||
keys.forEach((prop) => {
|
||
if (!isUndefined(config2[prop])) {
|
||
config3[prop] = config2[prop];
|
||
} else if (!isUndefined(globalsConfig[prop])) {
|
||
config3[prop] = globalsConfig[prop];
|
||
}
|
||
});
|
||
return config3;
|
||
};
|
||
const mergeConfig = (globalsConfig, config2 = {}) => {
|
||
const method2 = config2.method || globalsConfig.method || "GET";
|
||
let config3 = {
|
||
baseURL: globalsConfig.baseURL || "",
|
||
method: method2,
|
||
url: config2.url || "",
|
||
params: config2.params || {},
|
||
custom: { ...globalsConfig.custom || {}, ...config2.custom || {} },
|
||
header: deepMerge$1(globalsConfig.header || {}, config2.header || {})
|
||
};
|
||
const defaultToConfig2Keys = ["getTask", "validateStatus"];
|
||
config3 = { ...config3, ...mergeKeys(defaultToConfig2Keys, globalsConfig, config2) };
|
||
if (method2 === "DOWNLOAD")
|
||
;
|
||
else if (method2 === "UPLOAD") {
|
||
delete config3.header["content-type"];
|
||
delete config3.header["Content-Type"];
|
||
const uploadKeys = [
|
||
"filePath",
|
||
"name",
|
||
"formData"
|
||
];
|
||
uploadKeys.forEach((prop) => {
|
||
if (!isUndefined(config2[prop])) {
|
||
config3[prop] = config2[prop];
|
||
}
|
||
});
|
||
} else {
|
||
const defaultsKeys = [
|
||
"data",
|
||
"timeout",
|
||
"dataType",
|
||
"responseType"
|
||
];
|
||
config3 = { ...config3, ...mergeKeys(defaultsKeys, globalsConfig, config2) };
|
||
}
|
||
return config3;
|
||
};
|
||
const defaults = {
|
||
baseURL: "",
|
||
header: {},
|
||
method: "GET",
|
||
dataType: "json",
|
||
responseType: "text",
|
||
custom: {},
|
||
timeout: 6e4,
|
||
validateStatus: function validateStatus(status) {
|
||
return status >= 200 && status < 300;
|
||
}
|
||
};
|
||
var clone = function() {
|
||
function _instanceof(obj, type2) {
|
||
return type2 != null && obj instanceof type2;
|
||
}
|
||
var nativeMap;
|
||
try {
|
||
nativeMap = Map;
|
||
} catch (_) {
|
||
nativeMap = function() {
|
||
};
|
||
}
|
||
var nativeSet;
|
||
try {
|
||
nativeSet = Set;
|
||
} catch (_) {
|
||
nativeSet = function() {
|
||
};
|
||
}
|
||
var nativePromise;
|
||
try {
|
||
nativePromise = Promise;
|
||
} catch (_) {
|
||
nativePromise = function() {
|
||
};
|
||
}
|
||
function clone2(parent, circular, depth, prototype, includeNonEnumerable) {
|
||
if (typeof circular === "object") {
|
||
depth = circular.depth;
|
||
prototype = circular.prototype;
|
||
includeNonEnumerable = circular.includeNonEnumerable;
|
||
circular = circular.circular;
|
||
}
|
||
var allParents = [];
|
||
var allChildren = [];
|
||
var useBuffer = typeof Buffer != "undefined";
|
||
if (typeof circular == "undefined")
|
||
circular = true;
|
||
if (typeof depth == "undefined")
|
||
depth = Infinity;
|
||
function _clone(parent2, depth2) {
|
||
if (parent2 === null)
|
||
return null;
|
||
if (depth2 === 0)
|
||
return parent2;
|
||
var child;
|
||
var proto;
|
||
if (typeof parent2 != "object") {
|
||
return parent2;
|
||
}
|
||
if (_instanceof(parent2, nativeMap)) {
|
||
child = new nativeMap();
|
||
} else if (_instanceof(parent2, nativeSet)) {
|
||
child = new nativeSet();
|
||
} else if (_instanceof(parent2, nativePromise)) {
|
||
child = new nativePromise(function(resolve2, reject) {
|
||
parent2.then(function(value2) {
|
||
resolve2(_clone(value2, depth2 - 1));
|
||
}, function(err) {
|
||
reject(_clone(err, depth2 - 1));
|
||
});
|
||
});
|
||
} else if (clone2.__isArray(parent2)) {
|
||
child = [];
|
||
} else if (clone2.__isRegExp(parent2)) {
|
||
child = new RegExp(parent2.source, __getRegExpFlags(parent2));
|
||
if (parent2.lastIndex)
|
||
child.lastIndex = parent2.lastIndex;
|
||
} else if (clone2.__isDate(parent2)) {
|
||
child = new Date(parent2.getTime());
|
||
} else if (useBuffer && Buffer.isBuffer(parent2)) {
|
||
if (Buffer.from) {
|
||
child = Buffer.from(parent2);
|
||
} else {
|
||
child = new Buffer(parent2.length);
|
||
parent2.copy(child);
|
||
}
|
||
return child;
|
||
} else if (_instanceof(parent2, Error)) {
|
||
child = Object.create(parent2);
|
||
} else {
|
||
if (typeof prototype == "undefined") {
|
||
proto = Object.getPrototypeOf(parent2);
|
||
child = Object.create(proto);
|
||
} else {
|
||
child = Object.create(prototype);
|
||
proto = prototype;
|
||
}
|
||
}
|
||
if (circular) {
|
||
var index2 = allParents.indexOf(parent2);
|
||
if (index2 != -1) {
|
||
return allChildren[index2];
|
||
}
|
||
allParents.push(parent2);
|
||
allChildren.push(child);
|
||
}
|
||
if (_instanceof(parent2, nativeMap)) {
|
||
parent2.forEach(function(value2, key) {
|
||
var keyChild = _clone(key, depth2 - 1);
|
||
var valueChild = _clone(value2, depth2 - 1);
|
||
child.set(keyChild, valueChild);
|
||
});
|
||
}
|
||
if (_instanceof(parent2, nativeSet)) {
|
||
parent2.forEach(function(value2) {
|
||
var entryChild = _clone(value2, depth2 - 1);
|
||
child.add(entryChild);
|
||
});
|
||
}
|
||
for (var i in parent2) {
|
||
var attrs = Object.getOwnPropertyDescriptor(parent2, i);
|
||
if (attrs) {
|
||
child[i] = _clone(parent2[i], depth2 - 1);
|
||
}
|
||
try {
|
||
var objProperty = Object.getOwnPropertyDescriptor(parent2, i);
|
||
if (objProperty.set === "undefined") {
|
||
continue;
|
||
}
|
||
child[i] = _clone(parent2[i], depth2 - 1);
|
||
} catch (e2) {
|
||
if (e2 instanceof TypeError) {
|
||
continue;
|
||
} else if (e2 instanceof ReferenceError) {
|
||
continue;
|
||
}
|
||
}
|
||
}
|
||
if (Object.getOwnPropertySymbols) {
|
||
var symbols = Object.getOwnPropertySymbols(parent2);
|
||
for (var i = 0; i < symbols.length; i++) {
|
||
var symbol = symbols[i];
|
||
var descriptor = Object.getOwnPropertyDescriptor(parent2, symbol);
|
||
if (descriptor && !descriptor.enumerable && !includeNonEnumerable) {
|
||
continue;
|
||
}
|
||
child[symbol] = _clone(parent2[symbol], depth2 - 1);
|
||
Object.defineProperty(child, symbol, descriptor);
|
||
}
|
||
}
|
||
if (includeNonEnumerable) {
|
||
var allPropertyNames = Object.getOwnPropertyNames(parent2);
|
||
for (var i = 0; i < allPropertyNames.length; i++) {
|
||
var propertyName = allPropertyNames[i];
|
||
var descriptor = Object.getOwnPropertyDescriptor(parent2, propertyName);
|
||
if (descriptor && descriptor.enumerable) {
|
||
continue;
|
||
}
|
||
child[propertyName] = _clone(parent2[propertyName], depth2 - 1);
|
||
Object.defineProperty(child, propertyName, descriptor);
|
||
}
|
||
}
|
||
return child;
|
||
}
|
||
return _clone(parent, depth);
|
||
}
|
||
clone2.clonePrototype = function clonePrototype(parent) {
|
||
if (parent === null)
|
||
return null;
|
||
var c = function() {
|
||
};
|
||
c.prototype = parent;
|
||
return new c();
|
||
};
|
||
function __objToStr(o2) {
|
||
return Object.prototype.toString.call(o2);
|
||
}
|
||
clone2.__objToStr = __objToStr;
|
||
function __isDate(o2) {
|
||
return typeof o2 === "object" && __objToStr(o2) === "[object Date]";
|
||
}
|
||
clone2.__isDate = __isDate;
|
||
function __isArray(o2) {
|
||
return typeof o2 === "object" && __objToStr(o2) === "[object Array]";
|
||
}
|
||
clone2.__isArray = __isArray;
|
||
function __isRegExp(o2) {
|
||
return typeof o2 === "object" && __objToStr(o2) === "[object RegExp]";
|
||
}
|
||
clone2.__isRegExp = __isRegExp;
|
||
function __getRegExpFlags(re) {
|
||
var flags = "";
|
||
if (re.global)
|
||
flags += "g";
|
||
if (re.ignoreCase)
|
||
flags += "i";
|
||
if (re.multiline)
|
||
flags += "m";
|
||
return flags;
|
||
}
|
||
clone2.__getRegExpFlags = __getRegExpFlags;
|
||
return clone2;
|
||
}();
|
||
class Request {
|
||
/**
|
||
* @param {Object} arg - 全局配置
|
||
* @param {String} arg.baseURL - 全局根路径
|
||
* @param {Object} arg.header - 全局header
|
||
* @param {String} arg.method = [GET|POST|PUT|DELETE|CONNECT|HEAD|OPTIONS|TRACE] - 全局默认请求方式
|
||
* @param {String} arg.dataType = [json] - 全局默认的dataType
|
||
* @param {String} arg.responseType = [text|arraybuffer] - 全局默认的responseType。支付宝小程序不支持
|
||
* @param {Object} arg.custom - 全局默认的自定义参数
|
||
* @param {Number} arg.timeout - 全局默认的超时时间,单位 ms。默认60000。H5(HBuilderX 2.9.9+)、APP(HBuilderX 2.9.9+)、微信小程序(2.10.0)、支付宝小程序
|
||
* @param {Boolean} arg.sslVerify - 全局默认的是否验证 ssl 证书。默认true.仅App安卓端支持(HBuilderX 2.3.3+)
|
||
* @param {Boolean} arg.withCredentials - 全局默认的跨域请求时是否携带凭证(cookies)。默认false。仅H5支持(HBuilderX 2.6.15+)
|
||
* @param {Boolean} arg.firstIpv4 - 全DNS解析时优先使用ipv4。默认false。仅 App-Android 支持 (HBuilderX 2.8.0+)
|
||
* @param {Function(statusCode):Boolean} arg.validateStatus - 全局默认的自定义验证器。默认statusCode >= 200 && statusCode < 300
|
||
*/
|
||
constructor(arg = {}) {
|
||
if (!isPlainObject(arg)) {
|
||
arg = {};
|
||
console.warn("设置全局参数必须接收一个Object");
|
||
}
|
||
this.config = clone({ ...defaults, ...arg });
|
||
this.interceptors = {
|
||
request: new InterceptorManager(),
|
||
response: new InterceptorManager()
|
||
};
|
||
}
|
||
/**
|
||
* @Function
|
||
* @param {Request~setConfigCallback} f - 设置全局默认配置
|
||
*/
|
||
setConfig(f2) {
|
||
this.config = f2(this.config);
|
||
}
|
||
middleware(config2) {
|
||
config2 = mergeConfig(this.config, config2);
|
||
const chain = [dispatchRequest, void 0];
|
||
let promise2 = Promise.resolve(config2);
|
||
this.interceptors.request.forEach((interceptor) => {
|
||
chain.unshift(interceptor.fulfilled, interceptor.rejected);
|
||
});
|
||
this.interceptors.response.forEach((interceptor) => {
|
||
chain.push(interceptor.fulfilled, interceptor.rejected);
|
||
});
|
||
while (chain.length) {
|
||
promise2 = promise2.then(chain.shift(), chain.shift());
|
||
}
|
||
return promise2;
|
||
}
|
||
/**
|
||
* @Function
|
||
* @param {Object} config - 请求配置项
|
||
* @prop {String} options.url - 请求路径
|
||
* @prop {Object} options.data - 请求参数
|
||
* @prop {Object} [options.responseType = config.responseType] [text|arraybuffer] - 响应的数据类型
|
||
* @prop {Object} [options.dataType = config.dataType] - 如果设为 json,会尝试对返回的数据做一次 JSON.parse
|
||
* @prop {Object} [options.header = config.header] - 请求header
|
||
* @prop {Object} [options.method = config.method] - 请求方法
|
||
* @returns {Promise<unknown>}
|
||
*/
|
||
request(config2 = {}) {
|
||
return this.middleware(config2);
|
||
}
|
||
get(url2, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
method: "GET",
|
||
...options
|
||
});
|
||
}
|
||
post(url2, data, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
data,
|
||
method: "POST",
|
||
...options
|
||
});
|
||
}
|
||
put(url2, data, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
data,
|
||
method: "PUT",
|
||
...options
|
||
});
|
||
}
|
||
delete(url2, data, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
data,
|
||
method: "DELETE",
|
||
...options
|
||
});
|
||
}
|
||
connect(url2, data, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
data,
|
||
method: "CONNECT",
|
||
...options
|
||
});
|
||
}
|
||
head(url2, data, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
data,
|
||
method: "HEAD",
|
||
...options
|
||
});
|
||
}
|
||
options(url2, data, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
data,
|
||
method: "OPTIONS",
|
||
...options
|
||
});
|
||
}
|
||
trace(url2, data, options = {}) {
|
||
return this.middleware({
|
||
url: url2,
|
||
data,
|
||
method: "TRACE",
|
||
...options
|
||
});
|
||
}
|
||
upload(url2, config2 = {}) {
|
||
config2.url = url2;
|
||
config2.method = "UPLOAD";
|
||
return this.middleware(config2);
|
||
}
|
||
download(url2, config2 = {}) {
|
||
config2.url = url2;
|
||
config2.method = "DOWNLOAD";
|
||
return this.middleware(config2);
|
||
}
|
||
}
|
||
function colorGradient(startColor = "rgb(0, 0, 0)", endColor = "rgb(255, 255, 255)", step = 10) {
|
||
const startRGB = hexToRgb(startColor, false);
|
||
const startR = startRGB[0];
|
||
const startG = startRGB[1];
|
||
const startB = startRGB[2];
|
||
const endRGB = hexToRgb(endColor, false);
|
||
const endR = endRGB[0];
|
||
const endG = endRGB[1];
|
||
const endB = endRGB[2];
|
||
const sR = (endR - startR) / step;
|
||
const sG = (endG - startG) / step;
|
||
const sB = (endB - startB) / step;
|
||
const colorArr = [];
|
||
for (let i = 0; i < step; i++) {
|
||
let hex = rgbToHex(`rgb(${Math.round(sR * i + startR)},${Math.round(sG * i + startG)},${Math.round(sB * i + startB)})`);
|
||
if (i === 0)
|
||
hex = rgbToHex(startColor);
|
||
if (i === step - 1)
|
||
hex = rgbToHex(endColor);
|
||
colorArr.push(hex);
|
||
}
|
||
return colorArr;
|
||
}
|
||
function hexToRgb(sColor, str = true) {
|
||
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
||
sColor = String(sColor).toLowerCase();
|
||
if (sColor && reg.test(sColor)) {
|
||
if (sColor.length === 4) {
|
||
let sColorNew = "#";
|
||
for (let i = 1; i < 4; i += 1) {
|
||
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
|
||
}
|
||
sColor = sColorNew;
|
||
}
|
||
const sColorChange = [];
|
||
for (let i = 1; i < 7; i += 2) {
|
||
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
|
||
}
|
||
if (!str) {
|
||
return sColorChange;
|
||
}
|
||
return `rgb(${sColorChange[0]},${sColorChange[1]},${sColorChange[2]})`;
|
||
}
|
||
if (/^(rgb|RGB)/.test(sColor)) {
|
||
const arr = sColor.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
|
||
return arr.map((val) => Number(val));
|
||
}
|
||
return sColor;
|
||
}
|
||
function rgbToHex(rgb) {
|
||
const _this = rgb;
|
||
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
||
if (/^(rgb|RGB)/.test(_this)) {
|
||
const aColor = _this.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
|
||
let strHex = "#";
|
||
for (let i = 0; i < aColor.length; i++) {
|
||
let hex = Number(aColor[i]).toString(16);
|
||
hex = String(hex).length == 1 ? `${0}${hex}` : hex;
|
||
if (hex === "0") {
|
||
hex += hex;
|
||
}
|
||
strHex += hex;
|
||
}
|
||
if (strHex.length !== 7) {
|
||
strHex = _this;
|
||
}
|
||
return strHex;
|
||
}
|
||
if (reg.test(_this)) {
|
||
const aNum = _this.replace(/#/, "").split("");
|
||
if (aNum.length === 6) {
|
||
return _this;
|
||
}
|
||
if (aNum.length === 3) {
|
||
let numHex = "#";
|
||
for (let i = 0; i < aNum.length; i += 1) {
|
||
numHex += aNum[i] + aNum[i];
|
||
}
|
||
return numHex;
|
||
}
|
||
} else {
|
||
return _this;
|
||
}
|
||
}
|
||
function colorToRgba(color2, alpha) {
|
||
color2 = rgbToHex(color2);
|
||
const reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
|
||
let sColor = String(color2).toLowerCase();
|
||
if (sColor && reg.test(sColor)) {
|
||
if (sColor.length === 4) {
|
||
let sColorNew = "#";
|
||
for (let i = 1; i < 4; i += 1) {
|
||
sColorNew += sColor.slice(i, i + 1).concat(sColor.slice(i, i + 1));
|
||
}
|
||
sColor = sColorNew;
|
||
}
|
||
const sColorChange = [];
|
||
for (let i = 1; i < 7; i += 2) {
|
||
sColorChange.push(parseInt(`0x${sColor.slice(i, i + 2)}`));
|
||
}
|
||
return `rgba(${sColorChange.join(",")},${alpha})`;
|
||
}
|
||
return sColor;
|
||
}
|
||
const colorGradient$1 = {
|
||
colorGradient,
|
||
hexToRgb,
|
||
rgbToHex,
|
||
colorToRgba
|
||
};
|
||
let timeout = null;
|
||
function debounce$1(func2, wait = 500, immediate = false) {
|
||
if (timeout !== null)
|
||
clearTimeout(timeout);
|
||
if (immediate) {
|
||
const callNow = !timeout;
|
||
timeout = setTimeout(() => {
|
||
timeout = null;
|
||
}, wait);
|
||
if (callNow)
|
||
typeof func2 === "function" && func2();
|
||
} else {
|
||
timeout = setTimeout(() => {
|
||
typeof func2 === "function" && func2();
|
||
}, wait);
|
||
}
|
||
}
|
||
let flag;
|
||
function throttle(func2, wait = 500, immediate = true) {
|
||
if (immediate) {
|
||
if (!flag) {
|
||
flag = true;
|
||
typeof func2 === "function" && func2();
|
||
setTimeout(() => {
|
||
flag = false;
|
||
}, wait);
|
||
}
|
||
} else if (!flag) {
|
||
flag = true;
|
||
setTimeout(() => {
|
||
flag = false;
|
||
typeof func2 === "function" && func2();
|
||
}, wait);
|
||
}
|
||
}
|
||
const ActionSheet = {
|
||
// action-sheet组件
|
||
actionSheet: {
|
||
show: false,
|
||
title: "",
|
||
description: "",
|
||
actions: [],
|
||
index: "",
|
||
cancelText: "",
|
||
closeOnClickAction: true,
|
||
safeAreaInsetBottom: true,
|
||
openType: "",
|
||
closeOnClickOverlay: true,
|
||
round: 0,
|
||
wrapMaxHeight: "600px"
|
||
}
|
||
};
|
||
const Album = {
|
||
// album 组件
|
||
album: {
|
||
urls: [],
|
||
keyName: "",
|
||
singleSize: 180,
|
||
multipleSize: 70,
|
||
space: 6,
|
||
singleMode: "scaleToFill",
|
||
multipleMode: "aspectFill",
|
||
maxCount: 9,
|
||
previewFullImage: true,
|
||
rowCount: 3,
|
||
showMore: true,
|
||
autoWrap: false,
|
||
unit: "px",
|
||
stop: true
|
||
}
|
||
};
|
||
const Alert = {
|
||
// alert警告组件
|
||
alert: {
|
||
title: "",
|
||
type: "warning",
|
||
description: "",
|
||
closable: false,
|
||
showIcon: false,
|
||
effect: "light",
|
||
center: false,
|
||
fontSize: 14
|
||
}
|
||
};
|
||
const Avatar = {
|
||
// avatar 组件
|
||
avatar: {
|
||
src: "",
|
||
shape: "circle",
|
||
size: 40,
|
||
mode: "scaleToFill",
|
||
text: "",
|
||
bgColor: "#c0c4cc",
|
||
color: "#ffffff",
|
||
fontSize: 18,
|
||
icon: "",
|
||
mpAvatar: false,
|
||
randomBgColor: false,
|
||
defaultUrl: "",
|
||
colorIndex: "",
|
||
name: ""
|
||
}
|
||
};
|
||
const AvatarGroup = {
|
||
// avatarGroup 组件
|
||
avatarGroup: {
|
||
urls: [],
|
||
maxCount: 5,
|
||
shape: "circle",
|
||
mode: "scaleToFill",
|
||
showMore: true,
|
||
size: 40,
|
||
keyName: "",
|
||
gap: 0.5,
|
||
extraValue: 0
|
||
}
|
||
};
|
||
const Backtop = {
|
||
// backtop组件
|
||
backtop: {
|
||
mode: "circle",
|
||
icon: "arrow-upward",
|
||
text: "",
|
||
duration: 100,
|
||
scrollTop: 0,
|
||
top: 400,
|
||
bottom: 100,
|
||
right: 20,
|
||
zIndex: 9,
|
||
iconStyle: {
|
||
color: "#909399",
|
||
fontSize: "19px"
|
||
}
|
||
}
|
||
};
|
||
const Badge = {
|
||
// 徽标数组件
|
||
badge: {
|
||
isDot: false,
|
||
value: "",
|
||
show: true,
|
||
max: 999,
|
||
type: "error",
|
||
showZero: false,
|
||
bgColor: null,
|
||
color: null,
|
||
shape: "circle",
|
||
numberType: "overflow",
|
||
offset: [],
|
||
inverted: false,
|
||
absolute: false
|
||
}
|
||
};
|
||
const Button = {
|
||
// button组件
|
||
button: {
|
||
hairline: false,
|
||
type: "info",
|
||
size: "normal",
|
||
shape: "square",
|
||
plain: false,
|
||
disabled: false,
|
||
loading: false,
|
||
loadingText: "",
|
||
loadingMode: "spinner",
|
||
loadingSize: 15,
|
||
openType: "",
|
||
formType: "",
|
||
appParameter: "",
|
||
hoverStopPropagation: true,
|
||
lang: "en",
|
||
sessionFrom: "",
|
||
sendMessageTitle: "",
|
||
sendMessagePath: "",
|
||
sendMessageImg: "",
|
||
showMessageCard: false,
|
||
dataName: "",
|
||
throttleTime: 0,
|
||
hoverStartTime: 0,
|
||
hoverStayTime: 200,
|
||
text: "",
|
||
icon: "",
|
||
iconColor: "",
|
||
color: "",
|
||
stop: true
|
||
}
|
||
};
|
||
const Calendar = {
|
||
// calendar 组件
|
||
calendar: {
|
||
title: "日期选择",
|
||
showTitle: true,
|
||
showSubtitle: true,
|
||
mode: "single",
|
||
startText: "开始",
|
||
endText: "结束",
|
||
customList: [],
|
||
color: "#3c9cff",
|
||
minDate: 0,
|
||
maxDate: 0,
|
||
defaultDate: null,
|
||
maxCount: Number.MAX_SAFE_INTEGER,
|
||
// Infinity
|
||
rowHeight: 56,
|
||
formatter: null,
|
||
showLunar: false,
|
||
showMark: true,
|
||
confirmText: "确定",
|
||
confirmDisabledText: "确定",
|
||
show: false,
|
||
closeOnClickOverlay: false,
|
||
readonly: false,
|
||
showConfirm: true,
|
||
maxRange: Number.MAX_SAFE_INTEGER,
|
||
// Infinity
|
||
rangePrompt: "",
|
||
showRangePrompt: true,
|
||
allowSameDay: false,
|
||
round: 0,
|
||
monthNum: 3
|
||
}
|
||
};
|
||
const CarKeyboard = {
|
||
// 车牌号键盘
|
||
carKeyboard: {
|
||
random: false
|
||
}
|
||
};
|
||
const Cell = {
|
||
// cell组件的props
|
||
cell: {
|
||
customClass: "",
|
||
title: "",
|
||
label: "",
|
||
value: "",
|
||
icon: "",
|
||
disabled: false,
|
||
border: true,
|
||
center: false,
|
||
url: "",
|
||
linkType: "navigateTo",
|
||
clickable: false,
|
||
isLink: false,
|
||
required: false,
|
||
arrowDirection: "",
|
||
iconStyle: {},
|
||
rightIconStyle: {},
|
||
rightIcon: "arrow-right",
|
||
titleStyle: {},
|
||
size: "",
|
||
stop: true,
|
||
name: ""
|
||
}
|
||
};
|
||
const CellGroup = {
|
||
// cell-group组件的props
|
||
cellGroup: {
|
||
title: "",
|
||
border: true,
|
||
customStyle: {}
|
||
}
|
||
};
|
||
const Checkbox = {
|
||
// checkbox组件
|
||
checkbox: {
|
||
name: "",
|
||
shape: "",
|
||
size: "",
|
||
checkbox: false,
|
||
disabled: "",
|
||
activeColor: "",
|
||
inactiveColor: "",
|
||
iconSize: "",
|
||
iconColor: "",
|
||
label: "",
|
||
labelSize: "",
|
||
labelColor: "",
|
||
labelDisabled: ""
|
||
}
|
||
};
|
||
const CheckboxGroup = {
|
||
// checkbox-group组件
|
||
checkboxGroup: {
|
||
name: "",
|
||
value: [],
|
||
shape: "square",
|
||
disabled: false,
|
||
activeColor: "#2979ff",
|
||
inactiveColor: "#c8c9cc",
|
||
size: 18,
|
||
placement: "row",
|
||
labelSize: 14,
|
||
labelColor: "#303133",
|
||
labelDisabled: false,
|
||
iconColor: "#ffffff",
|
||
iconSize: 12,
|
||
iconPlacement: "left",
|
||
borderBottom: false
|
||
}
|
||
};
|
||
const CircleProgress = {
|
||
// circleProgress 组件
|
||
circleProgress: {
|
||
percentage: 30
|
||
}
|
||
};
|
||
const Code = {
|
||
// code 组件
|
||
code: {
|
||
seconds: 60,
|
||
startText: "获取验证码",
|
||
changeText: "X秒重新获取",
|
||
endText: "重新获取",
|
||
keepRunning: false,
|
||
uniqueKey: ""
|
||
}
|
||
};
|
||
const CodeInput = {
|
||
// codeInput 组件
|
||
codeInput: {
|
||
adjustPosition: true,
|
||
maxlength: 6,
|
||
dot: false,
|
||
mode: "box",
|
||
hairline: false,
|
||
space: 10,
|
||
value: "",
|
||
focus: false,
|
||
bold: false,
|
||
color: "#606266",
|
||
fontSize: 18,
|
||
size: 35,
|
||
disabledKeyboard: false,
|
||
borderColor: "#c9cacc",
|
||
disabledDot: true
|
||
}
|
||
};
|
||
const Col = {
|
||
// col 组件
|
||
col: {
|
||
span: 12,
|
||
offset: 0,
|
||
justify: "start",
|
||
align: "stretch",
|
||
textAlign: "left"
|
||
}
|
||
};
|
||
const Collapse = {
|
||
// collapse 组件
|
||
collapse: {
|
||
value: null,
|
||
accordion: false,
|
||
border: true
|
||
}
|
||
};
|
||
const CollapseItem = {
|
||
// collapseItem 组件
|
||
collapseItem: {
|
||
title: "",
|
||
value: "",
|
||
label: "",
|
||
disabled: false,
|
||
isLink: true,
|
||
clickable: true,
|
||
border: true,
|
||
align: "left",
|
||
name: "",
|
||
icon: "",
|
||
duration: 300,
|
||
showRight: true
|
||
}
|
||
};
|
||
const ColumnNotice = {
|
||
// columnNotice 组件
|
||
columnNotice: {
|
||
text: "",
|
||
icon: "volume",
|
||
mode: "",
|
||
color: "#f9ae3d",
|
||
bgColor: "#fdf6ec",
|
||
fontSize: 14,
|
||
speed: 80,
|
||
step: false,
|
||
duration: 1500,
|
||
disableTouch: true,
|
||
justifyContent: "flex-start"
|
||
}
|
||
};
|
||
const CountDown = {
|
||
// u-count-down 计时器组件
|
||
countDown: {
|
||
time: 0,
|
||
format: "HH:mm:ss",
|
||
autoStart: true,
|
||
millisecond: false
|
||
}
|
||
};
|
||
const CountTo = {
|
||
// countTo 组件
|
||
countTo: {
|
||
startVal: 0,
|
||
endVal: 0,
|
||
duration: 2e3,
|
||
autoplay: true,
|
||
decimals: 0,
|
||
useEasing: true,
|
||
decimal: ".",
|
||
color: "#606266",
|
||
fontSize: 22,
|
||
bold: false,
|
||
separator: ""
|
||
}
|
||
};
|
||
const DatetimePicker = {
|
||
// datetimePicker 组件
|
||
datetimePicker: {
|
||
show: false,
|
||
popupMode: "bottom",
|
||
showToolbar: true,
|
||
value: "",
|
||
title: "",
|
||
mode: "datetime",
|
||
maxDate: new Date((/* @__PURE__ */ new Date()).getFullYear() + 10, 0, 1).getTime(),
|
||
minDate: new Date((/* @__PURE__ */ new Date()).getFullYear() - 10, 0, 1).getTime(),
|
||
minHour: 0,
|
||
maxHour: 23,
|
||
minMinute: 0,
|
||
maxMinute: 59,
|
||
filter: null,
|
||
formatter: null,
|
||
loading: false,
|
||
itemHeight: 44,
|
||
cancelText: "取消",
|
||
confirmText: "确认",
|
||
cancelColor: "#909193",
|
||
confirmColor: "#3c9cff",
|
||
visibleItemCount: 5,
|
||
closeOnClickOverlay: false,
|
||
defaultIndex: []
|
||
}
|
||
};
|
||
const Divider = {
|
||
// divider组件
|
||
divider: {
|
||
dashed: false,
|
||
hairline: true,
|
||
dot: false,
|
||
textPosition: "center",
|
||
text: "",
|
||
textSize: 14,
|
||
textColor: "#909399",
|
||
lineColor: "#dcdfe6"
|
||
}
|
||
};
|
||
const Empty = {
|
||
// empty组件
|
||
empty: {
|
||
icon: "",
|
||
text: "",
|
||
textColor: "#c0c4cc",
|
||
textSize: 14,
|
||
iconColor: "#c0c4cc",
|
||
iconSize: 90,
|
||
mode: "data",
|
||
width: 160,
|
||
height: 160,
|
||
show: true,
|
||
marginTop: 0
|
||
}
|
||
};
|
||
const Form$1 = {
|
||
// form 组件
|
||
form: {
|
||
model: {},
|
||
rules: {},
|
||
errorType: "message",
|
||
borderBottom: true,
|
||
labelPosition: "left",
|
||
labelWidth: 45,
|
||
labelAlign: "left",
|
||
labelStyle: {}
|
||
}
|
||
};
|
||
const GormItem = {
|
||
// formItem 组件
|
||
formItem: {
|
||
label: "",
|
||
prop: "",
|
||
rules: [],
|
||
borderBottom: "",
|
||
labelPosition: "",
|
||
labelWidth: "",
|
||
rightIcon: "",
|
||
leftIcon: "",
|
||
required: false,
|
||
leftIconStyle: ""
|
||
}
|
||
};
|
||
const Gap = {
|
||
// gap组件
|
||
gap: {
|
||
bgColor: "transparent",
|
||
height: 20,
|
||
marginTop: 0,
|
||
marginBottom: 0,
|
||
customStyle: {}
|
||
}
|
||
};
|
||
const Grid = {
|
||
// grid组件
|
||
grid: {
|
||
col: 3,
|
||
border: false,
|
||
align: "left"
|
||
}
|
||
};
|
||
const GridItem = {
|
||
// grid-item组件
|
||
gridItem: {
|
||
name: null,
|
||
bgColor: "transparent"
|
||
}
|
||
};
|
||
const {
|
||
color: color$3
|
||
} = config;
|
||
const Icon = {
|
||
// icon组件
|
||
icon: {
|
||
name: "",
|
||
color: color$3["u-content-color"],
|
||
size: "16px",
|
||
bold: false,
|
||
index: "",
|
||
hoverClass: "",
|
||
customPrefix: "uicon",
|
||
label: "",
|
||
labelPos: "right",
|
||
labelSize: "15px",
|
||
labelColor: color$3["u-content-color"],
|
||
space: "3px",
|
||
imgMode: "",
|
||
width: "",
|
||
height: "",
|
||
top: 0,
|
||
stop: false
|
||
}
|
||
};
|
||
const Image = {
|
||
// image组件
|
||
image: {
|
||
src: "",
|
||
mode: "aspectFill",
|
||
width: "300",
|
||
height: "225",
|
||
shape: "square",
|
||
radius: 0,
|
||
lazyLoad: true,
|
||
showMenuByLongpress: true,
|
||
loadingIcon: "photo",
|
||
errorIcon: "error-circle",
|
||
showLoading: true,
|
||
showError: true,
|
||
fade: true,
|
||
webp: false,
|
||
duration: 500,
|
||
bgColor: "#f3f4f6"
|
||
}
|
||
};
|
||
const IndexAnchor = {
|
||
// indexAnchor 组件
|
||
indexAnchor: {
|
||
text: "",
|
||
color: "#606266",
|
||
size: 14,
|
||
bgColor: "#dedede",
|
||
height: 32
|
||
}
|
||
};
|
||
const IndexList = {
|
||
// indexList 组件
|
||
indexList: {
|
||
inactiveColor: "#606266",
|
||
activeColor: "#5677fc",
|
||
indexList: [],
|
||
sticky: true,
|
||
customNavHeight: 0,
|
||
safeBottomFix: false
|
||
}
|
||
};
|
||
const Input = {
|
||
// index 组件
|
||
input: {
|
||
value: "",
|
||
type: "text",
|
||
fixed: false,
|
||
disabled: false,
|
||
disabledColor: "#f5f7fa",
|
||
clearable: false,
|
||
password: false,
|
||
maxlength: 140,
|
||
placeholder: null,
|
||
placeholderClass: "input-placeholder",
|
||
placeholderStyle: "color: #c0c4cc",
|
||
showWordLimit: false,
|
||
confirmType: "done",
|
||
confirmHold: false,
|
||
holdKeyboard: false,
|
||
focus: false,
|
||
autoBlur: false,
|
||
disableDefaultPadding: false,
|
||
cursor: -1,
|
||
cursorSpacing: 30,
|
||
selectionStart: -1,
|
||
selectionEnd: -1,
|
||
adjustPosition: true,
|
||
inputAlign: "left",
|
||
fontSize: "15px",
|
||
color: "#303133",
|
||
prefixIcon: "",
|
||
prefixIconStyle: "",
|
||
suffixIcon: "",
|
||
suffixIconStyle: "",
|
||
border: "surround",
|
||
readonly: false,
|
||
shape: "square",
|
||
formatter: null
|
||
}
|
||
};
|
||
const Keyboard = {
|
||
// 键盘组件
|
||
keyboard: {
|
||
mode: "number",
|
||
dotDisabled: false,
|
||
tooltip: true,
|
||
showTips: true,
|
||
tips: "",
|
||
showCancel: true,
|
||
showConfirm: true,
|
||
random: false,
|
||
safeAreaInsetBottom: true,
|
||
closeOnClickOverlay: true,
|
||
show: false,
|
||
overlay: true,
|
||
zIndex: 10075,
|
||
cancelText: "取消",
|
||
confirmText: "确定",
|
||
autoChange: false
|
||
}
|
||
};
|
||
const Line = {
|
||
// line组件
|
||
line: {
|
||
color: "#d6d7d9",
|
||
length: "100%",
|
||
direction: "row",
|
||
hairline: true,
|
||
margin: 0,
|
||
dashed: false
|
||
}
|
||
};
|
||
const LineProgress = {
|
||
// lineProgress 组件
|
||
lineProgress: {
|
||
activeColor: "#19be6b",
|
||
inactiveColor: "#ececec",
|
||
percentage: 0,
|
||
showText: true,
|
||
height: 12
|
||
}
|
||
};
|
||
const {
|
||
color: color$2
|
||
} = config;
|
||
const Link = {
|
||
// link超链接组件props参数
|
||
link: {
|
||
color: color$2["u-primary"],
|
||
fontSize: 15,
|
||
underLine: false,
|
||
href: "",
|
||
mpTips: "链接已复制,请在浏览器打开",
|
||
lineColor: "",
|
||
text: ""
|
||
}
|
||
};
|
||
const List = {
|
||
// list 组件
|
||
list: {
|
||
showScrollbar: false,
|
||
lowerThreshold: 50,
|
||
upperThreshold: 0,
|
||
scrollTop: 0,
|
||
offsetAccuracy: 10,
|
||
enableFlex: false,
|
||
pagingEnabled: false,
|
||
scrollable: true,
|
||
scrollIntoView: "",
|
||
scrollWithAnimation: false,
|
||
enableBackToTop: false,
|
||
height: 0,
|
||
width: 0,
|
||
preLoadScreen: 1
|
||
}
|
||
};
|
||
const ListItem = {
|
||
// listItem 组件
|
||
listItem: {
|
||
anchor: ""
|
||
}
|
||
};
|
||
const {
|
||
color: color$1
|
||
} = config;
|
||
const LoadingIcon = {
|
||
// loading-icon加载中图标组件
|
||
loadingIcon: {
|
||
show: true,
|
||
color: color$1["u-tips-color"],
|
||
textColor: color$1["u-tips-color"],
|
||
vertical: false,
|
||
mode: "spinner",
|
||
size: 24,
|
||
textSize: 15,
|
||
text: "",
|
||
timingFunction: "ease-in-out",
|
||
duration: 1200,
|
||
inactiveColor: ""
|
||
}
|
||
};
|
||
const LoadingPage = {
|
||
// loading-page组件
|
||
loadingPage: {
|
||
loadingText: "正在加载",
|
||
image: "",
|
||
loadingMode: "circle",
|
||
loading: false,
|
||
bgColor: "#ffffff",
|
||
color: "#C8C8C8",
|
||
fontSize: 19,
|
||
iconSize: 28,
|
||
loadingColor: "#C8C8C8",
|
||
zIndex: 10
|
||
}
|
||
};
|
||
const Loadmore = {
|
||
// loadmore 组件
|
||
loadmore: {
|
||
status: "loadmore",
|
||
bgColor: "transparent",
|
||
icon: true,
|
||
fontSize: 14,
|
||
iconSize: 17,
|
||
color: "#606266",
|
||
loadingIcon: "spinner",
|
||
loadmoreText: "加载更多",
|
||
loadingText: "正在加载...",
|
||
nomoreText: "没有更多了",
|
||
isDot: false,
|
||
iconColor: "#b7b7b7",
|
||
marginTop: 10,
|
||
marginBottom: 10,
|
||
height: "auto",
|
||
line: false,
|
||
lineColor: "#E6E8EB",
|
||
dashed: false
|
||
}
|
||
};
|
||
const Modal = {
|
||
// modal 组件
|
||
modal: {
|
||
show: false,
|
||
title: "",
|
||
content: "",
|
||
confirmText: "确认",
|
||
cancelText: "取消",
|
||
showConfirmButton: true,
|
||
showCancelButton: false,
|
||
confirmColor: "#2979ff",
|
||
cancelColor: "#606266",
|
||
buttonReverse: false,
|
||
zoom: true,
|
||
asyncClose: false,
|
||
closeOnClickOverlay: false,
|
||
negativeTop: 0,
|
||
width: "650rpx",
|
||
confirmButtonShape: "",
|
||
contentTextAlign: "left"
|
||
}
|
||
};
|
||
const color = {
|
||
primary: "#3c9cff",
|
||
info: "#909399",
|
||
default: "#909399",
|
||
warning: "#f9ae3d",
|
||
error: "#f56c6c",
|
||
success: "#5ac725",
|
||
mainColor: "#303133",
|
||
contentColor: "#606266",
|
||
tipsColor: "#909399",
|
||
lightColor: "#c0c4cc",
|
||
borderColor: "#e4e7ed"
|
||
};
|
||
const Navbar = {
|
||
// navbar 组件
|
||
navbar: {
|
||
safeAreaInsetTop: true,
|
||
placeholder: false,
|
||
fixed: true,
|
||
border: false,
|
||
leftIcon: "arrow-left",
|
||
leftText: "",
|
||
rightText: "",
|
||
rightIcon: "",
|
||
title: "",
|
||
titleColor: "",
|
||
bgColor: "#ffffff",
|
||
titleWidth: "400rpx",
|
||
height: "44px",
|
||
leftIconSize: 20,
|
||
leftIconColor: color.mainColor,
|
||
autoBack: false,
|
||
titleStyle: ""
|
||
}
|
||
};
|
||
const NoNetwork = {
|
||
// noNetwork
|
||
noNetwork: {
|
||
tips: "哎呀,网络信号丢失",
|
||
zIndex: "",
|
||
image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAABLKADAAQAAAABAAABLAAAAADYYILnAABAAElEQVR4Ae29CZhkV3kefNeq6m2W7tn3nl0aCbHIAgmQPGB+sLCNzSID9g9PYrAf57d/+4+DiW0cy8QBJ06c2In/PLFDHJ78+MGCGNsYgyxwIwktwEijAc1ohtmnZ+2Z7p5eq6vu9r/vuXWrq25VdVV1V3dXVX9Hmj73nv285963vvOd75yraeIEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaD8E9PbrkvRopSMwMBBYRs+5O/yJS68cPnzYXel4tFP/jXbqjPRFEAiCQNe6Bw/6gdFn9Oy9Q90LLG2DgBBW2wyldIQIPPPCte2a5q3jtR+4ff/4wuBuXotrDwSEsNpjHKUXQODppy+udYJMEUEZgbd94DvnNwlA7YGAEFZ7jOOK78Xp06eTTkq7sxwQhmXuf/754VXl4iSstRAQwmqt8ZLWlkHg0UcD49qYfUjXfLtMtOZ7npExJu4iqZWLl7DWQUAIq3XGSlpaAYHD77q8xwuCOSUoXw8Sl0eMux977DGzQjES3AIICGG1wCBJEysj8PXnz230XXdr5RQFMYbRvWnv6w8UhMhliyGwYghr4Pjg3oEXL34ey9zyC9tiD2ml5h47dr1LN7S6CMjz/A3PvHh1Z6UyJby5EVgRhKUe7Kz/JU0LfvrJo5f+Y3MPibSuFgQGBgasYSd9l6GDsup0WS/T/9RTp9fXmU2SNwECdQ92E7S57iaMeJnPQLK6ixkDLfjlb7546RfrLkQyNBcC3dsP6oHWMd9G+V3JgwPHh7rnm1/yLQ8CbU9Y33zp0j+nZFUMb/DHmB7+SHGY3LUKAk8cObtD00xlHDrfNge+Z2ozU3c9dvx4Yr5lSL6lR6CtCWvg6OAPw9z538ZhhZRl6XrwhW8du1KX/iNejtwvPQIDR8+vSRqJ/obU7GupjdNdh2gW0ZDypJBFR6BtB2rg2OVtuub9JcmpHIpBoK1xfffLzx4f7C0XL2HNiYDp6bs9z23Ypn1fC1Y/9PCFDc3ZW2lVHIG2JKzTp4Ok7nv/G6Q054MIvda+bNb74pEgKGtwGAdL7pcfAa8vOKEZ2kyjWuLr7uDh+/qvN6o8KWdxEWhLwroyeek/g4zuqwU6kNrhyZcu/UktaSXN8iNwuL9/RuvVXtJ9PbPQ1vhmcP6t9+47u9ByJP/SIdB2hDVw9MJHQFYfrQdCph84evFX68kjaZcPAZJWwjMXRFpJ2zr91tfuvrh8vZCa54NA2xGWrunvmg8QWCJ/N4ir7fCYDxatkOeBB7an501agXbygVdvv9IK/ZQ2FiPQdi9osGbH+zRNf7y4m9Xu9Me7N9nv0HXdr5ZS4psHgXpJC9P/wDRTx0Vn1TxjWG9LGrbaUm/Fi5meSvcrkxf/Cg/ow9XqAUk91v3qHT97r6471dJKfHMi8Oyzgx1Z03t1YAQVT2MwgsC3u+yXHzi0faQ5eyGtqgWBtpOw2Ol9+/TM+sTOn8L08MtzgQCy+tOHXr3jA0JWc6HU/HF5Scssr4jXcYqfP6V/T8iq+ceyWgvbUsKKOn38eJAYyl56TAuCEr2WYei//9Crd/5GlFb81kdASVopSFrerKRlaoZj9HR+700H10+0fg+lB21NWBxe2lhNHsUpDZr27mi4dV379R9+za4/iO7Fbx8ECknLCPTsTDJ17O33bJpqnx6u7J60PWFxeAcCbMV56dJfQKf1bkMLfuGh1+76zMoe9vbuPUnLsb2DtmOe5HSxvXsrvWtLBEhaTx29+Ma27Jx0ShAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQaEsEVoQdVluO3BJ06ptHL34b1XRjp4Ch6Rq24+kmjG4Nwwg+9uA9u/73EjRBqhAEihAoe3xwUQq5WTYEzp0b3ZnV/Ncf6O/9AvY9wlh/6dy3X7ncN512Zw9BVLXjuAP4np44vnQtkZoEgVkEhLBmsWiKqwsXpjbPBOn3gRfenwnc+7GBe+zsjclvonFDS9nA9Iy/u3x9+vAP3735VPk4CRUEFhcBIazFxbfm0k9fHD7k+v4nQFaPQIrx8Gmyx/GJ0J/t7ez7mw0b9MmaC2pQQgh0/ZSm4g5TwueWWtqLt0HuVy4CQljLPPYnB0depTn+b3t+8B4t0AdBUv93h2H9xc6da0aXs2m+r1WQsLRnl7NdUvfKRkAIa5nG//r1oGtsZvjTgev/kqYHF/TA+AXoqv4npJemOEiQU1Eo2l+G0movBK1UBBPU7s9E1+ILAkuNgKwSLjXiqO/khVtvARH8dxDBRkMzPrF/V+9/BlG5y9CUqlXinHv9mRPXtvuus88L9H3JPv2zD2yXExCqAicJBIFWRwAvv3Xqwq0/Pnn+lv/K+ZvfPH3p9p5W75O0fxaBp793ce3AwIDMWmYhafiVgNtwSMsXeHp4eNXJC8Nf0PAdRCiuf/XgrnWUqsqotcvnl9DmRkCdweX4b9N7+m/ih+mbMraLM14yJVwcXItKpT1VRve+ArC3Qqn+3gM7132jKEGZm6tXg86J7OhDfuA/iHwPUpfUZSfu2L59tXxEoQxeyxkEgjKeOnLxHb4RqC+NY5H3+2953d4XlrNN7Vq3ENYij+yZwbG9jpt9GkBPQ5H9zgP9607OVeWp87cOQtn9zwJf+xDMNFfj+jryPqXpxj8c2Nn7P+SXey70lidu4IXzb0DNB4tr9751+HV7zxSHyd1CERDCWiiCc+QPjUCnsaqmZ62O5IN7N/VUNP48ee7mAZDTf4Tt049iUG4Guv4ZfNLos9UIbo7qJWoJEHjy+bP7fNsoOcnW0A0/aacef8PdG28sQTNWTBVCWIs01OfPj66BpfqTmq732UnjgT1bei+Vq4pTv7HM8Ceg2/o1qLQug7T+FaaM3IqTLZdewpoHgYEjV9fphvOj+OShWa5V+CxvZtpzv/LwG/aNl4uXsPoRwI+4uEYjAJ2GmdG8L0FK2mYa+tsrkdXZy+P7x2ZuHdW14P+BLdank9q6Qwd3rf+ckFWjR6Tx5Q2cP58K9Jm3VCIr1ogt48lO237r3//96YofeG18y9q7RFklXITxPXV+5DchKb3ZDMy37Nu5tuxG4R9cHH6b42QfAzlds+3EPXu2rfrBIjRFilwkBIIR7SHoJDurFU89ZOd680Gke6JaWomvjoBIWNUxqivFD87fej0e0n8Fwvr0/t1rnyqX+QfnRz7g+8FX8Rv8vL3auF/IqhxKzR2WCPxXqKeq3krDTdj2ierpJEUtCIgOqxaUakwzNBR0D09yiqePHOjveyOkpxLr9VMXb73V97S/h3nDXx7Y2fdPkAYbncW1IgIDxy5vM7LZt/hgrnLtxyaBrJNxv/72N+6tuNhSLp+EVUZACKsyNnXHvHL+1qcgNf2KbSXu2bt9dcmS9qlzo/fARgcmCtpzB3b1/Vg5QiuslLowENyDWDn8cSjl98PgdBviu03N+rl9/WufLEwr18uDwLdevLTF1YK3xnVZ2HI1bUxrT7z5zTuXdRP78qCyeLUKYTUI25OXbm4JPO00TBj+6I7+db8ZL3ZwMOiYdG4dA1lN9HWte2iuI2NAVPapC8O/CGPR34Ip/AZIbIMo7yX8G9QMbcS09P+2b1vf5XgdrXaPfiYns9oeLLEd8D1/B7Dp0E1jGP042pXQj7RKf546cmGzp+tv1TRf6YQD35/QO3seP3xow5IfC9QqmM23naJ0ny9ysXwgq98BWc0kVhv/Nhalbqe8kd/Fr8MOSEr3zEVWrwyO3I29hl+E9LUHGf+nAXI6sGPdd8uV2YphIKnE5IyL6bLxk7cn3bdkHHefrpvJAExMZ1uBZmqeNzXtfzUzk/m/ens7LjV7Px+8d9e1579/44l0duZtge+Np5zEEw8c2pBu9na3YvtEwmrAqNE8IZvNHsep5//yjl3r/0O8yFOXbv0QCO05gP0JGIL+fjw+uj91YeRh/Dp/PtCDM7Zpfmjvjt6Xo7hW9ycmJjaYduf7Hdf/8HTGfa3rG9rYxLSWnsloPg7fijZV8oFM2Ja2a9t6EJd7bCztvHP7us4rrdD/r3/7ct9I99jEI4cOiQ3dIg2YEFYDgOUJDFj1e8TqX7cT4kImXuQr5279A4DeBEX8ayvprU4N3rovcALot/TH13T0fXDTJn0qXk4r3k9OTm4y7a6PzjjORzOOvn1kbEqbnEprPhRzwAKzwFLHk05hv6Yd6N+o3R6beG50aPSdr3qV6IJKkVp5ITIlXOCYn4Yexr0w/DO6YXymHFlR0e5r7tsM3fxgJbI6fW1ivTeT+SsYmr54cFff+5Cu5X+hb94Merp6/J/PusGvTE6724eGJ7RpSFOkKPCUZvBPBccoHBet3Rwe13rX9tw/PjXzZ5hKvr8SfhWKkeA2REAIa4GD6p0feRdWBnvxjv2PckVhVfBf4A29uG/X2i+Ui2eYn8n8NryuDr3jPfWSFV5k44UT137eshIP2K7/64cObbheqZ6lCp+Ydt8TBO7vTM5od1+/NR4SFVhoLpKKt410lnE8LTMzo3V2dLznxLkhYgQ9obiVjEDln7mVjEodfYcpw+MAsftg/7qSDbAnb97sCSb0Yei2fqOcbovVqKNnNO8HmAE9Cv3Wp+uoWjt27HpXNqH9WTKR+kBHKqEFbvo5y3N/avfu4g23R45f3WGa1k9ZicTd0zPTf/f6O7f8dT311Jp2fHzmgJlI/N70jPPe4bEZ6Kg4qw0lqlrLiNKBiLWerpTW25PUbkPXZViW62ecHz+4d8PXojTirzwEyhq8rTwYFtRjvpX/rlwJ+iSXugPbMuyKBOHo3geRJtuT7PujcmVUCuPJlhnL/9NUqvMD2eyM5sxMaIlE4n7XML907tyNjcxHQjty4sZv66Z1xEok/xNW5n4uZSf+8sT5m++vVO58wkEu5sR09pd9w/rWyET2vReujiqygrSopn/zKZN5qMeirotKeTyolm7p/+X06Wvr51ue5Gt9BISwFjiGsLl6N6SrvylXDNTK70D4mX071pwtF88w6Jd/DG/1E1u26NOV0pQL71y3/8PJVOcHMzPTWkcCH2YGOaTTaS2RTN6f1fQvvvDK1bdnbO2JZCr1SeRfn05Pa1PTU0gXJBKW+ecnzlxvCGndhFQ1NRP8bcY1/vjS9bF1V26MwHwsVKiXa3etYVw1TNhYJ3TDjQCO42jJVMcez7J+t9YyJF37ISCEtahjGjxkGDr2DJZ31D8h5vUQJL5RPkXlUMM07u3qSGidICvkzzuSlmlZb0olrK9hD9v9JCrPC196JoPMAolFg6CV+PPj54YeyWecx8Vk2v1Q0rSfhFT18LnBmzBRyNalp5qrSuq7kiAsh4SFa7oZ9M0wzI+cPHOjZPo9V1kS1z4ICGEt4lhiCvZrSa2jol7qzPXJPk6nIGbVbWfUvcr7hO9MP97ZVXpggOu6ajplYStj7l1XvbRMXbPAbp6HzSSBlkraNknrvfVCcPt2sHYi7f3pTDb47KUbYxuvKqkKpYBXKBnV869c3WgbDEixAck0FGFFfEzJzbIsO9C1TyrcymWWsLZGIHoW2rqTzdo5dXyykz0NC8l779i5vu4zwM+eHVntGP5jqVTq/6AkVc5NZ3wNH2lVxNWZNIukMSjiNd9z0+CHp5DXAdX4SAg203w8GB5IATtODHzdK8C15kEjhXvNS9rWA11dnfcMDY9prscss48RySakrOLWqODCoIKAgkuVgsS0urtD60haeV1YYVbbtjUn6/74HXvW/11huFy3PwKzT1r797Upe3jq4sib9u9Y+wxe+vh7W1N7jx49v6ZzbffnQD4/Cj1Pfjx54XiBls6GVuTUc9mQsOIO9mPQFdkIRlz4fy5JLm2ZMOqTcJaXIqpcqnixVe+rdbZ3dbc2OT0D0wZIibHSksmklslknvx+//q3PiKnXcTQae/b+LPQ3r1t0969cOL6G7o6E09qgZegdMJBpVQ1DbKCpyUt6oPKz/4NEJalCAuZFIuEVBJd+jgLh4rvAiFqUVGkhJZMWFp3Z0obGSu/d5gSnWmavuO6h+/cvYHSobgVgoAYjrb4QPMUiGtj1/79jBMkLBwiTlMASlYzTkhWCJyTrGAyMOFkst/BoYMmuIIyGJYcMXMMdNwHPhYN1qWS1t6ZLGaKZL8yzFXTr15BooLLMugHMBRNKgW+It8y9TEcJGt4rvcRFCCEVQbFdg0Swmrxkb0+cf2XOzq73kgdFieEXF2jdEUJKQH6SVWQrNjtZDKlpTPp38U58iUbthk/Ph7sN6zg/xudSGvD4xkq6otcnnjyF0XRRTflkyC0IIJE1JG0QbqGNpMNp5xFhRTcZDNoj66988SFm5vv3LX+WkGUXLYxAuXnCW3c4XbqGs9hwjv+a9lsuN+ahOJSCoLjNDAFvVUll0p1aNPp6adTweSflEszPO48oFn+4yOTmR+6enOshKyYhzWpf/jDuuf6x2aV/qNRaPG/1d0gUXWCA0uu7GhMmkqmerEc8KOVU0lMuyFQ+Ylut562YX9Sncmf7Ojo3BDZWbGLtMkiUVXSWTFNuMqWuYG530f7+/tnGFboxsfdd9mm8XdDo9O7rg6NFq0CFqZr5DWlK9qV0fZqGvZchSuPlevB2VmG/hOV4yWm3RAQwmrhEcW64qu4ykfJho52Vp3J8quBYQooqWDKADftBd6HD+5efyoKj/zR8ew/hWXY56/cnFh7a3RCTTGjuMX0SVB9qzu1qfQM+jO3dBW1g6uVSHv/qVNX10Vh4rc3AkJYLTy+WA/8ou9kJjo7bOh+DLVFZ64TEbCyBktxI5PJZj56R//Gx+NdH5vM4vuI+p8NXh9LjU1iw3EZhXc8TyPuuV9wDaaCfBjTM06N0hVWQmHBDzvSDZ5tvqYR7ZAymh8BIazmH6OKLbzv0KZvJEz3ZzEFnEolaEtV2XEaCLKadrIz//TQnk1/EU85NuH8th8Yf4j9gMZUOrNkZEVZCnsbtTU9KW18GqcKFyjh420sd2+j33pg3F8uTsLaDwEhrBYf04O7N/2t7/o/C2FoGnsIy/YGlvAwSfCvZzLOe+8oR1ZT3u/5uvHJC9dGtJlMrfqjslXVHwjpat2aLi2rjFFLjUSrFUjlO0juddXSSXx7ICCE1QbjiHO0/hofbPgwpnDTOR2V6hWNQqGUx34890noet5yaO+Gko3Y45PO7/uB/lvnrwxrWdha1absbgxo1FWtwplXqYSJY5Nn5lU3bLHQmGA/yko0plVSSjMjIITVzKNTR9sO7dv8RSeb/T9BWmMkKv4D+YzBXuljV7yxd+zfte6VeHGKrHTz4+cv38JWmyUmKzSGG5z7VndoE7kz3uPtq+Welvhwm39weVjOyaoFsBZPI4TV4gNY2Pw79mz8KyebeRIH+VEZTaX0sf27+v794TKmCxNTzr/2NOPj5wZBVjjdYSklq6jN69dyKuhqmWztivYob+RTSkPbe/xMdlMUJn77IiCE1W5jq+s4dYEO6mzsYAmvi/+CrH7LDYxPcBq4HGTFVcG1ULLT5orS1ULIkoSFI2cMHKG8obiXcteOCAhhtdmo6gaOh4EWWlkyYU9gvHswXfgV19d/7+LVkSWfBrItJJhObL/p7elQR8fUZnEV70XxPc01sM+xrzhU7toRgZIHuh07uZL6xA3LBaYB+Ar8rBsfz34YX1j+D5eu317QNGy2xPquSE4mDuXb2IujY2AgytNE67RiKFshzuwCR5s9ZSMlsK0QEMJqq+GkBKOF5yFzRoidK5BoFCeMjM/8mG+a//Xy0Li55KYLBRiTrGjwOQ1br4VMBQuKVJeQKVPxMLlvPwSEsNpsTEECmBLSgbHUpwD1YGwse59l2p+9fmuig4fiNZIowrqq/6Xeqm9Vh9JbjcOKvqFtACX7gV8kTVZvkaRoRQSEsFpx1OZoM2iKxxuHLtDcsZlgLzYZfv7m7XSv+r7fIm234XSP/8o5ktWqzqSyZr89PoXPYDTYkZvziw0NLluKayoEyq4iNVULpTF1IaDjHHZmoAW4aep9geN8fiLt998cGYdtVp7K6iqzXGJFUCAi7jdkuapsBJKcPBwgyP8YRyV7B04Q3dDbpY3jg6gupoMNla5U41BbUN9n0sr1ScKaHwEhrOYfo7paCAW0WiWknihhW/0Tabf/6tDtxpIVSIhGnz1dSXUkDL8fSHKi4/lWPId9Kp3Vxqegp8J/m9f14D6DQ/nmb281FwgkZ1Dj7bnSSFx7ICCE1R7jmO8FJJr8jCvjeNrIxFjDJBpKVaSlXhwDw384MyucBoLAGEfHI5ptO6n1YAq4FjorH9IWjUOnFlF3pj62aui3whbI33ZGQAir/UY3XCVEvzgdw/8NcSyGUhSlpVWQrFg2p39xp0JYLyIohaXxdZ2FGofG6yi85/QS32F0Asu8URgu1+2JgCjd22xcsVElPC85169Gaa1YTkRWJKpSqooBiQQzONvq9sRULKKxtzzAEJw1api2EFZjoW3K0oSwmnJY5tcoSD09HanEDztubnfO/IopyUWC6sUmZUpW5aSqkgwgK04DxxaZrFivacCaIdAuH9zaM1rSDgloOwSEsNpoSMenvU93dXb+EE5taFivKElRqd67qrNmsqIF+yjMF/i56MV2JqadYKxXMDXM6+4Wu04pf/kQEMJaPuwbWvPticwj4Il/NnTrdl7JrqaDC5wTUle1GmdWWVCw1+JotjA6PgnThsIdQrXknF8arkJi/+R355dbcrUaArU9ha3WqxXW3tHR9C5dN//T9eEJ3aGdUwP7T0V7F86Mr0VW4mF6o2NTS/ilaB2HDmb8wA2+08AuS1FNjIAQVhMPTi1NgwRkGKbxRxMz3uaJSRzVUkumOtLwo6Zc7aOkVdEhynN9NQ1cyuNqeEqD67mX9TXGyxXbJhFthYAQVosP58S0909czfqJqzdGODVqaG/IUbCWr2p0yukfp4FUtDfeir1yl8IPUGjPHFy/fqJyKolpJwSEsFp4NEfT6Z3YBvOp8MvMc0hAi9hHNQ1cBrJil5TUZxhfXsTuSdFNhoAQVpMNSD3NMTzzU1PZYAM/ProYkg3UV5rHT8lXmA7SwnwEq4FLLVkRI04HM+n0LdvzvlEPZpK2tREQwmrR8ZucCd7hePr7rw2N5PfxLUZXON1zHKz4kb0KnIttP6Njk8tyaimbwXPrsW/yq3v3bhoqaJZctjkCQlgtOMCYCnU4GedTI+NpQ32XbxH7QOmKG5nzdIWZJz8HNkKygqI9TmSL2JSiovGVn0A39c8WBcpN2yMghNWCQ4zPc0HRbr6GEs6chJFnmfl3knZO4/hmII1B6fiFG9br0s6qAeXPp2WUrhzHeXH/jr6n5pNf8rQuAkJYLTZ2kK7Wul7w6zeGx9DyUsZovOodOizosTg1TM9k1Wogpa7lIisOF+w48E/7E5B1Y/cgtdizsBKbK6c1tNioT6X9n3MDcyePOo7OoJqrC6S0+ZIYV+GSOHxvc18PJCxXG4ed13I727axqTp9yk9rX1jutkj9S4+ASFhLj/m8axwdDdbgELxfGsLpoZyqVXPVU1QugVJUV0dC27p+FaaBWWxknq6ceAljTNMiAf/BoUMbJpewWqmqSRAQCatJBqKWZpgJ731Zx9pJM4aK0hXe5vlKVFEbKFlxs3PvqpSSqpbzKztRm+gnEkktnU6/2GFMfa4wXK5XDgJCWC0y1iAR6/Z49iOjY7C5qkG6mk+3SFQGlEP8FFdnygrNFqBsn1OxP5+K5pGHbcBhqhT8fqu/v39mHkVIljZAQAirRQYx7Wj3Zj3tddQjVVJ4l50CMjHe8mqOTJCCvmoTyIrENXx7Uinbm4Gs2PZUqkObnp76i0N7N36tWl8kvn0RaGnCGhgILKPn3B3+xKVXDh8+nPseX3sOlpt13+P4uonv71WeDqLr1ampFB8S1JrulNaHc9rTMxltcpofOeWns0rTLkeIZUHRnpm5YibMf7kc9UudzYNAyyrd8ZLpWvfgQT8w+oyevXeo++bBtaEtQd9s1/ffRsV3I6eDJCp+nourgH04UZQnhIYfWm1o8xdUGCU8/E/bil89sH3dlQUVJplbHoGWJaxnXri2HTvd1nEEcCBS3z++MLi75UejQgcmJjL92ax/gNJPo6QekhVXAbdvXI3D+XQ1Bcxiu02zTAEjKFIdHTQS/S8Hd2/4YhQm/spFoCUJ6+mnL651gkwRQRmBt33gO+c3teNQYin/oG6aKX5rcKEukqqoWN+Ij5vy81v8UATDG0WGC21jlJ96K6wKPpWd8H8jChN/ZSPQcoR1+vTppJPS7iw3bIZl7n/++eFV5eJaOczX9Z2YvM1LPxWpocBHKv8qHHdMqSphGUqqahaThfj40ITBcbLnsDj6oXvu2bS4n96JVy73TYtASxHWo48GxrUx+5Cu+XY5RH3PMzLGxF0ktXLxrRoGNVPPfNtOolIrgElLGYH2wbZqcipdIFVFlDbfGhqfj9bskCaHHS/7gTt3r73Y+BqkxFZFoKUI6/C7Lu/Bl1jmlKB8PUhcHjHufuyxx/g5lbZw+BL7bX4EoiZqyS0T0uM0j1+82QSl+ua+bhxj7GjD2LicwWkLzaarigbKsmDJ7gcTmezMBw/t3ixntUfAiK8QaBmzhq8/f26j77pbaxo3w+jetPf1B5D2RE3pmzyR4/nH+Mti4Wx1dUrCHO0lSVGqskFUnakkpn6mhu086jgYHkWTW3Wbo4Tli6L5gqYHE47vfeDufVv+YflaIjU3KwItIWEdO3a9Szc0ElDNDqcLbHjmxas7a87QxAnX9ljfxcr+Mzs29ykpi1O8iJjoR/cm5o7dnUl89LRLW93dyWmVIip+Kp7pmlWqIvQ8Mga9Gslm3Efu3LX+K008HNK0ZUSgplnGMrZPGxgYsIKeXa/TA61jPu0w0+7xBx/cd3M+eZspD0wbDgWm+RXP13cODY/jWGKuGAb48jG+agNpilbqlKZoWDqDY2AyjtNUlupzYZlKpXgaxIVMNv0zd+/d+uxcaSVuZSPQ/IT13TN34QRvZW81n6HSDdMLUqmjh9tgd//Fi8OHEl3JL3Z2dh3MzGA7XU664llVWRz/QhLjNYmsmaWp/DjCjqIDdlaZTOZZ1/A+fGj7hjP5OLkQBMog0NSE9cSRszuswNhdpt31BRnazM3U9IuPHDrUuG+419eChqU+cvzqjp7u5P9KJpMPpqc51Zv9QntLkFQBEqZluVCw/7nhaP9i376+8YIouRQEyiLQtIQ1cPT8GjOw7vE8tyFtxBrb2MBXdh579FF99g0vC0nzB548ebNHT2l/aFmJj1BPBYyav9EFLaQ+jdPAVNL8/pZ13a8qiJLLOhAAjvrTRy/d0enbF+69d0tzHFhWR/vnk7Rple6mp+9uFFkRGF8LVj/08IUN8wGp2fIcPLh+4sCu9R+F3ucj0MLf4vaVVnChqYWmdaQS2jpY2vd0djh86Vqh7c3Yxm8dudTPxaW0lrn7yJEjZW0Tm7HdC2lT0xKW1xecgHE3FDWNcb7uDh6+r/96Y0prjlIO7ur7TOD5b3ayzt9ylY0Gl83qKFXZsCXrXdOlrV3djf2LBr556JOshLDmMWhPPXV6vav5O5jVxYLUhNl3iIbV8yiqpbI0bQcP85C2Xu0l3dczC0XUN4Pzb71339mFltOM+Q/0rzu5f2fvu1zH+QDOt3uZ0pbVRMRFouJK5qqeTkhVqyBdtdUmhGV5JI4cudrpd5kHiyp3tTU/8s6r+4rC2vCmaQmLWJO0Ep65INJK2tbpt75298U2HLuiLh3oX/95L+0/kHUyvwTieiUJHVEimVzy1UKeWMqv2pCoKEVFRNXT1aHawnBx80eAZj7TwcxdAc5Gi5fiaNnNT37nCk4xaV/X1IRF2B94YHt63qQVaCcfePX2K+07fMU9U7qtHev+xE/7r3cc70O+6w1gxuV0dHZiusgvJS/O7IskRXLs6KCxqj+B26t9a3uUREWi4plbQlTFYzXvu+7tB3EIUGel/L6e3TNw5NS8zYAqldss4YvzBC9C7559drAja3qvDoyg6pwCP+KBZaVOPPjazS1vMLpQKE9fuPnawDB+EqehPwzWuAuSl8LPg90WVxhJJPWQCUmPBAWTBEz1TFUGpqO3wYYvIPgr2az35a2b1/50V6f1e1NTlVcvEzB0xRekj67usu5FmS2/crvQcaol/zeeObfTSOj91dIq28PxiaOHDx9quy8LtQxhcZBqIS0Dhkl2l/3yA4e2j1Qb2JUUD1Iyz1waOQib0vsxKXsAFvH3wMB0JySwtZC+DBPTN5BOCEnhrI1BuKe9l6tIzsVCiD6E0DOabrwI2elZ09aP7N3aNxjheXvK+a1OENa0EFYEyYL9rz072Ju03ZpNQKj7Xd899cKhNrA9LASvZTY/s9GcHoK0XsrakLS8UklLxyl+/rj+/Qfu2367sJNyTS7SuZfneO7ffweBGScu3NwAqWgrTvTc5jjBZmw87tMCfRXYKQWOgula4OiBOQUZ7DZuhrAGdQXxV0zPuCaGnkv3VPGHOpPw7+QPR62OM5HhdNddGOeX2kmCbSnC4mDlSStVTFr4eLljdHV+702vWz9R66Cu5HS5h5hmHvz3QiOxwJTRo2BGgY06dm7OVhewYGAY6s75oD+ZDs4JPY9JyqSCQ7ABqftd5VFM3/j2Ja4mtsWpJQSq6ZXu5UZTKeJnsHpohiYPRqBn04nkS2+CQWW59BK2dAjwS0Y4IHDz2ERWG8Gnwm7iK9W3sFmbvrqGPzw6gW8eTmvTM07XmTPX28KYd7EQ3rjnvv1QFHbPt3zT9DcMPHd+13zzN1s+/hC2rKOo7NjeQdsxT5LEWrYjbdLw05eHtwWe9jl0542u62HZHZIVpalY/yIlP5X3MHYddLLZfy4fmYiBhNuB509vw+rG3tKY+kOwGHLi7W/cS91jS7v4s9TSnZHGLx8CICH9lXNDX+zpWfXuycnaBV2e3e567nAm4973qv0bzy1fD5qr5oEB7KXt0u7B3Loh7yhWVfypbOalh9+wr6U3mbfklLC5Hi1pDRE4ef7Wj+EEiZ+amqpvJT2bzWjJRLIPR3n9riA5i4DZg720DSIrlsrvHXSZ9p7ZGlrzSgirNcetqVp9/vz5FJTqj6JRejTdq6eBMzNpHP9s//QrF4bvrydfO6f1JrCX1mvcXlo98Kembjotr3wXwmrnp36J+pYNeh5JdqRem83O77gxkpxtW3bgOZ/g1HKJmt3U1Rw+3D+zrc89aunagnWzpq6PdxujLz388L4F78tdbtCEsJZ7BFq8/sHBoMPX/I9hyrGgnuDUUZzrnnz7yQu3HlxQQW2Ued++fZmJ1e5LoPB5k5ZpWCPXz+08du+99zrtAI0QVjuM4jL2YcIZeh+2+9wF49MFtYJSlgmHE0g/JlLWLJQPg7RmhtyXsJ18eja0tivsXhj6xy9ve/mRR5TRcG2ZmjyViN9NPkDN3Dz1FW5z9XM4i+s1ME1YcFNpUIrVLHzJzHnwjl0bn1twgW1UwPHjxxPXpztejR0HFTc+F3YXRwxdfdM9W08D0zrs4wtLaM5rkbCac1xaolWOvurhZIPIih0OdVm2haNTfqUlAFjCRnJP4HBn+iUqz6tVa2nGpTe/etsP2o2s2G8hrGqjL/FlEQC5GHghfplSUSMdvwaEA/9+4vjpa3c2stx2KIsfUek2dr+EuXNF2xEjSJx98w/tbFt7NiGsdniSl6EPp84O3W/Z1oPzXRms1GRKWdCJdeCIlJ+vlGYlh997r+70+EPH8NHJEtLCauCph+7bmj81ox1xEsJqx1Fdij4Zxi9AT2KSYBrtslgxhOD2gWOyz7AstFzx6zFHj1mGobYUYAgC9cHge3ddK5uhjQKFsNpoMJeqK6+8cm0X6noXiWUxHA8WxAdWNyQM45HFKL8dyiRpueM7jllmMGpnjO+1w9fNaxmXxiogaqlR0jQdAkeOBPjczrnOiQ6jw88ESSOA6KT7iQzOHEvavu1pZsLQg4QPP/DdZG9Xx/vWrOr+mfR03SvtNffdxleAQIgvTzjBT0w409Mpu2faufZy+vDhw5WPMa25dEnYqggIYbXqyNXY7i/jCyvdfmaVb5hdVsLp9LJGp43j1/1A7/RdvdMwPRzEboRnLVHe9vEvL3eXBOB4ZMta22H+TiqV2LJQ26u5u6Bju44Z3J7O/Lvp6cwPmBanOwQ4uNHRTWMK21bSvh1Mm642nTWCtKkH07rnTE72aOO0XZq7bIltVQSEsFp15HLthg5J/+aJE12m3tVjOPYq1/dW4cTjHnwMYhXOce8xDd3y/PJW6OpMdsTRVy4iK/rKMR/jwvz825VIHFzT3fkx13UW/dnhRy3GJyeeHEs7n1XNibUPFvY6vtGDw5vV9w0Vofn81qGhZfDhi3HX8SfQ/3HPMse9CWcCX0gel2OIFJIt+2fRH7qWRaYJG85NxldGzV4tGayFSLQ24+q9ULyu9gJfMU5ELTn6wUISTl03NHz1KzyiJLqmX657OLLdSJgoXTO7cBxyN172blier4YCvBsFdSNXV2dC35tKJrbzfPfFdjwvC/qs9MSMxxNRsSqmT6LhUDQHE+jUBE7UnATXTuLsrRn01K2l/x6+qItiR3TNG8V59KNB0DGSfNXGUXwJY2Gm+osNhpSvEBDCasIHgVLTt75/aQ0MnXpBNb2QgNYEntfr4wu/nBYpKQLtxtdwAh0SBX3VDe7nM/Ha5vf1Fb/CURS2bCTAWWuxR229qRsbQQQbUed61LfW14JVKKsTJ5sk8WUcHbtlNANyTOhgcmAGKH7p3m1FWpqtuZCu+LByVdKHVMjpKEQrBwIW9tnpXOIH+QTDSH/D9f0bmCLewDn1I4HmwtAypPDZ/oe9oXKf/aMPsWxSs/RR13FHrURiZE1gDR86tKHEdCDMKX+XCwEhrOVCvqBeHNaW6ui11/mWDtLQ1kEiWodXE4rwYgepAPssTPCMOjIdAk94TZ8pMZjch8HjDorGFUTUAwlkh64be0A9/ZCatiDZWtOyE7ClQmIdJICJFYhA+TRV4Fo5/QIHiUvrTEbkVRCxiJfsSBbfYk87OTExXxdazY5yUgiRKfpHQ1YSkONmAZY+gV4NIeVFfCXoLNA5h/Plb5LzWAyzF+IVXdNnvO/6GcsyhjC1vmWZ7s2pO3fdOqzriy9asnJxZREoerDLppDAhiIAEtCfO3F5rW0a6z1PX4/nf53nG5RqqrpieSnULEVh8cx4E7ugH78H8tG9eP/24oVezY+pkpA8b/abhPF8le75BqdsXUtaFeaTlTI2IByEoU1l8oq1mkokcZHElIRoWmpejMMCMyCvQXyy7JjjuUcgOl4tLCzCMpTHgFpcgkViX/dH/ax2Szf8m2Yqc/MN+1r7BM/C/rfCtRDWEozSkbMjq7NTY5t13dqE6dhG3wsSqlp+C9DDi0ifLrqmT1f6BgUaPjiHN0lJAGAfvpWcI4XjiHIMF6ocO/EjmMa9HeelQ1LT1PRpoce/sJwOTCQtc+kfGQp6Uxl+9JWtmL+jNEaJ0gKBgbsygR58B4sHfwV5aliVWg3vCHv6ymHcdG868IzrVsK6pnd71+/dsmXxbD3m3/W2ybn0T1/bQFe5I8euX+9ybuqbXMPbDA7ZCKV4uMOecyz+9OfmWvj9x9zEw6JW+JuOX298WhE6qtwLEV3TL1tb/AWj7sqwfqaro/sdmcyM+vBp2XzzDEzaBiQsNH+e+eeTjQ+ohwqnG0BYhfVzNYKrkOmpyauYYH8KvD8G6RPBszrC6Jq+ystl0ghzXEZjR5+O4+iZwTh+eG7Yqa5rq/3hGzzTSkXKn4YgIITVABjBP+ZzP7i8ydasrZCetuCHvIvFRs92SEdlpnCYE2LOQi12OA7RNf1yjrphHIyE9yOXPnfNMDg70DpdTf8DWDKs5rRvMVwChAWrUgh21HzllD0NrigqlxKVC7bKQuOOWeGiuI7OTkhb6T8C/Xw3xkel9cXxj6eIxiY3Hhx3X9dHsWJwDaa3l1+zd9Mt/F4tUk/ijWnP+/DBb8++LWqvnh0c7NDGta0pO7kl6zpb8AJzEUr91kYEFdeBRCt69Nm4+AsSl6jwjVGckY6VwPwUpLhLURx9xliWvxFHi/w+zB0SWCnLsVpxnoXesSI2ngp4zmRJXPgf/0IleGH51R6uwjeX5MR76qtITh7+8N9Cp4GF7Sm8Zl1s35pVXVomm/5c1vG+Wm284njHJeJq44/FjixUAld8w7uijW6+xo3MhW2S6+oIVHumqpewglJ87+LFtcFUcqur+1vxwPcZJqYPMOyhXw6GKI4+4/GwQpjCBhe+6XDIpFb06PM+np5hhS5eXzw9bLJ2pBLGv4Fe36BU4kA6IQGw8MUY6MJywVeqDs54Z69zrWdY7jI3G1ZtUiSV6zzDI3IqLLew/wu9jspl+yywrA1pEed5QceXPT3jBb/DLrA5ua5UHZ/4eMTbFx+fwvE3DJO8fANrjlctL7giJhRx9MrfR89R+VgJ1Y6currONuwd0FNsxwtV02mPlWGLy1TxlPHf6Hh8PH9xesvw9yRM+5PIRT2ZIgVKKZxWUY/PT8aTFPji0i3m4Ed1hDWV/7uY9bNGtiGqAyorJRWSqCgdkrQiR5KddrwPlsq8xfhG6efvx8dvtiQczDdmmPaldDBxSVYeZ3GJXxUMWzxq5d4fPz7Ym7X1HTAL2A7NqtJHEQ3qtCPjw3LoxB/v+OMZ5VVzR5aHWRuErYA+y4uu6fM+Xl9J/lh7bFvbY+vmv0bWos9tsXAWSLIiaSnyApHxJz6SbFSFuXTw8i86r5vVRW1m+6IHmUREAuI0lcREP5q2ztWPrO9/YK54xsXHI56+cePvj3qBfimZNS+J5FWMcrjptThsRd4dPX9+DcwEd5iQphwozfkCwJKaLv9ewHYKeicfSudwShcnJDBBOD3MTwGRO0cqLIj73jQTaejDBYaPHTBgJ/i5+HyYijd95sFhRzkzB7yL2IrCtGwezj9nOQVTUlfPwiicifnu5J0qHHd8mXHIG6ZD7JQqIk9kJK6QwAokMWRUhMaSeJ0vcfaiXNhs7PyuwpYV51Vh+EM/Pu2M9GckpyiOuZm2Wvtom+Y4me8xPbvIIujzPu6Wbvyt1ejL3U7Sv/v754ZHsORwaX3KGdwiJhO5pzY+Mivk/urVq52jTnIXlEc78LKu8qAMx/G8kHhyOicosz0ovM3IrIDKb15HSvDoOoqv+hMLYCOWI8ash0vmufryZVcqLz4u8fym3ov1xT/EVp4UDUTn4/iS0xW+sZTMojASmLqGp64iH4FRXJQ2TKj+lv7JVRTVxwQkm9APyaboGnGMzSVR6VR87ipsVT645ovOzi5tamb6zzB1/nqzjz+s9YetwLioZW5C8jq08K9+1IxS8yQsfF6ap1WL2BK8VOaJc6NbPcPrx7wJ++hmHQUPvOaQgMJ3ETtVlERDP0wVsQ19uPgcLQyt/Dc+p4jlL6k/1xa2qVyh5ApEzEoErm/DsPOTXV3de6anq36roFyRdYWVbVSshHJEMt98saIXfIu9koplYZL6m/hUz7kS/Jt0/PE8+Jj6X/Y6k+fv2tA1BKIvB/OC8WnGAmp5dpqx3XW36fjgYK/upXbhFd+BrRlqn16MfkrspkoC4hnirYjbUVWzs4rHx8uL3cerjwt0TA4RcBcsuX8Rn97q54okVsCKJJ9YkSvy1gJR4aOtnAr6OJP+L13d+BKBKMEzHhAfgDh6yzD+vqHjTDDvYpAxLqwEfVdbE9bpIEi6V27tdLP+LnzPrWS/XrRTnz5d4e79+LNY7r4kP+Z7Jv7z1LyPL0B4Tb+ci9cXLy+eJ54e8Rw//rqqcUR+HOrgYVprJbBl5E2w63oI64J7k8mUDZLGhmAXs19ucVkxP8gKQu4ptCxbMy2TW3KAGI4u1P207ztH3CDx/7bL+Cdse8h1Zy5ev7Dp8uHD7blJuy0J69TV8XW6l92Dl3cbLG6g98idbhDgdANcY1ZY9o2N4mpNr96GRf1Da3Wui0RW69F1bWslvp81LD2xDTOGu9DhQzBc7AcYfYlkAqo6A6ozqHNBYJTESGitTGShsp0qQSxT4AcoPJQw0LBlEPhBFakHDjoLvY+XgVIyg7WK77tG8n9pvpHXBbXL+OMBd7FN6KLu+uf27esbX9RHdIkLbxvCGhgYsDb3v2a7obt7YHakpKmYiqgE2ioqJbzIOszXcSov/DAzRRNehyJKvPx4+igv/ZLKEaCkoZxUFMYXE1I8f7Xyq/UHp9CkAlfbCF3NdlhS7IQguA0N2wiJYy1ktC5IISb1Okr5jSYruy2SGlYkIkKLSC3yy/WrUWGzSnjaTUX/QEhYQuNewLCdwBFKRkpOuAfr4sBnwwfDg6B0MHagORhBHNqHw5WxTwYav6lAt/42MBLfrYZXHO9w3Ftr/B0Hp0pY+tkD29ddAz5ln8NGjddSlNPyhHV8aKjbzAS7Dd3egRcvgRHJWyrHASw9Pyp+vlSxEluH0jWAGQF9VVZMpxHVRZ/xSKQU4PR5Xy0+/sLQZCFS9DN/XKtSeh5WrL2x+sMyZv+W67+vwz5eC7oDx12rm9pakNg639B68XL3Qh+2Bm94DySxHhg0daBHSQhiCbyyyMS9SDi8RhEHyYP1qD9qak0S4VGn5VYrSTRKEkKHWYYiHuQmCYb/YKYLqS+3H5LYckxJmz6qhSYJ5yNgzgtuclESpncBfN8Fj3lgJdCSGpHcGECoxrouMoHjzO+4evLLMB1VKxJV8Wyj8Q80Ix043jnTu32hlTdkh08Yn7UWcnio9Qs3pzZm0lN7LCOxIdIZxbuQ1+lAVFFxJB7aMeUIiPkiPRPjo2v6dPF4FVjHnxi/oQK0Az/bymf5uI7ayGLj6eM63nrbF5VNXzV7nv3HViQL3JAEaSV1z0iBNJIgJBCYkSKJYbdjEiSHw7a0BI5s6QBBbINUswMUsQ6E11UojZGccA9dcZDBdQY+TgyFTgkiEKYyIBvstAQzIRk8cBJ+A2j4gZFDFWAqjAp3V5IhQYYwwUJ57ByS0QINzMYK8FyrRxt3KNbXb2qG/UVNT5wDyCt6/A0boGbdqzPA4tD21SPquWihPy1FWHjQzYs3xnZkM95ePIZd8RccBx1xez/UPowp46I4+uVcLD9/8Plq0Gfy6Jp+uez5uqPyY+UtNN5DuVQc06drpv4bIDXsjtsMpdkOSC79QK4Xog3PzwF4IBNCBiIhpBSpoE8jioqWaM2KCRuOqwLXgIQItKIe0lCYD/lZjoqgGIo0+J++SsmMKA8eqQ21qHuUh2PfzQHN6vgG6vVK8GfmQhcbr3Yff+AEi3rtdCtNF8u/eIWD2ATXx4Mg0XH1Vr/hm7sDQw8PvyvTrriKWocEE0C6oM/kJRJHrAykgj6WGlq+JUifu6YfS6pu4/UVa6AgQcXKi78ApekhcWFBwMstEkTX9MvVHw+Lt2ex+4+Pg62CxgsHEwZbAdgWIJfA+ICkfDRYtyAwWWB7Ay8F8VT/KB0bOJ4Gx/CQfUKSwZGrJJs8iZHYgB0zMB+zk8hopQ8hEcEog2ERASIBAOL5fIrVIKLxXKtzKPZLgZUckvGf+/nH5HsK0+Uz3316zeAjj3D23Lwu90w0ZwNpiZ72UnvwfO/AXIFnXfLBxLOsHn6yiLqmr3oQ04LHX9hq6TFHI6txrlYWkHj98UT1lh8vryR/rIKq6aO204drdP8hRWF3itmLUw42QnW1CSTSA2IAIXkWOBYKLWw8wjVqNkEaFqjFwLQNJhWI4ZiFoiq6QX0SbsEo6HMoWVFCYprwjw6FP65BXCSoXJwiOwpnFK9A6yiWkQhRDwA9XAfpwLS/AqnqSKP7jwapquiznXFXMn6x8Yg/X/HySvLHKqiaPlZfvf0H6BloAM/v3tpzHkJwUx59Uxb4GE5Lfnt2ZGS16SX3+F5mq4llfegtwnaSR6J5EC8hPUV6IDaS6aDnoZ5DpYe6AtdgOr4pyhXLNPH0KKCo/DDP7N+S+mI6qHzbQr7AbdgW+iylWn0l5cf6E29ftfSN6L9lGl04x30tOtMHklmLhxpClW9BL4S1T+i2uNPRp+0FflD0AN9A9LHnmHGBBfJCE3QL9ALiguoJqiu+64gDzWGIIAlhzhaSDsMV/yjJi3BxyY9khP9BXBSzEMY/AFORGMmM1yyKZfmm+ZKuJf4uMHV1THEj+o+S864E7zYd/8Dliqp2MamvPbt9uw4dY/M4DnXTuMuXx/scK9iHLcbryzfKwvOJBSGNPl10Tb8WV0xYyMFymDdXXv46Kq+ueChJQI4WlSUqf8StOf5CNdXqr9afxe8/Gm6AoLAqGKyCGLSG350ACFzKM2FvaeOseEhFOsjItdQ2S6wYYmkOdl2+CfLBvmpIV55vYY2Qn6uAxAWC40zbhxSmWArcQj0TSIiSU37mx0kgVesgLereOSz8E5EWJa6Qzyh1hZEcO7xY4Ct9WLfNvwa+5xA2h6uGP6vMPxMsZ8WNf0Gf+cOCw9usq51a5+kNG9Sn1IjJsjoO0LI7EpVra/vxhPdFs7JyjYriohlbTAKGxO1C6oJEljseOLqmTxfPX66OucJK66OUNzuDjK7p05UIbGwX25I/vrj4BYrnD0uZ/Rtvfzz9fPsPIkgkbL0DZNMFRVEHFEY2ZCBTcwMLdfCsCCVN4SwpE9YG+ARNgD24IDHYSYB1yNCYDkLRFoC8oOUG40AKQx5IYyAmlQ6SF7dDoSof0hbJiApzqLs43aPc5UG+AvVQ/4T7nGQFQiJ5kdbAkmgH2Sz0FaWB4gLrad22v4nmuvPt/yzCc1+V4t0e4z93r8PYwDCvNANxLSthkai0jmCf5+jq6y6Y4SkjTfoKprgWufj9Dg3AozBmiK7pl3H8WDH3u0YfLY6u6c/HVS2vSvsxoygyTF2q/qNenEyjJ5NJPYGPRidME1M1/JYqwyoNq32Ihu4J0z5M+WA2DoqwEI9wfmEaEhQJzPNsKNOh0jJwrfRVJqbnNOrC6IGwQFzgHiKrpCuq2kE+FizrMXWE7IWCEKemg7hSiimOQchNIC3EchqpHlBO95TshQThkwF5TL9k+Mm/MZLGzVo3AlQdLzagDle1vCYd/wU9/5Z5ZcyZPnNow/J8ZHZZCGtsbKw3rdn7nIzTx42o0WfP1cPKuYJ6XPFs5q7p8zmKx5v8cdcxDeMPOR1fj+gh4X10TV/dukiC+nJPeLy8eH1hrtm/UVvpKxcrP2oL/dlcs1eQ9PCeo73wGcp+R2Xyvlp74vH19B9EkoA2CYKUlcQqJCQj6vkoyBjh/IurcJiy4Zxy2FMptRBO7sK3kClR0UYUZAX+wMqfC1ICiYHMYBsKSQsSFKaAUEqZLoiK00ASFsgpN0UEUWE6yOkiiArE6NmUb91OWwAAEuNJREFUszCNxA0c/uBoF04W86YOarWQAYjGmHBBEIkUiXEqib025hNmInWknv6zKo77Sh3/RvcfSx5Xl4O4yr5Y7NxiuEEQFT4uvs8yrF5VvosX28LLS185vsiRHkc9YPiJtrCbJIzHyx3gJdfpl80flZWPR6qIxJghus7xjSqj4E9UNn2VvN76Csqq6XIR+48OYEeGlcAaXhLfQwxNQcgQEI9IErOOxBUuCuDLz9Arm5iyOTaYy7Jty8hAb2VCm43ZmwnwQTbgFpAWyA4SGEKhaMdgYNpngKAcpeMCAfFjYGE4yAqco3RZ0LorUqOkxVkf6AgzvFBPFbISSsOUD+WRrWijpcwbmI4Gomj4yxAIv4bPVU+q9sfxk/EP36UlfP49N3vNWr/m9CZdX/zzjDDofAoW3XHVr9NPHdB8p2+uORl/mjFLUktMbBTtkSJbpLCRxYyD5OpJps/4+DJuvq5IIgoLqfi3pLzcRuloM7QSzKImsBSWG80LVKkxkSvOkFHaCjL5QvrPN9rwvaSVtEg2ICmQCNRQkGjwnlOpNktMxdds+GxcRFrIyCmhTQMEUJjl4qwtzPbAOVC8o0DUZroGiMmBpEUfRBZ4DvRUJC4/1GOpij1ML9XU0PJdFxIZGsOpJkkOQ0YdFh5CPodKl0WfRqQkVUhTIEf1iN4GkdJU4Rx/xsJfHkpfMv4cd+IAUJb1+YdkfSU7NXp6+/bti7qquKiEdfVq0Gl2TO2DonYzAcUTCv0slCB8FuGia/q8j7iAPl30aNIPHVKq55w+00MvjFLo05WmV8H5P9XLzydVF/H0xbGl9UGfjm226B98po2u6fO+0f3H9M7SbT1h+FoS00ybSmm+5/RZHxzbwWvVHtSvNuLRR4BKl0vPtHRhWh1SESUsNBkH0qjvNiAx4MA1JDBc4yBmTPmwJArJCFM+dA1SE5XsmFIqRTzKUrZYkMio78IUkauFoW6Mcbin1GWrOR8nqOEUEUQFmuK3ZdEw6NFg92s9j3XLp0CIsAuS8VdPkcKhCZ9/KAc81x/c3NdzFjy6KHZc0YPNh7VhDg9jYnh4co9n2dvx1nLalys7Rimx2xLGigfEJBQ0Xr149FkBVb04BQiTlPAFbTiDxRGKM1pJf5AgarPKG0sQu413N07hkCANO5m0fSebtCwziW5DqMISHTRMJCDF23inYbmsauNCHq+Vn1ta5dErzKN8psP/RiIXVpAegKJQ30Y06AQSEXdAIpdL0wbTNsLpoSIeCwRJHZYBpTusIFAIlPC0iqL5AxoCcmLPQkkLdITRCc0dSFqQD1A51g4pLOXmhZCwDMO2BpH9q6ZtDoU4oKQIy5yEynFnv+mzw+0+/q3Sf5yT4aYs89zq1alLIK7wYeQANcCpgW5AOaqIARzxcudrXrMTz+cuFAxBI1Rw06eLKz3xsnDikt+Mmr9mWBlXrbySeJAlTt8MXJImXHRNv0zx2GpWZ3r0KKqzXHlRHH26+fQf+mkbg56ADjppUuihMJl7BEhGtmnj+4Phj1lEUAzjaQcgJkzcqPPmlI/yjdJV8Trf/+hbeYyP0uMS0zSVF8SEaSELxkhR6a7IC1IVHkNMBWEkCljxYQ7YXgWKrDCHw2ohJDDKSkr5Tst3TANBp7DdgkTFKSOpxYMtV2i3hXQoJjwbBo3L4oibAajdXmSbCl01PEvi6x3PetMvwfi3cv+xHpPRk8GZvo6Oq5y5FvZlvtfqQZ5v5igfH7iRdHqrn/H24McyEb6ejCUxkCwqEATi8JDNKtWRIxI6wrLj+aOyQgIqLT/KTZ+OLYnCFGHE60PdSgzIgVmcfrbt5evjYkB97VeNyv8plx/UYoChElhYgB7KtD3PAUWRpejIVNzNAjNzyDuYRqnrMF5dIx4CkTrlAJQRps2FhZIX5lqYwfFLOygTBeSmkUhDEgNvIC7MR5ML6JhozoCpn+858G1utbH4j7BRT0Z9VlZzbTyOKJCKeCjkqYbkFBJh+DXCPVcKuXKIFURlm8WBoZSFOBCYmk6i33ioT+Kw1CegEMspcFfe+M8+rRySNum/YUwm9I7TPT04NWOBDg/nwtz16xMbEp3mPswIOuI6G7wBSlynz1pQWZEIP0smIcEEWN3QsfJDn+nj9FFSPh73wilgdE2f+eOumo4pPqWI2kI/LKu4RVXLq7H/kJopRUFhnkj4joNT9KC/BlZgAIVD1I+cwASVUBgCIsF1KEQxJLpGPKHGP5LYrAs5ikREnmJ61KF4K5cG1+REVS6HC1JauGroYYcOrLWUEp6MSF0UpoZgK5hV2dgEzeNLYbMBnRQZEUPnOwGMT6GOp57Kg/0WTCMYjnsQHpDmlJFTR5IcNt/alvV1PdF5NsKcLSpGG03L6QcjnWDpeIXqgFYb//A9wGi1+fMPDeqY7nae6uvT530KKp+JebkhHJyX6Fqz33X83tCgRr1d6gXBH+XnFtEwDmEVMBfAtbK7UvHxVTb1gGLQokbFVBZMDtUJHmT+dsPxmqSRU2nkrxkWxhfbOfEVwLov4sIaonSRr1qZy6vy8xliPbn+qPjYHxSm6mJwdB357DfaVtJ/BMLeW0/ayVQSR6TA5AB7h8kwmFeRrFBUSFYkJk7GsM+F5SuiCQmFBEriCskHYcxfEM9ozBjBS/yaKD//rBzndjD3BHswAcmqwFdhOWGugCw5owwpEt9sxMlVGWQEK4GlcAOi1XAcL6eLICfdcMFmNDnH7xdO/YTCHTkxM2B6EiSPbuXmHrZO5eJy4Iu6lfo2Gu8orFfA+PM9UMjnHpBIx9v+/Q9Wm8nMfcMTE1d7u7vP4Ec6fzy1wqOGP3xI63JHjgT2/rsy/boTbMP0pe78dVUWS5wjK0VUjIqNN3kA62ZYeIcfxofXDFNFUZBTT4W6m71mWBlXrb4yWSoEYWh0jVIUdJEmzA6o18mRDN7dCplCEkK8IiP4WRAU9OO8j5wimZB3SAhKYlJEphLkJCaSEP7PEdxsfVG5UWFxP6qPPngTlvBED6IWLN8dTPmg8ocFPPRXWBdlFWqqCEmLlhAgLRtKdLaAkpQNfRUM6DUQGOUiTimNEaT7FvRVw/F6K91XG4/mHf9KPaovvJ36jzfSS1mpc6mUdhnvhZL4a0GjZsKBKK+n0+kt0AHvztCAsIzjeeAeUKVPF1l101cBWCICxcGmcPalUeHRnyguIsJYej79fFnpKxdjrKhu+spVK69Ke+OW6SXlh7Xk/8b7D5umJKY6nUiQAEmp5ZKoD5Ay8kTFzcAsJIrL+ZREYCWAaU4ubXRNP8wfpuSuGubHMwCJhSuGPCiYJIMw5GV6xkfY0Wd+WoPiBAlEhvnzNluw3SKZYTkQHIQ5J1RQDg7Lw/QQGUIdFp4wcC9KgQ/7KkxjucEHROVmc3ZaCFfEjMxUvlPvBZ0WhT1Q1zG06hQKyGPA9qEh4bPRJuO/0p//WvoPyXpa77BPr9L1mn64QiJRT0vlP3jg1oyn0/th1dnN6VOkQyh8wVRuPpLUH9GHi+sckD4vLaj43NSHLwfv8cKjbGxdgc97JUpFpIRbpovKYHTUltkpHYkyEqNYf1gWfZU+Vn+JiMZERS4qKyTAMv1hmwoItLT/aL6OL9cn8A4mknhDkR5CUuh43ExhAXjnIQVxRQ9UwnU1JM73meHISINzlY/1Ir3jwNQBtui5IpU3K2mFZbEUEhgJiHlZhkqI8rws7hPFxBHlZ5romu1CGRSv2HyQEQiLPkwefJcSk2o0mU+F8Z46KswbKd8qvRUWiq7BsuoYlF/q+Jd839p4/KNnFHhw+Fbc819r/y3dHO7qsk9D2lLPBvEq59SLXC6CYSCq1OTk5F48g+FxLyQSvvyzhFK8taaYL1ACiYdkkSOg/HVO4irmAySLlR8+yHy5wnaWysTF7YmnRxdyecMXFDcxx3KjNCUEGUtb2r4Iixwh5qebxEG58v2Hkh0ERqlLp5kClNLkngLSyF8XExrZi089SYbFm9DRg1FCbEKyoxQE8sqFkTOgTwrDVIPCP/k8qpRcGrxMEXmxnpwjUeXbhjpgA2bBNsp0HPQWOiwNOnddw5YcNIdSFyzTlUKehEbrLDxDNn7osjCXPw5FO22qgPfKHn/pf8XxxxetvSvYlX8BxBVKCdGDmPPDhz0W+Oijjxof//jHt+Hh2oko/qKqFx4l0BJQmQIwS3RNn/fxZXqGFbq4nQzimI9tKFs+S1S1KJ9XoQkEfUQwtKg98fSzefMMwmx5F28/IqK2RLjM2b54/gX0H0v6+IiDZSVgHJogfYWNzDMUpCtsUkKg4pKIUJAsnNTlkjNWzfBCPMOhi8JAiCSqPBmyMFVQ1OdctQwLywNZ5cPCpDl80D6IhjzBASQF0sUeREpSJCyE4ceSpJXbEO2612AHepaTSRn/YrtEAD3n8xV/ntv4+S96nyGRO9gccQZmEPiBK3bRi5kPHcG+v2T32n2+53bxNY8oQyWIB0SR9OmqxMeTh5lm/8azx8srEbCQNSqTpUTX+eagwCiPqiWeQAXO/olHV2tPaYUFjWCxsQJjt7MV564K6iOB2Xj1adNGa3PqDMFl4XwSSnAQCUIibqFPlwtTwbiOkoSR+JvLx3KYv9BXaSrlLyifSegQBNMFTAWhiIeFArRZnoX+8Y2EzKhbnuNlYO9wFpZXkwoH5Kmj/6qOFTz+0n8+Y4Y/2pVIcJqY35+YJ6wjEN33ZzL9kPY3hWjx6Sv+RcByLIQAZZYQJSn2C944FRF/QkvjQ31XZDcV04GVPOGl+WdJEhVGbaNPV3d7Va7ZP83U/1ACgzTjkg4gjUFvHhGWkrPAPnnBLNeFSEKKfAbzOu9yBAUdVj6cZURpZuU3XOUILioD93x2IEnxxFGc9c6M+M93cHSNZVzHquBQDeMn4x898wQ2us7pgGvAbyU8/z5e5EupVEqtJirCgp4KHxVI7sbrQIYKHyKF3+yvIvEEX8FsQNk9qXwgBpgQwNo7p9OKrukzfdzF08+WTmYrV35YF+tU8bEpYImInGtLVH+8PkzZ8iQcVpjrawXCLOHH5uo/9JmWjbXHJMQcNhVW8bOklbsumnJw7Q+cgtVK2mJxAUNNKKncp54KHuzAwnjCE01B1UIHA1A80ik/IkdIfTj6mE8MXh2sSKZhdHUd+IcDykwFLj4eMv7Fv+il75c8/xEmeHaojD+jZ4LgbsPVVvO5iutg4oSAFCCiAqVp/jrUKRU8mzVexsube05ff3tiD0Q1wkP/ojrYgeiaftiheHsjLKL4GrudTxYvb0H9h94bpzeAwCD4cAqJf5SmlBjFH5D8ChVC1Q8KyIkrjtgbE64y4lqtINJHel5Hq4q4ZdsYzsWBWaU+rkFWtFzQbiNNnWciNbT/qD4+Hitq/FdE/3mWzmvQU+W4hZZPenQuRHRNfylcvfVjpUqz0Tj6dNE1/fm4euufTx1z5am3/hr6z6lj9A9ElneKwPJ3IYEVEpqKys0YFeUhoDBP4TV/+bjVIkfqKuu8/ixC/+tqR73111V4DYnrrb+G8a+h1tkk9dY/m7MxV7XUzwdP3ApBgCYG6Co+L6/+kcB4X0g0ERFFzwXjojBc5q8ZhqOKtWEoROmLEwSWBIHowVySyqSS5kIABEYhisRFEov8SgRWGD6K9OMgq8IwBIkTBBYXASGsxcW3pUoHgfF5iIiLPv9x+03kuLxMqaqsUj1KJL4gsFgICGEtFrJtUG6OwDhtJHHhqLOl+dBAG0AnXRAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBAFBQBAQBAQBQUAQEAQEAUFAEBAEBIGVhMD/D0fV/fpMMM+gAAAAAElFTkSuQmCC"
|
||
}
|
||
};
|
||
const NoticeBar = {
|
||
// noticeBar
|
||
noticeBar: {
|
||
text: [],
|
||
direction: "row",
|
||
step: false,
|
||
icon: "volume",
|
||
mode: "",
|
||
color: "#f9ae3d",
|
||
bgColor: "#fdf6ec",
|
||
speed: 80,
|
||
fontSize: 14,
|
||
duration: 2e3,
|
||
disableTouch: true,
|
||
url: "",
|
||
linkType: "navigateTo",
|
||
justifyContent: "flex-start"
|
||
}
|
||
};
|
||
const Notify = {
|
||
// notify组件
|
||
notify: {
|
||
top: 0,
|
||
type: "primary",
|
||
color: "#ffffff",
|
||
bgColor: "",
|
||
message: "",
|
||
duration: 3e3,
|
||
fontSize: 15,
|
||
safeAreaInsetTop: false
|
||
}
|
||
};
|
||
const NumberBox = {
|
||
// 步进器组件
|
||
numberBox: {
|
||
name: "",
|
||
value: 0,
|
||
min: 1,
|
||
max: Number.MAX_SAFE_INTEGER,
|
||
step: 1,
|
||
integer: false,
|
||
disabled: false,
|
||
disabledInput: false,
|
||
asyncChange: false,
|
||
inputWidth: 35,
|
||
showMinus: true,
|
||
showPlus: true,
|
||
decimalLength: null,
|
||
longPress: true,
|
||
color: "#323233",
|
||
buttonSize: 30,
|
||
bgColor: "#EBECEE",
|
||
cursorSpacing: 100,
|
||
disableMinus: false,
|
||
disablePlus: false,
|
||
iconStyle: ""
|
||
}
|
||
};
|
||
const NumberKeyboard = {
|
||
// 数字键盘
|
||
numberKeyboard: {
|
||
mode: "number",
|
||
dotDisabled: false,
|
||
random: false
|
||
}
|
||
};
|
||
const Overlay = {
|
||
// overlay组件
|
||
overlay: {
|
||
show: false,
|
||
zIndex: 10070,
|
||
duration: 300,
|
||
opacity: 0.5
|
||
}
|
||
};
|
||
const Parse = {
|
||
// parse
|
||
parse: {
|
||
copyLink: true,
|
||
errorImg: "",
|
||
lazyLoad: false,
|
||
loadingImg: "",
|
||
pauseVideo: true,
|
||
previewImg: true,
|
||
setTitle: true,
|
||
showImgMenu: true
|
||
}
|
||
};
|
||
const Picker = {
|
||
// picker
|
||
picker: {
|
||
show: false,
|
||
popupMode: "bottom",
|
||
showToolbar: true,
|
||
title: "",
|
||
columns: [],
|
||
loading: false,
|
||
itemHeight: 44,
|
||
cancelText: "取消",
|
||
confirmText: "确定",
|
||
cancelColor: "#909193",
|
||
confirmColor: "#3c9cff",
|
||
visibleItemCount: 5,
|
||
keyName: "text",
|
||
closeOnClickOverlay: false,
|
||
defaultIndex: [],
|
||
immediateChange: true,
|
||
zIndex: 10076
|
||
}
|
||
};
|
||
const Popup = {
|
||
// popup组件
|
||
popup: {
|
||
show: false,
|
||
overlay: true,
|
||
mode: "bottom",
|
||
duration: 300,
|
||
closeable: false,
|
||
overlayStyle: {},
|
||
closeOnClickOverlay: true,
|
||
zIndex: 10075,
|
||
safeAreaInsetBottom: true,
|
||
safeAreaInsetTop: false,
|
||
closeIconPos: "top-right",
|
||
round: 0,
|
||
zoom: true,
|
||
bgColor: "",
|
||
overlayOpacity: 0.5
|
||
}
|
||
};
|
||
const Radio = {
|
||
// radio组件
|
||
radio: {
|
||
name: "",
|
||
shape: "",
|
||
disabled: "",
|
||
labelDisabled: "",
|
||
activeColor: "",
|
||
inactiveColor: "",
|
||
iconSize: "",
|
||
labelSize: "",
|
||
label: "",
|
||
labelColor: "",
|
||
size: "",
|
||
iconColor: "",
|
||
placement: ""
|
||
}
|
||
};
|
||
const RadioGroup = {
|
||
// radio-group组件
|
||
radioGroup: {
|
||
value: "",
|
||
disabled: false,
|
||
shape: "circle",
|
||
activeColor: "#2979ff",
|
||
inactiveColor: "#c8c9cc",
|
||
name: "",
|
||
size: 18,
|
||
placement: "row",
|
||
label: "",
|
||
labelColor: "#303133",
|
||
labelSize: 14,
|
||
labelDisabled: false,
|
||
iconColor: "#ffffff",
|
||
iconSize: 12,
|
||
borderBottom: false,
|
||
iconPlacement: "left",
|
||
gap: "10px"
|
||
}
|
||
};
|
||
const Rate = {
|
||
// rate组件
|
||
rate: {
|
||
value: 1,
|
||
count: 5,
|
||
disabled: false,
|
||
size: 18,
|
||
inactiveColor: "#b2b2b2",
|
||
activeColor: "#FA3534",
|
||
gutter: 4,
|
||
minCount: 1,
|
||
allowHalf: false,
|
||
activeIcon: "star-fill",
|
||
inactiveIcon: "star",
|
||
touchable: true
|
||
}
|
||
};
|
||
const ReadMore = {
|
||
// readMore
|
||
readMore: {
|
||
showHeight: 400,
|
||
toggle: false,
|
||
closeText: "展开阅读全文",
|
||
openText: "收起",
|
||
color: "#2979ff",
|
||
fontSize: 14,
|
||
textIndent: "2em",
|
||
name: ""
|
||
}
|
||
};
|
||
const Row = {
|
||
// row
|
||
row: {
|
||
gutter: 0,
|
||
justify: "start",
|
||
align: "center"
|
||
}
|
||
};
|
||
const RowNotice = {
|
||
// rowNotice
|
||
rowNotice: {
|
||
text: "",
|
||
icon: "volume",
|
||
mode: "",
|
||
color: "#f9ae3d",
|
||
bgColor: "#fdf6ec",
|
||
fontSize: 14,
|
||
speed: 80
|
||
}
|
||
};
|
||
const ScrollList = {
|
||
// scrollList
|
||
scrollList: {
|
||
indicatorWidth: 50,
|
||
indicatorBarWidth: 20,
|
||
indicator: true,
|
||
indicatorColor: "#f2f2f2",
|
||
indicatorActiveColor: "#3c9cff",
|
||
indicatorStyle: ""
|
||
}
|
||
};
|
||
const Search = {
|
||
// search
|
||
search: {
|
||
shape: "round",
|
||
bgColor: "#f2f2f2",
|
||
placeholder: "请输入关键字",
|
||
clearabled: true,
|
||
focus: false,
|
||
showAction: true,
|
||
actionStyle: {},
|
||
actionText: "搜索",
|
||
inputAlign: "left",
|
||
inputStyle: {},
|
||
disabled: false,
|
||
borderColor: "transparent",
|
||
searchIconColor: "#909399",
|
||
searchIconSize: 22,
|
||
color: "#606266",
|
||
placeholderColor: "#909399",
|
||
searchIcon: "search",
|
||
margin: "0",
|
||
animation: false,
|
||
value: "",
|
||
maxlength: "-1",
|
||
height: 32,
|
||
label: null
|
||
}
|
||
};
|
||
const Section = {
|
||
// u-section组件
|
||
section: {
|
||
title: "",
|
||
subTitle: "更多",
|
||
right: true,
|
||
fontSize: 15,
|
||
bold: true,
|
||
color: "#303133",
|
||
subColor: "#909399",
|
||
showLine: true,
|
||
lineColor: "",
|
||
arrow: true
|
||
}
|
||
};
|
||
const Skeleton = {
|
||
// skeleton
|
||
skeleton: {
|
||
loading: true,
|
||
animate: true,
|
||
rows: 0,
|
||
rowsWidth: "100%",
|
||
rowsHeight: 18,
|
||
title: true,
|
||
titleWidth: "50%",
|
||
titleHeight: 18,
|
||
avatar: false,
|
||
avatarSize: 32,
|
||
avatarShape: "circle"
|
||
}
|
||
};
|
||
const Slider = {
|
||
// slider组件
|
||
slider: {
|
||
value: 0,
|
||
blockSize: 18,
|
||
min: 0,
|
||
max: 100,
|
||
step: 1,
|
||
activeColor: "#2979ff",
|
||
inactiveColor: "#c0c4cc",
|
||
blockColor: "#ffffff",
|
||
showValue: false,
|
||
disabled: false,
|
||
blockStyle: {},
|
||
useNative: false,
|
||
height: "2px"
|
||
}
|
||
};
|
||
const StatusBar = {
|
||
// statusBar
|
||
statusBar: {
|
||
bgColor: "transparent"
|
||
}
|
||
};
|
||
const Steps = {
|
||
// steps组件
|
||
steps: {
|
||
direction: "row",
|
||
current: 0,
|
||
activeColor: "#3c9cff",
|
||
inactiveColor: "#969799",
|
||
activeIcon: "",
|
||
inactiveIcon: "",
|
||
dot: false
|
||
}
|
||
};
|
||
const StepsItem = {
|
||
// steps-item组件
|
||
stepsItem: {
|
||
title: "",
|
||
desc: "",
|
||
iconSize: 17,
|
||
error: false
|
||
}
|
||
};
|
||
const Sticky = {
|
||
// sticky组件
|
||
sticky: {
|
||
offsetTop: 0,
|
||
customNavHeight: 0,
|
||
disabled: false,
|
||
bgColor: "transparent",
|
||
zIndex: "",
|
||
index: ""
|
||
}
|
||
};
|
||
const Subsection = {
|
||
// subsection组件
|
||
subsection: {
|
||
list: [],
|
||
current: 0,
|
||
activeColor: "#3c9cff",
|
||
inactiveColor: "#303133",
|
||
mode: "button",
|
||
fontSize: 12,
|
||
bold: true,
|
||
bgColor: "#eeeeef",
|
||
keyName: "name"
|
||
}
|
||
};
|
||
const SwipeAction = {
|
||
// swipe-action组件
|
||
swipeAction: {
|
||
autoClose: true
|
||
}
|
||
};
|
||
const SwipeActionItem = {
|
||
// swipeActionItem 组件
|
||
swipeActionItem: {
|
||
show: false,
|
||
closeOnClick: true,
|
||
name: "",
|
||
disabled: false,
|
||
threshold: 20,
|
||
autoClose: true,
|
||
options: [],
|
||
duration: 300
|
||
}
|
||
};
|
||
const Swiper = {
|
||
// swiper 组件
|
||
swiper: {
|
||
list: [],
|
||
indicator: false,
|
||
indicatorActiveColor: "#FFFFFF",
|
||
indicatorInactiveColor: "rgba(255, 255, 255, 0.35)",
|
||
indicatorStyle: "",
|
||
indicatorMode: "line",
|
||
autoplay: true,
|
||
current: 0,
|
||
currentItemId: "",
|
||
interval: 3e3,
|
||
duration: 300,
|
||
circular: false,
|
||
previousMargin: 0,
|
||
nextMargin: 0,
|
||
acceleration: false,
|
||
displayMultipleItems: 1,
|
||
easingFunction: "default",
|
||
keyName: "url",
|
||
imgMode: "aspectFill",
|
||
height: 130,
|
||
bgColor: "#f3f4f6",
|
||
radius: 4,
|
||
loading: false,
|
||
showTitle: false
|
||
}
|
||
};
|
||
const SwipterIndicator = {
|
||
// swiperIndicator 组件
|
||
swiperIndicator: {
|
||
length: 0,
|
||
current: 0,
|
||
indicatorActiveColor: "",
|
||
indicatorInactiveColor: "",
|
||
indicatorMode: "line"
|
||
}
|
||
};
|
||
const Switch = {
|
||
// switch
|
||
switch: {
|
||
loading: false,
|
||
disabled: false,
|
||
size: 25,
|
||
activeColor: "#2979ff",
|
||
inactiveColor: "#ffffff",
|
||
value: false,
|
||
activeValue: true,
|
||
inactiveValue: false,
|
||
asyncChange: false,
|
||
space: 0
|
||
}
|
||
};
|
||
const Tabbar = {
|
||
// tabbar
|
||
tabbar: {
|
||
value: null,
|
||
safeAreaInsetBottom: true,
|
||
border: true,
|
||
zIndex: 1,
|
||
activeColor: "#1989fa",
|
||
inactiveColor: "#7d7e80",
|
||
fixed: true,
|
||
placeholder: true
|
||
}
|
||
};
|
||
const TabbarItem = {
|
||
//
|
||
tabbarItem: {
|
||
name: null,
|
||
icon: "",
|
||
badge: null,
|
||
dot: false,
|
||
text: "",
|
||
badgeStyle: "top: 6px;right:2px;"
|
||
}
|
||
};
|
||
const Tabs = {
|
||
//
|
||
tabs: {
|
||
duration: 300,
|
||
list: [],
|
||
lineColor: "#3c9cff",
|
||
activeStyle: {
|
||
color: "#303133"
|
||
},
|
||
inactiveStyle: {
|
||
color: "#606266"
|
||
},
|
||
lineWidth: 20,
|
||
lineHeight: 3,
|
||
lineBgSize: "cover",
|
||
itemStyle: {
|
||
height: "44px"
|
||
},
|
||
scrollable: true,
|
||
current: 0,
|
||
keyName: "name"
|
||
}
|
||
};
|
||
const Tag = {
|
||
// tag 组件
|
||
tag: {
|
||
type: "primary",
|
||
disabled: false,
|
||
size: "medium",
|
||
shape: "square",
|
||
text: "",
|
||
bgColor: "",
|
||
color: "",
|
||
borderColor: "",
|
||
closeColor: "#C6C7CB",
|
||
name: "",
|
||
plainFill: false,
|
||
plain: false,
|
||
closable: false,
|
||
show: true,
|
||
icon: "",
|
||
iconColor: ""
|
||
}
|
||
};
|
||
const Text = {
|
||
// text 组件
|
||
text: {
|
||
type: "",
|
||
show: true,
|
||
text: "",
|
||
prefixIcon: "",
|
||
suffixIcon: "",
|
||
mode: "",
|
||
href: "",
|
||
format: "",
|
||
call: false,
|
||
openType: "",
|
||
bold: false,
|
||
block: false,
|
||
lines: "",
|
||
color: "#303133",
|
||
size: 15,
|
||
iconStyle: {
|
||
fontSize: "15px"
|
||
},
|
||
decoration: "none",
|
||
margin: 0,
|
||
lineHeight: "",
|
||
align: "left",
|
||
wordWrap: "normal",
|
||
flex1: true
|
||
}
|
||
};
|
||
const Textarea = {
|
||
// textarea 组件
|
||
textarea: {
|
||
value: "",
|
||
placeholder: "",
|
||
placeholderClass: "textarea-placeholder",
|
||
placeholderStyle: "color: #c0c4cc",
|
||
height: 70,
|
||
confirmType: "done",
|
||
disabled: false,
|
||
count: false,
|
||
focus: false,
|
||
autoHeight: false,
|
||
fixed: false,
|
||
cursorSpacing: 0,
|
||
cursor: "",
|
||
showConfirmBar: true,
|
||
selectionStart: -1,
|
||
selectionEnd: -1,
|
||
adjustPosition: true,
|
||
disableDefaultPadding: false,
|
||
holdKeyboard: false,
|
||
maxlength: 140,
|
||
border: "surround",
|
||
formatter: null
|
||
}
|
||
};
|
||
const Toast = {
|
||
// toast组件
|
||
toast: {
|
||
zIndex: 10090,
|
||
loading: false,
|
||
text: "",
|
||
icon: "",
|
||
type: "",
|
||
loadingMode: "",
|
||
show: "",
|
||
overlay: false,
|
||
position: "center",
|
||
params: {},
|
||
duration: 2e3,
|
||
isTab: false,
|
||
url: "",
|
||
callback: null,
|
||
back: false
|
||
}
|
||
};
|
||
const Toolbar = {
|
||
// toolbar 组件
|
||
toolbar: {
|
||
show: true,
|
||
cancelText: "取消",
|
||
confirmText: "确认",
|
||
cancelColor: "#909193",
|
||
confirmColor: "#3c9cff",
|
||
title: ""
|
||
}
|
||
};
|
||
const Tooltip = {
|
||
// tooltip 组件
|
||
tooltip: {
|
||
text: "",
|
||
copyText: "",
|
||
size: 14,
|
||
color: "#606266",
|
||
bgColor: "transparent",
|
||
direction: "top",
|
||
zIndex: 10071,
|
||
showCopy: true,
|
||
buttons: [],
|
||
overlay: true,
|
||
showToast: true
|
||
}
|
||
};
|
||
const Transition = {
|
||
// transition动画组件的props
|
||
transition: {
|
||
show: false,
|
||
mode: "fade",
|
||
duration: "300",
|
||
timingFunction: "ease-out"
|
||
}
|
||
};
|
||
const Upload = {
|
||
// upload组件
|
||
upload: {
|
||
accept: "image",
|
||
extension: [],
|
||
capture: ["album", "camera"],
|
||
compressed: true,
|
||
camera: "back",
|
||
maxDuration: 60,
|
||
uploadIcon: "camera-fill",
|
||
uploadIconColor: "#D3D4D6",
|
||
useBeforeRead: false,
|
||
previewFullImage: true,
|
||
maxCount: 52,
|
||
disabled: false,
|
||
imageMode: "aspectFill",
|
||
name: "",
|
||
sizeType: ["original", "compressed"],
|
||
multiple: false,
|
||
deletable: true,
|
||
maxSize: Number.MAX_VALUE,
|
||
fileList: [],
|
||
uploadText: "",
|
||
width: 80,
|
||
height: 80,
|
||
previewImage: true
|
||
}
|
||
};
|
||
const defProps = {
|
||
...ActionSheet,
|
||
...Album,
|
||
...Alert,
|
||
...Avatar,
|
||
...AvatarGroup,
|
||
...Backtop,
|
||
...Badge,
|
||
...Button,
|
||
...Calendar,
|
||
...CarKeyboard,
|
||
...Cell,
|
||
...CellGroup,
|
||
...Checkbox,
|
||
...CheckboxGroup,
|
||
...CircleProgress,
|
||
...Code,
|
||
...CodeInput,
|
||
...Col,
|
||
...Collapse,
|
||
...CollapseItem,
|
||
...ColumnNotice,
|
||
...CountDown,
|
||
...CountTo,
|
||
...DatetimePicker,
|
||
...Divider,
|
||
...Empty,
|
||
...Form$1,
|
||
...GormItem,
|
||
...Gap,
|
||
...Grid,
|
||
...GridItem,
|
||
...Icon,
|
||
...Image,
|
||
...IndexAnchor,
|
||
...IndexList,
|
||
...Input,
|
||
...Keyboard,
|
||
...Line,
|
||
...LineProgress,
|
||
...Link,
|
||
...List,
|
||
...ListItem,
|
||
...LoadingIcon,
|
||
...LoadingPage,
|
||
...Loadmore,
|
||
...Modal,
|
||
...Navbar,
|
||
...NoNetwork,
|
||
...NoticeBar,
|
||
...Notify,
|
||
...NumberBox,
|
||
...NumberKeyboard,
|
||
...Overlay,
|
||
...Parse,
|
||
...Picker,
|
||
...Popup,
|
||
...Radio,
|
||
...RadioGroup,
|
||
...Rate,
|
||
...ReadMore,
|
||
...Row,
|
||
...RowNotice,
|
||
...ScrollList,
|
||
...Search,
|
||
...Section,
|
||
...Skeleton,
|
||
...Slider,
|
||
...StatusBar,
|
||
...Steps,
|
||
...StepsItem,
|
||
...Sticky,
|
||
...Subsection,
|
||
...SwipeAction,
|
||
...SwipeActionItem,
|
||
...Swiper,
|
||
...SwipterIndicator,
|
||
...Switch,
|
||
...Tabbar,
|
||
...TabbarItem,
|
||
...Tabs,
|
||
...Tag,
|
||
...Text,
|
||
...Textarea,
|
||
...Toast,
|
||
...Toolbar,
|
||
...Tooltip,
|
||
...Transition,
|
||
...Upload
|
||
};
|
||
const zIndex = {
|
||
toast: 10090,
|
||
noNetwork: 10080,
|
||
// popup包含popup,actionsheet,keyboard,picker的值
|
||
popup: 10075,
|
||
mask: 10070,
|
||
navbar: 980,
|
||
topTips: 975,
|
||
sticky: 970,
|
||
indexListSticky: 965
|
||
};
|
||
let platform = "none";
|
||
platform = "vue3";
|
||
platform = "mp";
|
||
platform = "weixin";
|
||
const platform$1 = platform;
|
||
const http = new Request();
|
||
let themeType = ["primary", "success", "error", "warning", "info"];
|
||
function setConfig(configs) {
|
||
index$1.shallowMerge(config, configs.config || {});
|
||
index$1.shallowMerge(defProps, configs.props || {});
|
||
index$1.shallowMerge(color, configs.color || {});
|
||
index$1.shallowMerge(zIndex, configs.zIndex || {});
|
||
}
|
||
index$1.setConfig = setConfig;
|
||
const $u = {
|
||
route,
|
||
date: index$1.timeFormat,
|
||
// 另名date
|
||
colorGradient: colorGradient$1.colorGradient,
|
||
hexToRgb: colorGradient$1.hexToRgb,
|
||
rgbToHex: colorGradient$1.rgbToHex,
|
||
colorToRgba: colorGradient$1.colorToRgba,
|
||
test,
|
||
type: themeType,
|
||
http,
|
||
config,
|
||
// uview-plus配置信息相关,比如版本号
|
||
zIndex,
|
||
debounce: debounce$1,
|
||
throttle,
|
||
mixin,
|
||
mpMixin,
|
||
props: defProps,
|
||
...index$1,
|
||
color,
|
||
platform: platform$1
|
||
};
|
||
const install = (Vue) => {
|
||
index$2.$u = $u;
|
||
Vue.config.globalProperties.$u = $u;
|
||
Vue.mixin(mixin);
|
||
};
|
||
const uviewPlus = {
|
||
install
|
||
};
|
||
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
|
||
function getDefaultExportFromCjs(x) {
|
||
return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x;
|
||
}
|
||
var dayjs_min = { exports: {} };
|
||
(function(module2, exports2) {
|
||
!function(t2, e2) {
|
||
module2.exports = e2();
|
||
}(commonjsGlobal, function() {
|
||
var t2 = 1e3, e2 = 6e4, n2 = 36e5, r2 = "millisecond", i = "second", s2 = "minute", u = "hour", a = "day", o2 = "week", c = "month", f2 = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t3) {
|
||
var e3 = ["th", "st", "nd", "rd"], n3 = t3 % 100;
|
||
return "[" + t3 + (e3[(n3 - 20) % 10] || e3[n3] || e3[0]) + "]";
|
||
} }, m2 = function(t3, e3, n3) {
|
||
var r3 = String(t3);
|
||
return !r3 || r3.length >= e3 ? t3 : "" + Array(e3 + 1 - r3.length).join(n3) + t3;
|
||
}, v = { s: m2, z: function(t3) {
|
||
var e3 = -t3.utcOffset(), n3 = Math.abs(e3), r3 = Math.floor(n3 / 60), i2 = n3 % 60;
|
||
return (e3 <= 0 ? "+" : "-") + m2(r3, 2, "0") + ":" + m2(i2, 2, "0");
|
||
}, m: function t3(e3, n3) {
|
||
if (e3.date() < n3.date())
|
||
return -t3(n3, e3);
|
||
var r3 = 12 * (n3.year() - e3.year()) + (n3.month() - e3.month()), i2 = e3.clone().add(r3, c), s3 = n3 - i2 < 0, u2 = e3.clone().add(r3 + (s3 ? -1 : 1), c);
|
||
return +(-(r3 + (n3 - i2) / (s3 ? i2 - u2 : u2 - i2)) || 0);
|
||
}, a: function(t3) {
|
||
return t3 < 0 ? Math.ceil(t3) || 0 : Math.floor(t3);
|
||
}, p: function(t3) {
|
||
return { M: c, y: h, w: o2, d: a, D: d, h: u, m: s2, s: i, ms: r2, Q: f2 }[t3] || String(t3 || "").toLowerCase().replace(/s$/, "");
|
||
}, u: function(t3) {
|
||
return void 0 === t3;
|
||
} }, g = "en", D = {};
|
||
D[g] = M;
|
||
var p2 = "$isDayjsObject", S = function(t3) {
|
||
return t3 instanceof _ || !(!t3 || !t3[p2]);
|
||
}, w2 = function t3(e3, n3, r3) {
|
||
var i2;
|
||
if (!e3)
|
||
return g;
|
||
if ("string" == typeof e3) {
|
||
var s3 = e3.toLowerCase();
|
||
D[s3] && (i2 = s3), n3 && (D[s3] = n3, i2 = s3);
|
||
var u2 = e3.split("-");
|
||
if (!i2 && u2.length > 1)
|
||
return t3(u2[0]);
|
||
} else {
|
||
var a2 = e3.name;
|
||
D[a2] = e3, i2 = a2;
|
||
}
|
||
return !r3 && i2 && (g = i2), i2 || !r3 && g;
|
||
}, O = function(t3, e3) {
|
||
if (S(t3))
|
||
return t3.clone();
|
||
var n3 = "object" == typeof e3 ? e3 : {};
|
||
return n3.date = t3, n3.args = arguments, new _(n3);
|
||
}, b = v;
|
||
b.l = w2, b.i = S, b.w = function(t3, e3) {
|
||
return O(t3, { locale: e3.$L, utc: e3.$u, x: e3.$x, $offset: e3.$offset });
|
||
};
|
||
var _ = function() {
|
||
function M2(t3) {
|
||
this.$L = w2(t3.locale, null, true), this.parse(t3), this.$x = this.$x || t3.x || {}, this[p2] = true;
|
||
}
|
||
var m3 = M2.prototype;
|
||
return m3.parse = function(t3) {
|
||
this.$d = function(t4) {
|
||
var e3 = t4.date, n3 = t4.utc;
|
||
if (null === e3)
|
||
return /* @__PURE__ */ new Date(NaN);
|
||
if (b.u(e3))
|
||
return /* @__PURE__ */ new Date();
|
||
if (e3 instanceof Date)
|
||
return new Date(e3);
|
||
if ("string" == typeof e3 && !/Z$/i.test(e3)) {
|
||
var r3 = e3.match($);
|
||
if (r3) {
|
||
var i2 = r3[2] - 1 || 0, s3 = (r3[7] || "0").substring(0, 3);
|
||
return n3 ? new Date(Date.UTC(r3[1], i2, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3)) : new Date(r3[1], i2, r3[3] || 1, r3[4] || 0, r3[5] || 0, r3[6] || 0, s3);
|
||
}
|
||
}
|
||
return new Date(e3);
|
||
}(t3), this.init();
|
||
}, m3.init = function() {
|
||
var t3 = this.$d;
|
||
this.$y = t3.getFullYear(), this.$M = t3.getMonth(), this.$D = t3.getDate(), this.$W = t3.getDay(), this.$H = t3.getHours(), this.$m = t3.getMinutes(), this.$s = t3.getSeconds(), this.$ms = t3.getMilliseconds();
|
||
}, m3.$utils = function() {
|
||
return b;
|
||
}, m3.isValid = function() {
|
||
return !(this.$d.toString() === l);
|
||
}, m3.isSame = function(t3, e3) {
|
||
var n3 = O(t3);
|
||
return this.startOf(e3) <= n3 && n3 <= this.endOf(e3);
|
||
}, m3.isAfter = function(t3, e3) {
|
||
return O(t3) < this.startOf(e3);
|
||
}, m3.isBefore = function(t3, e3) {
|
||
return this.endOf(e3) < O(t3);
|
||
}, m3.$g = function(t3, e3, n3) {
|
||
return b.u(t3) ? this[e3] : this.set(n3, t3);
|
||
}, m3.unix = function() {
|
||
return Math.floor(this.valueOf() / 1e3);
|
||
}, m3.valueOf = function() {
|
||
return this.$d.getTime();
|
||
}, m3.startOf = function(t3, e3) {
|
||
var n3 = this, r3 = !!b.u(e3) || e3, f3 = b.p(t3), l2 = function(t4, e4) {
|
||
var i2 = b.w(n3.$u ? Date.UTC(n3.$y, e4, t4) : new Date(n3.$y, e4, t4), n3);
|
||
return r3 ? i2 : i2.endOf(a);
|
||
}, $2 = function(t4, e4) {
|
||
return b.w(n3.toDate()[t4].apply(n3.toDate("s"), (r3 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e4)), n3);
|
||
}, y2 = this.$W, M3 = this.$M, m4 = this.$D, v2 = "set" + (this.$u ? "UTC" : "");
|
||
switch (f3) {
|
||
case h:
|
||
return r3 ? l2(1, 0) : l2(31, 11);
|
||
case c:
|
||
return r3 ? l2(1, M3) : l2(0, M3 + 1);
|
||
case o2:
|
||
var g2 = this.$locale().weekStart || 0, D2 = (y2 < g2 ? y2 + 7 : y2) - g2;
|
||
return l2(r3 ? m4 - D2 : m4 + (6 - D2), M3);
|
||
case a:
|
||
case d:
|
||
return $2(v2 + "Hours", 0);
|
||
case u:
|
||
return $2(v2 + "Minutes", 1);
|
||
case s2:
|
||
return $2(v2 + "Seconds", 2);
|
||
case i:
|
||
return $2(v2 + "Milliseconds", 3);
|
||
default:
|
||
return this.clone();
|
||
}
|
||
}, m3.endOf = function(t3) {
|
||
return this.startOf(t3, false);
|
||
}, m3.$set = function(t3, e3) {
|
||
var n3, o3 = b.p(t3), f3 = "set" + (this.$u ? "UTC" : ""), l2 = (n3 = {}, n3[a] = f3 + "Date", n3[d] = f3 + "Date", n3[c] = f3 + "Month", n3[h] = f3 + "FullYear", n3[u] = f3 + "Hours", n3[s2] = f3 + "Minutes", n3[i] = f3 + "Seconds", n3[r2] = f3 + "Milliseconds", n3)[o3], $2 = o3 === a ? this.$D + (e3 - this.$W) : e3;
|
||
if (o3 === c || o3 === h) {
|
||
var y2 = this.clone().set(d, 1);
|
||
y2.$d[l2]($2), y2.init(), this.$d = y2.set(d, Math.min(this.$D, y2.daysInMonth())).$d;
|
||
} else
|
||
l2 && this.$d[l2]($2);
|
||
return this.init(), this;
|
||
}, m3.set = function(t3, e3) {
|
||
return this.clone().$set(t3, e3);
|
||
}, m3.get = function(t3) {
|
||
return this[b.p(t3)]();
|
||
}, m3.add = function(r3, f3) {
|
||
var d2, l2 = this;
|
||
r3 = Number(r3);
|
||
var $2 = b.p(f3), y2 = function(t3) {
|
||
var e3 = O(l2);
|
||
return b.w(e3.date(e3.date() + Math.round(t3 * r3)), l2);
|
||
};
|
||
if ($2 === c)
|
||
return this.set(c, this.$M + r3);
|
||
if ($2 === h)
|
||
return this.set(h, this.$y + r3);
|
||
if ($2 === a)
|
||
return y2(1);
|
||
if ($2 === o2)
|
||
return y2(7);
|
||
var M3 = (d2 = {}, d2[s2] = e2, d2[u] = n2, d2[i] = t2, d2)[$2] || 1, m4 = this.$d.getTime() + r3 * M3;
|
||
return b.w(m4, this);
|
||
}, m3.subtract = function(t3, e3) {
|
||
return this.add(-1 * t3, e3);
|
||
}, m3.format = function(t3) {
|
||
var e3 = this, n3 = this.$locale();
|
||
if (!this.isValid())
|
||
return n3.invalidDate || l;
|
||
var r3 = t3 || "YYYY-MM-DDTHH:mm:ssZ", i2 = b.z(this), s3 = this.$H, u2 = this.$m, a2 = this.$M, o3 = n3.weekdays, c2 = n3.months, f3 = n3.meridiem, h2 = function(t4, n4, i3, s4) {
|
||
return t4 && (t4[n4] || t4(e3, r3)) || i3[n4].slice(0, s4);
|
||
}, d2 = function(t4) {
|
||
return b.s(s3 % 12 || 12, t4, "0");
|
||
}, $2 = f3 || function(t4, e4, n4) {
|
||
var r4 = t4 < 12 ? "AM" : "PM";
|
||
return n4 ? r4.toLowerCase() : r4;
|
||
};
|
||
return r3.replace(y, function(t4, r4) {
|
||
return r4 || function(t5) {
|
||
switch (t5) {
|
||
case "YY":
|
||
return String(e3.$y).slice(-2);
|
||
case "YYYY":
|
||
return b.s(e3.$y, 4, "0");
|
||
case "M":
|
||
return a2 + 1;
|
||
case "MM":
|
||
return b.s(a2 + 1, 2, "0");
|
||
case "MMM":
|
||
return h2(n3.monthsShort, a2, c2, 3);
|
||
case "MMMM":
|
||
return h2(c2, a2);
|
||
case "D":
|
||
return e3.$D;
|
||
case "DD":
|
||
return b.s(e3.$D, 2, "0");
|
||
case "d":
|
||
return String(e3.$W);
|
||
case "dd":
|
||
return h2(n3.weekdaysMin, e3.$W, o3, 2);
|
||
case "ddd":
|
||
return h2(n3.weekdaysShort, e3.$W, o3, 3);
|
||
case "dddd":
|
||
return o3[e3.$W];
|
||
case "H":
|
||
return String(s3);
|
||
case "HH":
|
||
return b.s(s3, 2, "0");
|
||
case "h":
|
||
return d2(1);
|
||
case "hh":
|
||
return d2(2);
|
||
case "a":
|
||
return $2(s3, u2, true);
|
||
case "A":
|
||
return $2(s3, u2, false);
|
||
case "m":
|
||
return String(u2);
|
||
case "mm":
|
||
return b.s(u2, 2, "0");
|
||
case "s":
|
||
return String(e3.$s);
|
||
case "ss":
|
||
return b.s(e3.$s, 2, "0");
|
||
case "SSS":
|
||
return b.s(e3.$ms, 3, "0");
|
||
case "Z":
|
||
return i2;
|
||
}
|
||
return null;
|
||
}(t4) || i2.replace(":", "");
|
||
});
|
||
}, m3.utcOffset = function() {
|
||
return 15 * -Math.round(this.$d.getTimezoneOffset() / 15);
|
||
}, m3.diff = function(r3, d2, l2) {
|
||
var $2, y2 = this, M3 = b.p(d2), m4 = O(r3), v2 = (m4.utcOffset() - this.utcOffset()) * e2, g2 = this - m4, D2 = function() {
|
||
return b.m(y2, m4);
|
||
};
|
||
switch (M3) {
|
||
case h:
|
||
$2 = D2() / 12;
|
||
break;
|
||
case c:
|
||
$2 = D2();
|
||
break;
|
||
case f2:
|
||
$2 = D2() / 3;
|
||
break;
|
||
case o2:
|
||
$2 = (g2 - v2) / 6048e5;
|
||
break;
|
||
case a:
|
||
$2 = (g2 - v2) / 864e5;
|
||
break;
|
||
case u:
|
||
$2 = g2 / n2;
|
||
break;
|
||
case s2:
|
||
$2 = g2 / e2;
|
||
break;
|
||
case i:
|
||
$2 = g2 / t2;
|
||
break;
|
||
default:
|
||
$2 = g2;
|
||
}
|
||
return l2 ? $2 : b.a($2);
|
||
}, m3.daysInMonth = function() {
|
||
return this.endOf(c).$D;
|
||
}, m3.$locale = function() {
|
||
return D[this.$L];
|
||
}, m3.locale = function(t3, e3) {
|
||
if (!t3)
|
||
return this.$L;
|
||
var n3 = this.clone(), r3 = w2(t3, e3, true);
|
||
return r3 && (n3.$L = r3), n3;
|
||
}, m3.clone = function() {
|
||
return b.w(this.$d, this);
|
||
}, m3.toDate = function() {
|
||
return new Date(this.valueOf());
|
||
}, m3.toJSON = function() {
|
||
return this.isValid() ? this.toISOString() : null;
|
||
}, m3.toISOString = function() {
|
||
return this.$d.toISOString();
|
||
}, m3.toString = function() {
|
||
return this.$d.toUTCString();
|
||
}, M2;
|
||
}(), k = _.prototype;
|
||
return O.prototype = k, [["$ms", r2], ["$s", i], ["$m", s2], ["$H", u], ["$W", a], ["$M", c], ["$y", h], ["$D", d]].forEach(function(t3) {
|
||
k[t3[1]] = function(e3) {
|
||
return this.$g(e3, t3[0], t3[1]);
|
||
};
|
||
}), O.extend = function(t3, e3) {
|
||
return t3.$i || (t3(e3, _, O), t3.$i = true), O;
|
||
}, O.locale = w2, O.isDayjs = S, O.unix = function(t3) {
|
||
return O(1e3 * t3);
|
||
}, O.en = D[g], O.Ls = D, O.p = {}, O;
|
||
});
|
||
})(dayjs_min);
|
||
var dayjs_minExports = dayjs_min.exports;
|
||
const dayjs = /* @__PURE__ */ getDefaultExportFromCjs(dayjs_minExports);
|
||
function inRange(a, min, max) {
|
||
return min <= a && a <= max;
|
||
}
|
||
const floor = Math.floor;
|
||
function stringToCodePoints(string2) {
|
||
var s2 = String(string2);
|
||
var n2 = s2.length;
|
||
var i = 0;
|
||
var u = [];
|
||
while (i < n2) {
|
||
var c = s2.charCodeAt(i);
|
||
if (c < 55296 || c > 57343) {
|
||
u.push(c);
|
||
} else if (56320 <= c && c <= 57343) {
|
||
u.push(65533);
|
||
} else if (55296 <= c && c <= 56319) {
|
||
if (i === n2 - 1) {
|
||
u.push(65533);
|
||
} else {
|
||
var d = s2.charCodeAt(i + 1);
|
||
if (56320 <= d && d <= 57343) {
|
||
var a = c & 1023;
|
||
var b = d & 1023;
|
||
u.push(65536 + (a << 10) + b);
|
||
i += 1;
|
||
} else {
|
||
u.push(65533);
|
||
}
|
||
}
|
||
}
|
||
i += 1;
|
||
}
|
||
return u;
|
||
}
|
||
function codePointsToString(code_points) {
|
||
var s2 = "";
|
||
for (var i = 0; i < code_points.length; ++i) {
|
||
var cp = code_points[i];
|
||
if (cp <= 65535) {
|
||
s2 += String.fromCharCode(cp);
|
||
} else {
|
||
cp -= 65536;
|
||
s2 += String.fromCharCode(
|
||
(cp >> 10) + 55296,
|
||
(cp & 1023) + 56320
|
||
);
|
||
}
|
||
}
|
||
return s2;
|
||
}
|
||
function decoderError(fatal, opt_code_point) {
|
||
if (fatal)
|
||
throw TypeError("Decoder error");
|
||
return opt_code_point || 65533;
|
||
}
|
||
function encoderError(code_point) {
|
||
throw TypeError("The code point " + code_point + " could not be encoded.");
|
||
}
|
||
function convertCodeUnitToBytes(code_unit, utf16be) {
|
||
const byte1 = code_unit >> 8;
|
||
const byte2 = code_unit & 255;
|
||
if (utf16be)
|
||
return [byte1, byte2];
|
||
return [byte2, byte1];
|
||
}
|
||
function isASCIIByte(a) {
|
||
return 0 <= a && a <= 127;
|
||
}
|
||
const isASCIICodePoint = isASCIIByte;
|
||
const end_of_stream = -1;
|
||
const finished = -1;
|
||
const encodings = [
|
||
{
|
||
encodings: [
|
||
{
|
||
labels: [
|
||
"unicode-1-1-utf-8",
|
||
"utf-8",
|
||
"utf8"
|
||
],
|
||
name: "UTF-8"
|
||
}
|
||
],
|
||
heading: "The Encoding"
|
||
},
|
||
{
|
||
encodings: [
|
||
{
|
||
labels: [
|
||
"866",
|
||
"cp866",
|
||
"csibm866",
|
||
"ibm866"
|
||
],
|
||
name: "IBM866"
|
||
},
|
||
{
|
||
labels: [
|
||
"csisolatin2",
|
||
"iso-8859-2",
|
||
"iso-ir-101",
|
||
"iso8859-2",
|
||
"iso88592",
|
||
"iso_8859-2",
|
||
"iso_8859-2:1987",
|
||
"l2",
|
||
"latin2"
|
||
],
|
||
name: "ISO-8859-2"
|
||
},
|
||
{
|
||
labels: [
|
||
"csisolatin3",
|
||
"iso-8859-3",
|
||
"iso-ir-109",
|
||
"iso8859-3",
|
||
"iso88593",
|
||
"iso_8859-3",
|
||
"iso_8859-3:1988",
|
||
"l3",
|
||
"latin3"
|
||
],
|
||
name: "ISO-8859-3"
|
||
},
|
||
{
|
||
labels: [
|
||
"csisolatin4",
|
||
"iso-8859-4",
|
||
"iso-ir-110",
|
||
"iso8859-4",
|
||
"iso88594",
|
||
"iso_8859-4",
|
||
"iso_8859-4:1988",
|
||
"l4",
|
||
"latin4"
|
||
],
|
||
name: "ISO-8859-4"
|
||
},
|
||
{
|
||
labels: [
|
||
"csisolatincyrillic",
|
||
"cyrillic",
|
||
"iso-8859-5",
|
||
"iso-ir-144",
|
||
"iso8859-5",
|
||
"iso88595",
|
||
"iso_8859-5",
|
||
"iso_8859-5:1988"
|
||
],
|
||
name: "ISO-8859-5"
|
||
},
|
||
{
|
||
labels: [
|
||
"arabic",
|
||
"asmo-708",
|
||
"csiso88596e",
|
||
"csiso88596i",
|
||
"csisolatinarabic",
|
||
"ecma-114",
|
||
"iso-8859-6",
|
||
"iso-8859-6-e",
|
||
"iso-8859-6-i",
|
||
"iso-ir-127",
|
||
"iso8859-6",
|
||
"iso88596",
|
||
"iso_8859-6",
|
||
"iso_8859-6:1987"
|
||
],
|
||
name: "ISO-8859-6"
|
||
},
|
||
{
|
||
labels: [
|
||
"csisolatingreek",
|
||
"ecma-118",
|
||
"elot_928",
|
||
"greek",
|
||
"greek8",
|
||
"iso-8859-7",
|
||
"iso-ir-126",
|
||
"iso8859-7",
|
||
"iso88597",
|
||
"iso_8859-7",
|
||
"iso_8859-7:1987",
|
||
"sun_eu_greek"
|
||
],
|
||
name: "ISO-8859-7"
|
||
},
|
||
{
|
||
labels: [
|
||
"csiso88598e",
|
||
"csisolatinhebrew",
|
||
"hebrew",
|
||
"iso-8859-8",
|
||
"iso-8859-8-e",
|
||
"iso-ir-138",
|
||
"iso8859-8",
|
||
"iso88598",
|
||
"iso_8859-8",
|
||
"iso_8859-8:1988",
|
||
"visual"
|
||
],
|
||
name: "ISO-8859-8"
|
||
},
|
||
{
|
||
labels: [
|
||
"csiso88598i",
|
||
"iso-8859-8-i",
|
||
"logical"
|
||
],
|
||
name: "ISO-8859-8-I"
|
||
},
|
||
{
|
||
labels: [
|
||
"csisolatin6",
|
||
"iso-8859-10",
|
||
"iso-ir-157",
|
||
"iso8859-10",
|
||
"iso885910",
|
||
"l6",
|
||
"latin6"
|
||
],
|
||
name: "ISO-8859-10"
|
||
},
|
||
{
|
||
labels: [
|
||
"iso-8859-13",
|
||
"iso8859-13",
|
||
"iso885913"
|
||
],
|
||
name: "ISO-8859-13"
|
||
},
|
||
{
|
||
labels: [
|
||
"iso-8859-14",
|
||
"iso8859-14",
|
||
"iso885914"
|
||
],
|
||
name: "ISO-8859-14"
|
||
},
|
||
{
|
||
labels: [
|
||
"csisolatin9",
|
||
"iso-8859-15",
|
||
"iso8859-15",
|
||
"iso885915",
|
||
"iso_8859-15",
|
||
"l9"
|
||
],
|
||
name: "ISO-8859-15"
|
||
},
|
||
{
|
||
labels: [
|
||
"iso-8859-16"
|
||
],
|
||
name: "ISO-8859-16"
|
||
},
|
||
{
|
||
labels: [
|
||
"cskoi8r",
|
||
"koi",
|
||
"koi8",
|
||
"koi8-r",
|
||
"koi8_r"
|
||
],
|
||
name: "KOI8-R"
|
||
},
|
||
{
|
||
labels: [
|
||
"koi8-ru",
|
||
"koi8-u"
|
||
],
|
||
name: "KOI8-U"
|
||
},
|
||
{
|
||
labels: [
|
||
"csmacintosh",
|
||
"mac",
|
||
"macintosh",
|
||
"x-mac-roman"
|
||
],
|
||
name: "macintosh"
|
||
},
|
||
{
|
||
labels: [
|
||
"dos-874",
|
||
"iso-8859-11",
|
||
"iso8859-11",
|
||
"iso885911",
|
||
"tis-620",
|
||
"windows-874"
|
||
],
|
||
name: "windows-874"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1250",
|
||
"windows-1250",
|
||
"x-cp1250"
|
||
],
|
||
name: "windows-1250"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1251",
|
||
"windows-1251",
|
||
"x-cp1251"
|
||
],
|
||
name: "windows-1251"
|
||
},
|
||
{
|
||
labels: [
|
||
"ansi_x3.4-1968",
|
||
"ascii",
|
||
"cp1252",
|
||
"cp819",
|
||
"csisolatin1",
|
||
"ibm819",
|
||
"iso-8859-1",
|
||
"iso-ir-100",
|
||
"iso8859-1",
|
||
"iso88591",
|
||
"iso_8859-1",
|
||
"iso_8859-1:1987",
|
||
"l1",
|
||
"latin1",
|
||
"us-ascii",
|
||
"windows-1252",
|
||
"x-cp1252"
|
||
],
|
||
name: "windows-1252"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1253",
|
||
"windows-1253",
|
||
"x-cp1253"
|
||
],
|
||
name: "windows-1253"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1254",
|
||
"csisolatin5",
|
||
"iso-8859-9",
|
||
"iso-ir-148",
|
||
"iso8859-9",
|
||
"iso88599",
|
||
"iso_8859-9",
|
||
"iso_8859-9:1989",
|
||
"l5",
|
||
"latin5",
|
||
"windows-1254",
|
||
"x-cp1254"
|
||
],
|
||
name: "windows-1254"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1255",
|
||
"windows-1255",
|
||
"x-cp1255"
|
||
],
|
||
name: "windows-1255"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1256",
|
||
"windows-1256",
|
||
"x-cp1256"
|
||
],
|
||
name: "windows-1256"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1257",
|
||
"windows-1257",
|
||
"x-cp1257"
|
||
],
|
||
name: "windows-1257"
|
||
},
|
||
{
|
||
labels: [
|
||
"cp1258",
|
||
"windows-1258",
|
||
"x-cp1258"
|
||
],
|
||
name: "windows-1258"
|
||
},
|
||
{
|
||
labels: [
|
||
"x-mac-cyrillic",
|
||
"x-mac-ukrainian"
|
||
],
|
||
name: "x-mac-cyrillic"
|
||
}
|
||
],
|
||
heading: "Legacy single-byte encodings"
|
||
},
|
||
{
|
||
encodings: [
|
||
{
|
||
labels: [
|
||
"chinese",
|
||
"csgb2312",
|
||
"csiso58gb231280",
|
||
"gb2312",
|
||
"gb_2312",
|
||
"gb_2312-80",
|
||
"gbk",
|
||
"iso-ir-58",
|
||
"x-gbk"
|
||
],
|
||
name: "GBK"
|
||
},
|
||
{
|
||
labels: [
|
||
"gb18030"
|
||
],
|
||
name: "gb18030"
|
||
}
|
||
],
|
||
heading: "Legacy multi-byte Chinese (simplified) encodings"
|
||
},
|
||
{
|
||
encodings: [
|
||
{
|
||
labels: [
|
||
"big5",
|
||
"big5-hkscs",
|
||
"cn-big5",
|
||
"csbig5",
|
||
"x-x-big5"
|
||
],
|
||
name: "Big5"
|
||
}
|
||
],
|
||
heading: "Legacy multi-byte Chinese (traditional) encodings"
|
||
},
|
||
{
|
||
encodings: [
|
||
{
|
||
labels: [
|
||
"cseucpkdfmtjapanese",
|
||
"euc-jp",
|
||
"x-euc-jp"
|
||
],
|
||
name: "EUC-JP"
|
||
},
|
||
{
|
||
labels: [
|
||
"csiso2022jp",
|
||
"iso-2022-jp"
|
||
],
|
||
name: "ISO-2022-JP"
|
||
},
|
||
{
|
||
labels: [
|
||
"csshiftjis",
|
||
"ms932",
|
||
"ms_kanji",
|
||
"shift-jis",
|
||
"shift_jis",
|
||
"sjis",
|
||
"windows-31j",
|
||
"x-sjis"
|
||
],
|
||
name: "Shift_JIS"
|
||
}
|
||
],
|
||
heading: "Legacy multi-byte Japanese encodings"
|
||
},
|
||
{
|
||
encodings: [
|
||
{
|
||
labels: [
|
||
"cseuckr",
|
||
"csksc56011987",
|
||
"euc-kr",
|
||
"iso-ir-149",
|
||
"korean",
|
||
"ks_c_5601-1987",
|
||
"ks_c_5601-1989",
|
||
"ksc5601",
|
||
"ksc_5601",
|
||
"windows-949"
|
||
],
|
||
name: "EUC-KR"
|
||
}
|
||
],
|
||
heading: "Legacy multi-byte Korean encodings"
|
||
},
|
||
{
|
||
encodings: [
|
||
{
|
||
labels: [
|
||
"csiso2022kr",
|
||
"hz-gb-2312",
|
||
"iso-2022-cn",
|
||
"iso-2022-cn-ext",
|
||
"iso-2022-kr"
|
||
],
|
||
name: "replacement"
|
||
},
|
||
{
|
||
labels: [
|
||
"utf-16be"
|
||
],
|
||
name: "UTF-16BE"
|
||
},
|
||
{
|
||
labels: [
|
||
"utf-16",
|
||
"utf-16le"
|
||
],
|
||
name: "UTF-16LE"
|
||
},
|
||
{
|
||
labels: [
|
||
"x-user-defined"
|
||
],
|
||
name: "x-user-defined"
|
||
}
|
||
],
|
||
heading: "Legacy miscellaneous encodings"
|
||
}
|
||
];
|
||
class UTF8Decoder {
|
||
/**
|
||
* @param {{fatal: boolean}} options
|
||
*/
|
||
constructor(options) {
|
||
const { fatal } = options;
|
||
let utf8_code_point = 0, utf8_bytes_seen = 0, utf8_bytes_needed = 0, utf8_lower_boundary = 128, utf8_upper_boundary = 191;
|
||
this.handler = function(stream, bite) {
|
||
if (bite === end_of_stream && utf8_bytes_needed !== 0) {
|
||
utf8_bytes_needed = 0;
|
||
return decoderError(fatal);
|
||
}
|
||
if (bite === end_of_stream)
|
||
return finished;
|
||
if (utf8_bytes_needed === 0) {
|
||
if (inRange(bite, 0, 127)) {
|
||
return bite;
|
||
} else if (inRange(bite, 194, 223)) {
|
||
utf8_bytes_needed = 1;
|
||
utf8_code_point = bite & 31;
|
||
} else if (inRange(bite, 224, 239)) {
|
||
if (bite === 224)
|
||
utf8_lower_boundary = 160;
|
||
if (bite === 237)
|
||
utf8_upper_boundary = 159;
|
||
utf8_bytes_needed = 2;
|
||
utf8_code_point = bite & 15;
|
||
} else if (inRange(bite, 240, 244)) {
|
||
if (bite === 240)
|
||
utf8_lower_boundary = 144;
|
||
if (bite === 244)
|
||
utf8_upper_boundary = 143;
|
||
utf8_bytes_needed = 3;
|
||
utf8_code_point = bite & 7;
|
||
} else {
|
||
return decoderError(fatal);
|
||
}
|
||
return null;
|
||
}
|
||
if (!inRange(bite, utf8_lower_boundary, utf8_upper_boundary)) {
|
||
utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;
|
||
utf8_lower_boundary = 128;
|
||
utf8_upper_boundary = 191;
|
||
stream.prepend(bite);
|
||
return decoderError(fatal);
|
||
}
|
||
utf8_lower_boundary = 128;
|
||
utf8_upper_boundary = 191;
|
||
utf8_code_point = utf8_code_point << 6 | bite & 63;
|
||
utf8_bytes_seen += 1;
|
||
if (utf8_bytes_seen !== utf8_bytes_needed)
|
||
return null;
|
||
var code_point = utf8_code_point;
|
||
utf8_code_point = utf8_bytes_needed = utf8_bytes_seen = 0;
|
||
return code_point;
|
||
};
|
||
}
|
||
}
|
||
class UTF8Encoder {
|
||
constructor() {
|
||
this.handler = function(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
var count, offset;
|
||
if (inRange(code_point, 128, 2047)) {
|
||
count = 1;
|
||
offset = 192;
|
||
} else if (inRange(code_point, 2048, 65535)) {
|
||
count = 2;
|
||
offset = 224;
|
||
} else if (inRange(code_point, 65536, 1114111)) {
|
||
count = 3;
|
||
offset = 240;
|
||
}
|
||
var bytes = [(code_point >> 6 * count) + offset];
|
||
while (count > 0) {
|
||
var temp = code_point >> 6 * (count - 1);
|
||
bytes.push(128 | temp & 63);
|
||
count -= 1;
|
||
}
|
||
return bytes;
|
||
};
|
||
}
|
||
}
|
||
class UTF16Decoder {
|
||
/**
|
||
* @param {boolean} utf16_be True if big-endian, false if little-endian.
|
||
* @param {{fatal: boolean}} options
|
||
*/
|
||
constructor(utf16_be, options) {
|
||
const { fatal } = options;
|
||
this.utf16_be = utf16_be;
|
||
this.fatal = fatal;
|
||
this.utf16_lead_byte = null;
|
||
this.utf16_lead_surrogate = null;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream && (this.utf16_lead_byte !== null || this.utf16_lead_surrogate !== null)) {
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (bite === end_of_stream && this.utf16_lead_byte === null && this.utf16_lead_surrogate === null) {
|
||
return finished;
|
||
}
|
||
if (this.utf16_lead_byte === null) {
|
||
this.utf16_lead_byte = bite;
|
||
return null;
|
||
}
|
||
let code_unit;
|
||
if (this.utf16_be) {
|
||
code_unit = (this.utf16_lead_byte << 8) + bite;
|
||
} else {
|
||
code_unit = (bite << 8) + this.utf16_lead_byte;
|
||
}
|
||
this.utf16_lead_byte = null;
|
||
if (this.utf16_lead_surrogate !== null) {
|
||
const lead_surrogate = this.utf16_lead_surrogate;
|
||
this.utf16_lead_surrogate = null;
|
||
if (inRange(code_unit, 56320, 57343)) {
|
||
return 65536 + (lead_surrogate - 55296) * 1024 + (code_unit - 56320);
|
||
}
|
||
stream.prepend(convertCodeUnitToBytes(code_unit, this.utf16_be));
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (inRange(code_unit, 55296, 56319)) {
|
||
this.utf16_lead_surrogate = code_unit;
|
||
return null;
|
||
}
|
||
if (inRange(code_unit, 56320, 57343))
|
||
return decoderError(this.fatal);
|
||
return code_unit;
|
||
}
|
||
}
|
||
class UTF16Encoder {
|
||
/**
|
||
* @param {boolean} [utf16_be] True if big-endian, false if little-endian.
|
||
*/
|
||
constructor(utf16_be = false) {
|
||
this.utf16_be = utf16_be;
|
||
}
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (inRange(code_point, 0, 65535))
|
||
return convertCodeUnitToBytes(code_point, this.utf16_be);
|
||
const lead = convertCodeUnitToBytes(
|
||
(code_point - 65536 >> 10) + 55296,
|
||
this.utf16_be
|
||
);
|
||
const trail = convertCodeUnitToBytes(
|
||
(code_point - 65536 & 1023) + 56320,
|
||
this.utf16_be
|
||
);
|
||
return lead.concat(trail);
|
||
}
|
||
}
|
||
const Indexes = {
|
||
"big5": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 17392, 19506, 17923, 17830, 17784, 160359, 19831, 17843, 162993, 19682, 163013, 15253, 18230, 18244, 19527, 19520, 148159, 144919, 160594, 159371, 159954, 19543, 172881, 18255, 17882, 19589, 162924, 19719, 19108, 18081, 158499, 29221, 154196, 137827, 146950, 147297, 26189, 22267, null, 32149, 22813, 166841, 15860, 38708, 162799, 23515, 138590, 23204, 13861, 171696, 23249, 23479, 23804, 26478, 34195, 170309, 29793, 29853, 14453, 138579, 145054, 155681, 16108, 153822, 15093, 31484, 40855, 147809, 166157, 143850, 133770, 143966, 17162, 33924, 40854, 37935, 18736, 34323, 22678, 38730, 37400, 31184, 31282, 26208, 27177, 34973, 29772, 31685, 26498, 31276, 21071, 36934, 13542, 29636, 155065, 29894, 40903, 22451, 18735, 21580, 16689, 145038, 22552, 31346, 162661, 35727, 18094, 159368, 16769, 155033, 31662, 140476, 40904, 140481, 140489, 140492, 40905, 34052, 144827, 16564, 40906, 17633, 175615, 25281, 28782, 40907, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 12736, 12737, 12738, 12739, 12740, 131340, 12741, 131281, 131277, 12742, 12743, 131275, 139240, 12744, 131274, 12745, 12746, 12747, 12748, 131342, 12749, 12750, 256, 193, 461, 192, 274, 201, 282, 200, 332, 211, 465, 210, null, 7870, null, 7872, 202, 257, 225, 462, 224, 593, 275, 233, 283, 232, 299, 237, 464, 236, 333, 243, 466, 242, 363, 250, 468, 249, 470, 472, 474, 476, 252, null, 7871, null, 7873, 234, 609, 9178, 9179, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 172969, 135493, null, 25866, null, null, 20029, 28381, 40270, 37343, null, null, 161589, 25745, 20250, 20264, 20392, 20822, 20852, 20892, 20964, 21153, 21160, 21307, 21326, 21457, 21464, 22242, 22768, 22788, 22791, 22834, 22836, 23398, 23454, 23455, 23706, 24198, 24635, 25993, 26622, 26628, 26725, 27982, 28860, 30005, 32420, 32428, 32442, 32455, 32463, 32479, 32518, 32567, 33402, 33487, 33647, 35270, 35774, 35810, 36710, 36711, 36718, 29713, 31996, 32205, 26950, 31433, 21031, null, null, null, null, 37260, 30904, 37214, 32956, null, 36107, 33014, 133607, null, null, 32927, 40647, 19661, 40393, 40460, 19518, 171510, 159758, 40458, 172339, 13761, null, 28314, 33342, 29977, null, 18705, 39532, 39567, 40857, 31111, 164972, 138698, 132560, 142054, 20004, 20097, 20096, 20103, 20159, 20203, 20279, 13388, 20413, 15944, 20483, 20616, 13437, 13459, 13477, 20870, 22789, 20955, 20988, 20997, 20105, 21113, 21136, 21287, 13767, 21417, 13649, 21424, 13651, 21442, 21539, 13677, 13682, 13953, 21651, 21667, 21684, 21689, 21712, 21743, 21784, 21795, 21800, 13720, 21823, 13733, 13759, 21975, 13765, 163204, 21797, null, 134210, 134421, 151851, 21904, 142534, 14828, 131905, 36422, 150968, 169189, 16467, 164030, 30586, 142392, 14900, 18389, 164189, 158194, 151018, 25821, 134524, 135092, 134357, 135412, 25741, 36478, 134806, 134155, 135012, 142505, 164438, 148691, null, 134470, 170573, 164073, 18420, 151207, 142530, 39602, 14951, 169460, 16365, 13574, 152263, 169940, 161992, 142660, 40302, 38933, null, 17369, 155813, 25780, 21731, 142668, 142282, 135287, 14843, 135279, 157402, 157462, 162208, 25834, 151634, 134211, 36456, 139681, 166732, 132913, null, 18443, 131497, 16378, 22643, 142733, null, 148936, 132348, 155799, 134988, 134550, 21881, 16571, 17338, null, 19124, 141926, 135325, 33194, 39157, 134556, 25465, 14846, 141173, 36288, 22177, 25724, 15939, null, 173569, 134665, 142031, 142537, null, 135368, 145858, 14738, 14854, 164507, 13688, 155209, 139463, 22098, 134961, 142514, 169760, 13500, 27709, 151099, null, null, 161140, 142987, 139784, 173659, 167117, 134778, 134196, 157724, 32659, 135375, 141315, 141625, 13819, 152035, 134796, 135053, 134826, 16275, 134960, 134471, 135503, 134732, null, 134827, 134057, 134472, 135360, 135485, 16377, 140950, 25650, 135085, 144372, 161337, 142286, 134526, 134527, 142417, 142421, 14872, 134808, 135367, 134958, 173618, 158544, 167122, 167321, 167114, 38314, 21708, 33476, 21945, null, 171715, 39974, 39606, 161630, 142830, 28992, 33133, 33004, 23580, 157042, 33076, 14231, 21343, 164029, 37302, 134906, 134671, 134775, 134907, 13789, 151019, 13833, 134358, 22191, 141237, 135369, 134672, 134776, 135288, 135496, 164359, 136277, 134777, 151120, 142756, 23124, 135197, 135198, 135413, 135414, 22428, 134673, 161428, 164557, 135093, 134779, 151934, 14083, 135094, 135552, 152280, 172733, 149978, 137274, 147831, 164476, 22681, 21096, 13850, 153405, 31666, 23400, 18432, 19244, 40743, 18919, 39967, 39821, 154484, 143677, 22011, 13810, 22153, 20008, 22786, 138177, 194680, 38737, 131206, 20059, 20155, 13630, 23587, 24401, 24516, 14586, 25164, 25909, 27514, 27701, 27706, 28780, 29227, 20012, 29357, 149737, 32594, 31035, 31993, 32595, 156266, 13505, null, 156491, 32770, 32896, 157202, 158033, 21341, 34916, 35265, 161970, 35744, 36125, 38021, 38264, 38271, 38376, 167439, 38886, 39029, 39118, 39134, 39267, 17e4, 40060, 40479, 40644, 27503, 63751, 20023, 131207, 38429, 25143, 38050, null, 20539, 28158, 171123, 40870, 15817, 34959, 147790, 28791, 23797, 19232, 152013, 13657, 154928, 24866, 166450, 36775, 37366, 29073, 26393, 29626, 144001, 172295, 15499, 137600, 19216, 30948, 29698, 20910, 165647, 16393, 27235, 172730, 16931, 34319, 133743, 31274, 170311, 166634, 38741, 28749, 21284, 139390, 37876, 30425, 166371, 40871, 30685, 20131, 20464, 20668, 20015, 20247, 40872, 21556, 32139, 22674, 22736, 138678, 24210, 24217, 24514, 141074, 25995, 144377, 26905, 27203, 146531, 27903, null, 29184, 148741, 29580, 16091, 150035, 23317, 29881, 35715, 154788, 153237, 31379, 31724, 31939, 32364, 33528, 34199, 40873, 34960, 40874, 36537, 40875, 36815, 34143, 39392, 37409, 40876, 167353, 136255, 16497, 17058, 23066, null, null, null, 39016, 26475, 17014, 22333, null, 34262, 149883, 33471, 160013, 19585, 159092, 23931, 158485, 159678, 40877, 40878, 23446, 40879, 26343, 32347, 28247, 31178, 15752, 17603, 143958, 141206, 17306, 17718, null, 23765, 146202, 35577, 23672, 15634, 144721, 23928, 40882, 29015, 17752, 147692, 138787, 19575, 14712, 13386, 131492, 158785, 35532, 20404, 131641, 22975, 33132, 38998, 170234, 24379, 134047, null, 139713, 166253, 16642, 18107, 168057, 16135, 40883, 172469, 16632, 14294, 18167, 158790, 16764, 165554, 160767, 17773, 14548, 152730, 17761, 17691, 19849, 19579, 19830, 17898, 16328, 150287, 13921, 17630, 17597, 16877, 23870, 23880, 23894, 15868, 14351, 23972, 23993, 14368, 14392, 24130, 24253, 24357, 24451, 14600, 14612, 14655, 14669, 24791, 24893, 23781, 14729, 25015, 25017, 25039, 14776, 25132, 25232, 25317, 25368, 14840, 22193, 14851, 25570, 25595, 25607, 25690, 14923, 25792, 23829, 22049, 40863, 14999, 25990, 15037, 26111, 26195, 15090, 26258, 15138, 26390, 15170, 26532, 26624, 15192, 26698, 26756, 15218, 15217, 15227, 26889, 26947, 29276, 26980, 27039, 27013, 15292, 27094, 15325, 27237, 27252, 27249, 27266, 15340, 27289, 15346, 27307, 27317, 27348, 27382, 27521, 27585, 27626, 27765, 27818, 15563, 27906, 27910, 27942, 28033, 15599, 28068, 28081, 28181, 28184, 28201, 28294, 166336, 28347, 28386, 28378, 40831, 28392, 28393, 28452, 28468, 15686, 147265, 28545, 28606, 15722, 15733, 29111, 23705, 15754, 28716, 15761, 28752, 28756, 28783, 28799, 28809, 131877, 17345, 13809, 134872, 147159, 22462, 159443, 28990, 153568, 13902, 27042, 166889, 23412, 31305, 153825, 169177, 31333, 31357, 154028, 31419, 31408, 31426, 31427, 29137, 156813, 16842, 31450, 31453, 31466, 16879, 21682, 154625, 31499, 31573, 31529, 152334, 154878, 31650, 31599, 33692, 154548, 158847, 31696, 33825, 31634, 31672, 154912, 15789, 154725, 33938, 31738, 31750, 31797, 154817, 31812, 31875, 149634, 31910, 26237, 148856, 31945, 31943, 31974, 31860, 31987, 31989, 31950, 32359, 17693, 159300, 32093, 159446, 29837, 32137, 32171, 28981, 32179, 32210, 147543, 155689, 32228, 15635, 32245, 137209, 32229, 164717, 32285, 155937, 155994, 32366, 32402, 17195, 37996, 32295, 32576, 32577, 32583, 31030, 156368, 39393, 32663, 156497, 32675, 136801, 131176, 17756, 145254, 17667, 164666, 32762, 156809, 32773, 32776, 32797, 32808, 32815, 172167, 158915, 32827, 32828, 32865, 141076, 18825, 157222, 146915, 157416, 26405, 32935, 166472, 33031, 33050, 22704, 141046, 27775, 156824, 151480, 25831, 136330, 33304, 137310, 27219, 150117, 150165, 17530, 33321, 133901, 158290, 146814, 20473, 136445, 34018, 33634, 158474, 149927, 144688, 137075, 146936, 33450, 26907, 194964, 16859, 34123, 33488, 33562, 134678, 137140, 14017, 143741, 144730, 33403, 33506, 33560, 147083, 159139, 158469, 158615, 144846, 15807, 33565, 21996, 33669, 17675, 159141, 33708, 33729, 33747, 13438, 159444, 27223, 34138, 13462, 159298, 143087, 33880, 154596, 33905, 15827, 17636, 27303, 33866, 146613, 31064, 33960, 158614, 159351, 159299, 34014, 33807, 33681, 17568, 33939, 34020, 154769, 16960, 154816, 17731, 34100, 23282, 159385, 17703, 34163, 17686, 26559, 34326, 165413, 165435, 34241, 159880, 34306, 136578, 159949, 194994, 17770, 34344, 13896, 137378, 21495, 160666, 34430, 34673, 172280, 34798, 142375, 34737, 34778, 34831, 22113, 34412, 26710, 17935, 34885, 34886, 161248, 146873, 161252, 34910, 34972, 18011, 34996, 34997, 25537, 35013, 30583, 161551, 35207, 35210, 35238, 35241, 35239, 35260, 166437, 35303, 162084, 162493, 35484, 30611, 37374, 35472, 162393, 31465, 162618, 147343, 18195, 162616, 29052, 35596, 35615, 152624, 152933, 35647, 35660, 35661, 35497, 150138, 35728, 35739, 35503, 136927, 17941, 34895, 35995, 163156, 163215, 195028, 14117, 163155, 36054, 163224, 163261, 36114, 36099, 137488, 36059, 28764, 36113, 150729, 16080, 36215, 36265, 163842, 135188, 149898, 15228, 164284, 160012, 31463, 36525, 36534, 36547, 37588, 36633, 36653, 164709, 164882, 36773, 37635, 172703, 133712, 36787, 18730, 166366, 165181, 146875, 24312, 143970, 36857, 172052, 165564, 165121, 140069, 14720, 159447, 36919, 165180, 162494, 36961, 165228, 165387, 37032, 165651, 37060, 165606, 37038, 37117, 37223, 15088, 37289, 37316, 31916, 166195, 138889, 37390, 27807, 37441, 37474, 153017, 37561, 166598, 146587, 166668, 153051, 134449, 37676, 37739, 166625, 166891, 28815, 23235, 166626, 166629, 18789, 37444, 166892, 166969, 166911, 37747, 37979, 36540, 38277, 38310, 37926, 38304, 28662, 17081, 140922, 165592, 135804, 146990, 18911, 27676, 38523, 38550, 16748, 38563, 159445, 25050, 38582, 30965, 166624, 38589, 21452, 18849, 158904, 131700, 156688, 168111, 168165, 150225, 137493, 144138, 38705, 34370, 38710, 18959, 17725, 17797, 150249, 28789, 23361, 38683, 38748, 168405, 38743, 23370, 168427, 38751, 37925, 20688, 143543, 143548, 38793, 38815, 38833, 38846, 38848, 38866, 38880, 152684, 38894, 29724, 169011, 38911, 38901, 168989, 162170, 19153, 38964, 38963, 38987, 39014, 15118, 160117, 15697, 132656, 147804, 153350, 39114, 39095, 39112, 39111, 19199, 159015, 136915, 21936, 39137, 39142, 39148, 37752, 39225, 150057, 19314, 170071, 170245, 39413, 39436, 39483, 39440, 39512, 153381, 14020, 168113, 170965, 39648, 39650, 170757, 39668, 19470, 39700, 39725, 165376, 20532, 39732, 158120, 14531, 143485, 39760, 39744, 171326, 23109, 137315, 39822, 148043, 39938, 39935, 39948, 171624, 40404, 171959, 172434, 172459, 172257, 172323, 172511, 40318, 40323, 172340, 40462, 26760, 40388, 139611, 172435, 172576, 137531, 172595, 40249, 172217, 172724, 40592, 40597, 40606, 40610, 19764, 40618, 40623, 148324, 40641, 15200, 14821, 15645, 20274, 14270, 166955, 40706, 40712, 19350, 37924, 159138, 40727, 40726, 40761, 22175, 22154, 40773, 39352, 168075, 38898, 33919, 40802, 40809, 31452, 40846, 29206, 19390, 149877, 149947, 29047, 150008, 148296, 150097, 29598, 166874, 137466, 31135, 166270, 167478, 37737, 37875, 166468, 37612, 37761, 37835, 166252, 148665, 29207, 16107, 30578, 31299, 28880, 148595, 148472, 29054, 137199, 28835, 137406, 144793, 16071, 137349, 152623, 137208, 14114, 136955, 137273, 14049, 137076, 137425, 155467, 14115, 136896, 22363, 150053, 136190, 135848, 136134, 136374, 34051, 145062, 34051, 33877, 149908, 160101, 146993, 152924, 147195, 159826, 17652, 145134, 170397, 159526, 26617, 14131, 15381, 15847, 22636, 137506, 26640, 16471, 145215, 147681, 147595, 147727, 158753, 21707, 22174, 157361, 22162, 135135, 134056, 134669, 37830, 166675, 37788, 20216, 20779, 14361, 148534, 20156, 132197, 131967, 20299, 20362, 153169, 23144, 131499, 132043, 14745, 131850, 132116, 13365, 20265, 131776, 167603, 131701, 35546, 131596, 20120, 20685, 20749, 20386, 20227, 150030, 147082, 20290, 20526, 20588, 20609, 20428, 20453, 20568, 20732, 20825, 20827, 20829, 20830, 28278, 144789, 147001, 147135, 28018, 137348, 147081, 20904, 20931, 132576, 17629, 132259, 132242, 132241, 36218, 166556, 132878, 21081, 21156, 133235, 21217, 37742, 18042, 29068, 148364, 134176, 149932, 135396, 27089, 134685, 29817, 16094, 29849, 29716, 29782, 29592, 19342, 150204, 147597, 21456, 13700, 29199, 147657, 21940, 131909, 21709, 134086, 22301, 37469, 38644, 37734, 22493, 22413, 22399, 13886, 22731, 23193, 166470, 136954, 137071, 136976, 23084, 22968, 37519, 23166, 23247, 23058, 153926, 137715, 137313, 148117, 14069, 27909, 29763, 23073, 155267, 23169, 166871, 132115, 37856, 29836, 135939, 28933, 18802, 37896, 166395, 37821, 14240, 23582, 23710, 24158, 24136, 137622, 137596, 146158, 24269, 23375, 137475, 137476, 14081, 137376, 14045, 136958, 14035, 33066, 166471, 138682, 144498, 166312, 24332, 24334, 137511, 137131, 23147, 137019, 23364, 34324, 161277, 34912, 24702, 141408, 140843, 24539, 16056, 140719, 140734, 168072, 159603, 25024, 131134, 131142, 140827, 24985, 24984, 24693, 142491, 142599, 149204, 168269, 25713, 149093, 142186, 14889, 142114, 144464, 170218, 142968, 25399, 173147, 25782, 25393, 25553, 149987, 142695, 25252, 142497, 25659, 25963, 26994, 15348, 143502, 144045, 149897, 144043, 21773, 144096, 137433, 169023, 26318, 144009, 143795, 15072, 16784, 152964, 166690, 152975, 136956, 152923, 152613, 30958, 143619, 137258, 143924, 13412, 143887, 143746, 148169, 26254, 159012, 26219, 19347, 26160, 161904, 138731, 26211, 144082, 144097, 26142, 153714, 14545, 145466, 145340, 15257, 145314, 144382, 29904, 15254, 26511, 149034, 26806, 26654, 15300, 27326, 14435, 145365, 148615, 27187, 27218, 27337, 27397, 137490, 25873, 26776, 27212, 15319, 27258, 27479, 147392, 146586, 37792, 37618, 166890, 166603, 37513, 163870, 166364, 37991, 28069, 28427, 149996, 28007, 147327, 15759, 28164, 147516, 23101, 28170, 22599, 27940, 30786, 28987, 148250, 148086, 28913, 29264, 29319, 29332, 149391, 149285, 20857, 150180, 132587, 29818, 147192, 144991, 150090, 149783, 155617, 16134, 16049, 150239, 166947, 147253, 24743, 16115, 29900, 29756, 37767, 29751, 17567, 159210, 17745, 30083, 16227, 150745, 150790, 16216, 30037, 30323, 173510, 15129, 29800, 166604, 149931, 149902, 15099, 15821, 150094, 16127, 149957, 149747, 37370, 22322, 37698, 166627, 137316, 20703, 152097, 152039, 30584, 143922, 30478, 30479, 30587, 149143, 145281, 14942, 149744, 29752, 29851, 16063, 150202, 150215, 16584, 150166, 156078, 37639, 152961, 30750, 30861, 30856, 30930, 29648, 31065, 161601, 153315, 16654, 31131, 33942, 31141, 27181, 147194, 31290, 31220, 16750, 136934, 16690, 37429, 31217, 134476, 149900, 131737, 146874, 137070, 13719, 21867, 13680, 13994, 131540, 134157, 31458, 23129, 141045, 154287, 154268, 23053, 131675, 30960, 23082, 154566, 31486, 16889, 31837, 31853, 16913, 154547, 155324, 155302, 31949, 150009, 137136, 31886, 31868, 31918, 27314, 32220, 32263, 32211, 32590, 156257, 155996, 162632, 32151, 155266, 17002, 158581, 133398, 26582, 131150, 144847, 22468, 156690, 156664, 149858, 32733, 31527, 133164, 154345, 154947, 31500, 155150, 39398, 34373, 39523, 27164, 144447, 14818, 150007, 157101, 39455, 157088, 33920, 160039, 158929, 17642, 33079, 17410, 32966, 33033, 33090, 157620, 39107, 158274, 33378, 33381, 158289, 33875, 159143, 34320, 160283, 23174, 16767, 137280, 23339, 137377, 23268, 137432, 34464, 195004, 146831, 34861, 160802, 23042, 34926, 20293, 34951, 35007, 35046, 35173, 35149, 153219, 35156, 161669, 161668, 166901, 166873, 166812, 166393, 16045, 33955, 18165, 18127, 14322, 35389, 35356, 169032, 24397, 37419, 148100, 26068, 28969, 28868, 137285, 40301, 35999, 36073, 163292, 22938, 30659, 23024, 17262, 14036, 36394, 36519, 150537, 36656, 36682, 17140, 27736, 28603, 140065, 18587, 28537, 28299, 137178, 39913, 14005, 149807, 37051, 37015, 21873, 18694, 37307, 37892, 166475, 16482, 166652, 37927, 166941, 166971, 34021, 35371, 38297, 38311, 38295, 38294, 167220, 29765, 16066, 149759, 150082, 148458, 16103, 143909, 38543, 167655, 167526, 167525, 16076, 149997, 150136, 147438, 29714, 29803, 16124, 38721, 168112, 26695, 18973, 168083, 153567, 38749, 37736, 166281, 166950, 166703, 156606, 37562, 23313, 35689, 18748, 29689, 147995, 38811, 38769, 39224, 134950, 24001, 166853, 150194, 38943, 169178, 37622, 169431, 37349, 17600, 166736, 150119, 166756, 39132, 166469, 16128, 37418, 18725, 33812, 39227, 39245, 162566, 15869, 39323, 19311, 39338, 39516, 166757, 153800, 27279, 39457, 23294, 39471, 170225, 19344, 170312, 39356, 19389, 19351, 37757, 22642, 135938, 22562, 149944, 136424, 30788, 141087, 146872, 26821, 15741, 37976, 14631, 24912, 141185, 141675, 24839, 40015, 40019, 40059, 39989, 39952, 39807, 39887, 171565, 39839, 172533, 172286, 40225, 19630, 147716, 40472, 19632, 40204, 172468, 172269, 172275, 170287, 40357, 33981, 159250, 159711, 158594, 34300, 17715, 159140, 159364, 159216, 33824, 34286, 159232, 145367, 155748, 31202, 144796, 144960, 18733, 149982, 15714, 37851, 37566, 37704, 131775, 30905, 37495, 37965, 20452, 13376, 36964, 152925, 30781, 30804, 30902, 30795, 137047, 143817, 149825, 13978, 20338, 28634, 28633, 28702, 28702, 21524, 147893, 22459, 22771, 22410, 40214, 22487, 28980, 13487, 147884, 29163, 158784, 151447, 23336, 137141, 166473, 24844, 23246, 23051, 17084, 148616, 14124, 19323, 166396, 37819, 37816, 137430, 134941, 33906, 158912, 136211, 148218, 142374, 148417, 22932, 146871, 157505, 32168, 155995, 155812, 149945, 149899, 166394, 37605, 29666, 16105, 29876, 166755, 137375, 16097, 150195, 27352, 29683, 29691, 16086, 150078, 150164, 137177, 150118, 132007, 136228, 149989, 29768, 149782, 28837, 149878, 37508, 29670, 37727, 132350, 37681, 166606, 166422, 37766, 166887, 153045, 18741, 166530, 29035, 149827, 134399, 22180, 132634, 134123, 134328, 21762, 31172, 137210, 32254, 136898, 150096, 137298, 17710, 37889, 14090, 166592, 149933, 22960, 137407, 137347, 160900, 23201, 14050, 146779, 14e3, 37471, 23161, 166529, 137314, 37748, 15565, 133812, 19094, 14730, 20724, 15721, 15692, 136092, 29045, 17147, 164376, 28175, 168164, 17643, 27991, 163407, 28775, 27823, 15574, 147437, 146989, 28162, 28428, 15727, 132085, 30033, 14012, 13512, 18048, 16090, 18545, 22980, 37486, 18750, 36673, 166940, 158656, 22546, 22472, 14038, 136274, 28926, 148322, 150129, 143331, 135856, 140221, 26809, 26983, 136088, 144613, 162804, 145119, 166531, 145366, 144378, 150687, 27162, 145069, 158903, 33854, 17631, 17614, 159014, 159057, 158850, 159710, 28439, 160009, 33597, 137018, 33773, 158848, 159827, 137179, 22921, 23170, 137139, 23137, 23153, 137477, 147964, 14125, 23023, 137020, 14023, 29070, 37776, 26266, 148133, 23150, 23083, 148115, 27179, 147193, 161590, 148571, 148170, 28957, 148057, 166369, 20400, 159016, 23746, 148686, 163405, 148413, 27148, 148054, 135940, 28838, 28979, 148457, 15781, 27871, 194597, 150095, 32357, 23019, 23855, 15859, 24412, 150109, 137183, 32164, 33830, 21637, 146170, 144128, 131604, 22398, 133333, 132633, 16357, 139166, 172726, 28675, 168283, 23920, 29583, 31955, 166489, 168992, 20424, 32743, 29389, 29456, 162548, 29496, 29497, 153334, 29505, 29512, 16041, 162584, 36972, 29173, 149746, 29665, 33270, 16074, 30476, 16081, 27810, 22269, 29721, 29726, 29727, 16098, 16112, 16116, 16122, 29907, 16142, 16211, 30018, 30061, 30066, 30093, 16252, 30152, 30172, 16320, 30285, 16343, 30324, 16348, 30330, 151388, 29064, 22051, 35200, 22633, 16413, 30531, 16441, 26465, 16453, 13787, 30616, 16490, 16495, 23646, 30654, 30667, 22770, 30744, 28857, 30748, 16552, 30777, 30791, 30801, 30822, 33864, 152885, 31027, 26627, 31026, 16643, 16649, 31121, 31129, 36795, 31238, 36796, 16743, 31377, 16818, 31420, 33401, 16836, 31439, 31451, 16847, 20001, 31586, 31596, 31611, 31762, 31771, 16992, 17018, 31867, 31900, 17036, 31928, 17044, 31981, 36755, 28864, 134351, 32207, 32212, 32208, 32253, 32686, 32692, 29343, 17303, 32800, 32805, 31545, 32814, 32817, 32852, 15820, 22452, 28832, 32951, 33001, 17389, 33036, 29482, 33038, 33042, 30048, 33044, 17409, 15161, 33110, 33113, 33114, 17427, 22586, 33148, 33156, 17445, 33171, 17453, 33189, 22511, 33217, 33252, 33364, 17551, 33446, 33398, 33482, 33496, 33535, 17584, 33623, 38505, 27018, 33797, 28917, 33892, 24803, 33928, 17668, 33982, 34017, 34040, 34064, 34104, 34130, 17723, 34159, 34160, 34272, 17783, 34418, 34450, 34482, 34543, 38469, 34699, 17926, 17943, 34990, 35071, 35108, 35143, 35217, 162151, 35369, 35384, 35476, 35508, 35921, 36052, 36082, 36124, 18328, 22623, 36291, 18413, 20206, 36410, 21976, 22356, 36465, 22005, 36528, 18487, 36558, 36578, 36580, 36589, 36594, 36791, 36801, 36810, 36812, 36915, 39364, 18605, 39136, 37395, 18718, 37416, 37464, 37483, 37553, 37550, 37567, 37603, 37611, 37619, 37620, 37629, 37699, 37764, 37805, 18757, 18769, 40639, 37911, 21249, 37917, 37933, 37950, 18794, 37972, 38009, 38189, 38306, 18855, 38388, 38451, 18917, 26528, 18980, 38720, 18997, 38834, 38850, 22100, 19172, 24808, 39097, 19225, 39153, 22596, 39182, 39193, 20916, 39196, 39223, 39234, 39261, 39266, 19312, 39365, 19357, 39484, 39695, 31363, 39785, 39809, 39901, 39921, 39924, 19565, 39968, 14191, 138178, 40265, 39994, 40702, 22096, 40339, 40381, 40384, 40444, 38134, 36790, 40571, 40620, 40625, 40637, 40646, 38108, 40674, 40689, 40696, 31432, 40772, 131220, 131767, 132e3, 26906, 38083, 22956, 132311, 22592, 38081, 14265, 132565, 132629, 132726, 136890, 22359, 29043, 133826, 133837, 134079, 21610, 194619, 134091, 21662, 134139, 134203, 134227, 134245, 134268, 24807, 134285, 22138, 134325, 134365, 134381, 134511, 134578, 134600, 26965, 39983, 34725, 134660, 134670, 134871, 135056, 134957, 134771, 23584, 135100, 24075, 135260, 135247, 135286, 26398, 135291, 135304, 135318, 13895, 135359, 135379, 135471, 135483, 21348, 33965, 135907, 136053, 135990, 35713, 136567, 136729, 137155, 137159, 20088, 28859, 137261, 137578, 137773, 137797, 138282, 138352, 138412, 138952, 25283, 138965, 139029, 29080, 26709, 139333, 27113, 14024, 139900, 140247, 140282, 141098, 141425, 141647, 33533, 141671, 141715, 142037, 35237, 142056, 36768, 142094, 38840, 142143, 38983, 39613, 142412, null, 142472, 142519, 154600, 142600, 142610, 142775, 142741, 142914, 143220, 143308, 143411, 143462, 144159, 144350, 24497, 26184, 26303, 162425, 144743, 144883, 29185, 149946, 30679, 144922, 145174, 32391, 131910, 22709, 26382, 26904, 146087, 161367, 155618, 146961, 147129, 161278, 139418, 18640, 19128, 147737, 166554, 148206, 148237, 147515, 148276, 148374, 150085, 132554, 20946, 132625, 22943, 138920, 15294, 146687, 148484, 148694, 22408, 149108, 14747, 149295, 165352, 170441, 14178, 139715, 35678, 166734, 39382, 149522, 149755, 150037, 29193, 150208, 134264, 22885, 151205, 151430, 132985, 36570, 151596, 21135, 22335, 29041, 152217, 152601, 147274, 150183, 21948, 152646, 152686, 158546, 37332, 13427, 152895, 161330, 152926, 18200, 152930, 152934, 153543, 149823, 153693, 20582, 13563, 144332, 24798, 153859, 18300, 166216, 154286, 154505, 154630, 138640, 22433, 29009, 28598, 155906, 162834, 36950, 156082, 151450, 35682, 156674, 156746, 23899, 158711, 36662, 156804, 137500, 35562, 150006, 156808, 147439, 156946, 19392, 157119, 157365, 141083, 37989, 153569, 24981, 23079, 194765, 20411, 22201, 148769, 157436, 20074, 149812, 38486, 28047, 158909, 13848, 35191, 157593, 157806, 156689, 157790, 29151, 157895, 31554, 168128, 133649, 157990, 37124, 158009, 31301, 40432, 158202, 39462, 158253, 13919, 156777, 131105, 31107, 158260, 158555, 23852, 144665, 33743, 158621, 18128, 158884, 30011, 34917, 159150, 22710, 14108, 140685, 159819, 160205, 15444, 160384, 160389, 37505, 139642, 160395, 37680, 160486, 149968, 27705, 38047, 160848, 134904, 34855, 35061, 141606, 164979, 137137, 28344, 150058, 137248, 14756, 14009, 23568, 31203, 17727, 26294, 171181, 170148, 35139, 161740, 161880, 22230, 16607, 136714, 14753, 145199, 164072, 136133, 29101, 33638, 162269, 168360, 23143, 19639, 159919, 166315, 162301, 162314, 162571, 163174, 147834, 31555, 31102, 163849, 28597, 172767, 27139, 164632, 21410, 159239, 37823, 26678, 38749, 164207, 163875, 158133, 136173, 143919, 163912, 23941, 166960, 163971, 22293, 38947, 166217, 23979, 149896, 26046, 27093, 21458, 150181, 147329, 15377, 26422, 163984, 164084, 164142, 139169, 164175, 164233, 164271, 164378, 164614, 164655, 164746, 13770, 164968, 165546, 18682, 25574, 166230, 30728, 37461, 166328, 17394, 166375, 17375, 166376, 166726, 166868, 23032, 166921, 36619, 167877, 168172, 31569, 168208, 168252, 15863, 168286, 150218, 36816, 29327, 22155, 169191, 169449, 169392, 169400, 169778, 170193, 170313, 170346, 170435, 170536, 170766, 171354, 171419, 32415, 171768, 171811, 19620, 38215, 172691, 29090, 172799, 19857, 36882, 173515, 19868, 134300, 36798, 21953, 36794, 140464, 36793, 150163, 17673, 32383, 28502, 27313, 20202, 13540, 166700, 161949, 14138, 36480, 137205, 163876, 166764, 166809, 162366, 157359, 15851, 161365, 146615, 153141, 153942, 20122, 155265, 156248, 22207, 134765, 36366, 23405, 147080, 150686, 25566, 25296, 137206, 137339, 25904, 22061, 154698, 21530, 152337, 15814, 171416, 19581, 22050, 22046, 32585, 155352, 22901, 146752, 34672, 19996, 135146, 134473, 145082, 33047, 40286, 36120, 30267, 40005, 30286, 30649, 37701, 21554, 33096, 33527, 22053, 33074, 33816, 32957, 21994, 31074, 22083, 21526, 134813, 13774, 22021, 22001, 26353, 164578, 13869, 30004, 22e3, 21946, 21655, 21874, 134209, 134294, 24272, 151880, 134774, 142434, 134818, 40619, 32090, 21982, 135285, 25245, 38765, 21652, 36045, 29174, 37238, 25596, 25529, 25598, 21865, 142147, 40050, 143027, 20890, 13535, 134567, 20903, 21581, 21790, 21779, 30310, 36397, 157834, 30129, 32950, 34820, 34694, 35015, 33206, 33820, 135361, 17644, 29444, 149254, 23440, 33547, 157843, 22139, 141044, 163119, 147875, 163187, 159440, 160438, 37232, 135641, 37384, 146684, 173737, 134828, 134905, 29286, 138402, 18254, 151490, 163833, 135147, 16634, 40029, 25887, 142752, 18675, 149472, 171388, 135148, 134666, 24674, 161187, 135149, null, 155720, 135559, 29091, 32398, 40272, 19994, 19972, 13687, 23309, 27826, 21351, 13996, 14812, 21373, 13989, 149016, 22682, 150382, 33325, 21579, 22442, 154261, 133497, null, 14930, 140389, 29556, 171692, 19721, 39917, 146686, 171824, 19547, 151465, 169374, 171998, 33884, 146870, 160434, 157619, 145184, 25390, 32037, 147191, 146988, 14890, 36872, 21196, 15988, 13946, 17897, 132238, 30272, 23280, 134838, 30842, 163630, 22695, 16575, 22140, 39819, 23924, 30292, 173108, 40581, 19681, 30201, 14331, 24857, 143578, 148466, null, 22109, 135849, 22439, 149859, 171526, 21044, 159918, 13741, 27722, 40316, 31830, 39737, 22494, 137068, 23635, 25811, 169168, 156469, 160100, 34477, 134440, 159010, 150242, 134513, null, 20990, 139023, 23950, 38659, 138705, 40577, 36940, 31519, 39682, 23761, 31651, 25192, 25397, 39679, 31695, 39722, 31870, 39726, 31810, 31878, 39957, 31740, 39689, 40727, 39963, 149822, 40794, 21875, 23491, 20477, 40600, 20466, 21088, 15878, 21201, 22375, 20566, 22967, 24082, 38856, 40363, 36700, 21609, 38836, 39232, 38842, 21292, 24880, 26924, 21466, 39946, 40194, 19515, 38465, 27008, 20646, 30022, 137069, 39386, 21107, null, 37209, 38529, 37212, null, 37201, 167575, 25471, 159011, 27338, 22033, 37262, 30074, 25221, 132092, 29519, 31856, 154657, 146685, null, 149785, 30422, 39837, 20010, 134356, 33726, 34882, null, 23626, 27072, 20717, 22394, 21023, 24053, 20174, 27697, 131570, 20281, 21660, 21722, 21146, 36226, 13822, 24332, 13811, null, 27474, 37244, 40869, 39831, 38958, 39092, 39610, 40616, 40580, 29050, 31508, null, 27642, 34840, 32632, null, 22048, 173642, 36471, 40787, null, 36308, 36431, 40476, 36353, 25218, 164733, 36392, 36469, 31443, 150135, 31294, 30936, 27882, 35431, 30215, 166490, 40742, 27854, 34774, 30147, 172722, 30803, 194624, 36108, 29410, 29553, 35629, 29442, 29937, 36075, 150203, 34351, 24506, 34976, 17591, null, 137275, 159237, null, 35454, 140571, null, 24829, 30311, 39639, 40260, 37742, 39823, 34805, null, 34831, 36087, 29484, 38689, 39856, 13782, 29362, 19463, 31825, 39242, 155993, 24921, 19460, 40598, 24957, null, 22367, 24943, 25254, 25145, 25294, 14940, 25058, 21418, 144373, 25444, 26626, 13778, 23895, 166850, 36826, 167481, null, 20697, 138566, 30982, 21298, 38456, 134971, 16485, null, 30718, null, 31938, 155418, 31962, 31277, 32870, 32867, 32077, 29957, 29938, 35220, 33306, 26380, 32866, 160902, 32859, 29936, 33027, 30500, 35209, 157644, 30035, 159441, 34729, 34766, 33224, 34700, 35401, 36013, 35651, 30507, 29944, 34010, 13877, 27058, 36262, null, 35241, 29800, 28089, 34753, 147473, 29927, 15835, 29046, 24740, 24988, 15569, 29026, 24695, null, 32625, 166701, 29264, 24809, 19326, 21024, 15384, 146631, 155351, 161366, 152881, 137540, 135934, 170243, 159196, 159917, 23745, 156077, 166415, 145015, 131310, 157766, 151310, 17762, 23327, 156492, 40784, 40614, 156267, 12288, 65292, 12289, 12290, 65294, 8231, 65307, 65306, 65311, 65281, 65072, 8230, 8229, 65104, 65105, 65106, 183, 65108, 65109, 65110, 65111, 65372, 8211, 65073, 8212, 65075, 9588, 65076, 65103, 65288, 65289, 65077, 65078, 65371, 65373, 65079, 65080, 12308, 12309, 65081, 65082, 12304, 12305, 65083, 65084, 12298, 12299, 65085, 65086, 12296, 12297, 65087, 65088, 12300, 12301, 65089, 65090, 12302, 12303, 65091, 65092, 65113, 65114, 65115, 65116, 65117, 65118, 8216, 8217, 8220, 8221, 12317, 12318, 8245, 8242, 65283, 65286, 65290, 8251, 167, 12291, 9675, 9679, 9651, 9650, 9678, 9734, 9733, 9671, 9670, 9633, 9632, 9661, 9660, 12963, 8453, 175, 65507, 65343, 717, 65097, 65098, 65101, 65102, 65099, 65100, 65119, 65120, 65121, 65291, 65293, 215, 247, 177, 8730, 65308, 65310, 65309, 8806, 8807, 8800, 8734, 8786, 8801, 65122, 65123, 65124, 65125, 65126, 65374, 8745, 8746, 8869, 8736, 8735, 8895, 13266, 13265, 8747, 8750, 8757, 8756, 9792, 9794, 8853, 8857, 8593, 8595, 8592, 8594, 8598, 8599, 8601, 8600, 8741, 8739, 65295, 65340, 8725, 65128, 65284, 65509, 12306, 65504, 65505, 65285, 65312, 8451, 8457, 65129, 65130, 65131, 13269, 13212, 13213, 13214, 13262, 13217, 13198, 13199, 13252, 176, 20825, 20827, 20830, 20829, 20833, 20835, 21991, 29929, 31950, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9615, 9614, 9613, 9612, 9611, 9610, 9609, 9532, 9524, 9516, 9508, 9500, 9620, 9472, 9474, 9621, 9484, 9488, 9492, 9496, 9581, 9582, 9584, 9583, 9552, 9566, 9578, 9569, 9698, 9699, 9701, 9700, 9585, 9586, 9587, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 21313, 21316, 21317, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 729, 713, 714, 711, 715, 9216, 9217, 9218, 9219, 9220, 9221, 9222, 9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233, 9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244, 9245, 9246, 9247, 9249, 8364, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19968, 20057, 19969, 19971, 20035, 20061, 20102, 20108, 20154, 20799, 20837, 20843, 20960, 20992, 20993, 21147, 21269, 21313, 21340, 21448, 19977, 19979, 19976, 19978, 20011, 20024, 20961, 20037, 20040, 20063, 20062, 20110, 20129, 20800, 20995, 21242, 21315, 21449, 21475, 22303, 22763, 22805, 22823, 22899, 23376, 23377, 23379, 23544, 23567, 23586, 23608, 23665, 24029, 24037, 24049, 24050, 24051, 24062, 24178, 24318, 24331, 24339, 25165, 19985, 19984, 19981, 20013, 20016, 20025, 20043, 23609, 20104, 20113, 20117, 20114, 20116, 20130, 20161, 20160, 20163, 20166, 20167, 20173, 20170, 20171, 20164, 20803, 20801, 20839, 20845, 20846, 20844, 20887, 20982, 20998, 20999, 21e3, 21243, 21246, 21247, 21270, 21305, 21320, 21319, 21317, 21342, 21380, 21451, 21450, 21453, 22764, 22825, 22827, 22826, 22829, 23380, 23569, 23588, 23610, 23663, 24052, 24187, 24319, 24340, 24341, 24515, 25096, 25142, 25163, 25166, 25903, 25991, 26007, 26020, 26041, 26085, 26352, 26376, 26408, 27424, 27490, 27513, 27595, 27604, 27611, 27663, 27700, 28779, 29226, 29238, 29243, 29255, 29273, 29275, 29356, 29579, 19993, 19990, 19989, 19988, 19992, 20027, 20045, 20047, 20046, 20197, 20184, 20180, 20181, 20182, 20183, 20195, 20196, 20185, 20190, 20805, 20804, 20873, 20874, 20908, 20985, 20986, 20984, 21002, 21152, 21151, 21253, 21254, 21271, 21277, 20191, 21322, 21321, 21345, 21344, 21359, 21358, 21435, 21487, 21476, 21491, 21484, 21486, 21481, 21480, 21500, 21496, 21493, 21483, 21478, 21482, 21490, 21489, 21488, 21477, 21485, 21499, 22235, 22234, 22806, 22830, 22833, 22900, 22902, 23381, 23427, 23612, 24040, 24039, 24038, 24066, 24067, 24179, 24188, 24321, 24344, 24343, 24517, 25098, 25171, 25172, 25170, 25169, 26021, 26086, 26414, 26412, 26410, 26411, 26413, 27491, 27597, 27665, 27664, 27704, 27713, 27712, 27710, 29359, 29572, 29577, 29916, 29926, 29976, 29983, 29992, 29993, 3e4, 30001, 30002, 30003, 30091, 30333, 30382, 30399, 30446, 30683, 30690, 30707, 31034, 31166, 31348, 31435, 19998, 19999, 20050, 20051, 20073, 20121, 20132, 20134, 20133, 20223, 20233, 20249, 20234, 20245, 20237, 20240, 20241, 20239, 20210, 20214, 20219, 20208, 20211, 20221, 20225, 20235, 20809, 20807, 20806, 20808, 20840, 20849, 20877, 20912, 21015, 21009, 21010, 21006, 21014, 21155, 21256, 21281, 21280, 21360, 21361, 21513, 21519, 21516, 21514, 21520, 21505, 21515, 21508, 21521, 21517, 21512, 21507, 21518, 21510, 21522, 22240, 22238, 22237, 22323, 22320, 22312, 22317, 22316, 22319, 22313, 22809, 22810, 22839, 22840, 22916, 22904, 22915, 22909, 22905, 22914, 22913, 23383, 23384, 23431, 23432, 23429, 23433, 23546, 23574, 23673, 24030, 24070, 24182, 24180, 24335, 24347, 24537, 24534, 25102, 25100, 25101, 25104, 25187, 25179, 25176, 25910, 26089, 26088, 26092, 26093, 26354, 26355, 26377, 26429, 26420, 26417, 26421, 27425, 27492, 27515, 27670, 27741, 27735, 27737, 27743, 27744, 27728, 27733, 27745, 27739, 27725, 27726, 28784, 29279, 29277, 30334, 31481, 31859, 31992, 32566, 32650, 32701, 32769, 32771, 32780, 32786, 32819, 32895, 32905, 32907, 32908, 33251, 33258, 33267, 33276, 33292, 33307, 33311, 33390, 33394, 33406, 34411, 34880, 34892, 34915, 35199, 38433, 20018, 20136, 20301, 20303, 20295, 20311, 20318, 20276, 20315, 20309, 20272, 20304, 20305, 20285, 20282, 20280, 20291, 20308, 20284, 20294, 20323, 20316, 20320, 20271, 20302, 20278, 20313, 20317, 20296, 20314, 20812, 20811, 20813, 20853, 20918, 20919, 21029, 21028, 21033, 21034, 21032, 21163, 21161, 21162, 21164, 21283, 21363, 21365, 21533, 21549, 21534, 21566, 21542, 21582, 21543, 21574, 21571, 21555, 21576, 21570, 21531, 21545, 21578, 21561, 21563, 21560, 21550, 21557, 21558, 21536, 21564, 21568, 21553, 21547, 21535, 21548, 22250, 22256, 22244, 22251, 22346, 22353, 22336, 22349, 22343, 22350, 22334, 22352, 22351, 22331, 22767, 22846, 22941, 22930, 22952, 22942, 22947, 22937, 22934, 22925, 22948, 22931, 22922, 22949, 23389, 23388, 23386, 23387, 23436, 23435, 23439, 23596, 23616, 23617, 23615, 23614, 23696, 23697, 23700, 23692, 24043, 24076, 24207, 24199, 24202, 24311, 24324, 24351, 24420, 24418, 24439, 24441, 24536, 24524, 24535, 24525, 24561, 24555, 24568, 24554, 25106, 25105, 25220, 25239, 25238, 25216, 25206, 25225, 25197, 25226, 25212, 25214, 25209, 25203, 25234, 25199, 25240, 25198, 25237, 25235, 25233, 25222, 25913, 25915, 25912, 26097, 26356, 26463, 26446, 26447, 26448, 26449, 26460, 26454, 26462, 26441, 26438, 26464, 26451, 26455, 27493, 27599, 27714, 27742, 27801, 27777, 27784, 27785, 27781, 27803, 27754, 27770, 27792, 27760, 27788, 27752, 27798, 27794, 27773, 27779, 27762, 27774, 27764, 27782, 27766, 27789, 27796, 27800, 27778, 28790, 28796, 28797, 28792, 29282, 29281, 29280, 29380, 29378, 29590, 29996, 29995, 30007, 30008, 30338, 30447, 30691, 31169, 31168, 31167, 31350, 31995, 32597, 32918, 32915, 32925, 32920, 32923, 32922, 32946, 33391, 33426, 33419, 33421, 35211, 35282, 35328, 35895, 35910, 35925, 35997, 36196, 36208, 36275, 36523, 36554, 36763, 36784, 36802, 36806, 36805, 36804, 24033, 37009, 37026, 37034, 37030, 37027, 37193, 37318, 37324, 38450, 38446, 38449, 38442, 38444, 20006, 20054, 20083, 20107, 20123, 20126, 20139, 20140, 20335, 20381, 20365, 20339, 20351, 20332, 20379, 20363, 20358, 20355, 20336, 20341, 20360, 20329, 20347, 20374, 20350, 20367, 20369, 20346, 20820, 20818, 20821, 20841, 20855, 20854, 20856, 20925, 20989, 21051, 21048, 21047, 21050, 21040, 21038, 21046, 21057, 21182, 21179, 21330, 21332, 21331, 21329, 21350, 21367, 21368, 21369, 21462, 21460, 21463, 21619, 21621, 21654, 21624, 21653, 21632, 21627, 21623, 21636, 21650, 21638, 21628, 21648, 21617, 21622, 21644, 21658, 21602, 21608, 21643, 21629, 21646, 22266, 22403, 22391, 22378, 22377, 22369, 22374, 22372, 22396, 22812, 22857, 22855, 22856, 22852, 22868, 22974, 22971, 22996, 22969, 22958, 22993, 22982, 22992, 22989, 22987, 22995, 22986, 22959, 22963, 22994, 22981, 23391, 23396, 23395, 23447, 23450, 23448, 23452, 23449, 23451, 23578, 23624, 23621, 23622, 23735, 23713, 23736, 23721, 23723, 23729, 23731, 24088, 24090, 24086, 24085, 24091, 24081, 24184, 24218, 24215, 24220, 24213, 24214, 24310, 24358, 24359, 24361, 24448, 24449, 24447, 24444, 24541, 24544, 24573, 24565, 24575, 24591, 24596, 24623, 24629, 24598, 24618, 24597, 24609, 24615, 24617, 24619, 24603, 25110, 25109, 25151, 25150, 25152, 25215, 25289, 25292, 25284, 25279, 25282, 25273, 25298, 25307, 25259, 25299, 25300, 25291, 25288, 25256, 25277, 25276, 25296, 25305, 25287, 25293, 25269, 25306, 25265, 25304, 25302, 25303, 25286, 25260, 25294, 25918, 26023, 26044, 26106, 26132, 26131, 26124, 26118, 26114, 26126, 26112, 26127, 26133, 26122, 26119, 26381, 26379, 26477, 26507, 26517, 26481, 26524, 26483, 26487, 26503, 26525, 26519, 26479, 26480, 26495, 26505, 26494, 26512, 26485, 26522, 26515, 26492, 26474, 26482, 27427, 27494, 27495, 27519, 27667, 27675, 27875, 27880, 27891, 27825, 27852, 27877, 27827, 27837, 27838, 27836, 27874, 27819, 27861, 27859, 27832, 27844, 27833, 27841, 27822, 27863, 27845, 27889, 27839, 27835, 27873, 27867, 27850, 27820, 27887, 27868, 27862, 27872, 28821, 28814, 28818, 28810, 28825, 29228, 29229, 29240, 29256, 29287, 29289, 29376, 29390, 29401, 29399, 29392, 29609, 29608, 29599, 29611, 29605, 30013, 30109, 30105, 30106, 30340, 30402, 30450, 30452, 30693, 30717, 31038, 31040, 31041, 31177, 31176, 31354, 31353, 31482, 31998, 32596, 32652, 32651, 32773, 32954, 32933, 32930, 32945, 32929, 32939, 32937, 32948, 32938, 32943, 33253, 33278, 33293, 33459, 33437, 33433, 33453, 33469, 33439, 33465, 33457, 33452, 33445, 33455, 33464, 33443, 33456, 33470, 33463, 34382, 34417, 21021, 34920, 36555, 36814, 36820, 36817, 37045, 37048, 37041, 37046, 37319, 37329, 38263, 38272, 38428, 38464, 38463, 38459, 38468, 38466, 38585, 38632, 38738, 38750, 20127, 20141, 20142, 20449, 20405, 20399, 20415, 20448, 20433, 20431, 20445, 20419, 20406, 20440, 20447, 20426, 20439, 20398, 20432, 20420, 20418, 20442, 20430, 20446, 20407, 20823, 20882, 20881, 20896, 21070, 21059, 21066, 21069, 21068, 21067, 21063, 21191, 21193, 21187, 21185, 21261, 21335, 21371, 21402, 21467, 21676, 21696, 21672, 21710, 21705, 21688, 21670, 21683, 21703, 21698, 21693, 21674, 21697, 21700, 21704, 21679, 21675, 21681, 21691, 21673, 21671, 21695, 22271, 22402, 22411, 22432, 22435, 22434, 22478, 22446, 22419, 22869, 22865, 22863, 22862, 22864, 23004, 23e3, 23039, 23011, 23016, 23043, 23013, 23018, 23002, 23014, 23041, 23035, 23401, 23459, 23462, 23460, 23458, 23461, 23553, 23630, 23631, 23629, 23627, 23769, 23762, 24055, 24093, 24101, 24095, 24189, 24224, 24230, 24314, 24328, 24365, 24421, 24456, 24453, 24458, 24459, 24455, 24460, 24457, 24594, 24605, 24608, 24613, 24590, 24616, 24653, 24688, 24680, 24674, 24646, 24643, 24684, 24683, 24682, 24676, 25153, 25308, 25366, 25353, 25340, 25325, 25345, 25326, 25341, 25351, 25329, 25335, 25327, 25324, 25342, 25332, 25361, 25346, 25919, 25925, 26027, 26045, 26082, 26149, 26157, 26144, 26151, 26159, 26143, 26152, 26161, 26148, 26359, 26623, 26579, 26609, 26580, 26576, 26604, 26550, 26543, 26613, 26601, 26607, 26564, 26577, 26548, 26586, 26597, 26552, 26575, 26590, 26611, 26544, 26585, 26594, 26589, 26578, 27498, 27523, 27526, 27573, 27602, 27607, 27679, 27849, 27915, 27954, 27946, 27969, 27941, 27916, 27953, 27934, 27927, 27963, 27965, 27966, 27958, 27931, 27893, 27961, 27943, 27960, 27945, 27950, 27957, 27918, 27947, 28843, 28858, 28851, 28844, 28847, 28845, 28856, 28846, 28836, 29232, 29298, 29295, 29300, 29417, 29408, 29409, 29623, 29642, 29627, 29618, 29645, 29632, 29619, 29978, 29997, 30031, 30028, 30030, 30027, 30123, 30116, 30117, 30114, 30115, 30328, 30342, 30343, 30344, 30408, 30406, 30403, 30405, 30465, 30457, 30456, 30473, 30475, 30462, 30460, 30471, 30684, 30722, 30740, 30732, 30733, 31046, 31049, 31048, 31047, 31161, 31162, 31185, 31186, 31179, 31359, 31361, 31487, 31485, 31869, 32002, 32005, 32e3, 32009, 32007, 32004, 32006, 32568, 32654, 32703, 32772, 32784, 32781, 32785, 32822, 32982, 32997, 32986, 32963, 32964, 32972, 32993, 32987, 32974, 32990, 32996, 32989, 33268, 33314, 33511, 33539, 33541, 33507, 33499, 33510, 33540, 33509, 33538, 33545, 33490, 33495, 33521, 33537, 33500, 33492, 33489, 33502, 33491, 33503, 33519, 33542, 34384, 34425, 34427, 34426, 34893, 34923, 35201, 35284, 35336, 35330, 35331, 35998, 36e3, 36212, 36211, 36276, 36557, 36556, 36848, 36838, 36834, 36842, 36837, 36845, 36843, 36836, 36840, 37066, 37070, 37057, 37059, 37195, 37194, 37325, 38274, 38480, 38475, 38476, 38477, 38754, 38761, 38859, 38893, 38899, 38913, 39080, 39131, 39135, 39318, 39321, 20056, 20147, 20492, 20493, 20515, 20463, 20518, 20517, 20472, 20521, 20502, 20486, 20540, 20511, 20506, 20498, 20497, 20474, 20480, 20500, 20520, 20465, 20513, 20491, 20505, 20504, 20467, 20462, 20525, 20522, 20478, 20523, 20489, 20860, 20900, 20901, 20898, 20941, 20940, 20934, 20939, 21078, 21084, 21076, 21083, 21085, 21290, 21375, 21407, 21405, 21471, 21736, 21776, 21761, 21815, 21756, 21733, 21746, 21766, 21754, 21780, 21737, 21741, 21729, 21769, 21742, 21738, 21734, 21799, 21767, 21757, 21775, 22275, 22276, 22466, 22484, 22475, 22467, 22537, 22799, 22871, 22872, 22874, 23057, 23064, 23068, 23071, 23067, 23059, 23020, 23072, 23075, 23081, 23077, 23052, 23049, 23403, 23640, 23472, 23475, 23478, 23476, 23470, 23477, 23481, 23480, 23556, 23633, 23637, 23632, 23789, 23805, 23803, 23786, 23784, 23792, 23798, 23809, 23796, 24046, 24109, 24107, 24235, 24237, 24231, 24369, 24466, 24465, 24464, 24665, 24675, 24677, 24656, 24661, 24685, 24681, 24687, 24708, 24735, 24730, 24717, 24724, 24716, 24709, 24726, 25159, 25331, 25352, 25343, 25422, 25406, 25391, 25429, 25410, 25414, 25423, 25417, 25402, 25424, 25405, 25386, 25387, 25384, 25421, 25420, 25928, 25929, 26009, 26049, 26053, 26178, 26185, 26191, 26179, 26194, 26188, 26181, 26177, 26360, 26388, 26389, 26391, 26657, 26680, 26696, 26694, 26707, 26681, 26690, 26708, 26665, 26803, 26647, 26700, 26705, 26685, 26612, 26704, 26688, 26684, 26691, 26666, 26693, 26643, 26648, 26689, 27530, 27529, 27575, 27683, 27687, 27688, 27686, 27684, 27888, 28010, 28053, 28040, 28039, 28006, 28024, 28023, 27993, 28051, 28012, 28041, 28014, 27994, 28020, 28009, 28044, 28042, 28025, 28037, 28005, 28052, 28874, 28888, 28900, 28889, 28872, 28879, 29241, 29305, 29436, 29433, 29437, 29432, 29431, 29574, 29677, 29705, 29678, 29664, 29674, 29662, 30036, 30045, 30044, 30042, 30041, 30142, 30149, 30151, 30130, 30131, 30141, 30140, 30137, 30146, 30136, 30347, 30384, 30410, 30413, 30414, 30505, 30495, 30496, 30504, 30697, 30768, 30759, 30776, 30749, 30772, 30775, 30757, 30765, 30752, 30751, 30770, 31061, 31056, 31072, 31071, 31062, 31070, 31069, 31063, 31066, 31204, 31203, 31207, 31199, 31206, 31209, 31192, 31364, 31368, 31449, 31494, 31505, 31881, 32033, 32023, 32011, 32010, 32032, 32034, 32020, 32016, 32021, 32026, 32028, 32013, 32025, 32027, 32570, 32607, 32660, 32709, 32705, 32774, 32792, 32789, 32793, 32791, 32829, 32831, 33009, 33026, 33008, 33029, 33005, 33012, 33030, 33016, 33011, 33032, 33021, 33034, 33020, 33007, 33261, 33260, 33280, 33296, 33322, 33323, 33320, 33324, 33467, 33579, 33618, 33620, 33610, 33592, 33616, 33609, 33589, 33588, 33615, 33586, 33593, 33590, 33559, 33600, 33585, 33576, 33603, 34388, 34442, 34474, 34451, 34468, 34473, 34444, 34467, 34460, 34928, 34935, 34945, 34946, 34941, 34937, 35352, 35344, 35342, 35340, 35349, 35338, 35351, 35347, 35350, 35343, 35345, 35912, 35962, 35961, 36001, 36002, 36215, 36524, 36562, 36564, 36559, 36785, 36865, 36870, 36855, 36864, 36858, 36852, 36867, 36861, 36869, 36856, 37013, 37089, 37085, 37090, 37202, 37197, 37196, 37336, 37341, 37335, 37340, 37337, 38275, 38498, 38499, 38497, 38491, 38493, 38500, 38488, 38494, 38587, 39138, 39340, 39592, 39640, 39717, 39730, 39740, 20094, 20602, 20605, 20572, 20551, 20547, 20556, 20570, 20553, 20581, 20598, 20558, 20565, 20597, 20596, 20599, 20559, 20495, 20591, 20589, 20828, 20885, 20976, 21098, 21103, 21202, 21209, 21208, 21205, 21264, 21263, 21273, 21311, 21312, 21310, 21443, 26364, 21830, 21866, 21862, 21828, 21854, 21857, 21827, 21834, 21809, 21846, 21839, 21845, 21807, 21860, 21816, 21806, 21852, 21804, 21859, 21811, 21825, 21847, 22280, 22283, 22281, 22495, 22533, 22538, 22534, 22496, 22500, 22522, 22530, 22581, 22519, 22521, 22816, 22882, 23094, 23105, 23113, 23142, 23146, 23104, 23100, 23138, 23130, 23110, 23114, 23408, 23495, 23493, 23492, 23490, 23487, 23494, 23561, 23560, 23559, 23648, 23644, 23645, 23815, 23814, 23822, 23835, 23830, 23842, 23825, 23849, 23828, 23833, 23844, 23847, 23831, 24034, 24120, 24118, 24115, 24119, 24247, 24248, 24246, 24245, 24254, 24373, 24375, 24407, 24428, 24425, 24427, 24471, 24473, 24478, 24472, 24481, 24480, 24476, 24703, 24739, 24713, 24736, 24744, 24779, 24756, 24806, 24765, 24773, 24763, 24757, 24796, 24764, 24792, 24789, 24774, 24799, 24760, 24794, 24775, 25114, 25115, 25160, 25504, 25511, 25458, 25494, 25506, 25509, 25463, 25447, 25496, 25514, 25457, 25513, 25481, 25475, 25499, 25451, 25512, 25476, 25480, 25497, 25505, 25516, 25490, 25487, 25472, 25467, 25449, 25448, 25466, 25949, 25942, 25937, 25945, 25943, 21855, 25935, 25944, 25941, 25940, 26012, 26011, 26028, 26063, 26059, 26060, 26062, 26205, 26202, 26212, 26216, 26214, 26206, 26361, 21207, 26395, 26753, 26799, 26786, 26771, 26805, 26751, 26742, 26801, 26791, 26775, 26800, 26755, 26820, 26797, 26758, 26757, 26772, 26781, 26792, 26783, 26785, 26754, 27442, 27578, 27627, 27628, 27691, 28046, 28092, 28147, 28121, 28082, 28129, 28108, 28132, 28155, 28154, 28165, 28103, 28107, 28079, 28113, 28078, 28126, 28153, 28088, 28151, 28149, 28101, 28114, 28186, 28085, 28122, 28139, 28120, 28138, 28145, 28142, 28136, 28102, 28100, 28074, 28140, 28095, 28134, 28921, 28937, 28938, 28925, 28911, 29245, 29309, 29313, 29468, 29467, 29462, 29459, 29465, 29575, 29701, 29706, 29699, 29702, 29694, 29709, 29920, 29942, 29943, 29980, 29986, 30053, 30054, 30050, 30064, 30095, 30164, 30165, 30133, 30154, 30157, 30350, 30420, 30418, 30427, 30519, 30526, 30524, 30518, 30520, 30522, 30827, 30787, 30798, 31077, 31080, 31085, 31227, 31378, 31381, 31520, 31528, 31515, 31532, 31526, 31513, 31518, 31534, 31890, 31895, 31893, 32070, 32067, 32113, 32046, 32057, 32060, 32064, 32048, 32051, 32068, 32047, 32066, 32050, 32049, 32573, 32670, 32666, 32716, 32718, 32722, 32796, 32842, 32838, 33071, 33046, 33059, 33067, 33065, 33072, 33060, 33282, 33333, 33335, 33334, 33337, 33678, 33694, 33688, 33656, 33698, 33686, 33725, 33707, 33682, 33674, 33683, 33673, 33696, 33655, 33659, 33660, 33670, 33703, 34389, 24426, 34503, 34496, 34486, 34500, 34485, 34502, 34507, 34481, 34479, 34505, 34899, 34974, 34952, 34987, 34962, 34966, 34957, 34955, 35219, 35215, 35370, 35357, 35363, 35365, 35377, 35373, 35359, 35355, 35362, 35913, 35930, 36009, 36012, 36011, 36008, 36010, 36007, 36199, 36198, 36286, 36282, 36571, 36575, 36889, 36877, 36890, 36887, 36899, 36895, 36893, 36880, 36885, 36894, 36896, 36879, 36898, 36886, 36891, 36884, 37096, 37101, 37117, 37207, 37326, 37365, 37350, 37347, 37351, 37357, 37353, 38281, 38506, 38517, 38515, 38520, 38512, 38516, 38518, 38519, 38508, 38592, 38634, 38633, 31456, 31455, 38914, 38915, 39770, 40165, 40565, 40575, 40613, 40635, 20642, 20621, 20613, 20633, 20625, 20608, 20630, 20632, 20634, 26368, 20977, 21106, 21108, 21109, 21097, 21214, 21213, 21211, 21338, 21413, 21883, 21888, 21927, 21884, 21898, 21917, 21912, 21890, 21916, 21930, 21908, 21895, 21899, 21891, 21939, 21934, 21919, 21822, 21938, 21914, 21947, 21932, 21937, 21886, 21897, 21931, 21913, 22285, 22575, 22570, 22580, 22564, 22576, 22577, 22561, 22557, 22560, 22777, 22778, 22880, 23159, 23194, 23167, 23186, 23195, 23207, 23411, 23409, 23506, 23500, 23507, 23504, 23562, 23563, 23601, 23884, 23888, 23860, 23879, 24061, 24133, 24125, 24128, 24131, 24190, 24266, 24257, 24258, 24260, 24380, 24429, 24489, 24490, 24488, 24785, 24801, 24754, 24758, 24800, 24860, 24867, 24826, 24853, 24816, 24827, 24820, 24936, 24817, 24846, 24822, 24841, 24832, 24850, 25119, 25161, 25507, 25484, 25551, 25536, 25577, 25545, 25542, 25549, 25554, 25571, 25552, 25569, 25558, 25581, 25582, 25462, 25588, 25578, 25563, 25682, 25562, 25593, 25950, 25958, 25954, 25955, 26001, 26e3, 26031, 26222, 26224, 26228, 26230, 26223, 26257, 26234, 26238, 26231, 26366, 26367, 26399, 26397, 26874, 26837, 26848, 26840, 26839, 26885, 26847, 26869, 26862, 26855, 26873, 26834, 26866, 26851, 26827, 26829, 26893, 26898, 26894, 26825, 26842, 26990, 26875, 27454, 27450, 27453, 27544, 27542, 27580, 27631, 27694, 27695, 27692, 28207, 28216, 28244, 28193, 28210, 28263, 28234, 28192, 28197, 28195, 28187, 28251, 28248, 28196, 28246, 28270, 28205, 28198, 28271, 28212, 28237, 28218, 28204, 28227, 28189, 28222, 28363, 28297, 28185, 28238, 28259, 28228, 28274, 28265, 28255, 28953, 28954, 28966, 28976, 28961, 28982, 29038, 28956, 29260, 29316, 29312, 29494, 29477, 29492, 29481, 29754, 29738, 29747, 29730, 29733, 29749, 29750, 29748, 29743, 29723, 29734, 29736, 29989, 29990, 30059, 30058, 30178, 30171, 30179, 30169, 30168, 30174, 30176, 30331, 30332, 30358, 30355, 30388, 30428, 30543, 30701, 30813, 30828, 30831, 31245, 31240, 31243, 31237, 31232, 31384, 31383, 31382, 31461, 31459, 31561, 31574, 31558, 31568, 31570, 31572, 31565, 31563, 31567, 31569, 31903, 31909, 32094, 32080, 32104, 32085, 32043, 32110, 32114, 32097, 32102, 32098, 32112, 32115, 21892, 32724, 32725, 32779, 32850, 32901, 33109, 33108, 33099, 33105, 33102, 33081, 33094, 33086, 33100, 33107, 33140, 33298, 33308, 33769, 33795, 33784, 33805, 33760, 33733, 33803, 33729, 33775, 33777, 33780, 33879, 33802, 33776, 33804, 33740, 33789, 33778, 33738, 33848, 33806, 33796, 33756, 33799, 33748, 33759, 34395, 34527, 34521, 34541, 34516, 34523, 34532, 34512, 34526, 34903, 35009, 35010, 34993, 35203, 35222, 35387, 35424, 35413, 35422, 35388, 35393, 35412, 35419, 35408, 35398, 35380, 35386, 35382, 35414, 35937, 35970, 36015, 36028, 36019, 36029, 36033, 36027, 36032, 36020, 36023, 36022, 36031, 36024, 36234, 36229, 36225, 36302, 36317, 36299, 36314, 36305, 36300, 36315, 36294, 36603, 36600, 36604, 36764, 36910, 36917, 36913, 36920, 36914, 36918, 37122, 37109, 37129, 37118, 37219, 37221, 37327, 37396, 37397, 37411, 37385, 37406, 37389, 37392, 37383, 37393, 38292, 38287, 38283, 38289, 38291, 38290, 38286, 38538, 38542, 38539, 38525, 38533, 38534, 38541, 38514, 38532, 38593, 38597, 38596, 38598, 38599, 38639, 38642, 38860, 38917, 38918, 38920, 39143, 39146, 39151, 39145, 39154, 39149, 39342, 39341, 40643, 40653, 40657, 20098, 20653, 20661, 20658, 20659, 20677, 20670, 20652, 20663, 20667, 20655, 20679, 21119, 21111, 21117, 21215, 21222, 21220, 21218, 21219, 21295, 21983, 21992, 21971, 21990, 21966, 21980, 21959, 21969, 21987, 21988, 21999, 21978, 21985, 21957, 21958, 21989, 21961, 22290, 22291, 22622, 22609, 22616, 22615, 22618, 22612, 22635, 22604, 22637, 22602, 22626, 22610, 22603, 22887, 23233, 23241, 23244, 23230, 23229, 23228, 23219, 23234, 23218, 23913, 23919, 24140, 24185, 24265, 24264, 24338, 24409, 24492, 24494, 24858, 24847, 24904, 24863, 24819, 24859, 24825, 24833, 24840, 24910, 24908, 24900, 24909, 24894, 24884, 24871, 24845, 24838, 24887, 25121, 25122, 25619, 25662, 25630, 25642, 25645, 25661, 25644, 25615, 25628, 25620, 25613, 25654, 25622, 25623, 25606, 25964, 26015, 26032, 26263, 26249, 26247, 26248, 26262, 26244, 26264, 26253, 26371, 27028, 26989, 26970, 26999, 26976, 26964, 26997, 26928, 27010, 26954, 26984, 26987, 26974, 26963, 27001, 27014, 26973, 26979, 26971, 27463, 27506, 27584, 27583, 27603, 27645, 28322, 28335, 28371, 28342, 28354, 28304, 28317, 28359, 28357, 28325, 28312, 28348, 28346, 28331, 28369, 28310, 28316, 28356, 28372, 28330, 28327, 28340, 29006, 29017, 29033, 29028, 29001, 29031, 29020, 29036, 29030, 29004, 29029, 29022, 28998, 29032, 29014, 29242, 29266, 29495, 29509, 29503, 29502, 29807, 29786, 29781, 29791, 29790, 29761, 29759, 29785, 29787, 29788, 30070, 30072, 30208, 30192, 30209, 30194, 30193, 30202, 30207, 30196, 30195, 30430, 30431, 30555, 30571, 30566, 30558, 30563, 30585, 30570, 30572, 30556, 30565, 30568, 30562, 30702, 30862, 30896, 30871, 30872, 30860, 30857, 30844, 30865, 30867, 30847, 31098, 31103, 31105, 33836, 31165, 31260, 31258, 31264, 31252, 31263, 31262, 31391, 31392, 31607, 31680, 31584, 31598, 31591, 31921, 31923, 31925, 32147, 32121, 32145, 32129, 32143, 32091, 32622, 32617, 32618, 32626, 32681, 32680, 32676, 32854, 32856, 32902, 32900, 33137, 33136, 33144, 33125, 33134, 33139, 33131, 33145, 33146, 33126, 33285, 33351, 33922, 33911, 33853, 33841, 33909, 33894, 33899, 33865, 33900, 33883, 33852, 33845, 33889, 33891, 33897, 33901, 33862, 34398, 34396, 34399, 34553, 34579, 34568, 34567, 34560, 34558, 34555, 34562, 34563, 34566, 34570, 34905, 35039, 35028, 35033, 35036, 35032, 35037, 35041, 35018, 35029, 35026, 35228, 35299, 35435, 35442, 35443, 35430, 35433, 35440, 35463, 35452, 35427, 35488, 35441, 35461, 35437, 35426, 35438, 35436, 35449, 35451, 35390, 35432, 35938, 35978, 35977, 36042, 36039, 36040, 36036, 36018, 36035, 36034, 36037, 36321, 36319, 36328, 36335, 36339, 36346, 36330, 36324, 36326, 36530, 36611, 36617, 36606, 36618, 36767, 36786, 36939, 36938, 36947, 36930, 36948, 36924, 36949, 36944, 36935, 36943, 36942, 36941, 36945, 36926, 36929, 37138, 37143, 37228, 37226, 37225, 37321, 37431, 37463, 37432, 37437, 37440, 37438, 37467, 37451, 37476, 37457, 37428, 37449, 37453, 37445, 37433, 37439, 37466, 38296, 38552, 38548, 38549, 38605, 38603, 38601, 38602, 38647, 38651, 38649, 38646, 38742, 38772, 38774, 38928, 38929, 38931, 38922, 38930, 38924, 39164, 39156, 39165, 39166, 39347, 39345, 39348, 39649, 40169, 40578, 40718, 40723, 40736, 20711, 20718, 20709, 20694, 20717, 20698, 20693, 20687, 20689, 20721, 20686, 20713, 20834, 20979, 21123, 21122, 21297, 21421, 22014, 22016, 22043, 22039, 22013, 22036, 22022, 22025, 22029, 22030, 22007, 22038, 22047, 22024, 22032, 22006, 22296, 22294, 22645, 22654, 22659, 22675, 22666, 22649, 22661, 22653, 22781, 22821, 22818, 22820, 22890, 22889, 23265, 23270, 23273, 23255, 23254, 23256, 23267, 23413, 23518, 23527, 23521, 23525, 23526, 23528, 23522, 23524, 23519, 23565, 23650, 23940, 23943, 24155, 24163, 24149, 24151, 24148, 24275, 24278, 24330, 24390, 24432, 24505, 24903, 24895, 24907, 24951, 24930, 24931, 24927, 24922, 24920, 24949, 25130, 25735, 25688, 25684, 25764, 25720, 25695, 25722, 25681, 25703, 25652, 25709, 25723, 25970, 26017, 26071, 26070, 26274, 26280, 26269, 27036, 27048, 27029, 27073, 27054, 27091, 27083, 27035, 27063, 27067, 27051, 27060, 27088, 27085, 27053, 27084, 27046, 27075, 27043, 27465, 27468, 27699, 28467, 28436, 28414, 28435, 28404, 28457, 28478, 28448, 28460, 28431, 28418, 28450, 28415, 28399, 28422, 28465, 28472, 28466, 28451, 28437, 28459, 28463, 28552, 28458, 28396, 28417, 28402, 28364, 28407, 29076, 29081, 29053, 29066, 29060, 29074, 29246, 29330, 29334, 29508, 29520, 29796, 29795, 29802, 29808, 29805, 29956, 30097, 30247, 30221, 30219, 30217, 30227, 30433, 30435, 30596, 30589, 30591, 30561, 30913, 30879, 30887, 30899, 30889, 30883, 31118, 31119, 31117, 31278, 31281, 31402, 31401, 31469, 31471, 31649, 31637, 31627, 31605, 31639, 31645, 31636, 31631, 31672, 31623, 31620, 31929, 31933, 31934, 32187, 32176, 32156, 32189, 32190, 32160, 32202, 32180, 32178, 32177, 32186, 32162, 32191, 32181, 32184, 32173, 32210, 32199, 32172, 32624, 32736, 32737, 32735, 32862, 32858, 32903, 33104, 33152, 33167, 33160, 33162, 33151, 33154, 33255, 33274, 33287, 33300, 33310, 33355, 33993, 33983, 33990, 33988, 33945, 33950, 33970, 33948, 33995, 33976, 33984, 34003, 33936, 33980, 34001, 33994, 34623, 34588, 34619, 34594, 34597, 34612, 34584, 34645, 34615, 34601, 35059, 35074, 35060, 35065, 35064, 35069, 35048, 35098, 35055, 35494, 35468, 35486, 35491, 35469, 35489, 35475, 35492, 35498, 35493, 35496, 35480, 35473, 35482, 35495, 35946, 35981, 35980, 36051, 36049, 36050, 36203, 36249, 36245, 36348, 36628, 36626, 36629, 36627, 36771, 36960, 36952, 36956, 36963, 36953, 36958, 36962, 36957, 36955, 37145, 37144, 37150, 37237, 37240, 37239, 37236, 37496, 37504, 37509, 37528, 37526, 37499, 37523, 37532, 37544, 37500, 37521, 38305, 38312, 38313, 38307, 38309, 38308, 38553, 38556, 38555, 38604, 38610, 38656, 38780, 38789, 38902, 38935, 38936, 39087, 39089, 39171, 39173, 39180, 39177, 39361, 39599, 39600, 39654, 39745, 39746, 40180, 40182, 40179, 40636, 40763, 40778, 20740, 20736, 20731, 20725, 20729, 20738, 20744, 20745, 20741, 20956, 21127, 21128, 21129, 21133, 21130, 21232, 21426, 22062, 22075, 22073, 22066, 22079, 22068, 22057, 22099, 22094, 22103, 22132, 22070, 22063, 22064, 22656, 22687, 22686, 22707, 22684, 22702, 22697, 22694, 22893, 23305, 23291, 23307, 23285, 23308, 23304, 23534, 23532, 23529, 23531, 23652, 23653, 23965, 23956, 24162, 24159, 24161, 24290, 24282, 24287, 24285, 24291, 24288, 24392, 24433, 24503, 24501, 24950, 24935, 24942, 24925, 24917, 24962, 24956, 24944, 24939, 24958, 24999, 24976, 25003, 24974, 25004, 24986, 24996, 24980, 25006, 25134, 25705, 25711, 25721, 25758, 25778, 25736, 25744, 25776, 25765, 25747, 25749, 25769, 25746, 25774, 25773, 25771, 25754, 25772, 25753, 25762, 25779, 25973, 25975, 25976, 26286, 26283, 26292, 26289, 27171, 27167, 27112, 27137, 27166, 27161, 27133, 27169, 27155, 27146, 27123, 27138, 27141, 27117, 27153, 27472, 27470, 27556, 27589, 27590, 28479, 28540, 28548, 28497, 28518, 28500, 28550, 28525, 28507, 28536, 28526, 28558, 28538, 28528, 28516, 28567, 28504, 28373, 28527, 28512, 28511, 29087, 29100, 29105, 29096, 29270, 29339, 29518, 29527, 29801, 29835, 29827, 29822, 29824, 30079, 30240, 30249, 30239, 30244, 30246, 30241, 30242, 30362, 30394, 30436, 30606, 30599, 30604, 30609, 30603, 30923, 30917, 30906, 30922, 30910, 30933, 30908, 30928, 31295, 31292, 31296, 31293, 31287, 31291, 31407, 31406, 31661, 31665, 31684, 31668, 31686, 31687, 31681, 31648, 31692, 31946, 32224, 32244, 32239, 32251, 32216, 32236, 32221, 32232, 32227, 32218, 32222, 32233, 32158, 32217, 32242, 32249, 32629, 32631, 32687, 32745, 32806, 33179, 33180, 33181, 33184, 33178, 33176, 34071, 34109, 34074, 34030, 34092, 34093, 34067, 34065, 34083, 34081, 34068, 34028, 34085, 34047, 34054, 34690, 34676, 34678, 34656, 34662, 34680, 34664, 34649, 34647, 34636, 34643, 34907, 34909, 35088, 35079, 35090, 35091, 35093, 35082, 35516, 35538, 35527, 35524, 35477, 35531, 35576, 35506, 35529, 35522, 35519, 35504, 35542, 35533, 35510, 35513, 35547, 35916, 35918, 35948, 36064, 36062, 36070, 36068, 36076, 36077, 36066, 36067, 36060, 36074, 36065, 36205, 36255, 36259, 36395, 36368, 36381, 36386, 36367, 36393, 36383, 36385, 36382, 36538, 36637, 36635, 36639, 36649, 36646, 36650, 36636, 36638, 36645, 36969, 36974, 36968, 36973, 36983, 37168, 37165, 37159, 37169, 37255, 37257, 37259, 37251, 37573, 37563, 37559, 37610, 37548, 37604, 37569, 37555, 37564, 37586, 37575, 37616, 37554, 38317, 38321, 38660, 38662, 38663, 38665, 38752, 38797, 38795, 38799, 38945, 38955, 38940, 39091, 39178, 39187, 39186, 39192, 39389, 39376, 39391, 39387, 39377, 39381, 39378, 39385, 39607, 39662, 39663, 39719, 39749, 39748, 39799, 39791, 40198, 40201, 40195, 40617, 40638, 40654, 22696, 40786, 20754, 20760, 20756, 20752, 20757, 20864, 20906, 20957, 21137, 21139, 21235, 22105, 22123, 22137, 22121, 22116, 22136, 22122, 22120, 22117, 22129, 22127, 22124, 22114, 22134, 22721, 22718, 22727, 22725, 22894, 23325, 23348, 23416, 23536, 23566, 24394, 25010, 24977, 25001, 24970, 25037, 25014, 25022, 25034, 25032, 25136, 25797, 25793, 25803, 25787, 25788, 25818, 25796, 25799, 25794, 25805, 25791, 25810, 25812, 25790, 25972, 26310, 26313, 26297, 26308, 26311, 26296, 27197, 27192, 27194, 27225, 27243, 27224, 27193, 27204, 27234, 27233, 27211, 27207, 27189, 27231, 27208, 27481, 27511, 27653, 28610, 28593, 28577, 28611, 28580, 28609, 28583, 28595, 28608, 28601, 28598, 28582, 28576, 28596, 29118, 29129, 29136, 29138, 29128, 29141, 29113, 29134, 29145, 29148, 29123, 29124, 29544, 29852, 29859, 29848, 29855, 29854, 29922, 29964, 29965, 30260, 30264, 30266, 30439, 30437, 30624, 30622, 30623, 30629, 30952, 30938, 30956, 30951, 31142, 31309, 31310, 31302, 31308, 31307, 31418, 31705, 31761, 31689, 31716, 31707, 31713, 31721, 31718, 31957, 31958, 32266, 32273, 32264, 32283, 32291, 32286, 32285, 32265, 32272, 32633, 32690, 32752, 32753, 32750, 32808, 33203, 33193, 33192, 33275, 33288, 33368, 33369, 34122, 34137, 34120, 34152, 34153, 34115, 34121, 34157, 34154, 34142, 34691, 34719, 34718, 34722, 34701, 34913, 35114, 35122, 35109, 35115, 35105, 35242, 35238, 35558, 35578, 35563, 35569, 35584, 35548, 35559, 35566, 35582, 35585, 35586, 35575, 35565, 35571, 35574, 35580, 35947, 35949, 35987, 36084, 36420, 36401, 36404, 36418, 36409, 36405, 36667, 36655, 36664, 36659, 36776, 36774, 36981, 36980, 36984, 36978, 36988, 36986, 37172, 37266, 37664, 37686, 37624, 37683, 37679, 37666, 37628, 37675, 37636, 37658, 37648, 37670, 37665, 37653, 37678, 37657, 38331, 38567, 38568, 38570, 38613, 38670, 38673, 38678, 38669, 38675, 38671, 38747, 38748, 38758, 38808, 38960, 38968, 38971, 38967, 38957, 38969, 38948, 39184, 39208, 39198, 39195, 39201, 39194, 39405, 39394, 39409, 39608, 39612, 39675, 39661, 39720, 39825, 40213, 40227, 40230, 40232, 40210, 40219, 40664, 40660, 40845, 40860, 20778, 20767, 20769, 20786, 21237, 22158, 22144, 22160, 22149, 22151, 22159, 22741, 22739, 22737, 22734, 23344, 23338, 23332, 23418, 23607, 23656, 23996, 23994, 23997, 23992, 24171, 24396, 24509, 25033, 25026, 25031, 25062, 25035, 25138, 25140, 25806, 25802, 25816, 25824, 25840, 25830, 25836, 25841, 25826, 25837, 25986, 25987, 26329, 26326, 27264, 27284, 27268, 27298, 27292, 27355, 27299, 27262, 27287, 27280, 27296, 27484, 27566, 27610, 27656, 28632, 28657, 28639, 28640, 28635, 28644, 28651, 28655, 28544, 28652, 28641, 28649, 28629, 28654, 28656, 29159, 29151, 29166, 29158, 29157, 29165, 29164, 29172, 29152, 29237, 29254, 29552, 29554, 29865, 29872, 29862, 29864, 30278, 30274, 30284, 30442, 30643, 30634, 30640, 30636, 30631, 30637, 30703, 30967, 30970, 30964, 30959, 30977, 31143, 31146, 31319, 31423, 31751, 31757, 31742, 31735, 31756, 31712, 31968, 31964, 31966, 31970, 31967, 31961, 31965, 32302, 32318, 32326, 32311, 32306, 32323, 32299, 32317, 32305, 32325, 32321, 32308, 32313, 32328, 32309, 32319, 32303, 32580, 32755, 32764, 32881, 32882, 32880, 32879, 32883, 33222, 33219, 33210, 33218, 33216, 33215, 33213, 33225, 33214, 33256, 33289, 33393, 34218, 34180, 34174, 34204, 34193, 34196, 34223, 34203, 34183, 34216, 34186, 34407, 34752, 34769, 34739, 34770, 34758, 34731, 34747, 34746, 34760, 34763, 35131, 35126, 35140, 35128, 35133, 35244, 35598, 35607, 35609, 35611, 35594, 35616, 35613, 35588, 35600, 35905, 35903, 35955, 36090, 36093, 36092, 36088, 36091, 36264, 36425, 36427, 36424, 36426, 36676, 36670, 36674, 36677, 36671, 36991, 36989, 36996, 36993, 36994, 36992, 37177, 37283, 37278, 37276, 37709, 37762, 37672, 37749, 37706, 37733, 37707, 37656, 37758, 37740, 37723, 37744, 37722, 37716, 38346, 38347, 38348, 38344, 38342, 38577, 38584, 38614, 38684, 38686, 38816, 38867, 38982, 39094, 39221, 39425, 39423, 39854, 39851, 39850, 39853, 40251, 40255, 40587, 40655, 40670, 40668, 40669, 40667, 40766, 40779, 21474, 22165, 22190, 22745, 22744, 23352, 24413, 25059, 25139, 25844, 25842, 25854, 25862, 25850, 25851, 25847, 26039, 26332, 26406, 27315, 27308, 27331, 27323, 27320, 27330, 27310, 27311, 27487, 27512, 27567, 28681, 28683, 28670, 28678, 28666, 28689, 28687, 29179, 29180, 29182, 29176, 29559, 29557, 29863, 29887, 29973, 30294, 30296, 30290, 30653, 30655, 30651, 30652, 30990, 31150, 31329, 31330, 31328, 31428, 31429, 31787, 31783, 31786, 31774, 31779, 31777, 31975, 32340, 32341, 32350, 32346, 32353, 32338, 32345, 32584, 32761, 32763, 32887, 32886, 33229, 33231, 33290, 34255, 34217, 34253, 34256, 34249, 34224, 34234, 34233, 34214, 34799, 34796, 34802, 34784, 35206, 35250, 35316, 35624, 35641, 35628, 35627, 35920, 36101, 36441, 36451, 36454, 36452, 36447, 36437, 36544, 36681, 36685, 36999, 36995, 37e3, 37291, 37292, 37328, 37780, 37770, 37782, 37794, 37811, 37806, 37804, 37808, 37784, 37786, 37783, 38356, 38358, 38352, 38357, 38626, 38620, 38617, 38619, 38622, 38692, 38819, 38822, 38829, 38905, 38989, 38991, 38988, 38990, 38995, 39098, 39230, 39231, 39229, 39214, 39333, 39438, 39617, 39683, 39686, 39759, 39758, 39757, 39882, 39881, 39933, 39880, 39872, 40273, 40285, 40288, 40672, 40725, 40748, 20787, 22181, 22750, 22751, 22754, 23541, 40848, 24300, 25074, 25079, 25078, 25077, 25856, 25871, 26336, 26333, 27365, 27357, 27354, 27347, 28699, 28703, 28712, 28698, 28701, 28693, 28696, 29190, 29197, 29272, 29346, 29560, 29562, 29885, 29898, 29923, 30087, 30086, 30303, 30305, 30663, 31001, 31153, 31339, 31337, 31806, 31807, 31800, 31805, 31799, 31808, 32363, 32365, 32377, 32361, 32362, 32645, 32371, 32694, 32697, 32696, 33240, 34281, 34269, 34282, 34261, 34276, 34277, 34295, 34811, 34821, 34829, 34809, 34814, 35168, 35167, 35158, 35166, 35649, 35676, 35672, 35657, 35674, 35662, 35663, 35654, 35673, 36104, 36106, 36476, 36466, 36487, 36470, 36460, 36474, 36468, 36692, 36686, 36781, 37002, 37003, 37297, 37294, 37857, 37841, 37855, 37827, 37832, 37852, 37853, 37846, 37858, 37837, 37848, 37860, 37847, 37864, 38364, 38580, 38627, 38698, 38695, 38753, 38876, 38907, 39006, 39e3, 39003, 39100, 39237, 39241, 39446, 39449, 39693, 39912, 39911, 39894, 39899, 40329, 40289, 40306, 40298, 40300, 40594, 40599, 40595, 40628, 21240, 22184, 22199, 22198, 22196, 22204, 22756, 23360, 23363, 23421, 23542, 24009, 25080, 25082, 25880, 25876, 25881, 26342, 26407, 27372, 28734, 28720, 28722, 29200, 29563, 29903, 30306, 30309, 31014, 31018, 31020, 31019, 31431, 31478, 31820, 31811, 31821, 31983, 31984, 36782, 32381, 32380, 32386, 32588, 32768, 33242, 33382, 34299, 34297, 34321, 34298, 34310, 34315, 34311, 34314, 34836, 34837, 35172, 35258, 35320, 35696, 35692, 35686, 35695, 35679, 35691, 36111, 36109, 36489, 36481, 36485, 36482, 37300, 37323, 37912, 37891, 37885, 38369, 38704, 39108, 39250, 39249, 39336, 39467, 39472, 39479, 39477, 39955, 39949, 40569, 40629, 40680, 40751, 40799, 40803, 40801, 20791, 20792, 22209, 22208, 22210, 22804, 23660, 24013, 25084, 25086, 25885, 25884, 26005, 26345, 27387, 27396, 27386, 27570, 28748, 29211, 29351, 29910, 29908, 30313, 30675, 31824, 32399, 32396, 32700, 34327, 34349, 34330, 34851, 34850, 34849, 34847, 35178, 35180, 35261, 35700, 35703, 35709, 36115, 36490, 36493, 36491, 36703, 36783, 37306, 37934, 37939, 37941, 37946, 37944, 37938, 37931, 38370, 38712, 38713, 38706, 38911, 39015, 39013, 39255, 39493, 39491, 39488, 39486, 39631, 39764, 39761, 39981, 39973, 40367, 40372, 40386, 40376, 40605, 40687, 40729, 40796, 40806, 40807, 20796, 20795, 22216, 22218, 22217, 23423, 24020, 24018, 24398, 25087, 25892, 27402, 27489, 28753, 28760, 29568, 29924, 30090, 30318, 30316, 31155, 31840, 31839, 32894, 32893, 33247, 35186, 35183, 35324, 35712, 36118, 36119, 36497, 36499, 36705, 37192, 37956, 37969, 37970, 38717, 38718, 38851, 38849, 39019, 39253, 39509, 39501, 39634, 39706, 40009, 39985, 39998, 39995, 40403, 40407, 40756, 40812, 40810, 40852, 22220, 24022, 25088, 25891, 25899, 25898, 26348, 27408, 29914, 31434, 31844, 31843, 31845, 32403, 32406, 32404, 33250, 34360, 34367, 34865, 35722, 37008, 37007, 37987, 37984, 37988, 38760, 39023, 39260, 39514, 39515, 39511, 39635, 39636, 39633, 40020, 40023, 40022, 40421, 40607, 40692, 22225, 22761, 25900, 28766, 30321, 30322, 30679, 32592, 32648, 34870, 34873, 34914, 35731, 35730, 35734, 33399, 36123, 37312, 37994, 38722, 38728, 38724, 38854, 39024, 39519, 39714, 39768, 40031, 40441, 40442, 40572, 40573, 40711, 40823, 40818, 24307, 27414, 28771, 31852, 31854, 34875, 35264, 36513, 37313, 38002, 38e3, 39025, 39262, 39638, 39715, 40652, 28772, 30682, 35738, 38007, 38857, 39522, 39525, 32412, 35740, 36522, 37317, 38013, 38014, 38012, 40055, 40056, 40695, 35924, 38015, 40474, 29224, 39530, 39729, 40475, 40478, 31858, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 20022, 20031, 20101, 20128, 20866, 20886, 20907, 21241, 21304, 21353, 21430, 22794, 23424, 24027, 12083, 24191, 24308, 24400, 24417, 25908, 26080, 30098, 30326, 36789, 38582, 168, 710, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 65339, 65341, 10045, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 8679, 8632, 8633, 12751, 131276, 20058, 131210, 20994, 17553, 40880, 20872, 40881, 161287, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 65506, 65508, 65287, 65282, 12849, 8470, 8481, 12443, 12444, 11904, 11908, 11910, 11911, 11912, 11914, 11916, 11917, 11925, 11932, 11933, 11941, 11943, 11946, 11948, 11950, 11958, 11964, 11966, 11974, 11978, 11980, 11981, 11983, 11990, 11991, 11998, 12003, null, null, null, 643, 592, 603, 596, 629, 339, 248, 331, 650, 618, 20034, 20060, 20981, 21274, 21378, 19975, 19980, 20039, 20109, 22231, 64012, 23662, 24435, 19983, 20871, 19982, 20014, 20115, 20162, 20169, 20168, 20888, 21244, 21356, 21433, 22304, 22787, 22828, 23568, 24063, 26081, 27571, 27596, 27668, 29247, 20017, 20028, 20200, 20188, 20201, 20193, 20189, 20186, 21004, 21276, 21324, 22306, 22307, 22807, 22831, 23425, 23428, 23570, 23611, 23668, 23667, 24068, 24192, 24194, 24521, 25097, 25168, 27669, 27702, 27715, 27711, 27707, 29358, 29360, 29578, 31160, 32906, 38430, 20238, 20248, 20268, 20213, 20244, 20209, 20224, 20215, 20232, 20253, 20226, 20229, 20258, 20243, 20228, 20212, 20242, 20913, 21011, 21001, 21008, 21158, 21282, 21279, 21325, 21386, 21511, 22241, 22239, 22318, 22314, 22324, 22844, 22912, 22908, 22917, 22907, 22910, 22903, 22911, 23382, 23573, 23589, 23676, 23674, 23675, 23678, 24031, 24181, 24196, 24322, 24346, 24436, 24533, 24532, 24527, 25180, 25182, 25188, 25185, 25190, 25186, 25177, 25184, 25178, 25189, 26095, 26094, 26430, 26425, 26424, 26427, 26426, 26431, 26428, 26419, 27672, 27718, 27730, 27740, 27727, 27722, 27732, 27723, 27724, 28785, 29278, 29364, 29365, 29582, 29994, 30335, 31349, 32593, 33400, 33404, 33408, 33405, 33407, 34381, 35198, 37017, 37015, 37016, 37019, 37012, 38434, 38436, 38432, 38435, 20310, 20283, 20322, 20297, 20307, 20324, 20286, 20327, 20306, 20319, 20289, 20312, 20269, 20275, 20287, 20321, 20879, 20921, 21020, 21022, 21025, 21165, 21166, 21257, 21347, 21362, 21390, 21391, 21552, 21559, 21546, 21588, 21573, 21529, 21532, 21541, 21528, 21565, 21583, 21569, 21544, 21540, 21575, 22254, 22247, 22245, 22337, 22341, 22348, 22345, 22347, 22354, 22790, 22848, 22950, 22936, 22944, 22935, 22926, 22946, 22928, 22927, 22951, 22945, 23438, 23442, 23592, 23594, 23693, 23695, 23688, 23691, 23689, 23698, 23690, 23686, 23699, 23701, 24032, 24074, 24078, 24203, 24201, 24204, 24200, 24205, 24325, 24349, 24440, 24438, 24530, 24529, 24528, 24557, 24552, 24558, 24563, 24545, 24548, 24547, 24570, 24559, 24567, 24571, 24576, 24564, 25146, 25219, 25228, 25230, 25231, 25236, 25223, 25201, 25211, 25210, 25200, 25217, 25224, 25207, 25213, 25202, 25204, 25911, 26096, 26100, 26099, 26098, 26101, 26437, 26439, 26457, 26453, 26444, 26440, 26461, 26445, 26458, 26443, 27600, 27673, 27674, 27768, 27751, 27755, 27780, 27787, 27791, 27761, 27759, 27753, 27802, 27757, 27783, 27797, 27804, 27750, 27763, 27749, 27771, 27790, 28788, 28794, 29283, 29375, 29373, 29379, 29382, 29377, 29370, 29381, 29589, 29591, 29587, 29588, 29586, 30010, 30009, 30100, 30101, 30337, 31037, 32820, 32917, 32921, 32912, 32914, 32924, 33424, 33423, 33413, 33422, 33425, 33427, 33418, 33411, 33412, 35960, 36809, 36799, 37023, 37025, 37029, 37022, 37031, 37024, 38448, 38440, 38447, 38445, 20019, 20376, 20348, 20357, 20349, 20352, 20359, 20342, 20340, 20361, 20356, 20343, 20300, 20375, 20330, 20378, 20345, 20353, 20344, 20368, 20380, 20372, 20382, 20370, 20354, 20373, 20331, 20334, 20894, 20924, 20926, 21045, 21042, 21043, 21062, 21041, 21180, 21258, 21259, 21308, 21394, 21396, 21639, 21631, 21633, 21649, 21634, 21640, 21611, 21626, 21630, 21605, 21612, 21620, 21606, 21645, 21615, 21601, 21600, 21656, 21603, 21607, 21604, 22263, 22265, 22383, 22386, 22381, 22379, 22385, 22384, 22390, 22400, 22389, 22395, 22387, 22388, 22370, 22376, 22397, 22796, 22853, 22965, 22970, 22991, 22990, 22962, 22988, 22977, 22966, 22972, 22979, 22998, 22961, 22973, 22976, 22984, 22964, 22983, 23394, 23397, 23443, 23445, 23620, 23623, 23726, 23716, 23712, 23733, 23727, 23720, 23724, 23711, 23715, 23725, 23714, 23722, 23719, 23709, 23717, 23734, 23728, 23718, 24087, 24084, 24089, 24360, 24354, 24355, 24356, 24404, 24450, 24446, 24445, 24542, 24549, 24621, 24614, 24601, 24626, 24587, 24628, 24586, 24599, 24627, 24602, 24606, 24620, 24610, 24589, 24592, 24622, 24595, 24593, 24588, 24585, 24604, 25108, 25149, 25261, 25268, 25297, 25278, 25258, 25270, 25290, 25262, 25267, 25263, 25275, 25257, 25264, 25272, 25917, 26024, 26043, 26121, 26108, 26116, 26130, 26120, 26107, 26115, 26123, 26125, 26117, 26109, 26129, 26128, 26358, 26378, 26501, 26476, 26510, 26514, 26486, 26491, 26520, 26502, 26500, 26484, 26509, 26508, 26490, 26527, 26513, 26521, 26499, 26493, 26497, 26488, 26489, 26516, 27429, 27520, 27518, 27614, 27677, 27795, 27884, 27883, 27886, 27865, 27830, 27860, 27821, 27879, 27831, 27856, 27842, 27834, 27843, 27846, 27885, 27890, 27858, 27869, 27828, 27786, 27805, 27776, 27870, 27840, 27952, 27853, 27847, 27824, 27897, 27855, 27881, 27857, 28820, 28824, 28805, 28819, 28806, 28804, 28817, 28822, 28802, 28826, 28803, 29290, 29398, 29387, 29400, 29385, 29404, 29394, 29396, 29402, 29388, 29393, 29604, 29601, 29613, 29606, 29602, 29600, 29612, 29597, 29917, 29928, 30015, 30016, 30014, 30092, 30104, 30383, 30451, 30449, 30448, 30453, 30712, 30716, 30713, 30715, 30714, 30711, 31042, 31039, 31173, 31352, 31355, 31483, 31861, 31997, 32821, 32911, 32942, 32931, 32952, 32949, 32941, 33312, 33440, 33472, 33451, 33434, 33432, 33435, 33461, 33447, 33454, 33468, 33438, 33466, 33460, 33448, 33441, 33449, 33474, 33444, 33475, 33462, 33442, 34416, 34415, 34413, 34414, 35926, 36818, 36811, 36819, 36813, 36822, 36821, 36823, 37042, 37044, 37039, 37043, 37040, 38457, 38461, 38460, 38458, 38467, 20429, 20421, 20435, 20402, 20425, 20427, 20417, 20436, 20444, 20441, 20411, 20403, 20443, 20423, 20438, 20410, 20416, 20409, 20460, 21060, 21065, 21184, 21186, 21309, 21372, 21399, 21398, 21401, 21400, 21690, 21665, 21677, 21669, 21711, 21699, 33549, 21687, 21678, 21718, 21686, 21701, 21702, 21664, 21616, 21692, 21666, 21694, 21618, 21726, 21680, 22453, 22430, 22431, 22436, 22412, 22423, 22429, 22427, 22420, 22424, 22415, 22425, 22437, 22426, 22421, 22772, 22797, 22867, 23009, 23006, 23022, 23040, 23025, 23005, 23034, 23037, 23036, 23030, 23012, 23026, 23031, 23003, 23017, 23027, 23029, 23008, 23038, 23028, 23021, 23464, 23628, 23760, 23768, 23756, 23767, 23755, 23771, 23774, 23770, 23753, 23751, 23754, 23766, 23763, 23764, 23759, 23752, 23750, 23758, 23775, 23800, 24057, 24097, 24098, 24099, 24096, 24100, 24240, 24228, 24226, 24219, 24227, 24229, 24327, 24366, 24406, 24454, 24631, 24633, 24660, 24690, 24670, 24645, 24659, 24647, 24649, 24667, 24652, 24640, 24642, 24671, 24612, 24644, 24664, 24678, 24686, 25154, 25155, 25295, 25357, 25355, 25333, 25358, 25347, 25323, 25337, 25359, 25356, 25336, 25334, 25344, 25363, 25364, 25338, 25365, 25339, 25328, 25921, 25923, 26026, 26047, 26166, 26145, 26162, 26165, 26140, 26150, 26146, 26163, 26155, 26170, 26141, 26164, 26169, 26158, 26383, 26384, 26561, 26610, 26568, 26554, 26588, 26555, 26616, 26584, 26560, 26551, 26565, 26603, 26596, 26591, 26549, 26573, 26547, 26615, 26614, 26606, 26595, 26562, 26553, 26574, 26599, 26608, 26546, 26620, 26566, 26605, 26572, 26542, 26598, 26587, 26618, 26569, 26570, 26563, 26602, 26571, 27432, 27522, 27524, 27574, 27606, 27608, 27616, 27680, 27681, 27944, 27956, 27949, 27935, 27964, 27967, 27922, 27914, 27866, 27955, 27908, 27929, 27962, 27930, 27921, 27904, 27933, 27970, 27905, 27928, 27959, 27907, 27919, 27968, 27911, 27936, 27948, 27912, 27938, 27913, 27920, 28855, 28831, 28862, 28849, 28848, 28833, 28852, 28853, 28841, 29249, 29257, 29258, 29292, 29296, 29299, 29294, 29386, 29412, 29416, 29419, 29407, 29418, 29414, 29411, 29573, 29644, 29634, 29640, 29637, 29625, 29622, 29621, 29620, 29675, 29631, 29639, 29630, 29635, 29638, 29624, 29643, 29932, 29934, 29998, 30023, 30024, 30119, 30122, 30329, 30404, 30472, 30467, 30468, 30469, 30474, 30455, 30459, 30458, 30695, 30696, 30726, 30737, 30738, 30725, 30736, 30735, 30734, 30729, 30723, 30739, 31050, 31052, 31051, 31045, 31044, 31189, 31181, 31183, 31190, 31182, 31360, 31358, 31441, 31488, 31489, 31866, 31864, 31865, 31871, 31872, 31873, 32003, 32008, 32001, 32600, 32657, 32653, 32702, 32775, 32782, 32783, 32788, 32823, 32984, 32967, 32992, 32977, 32968, 32962, 32976, 32965, 32995, 32985, 32988, 32970, 32981, 32969, 32975, 32983, 32998, 32973, 33279, 33313, 33428, 33497, 33534, 33529, 33543, 33512, 33536, 33493, 33594, 33515, 33494, 33524, 33516, 33505, 33522, 33525, 33548, 33531, 33526, 33520, 33514, 33508, 33504, 33530, 33523, 33517, 34423, 34420, 34428, 34419, 34881, 34894, 34919, 34922, 34921, 35283, 35332, 35335, 36210, 36835, 36833, 36846, 36832, 37105, 37053, 37055, 37077, 37061, 37054, 37063, 37067, 37064, 37332, 37331, 38484, 38479, 38481, 38483, 38474, 38478, 20510, 20485, 20487, 20499, 20514, 20528, 20507, 20469, 20468, 20531, 20535, 20524, 20470, 20471, 20503, 20508, 20512, 20519, 20533, 20527, 20529, 20494, 20826, 20884, 20883, 20938, 20932, 20933, 20936, 20942, 21089, 21082, 21074, 21086, 21087, 21077, 21090, 21197, 21262, 21406, 21798, 21730, 21783, 21778, 21735, 21747, 21732, 21786, 21759, 21764, 21768, 21739, 21777, 21765, 21745, 21770, 21755, 21751, 21752, 21728, 21774, 21763, 21771, 22273, 22274, 22476, 22578, 22485, 22482, 22458, 22470, 22461, 22460, 22456, 22454, 22463, 22471, 22480, 22457, 22465, 22798, 22858, 23065, 23062, 23085, 23086, 23061, 23055, 23063, 23050, 23070, 23091, 23404, 23463, 23469, 23468, 23555, 23638, 23636, 23788, 23807, 23790, 23793, 23799, 23808, 23801, 24105, 24104, 24232, 24238, 24234, 24236, 24371, 24368, 24423, 24669, 24666, 24679, 24641, 24738, 24712, 24704, 24722, 24705, 24733, 24707, 24725, 24731, 24727, 24711, 24732, 24718, 25113, 25158, 25330, 25360, 25430, 25388, 25412, 25413, 25398, 25411, 25572, 25401, 25419, 25418, 25404, 25385, 25409, 25396, 25432, 25428, 25433, 25389, 25415, 25395, 25434, 25425, 25400, 25431, 25408, 25416, 25930, 25926, 26054, 26051, 26052, 26050, 26186, 26207, 26183, 26193, 26386, 26387, 26655, 26650, 26697, 26674, 26675, 26683, 26699, 26703, 26646, 26673, 26652, 26677, 26667, 26669, 26671, 26702, 26692, 26676, 26653, 26642, 26644, 26662, 26664, 26670, 26701, 26682, 26661, 26656, 27436, 27439, 27437, 27441, 27444, 27501, 32898, 27528, 27622, 27620, 27624, 27619, 27618, 27623, 27685, 28026, 28003, 28004, 28022, 27917, 28001, 28050, 27992, 28002, 28013, 28015, 28049, 28045, 28143, 28031, 28038, 27998, 28007, 28e3, 28055, 28016, 28028, 27999, 28034, 28056, 27951, 28008, 28043, 28030, 28032, 28036, 27926, 28035, 28027, 28029, 28021, 28048, 28892, 28883, 28881, 28893, 28875, 32569, 28898, 28887, 28882, 28894, 28896, 28884, 28877, 28869, 28870, 28871, 28890, 28878, 28897, 29250, 29304, 29303, 29302, 29440, 29434, 29428, 29438, 29430, 29427, 29435, 29441, 29651, 29657, 29669, 29654, 29628, 29671, 29667, 29673, 29660, 29650, 29659, 29652, 29661, 29658, 29655, 29656, 29672, 29918, 29919, 29940, 29941, 29985, 30043, 30047, 30128, 30145, 30139, 30148, 30144, 30143, 30134, 30138, 30346, 30409, 30493, 30491, 30480, 30483, 30482, 30499, 30481, 30485, 30489, 30490, 30498, 30503, 30755, 30764, 30754, 30773, 30767, 30760, 30766, 30763, 30753, 30761, 30771, 30762, 30769, 31060, 31067, 31055, 31068, 31059, 31058, 31057, 31211, 31212, 31200, 31214, 31213, 31210, 31196, 31198, 31197, 31366, 31369, 31365, 31371, 31372, 31370, 31367, 31448, 31504, 31492, 31507, 31493, 31503, 31496, 31498, 31502, 31497, 31506, 31876, 31889, 31882, 31884, 31880, 31885, 31877, 32030, 32029, 32017, 32014, 32024, 32022, 32019, 32031, 32018, 32015, 32012, 32604, 32609, 32606, 32608, 32605, 32603, 32662, 32658, 32707, 32706, 32704, 32790, 32830, 32825, 33018, 33010, 33017, 33013, 33025, 33019, 33024, 33281, 33327, 33317, 33587, 33581, 33604, 33561, 33617, 33573, 33622, 33599, 33601, 33574, 33564, 33570, 33602, 33614, 33563, 33578, 33544, 33596, 33613, 33558, 33572, 33568, 33591, 33583, 33577, 33607, 33605, 33612, 33619, 33566, 33580, 33611, 33575, 33608, 34387, 34386, 34466, 34472, 34454, 34445, 34449, 34462, 34439, 34455, 34438, 34443, 34458, 34437, 34469, 34457, 34465, 34471, 34453, 34456, 34446, 34461, 34448, 34452, 34883, 34884, 34925, 34933, 34934, 34930, 34944, 34929, 34943, 34927, 34947, 34942, 34932, 34940, 35346, 35911, 35927, 35963, 36004, 36003, 36214, 36216, 36277, 36279, 36278, 36561, 36563, 36862, 36853, 36866, 36863, 36859, 36868, 36860, 36854, 37078, 37088, 37081, 37082, 37091, 37087, 37093, 37080, 37083, 37079, 37084, 37092, 37200, 37198, 37199, 37333, 37346, 37338, 38492, 38495, 38588, 39139, 39647, 39727, 20095, 20592, 20586, 20577, 20574, 20576, 20563, 20555, 20573, 20594, 20552, 20557, 20545, 20571, 20554, 20578, 20501, 20549, 20575, 20585, 20587, 20579, 20580, 20550, 20544, 20590, 20595, 20567, 20561, 20944, 21099, 21101, 21100, 21102, 21206, 21203, 21293, 21404, 21877, 21878, 21820, 21837, 21840, 21812, 21802, 21841, 21858, 21814, 21813, 21808, 21842, 21829, 21772, 21810, 21861, 21838, 21817, 21832, 21805, 21819, 21824, 21835, 22282, 22279, 22523, 22548, 22498, 22518, 22492, 22516, 22528, 22509, 22525, 22536, 22520, 22539, 22515, 22479, 22535, 22510, 22499, 22514, 22501, 22508, 22497, 22542, 22524, 22544, 22503, 22529, 22540, 22513, 22505, 22512, 22541, 22532, 22876, 23136, 23128, 23125, 23143, 23134, 23096, 23093, 23149, 23120, 23135, 23141, 23148, 23123, 23140, 23127, 23107, 23133, 23122, 23108, 23131, 23112, 23182, 23102, 23117, 23097, 23116, 23152, 23145, 23111, 23121, 23126, 23106, 23132, 23410, 23406, 23489, 23488, 23641, 23838, 23819, 23837, 23834, 23840, 23820, 23848, 23821, 23846, 23845, 23823, 23856, 23826, 23843, 23839, 23854, 24126, 24116, 24241, 24244, 24249, 24242, 24243, 24374, 24376, 24475, 24470, 24479, 24714, 24720, 24710, 24766, 24752, 24762, 24787, 24788, 24783, 24804, 24793, 24797, 24776, 24753, 24795, 24759, 24778, 24767, 24771, 24781, 24768, 25394, 25445, 25482, 25474, 25469, 25533, 25502, 25517, 25501, 25495, 25515, 25486, 25455, 25479, 25488, 25454, 25519, 25461, 25500, 25453, 25518, 25468, 25508, 25403, 25503, 25464, 25477, 25473, 25489, 25485, 25456, 25939, 26061, 26213, 26209, 26203, 26201, 26204, 26210, 26392, 26745, 26759, 26768, 26780, 26733, 26734, 26798, 26795, 26966, 26735, 26787, 26796, 26793, 26741, 26740, 26802, 26767, 26743, 26770, 26748, 26731, 26738, 26794, 26752, 26737, 26750, 26779, 26774, 26763, 26784, 26761, 26788, 26744, 26747, 26769, 26764, 26762, 26749, 27446, 27443, 27447, 27448, 27537, 27535, 27533, 27534, 27532, 27690, 28096, 28075, 28084, 28083, 28276, 28076, 28137, 28130, 28087, 28150, 28116, 28160, 28104, 28128, 28127, 28118, 28094, 28133, 28124, 28125, 28123, 28148, 28106, 28093, 28141, 28144, 28090, 28117, 28098, 28111, 28105, 28112, 28146, 28115, 28157, 28119, 28109, 28131, 28091, 28922, 28941, 28919, 28951, 28916, 28940, 28912, 28932, 28915, 28944, 28924, 28927, 28934, 28947, 28928, 28920, 28918, 28939, 28930, 28942, 29310, 29307, 29308, 29311, 29469, 29463, 29447, 29457, 29464, 29450, 29448, 29439, 29455, 29470, 29576, 29686, 29688, 29685, 29700, 29697, 29693, 29703, 29696, 29690, 29692, 29695, 29708, 29707, 29684, 29704, 30052, 30051, 30158, 30162, 30159, 30155, 30156, 30161, 30160, 30351, 30345, 30419, 30521, 30511, 30509, 30513, 30514, 30516, 30515, 30525, 30501, 30523, 30517, 30792, 30802, 30793, 30797, 30794, 30796, 30758, 30789, 30800, 31076, 31079, 31081, 31082, 31075, 31083, 31073, 31163, 31226, 31224, 31222, 31223, 31375, 31380, 31376, 31541, 31559, 31540, 31525, 31536, 31522, 31524, 31539, 31512, 31530, 31517, 31537, 31531, 31533, 31535, 31538, 31544, 31514, 31523, 31892, 31896, 31894, 31907, 32053, 32061, 32056, 32054, 32058, 32069, 32044, 32041, 32065, 32071, 32062, 32063, 32074, 32059, 32040, 32611, 32661, 32668, 32669, 32667, 32714, 32715, 32717, 32720, 32721, 32711, 32719, 32713, 32799, 32798, 32795, 32839, 32835, 32840, 33048, 33061, 33049, 33051, 33069, 33055, 33068, 33054, 33057, 33045, 33063, 33053, 33058, 33297, 33336, 33331, 33338, 33332, 33330, 33396, 33680, 33699, 33704, 33677, 33658, 33651, 33700, 33652, 33679, 33665, 33685, 33689, 33653, 33684, 33705, 33661, 33667, 33676, 33693, 33691, 33706, 33675, 33662, 33701, 33711, 33672, 33687, 33712, 33663, 33702, 33671, 33710, 33654, 33690, 34393, 34390, 34495, 34487, 34498, 34497, 34501, 34490, 34480, 34504, 34489, 34483, 34488, 34508, 34484, 34491, 34492, 34499, 34493, 34494, 34898, 34953, 34965, 34984, 34978, 34986, 34970, 34961, 34977, 34975, 34968, 34983, 34969, 34971, 34967, 34980, 34988, 34956, 34963, 34958, 35202, 35286, 35289, 35285, 35376, 35367, 35372, 35358, 35897, 35899, 35932, 35933, 35965, 36005, 36221, 36219, 36217, 36284, 36290, 36281, 36287, 36289, 36568, 36574, 36573, 36572, 36567, 36576, 36577, 36900, 36875, 36881, 36892, 36876, 36897, 37103, 37098, 37104, 37108, 37106, 37107, 37076, 37099, 37100, 37097, 37206, 37208, 37210, 37203, 37205, 37356, 37364, 37361, 37363, 37368, 37348, 37369, 37354, 37355, 37367, 37352, 37358, 38266, 38278, 38280, 38524, 38509, 38507, 38513, 38511, 38591, 38762, 38916, 39141, 39319, 20635, 20629, 20628, 20638, 20619, 20643, 20611, 20620, 20622, 20637, 20584, 20636, 20626, 20610, 20615, 20831, 20948, 21266, 21265, 21412, 21415, 21905, 21928, 21925, 21933, 21879, 22085, 21922, 21907, 21896, 21903, 21941, 21889, 21923, 21906, 21924, 21885, 21900, 21926, 21887, 21909, 21921, 21902, 22284, 22569, 22583, 22553, 22558, 22567, 22563, 22568, 22517, 22600, 22565, 22556, 22555, 22579, 22591, 22582, 22574, 22585, 22584, 22573, 22572, 22587, 22881, 23215, 23188, 23199, 23162, 23202, 23198, 23160, 23206, 23164, 23205, 23212, 23189, 23214, 23095, 23172, 23178, 23191, 23171, 23179, 23209, 23163, 23165, 23180, 23196, 23183, 23187, 23197, 23530, 23501, 23499, 23508, 23505, 23498, 23502, 23564, 23600, 23863, 23875, 23915, 23873, 23883, 23871, 23861, 23889, 23886, 23893, 23859, 23866, 23890, 23869, 23857, 23897, 23874, 23865, 23881, 23864, 23868, 23858, 23862, 23872, 23877, 24132, 24129, 24408, 24486, 24485, 24491, 24777, 24761, 24780, 24802, 24782, 24772, 24852, 24818, 24842, 24854, 24837, 24821, 24851, 24824, 24828, 24830, 24769, 24835, 24856, 24861, 24848, 24831, 24836, 24843, 25162, 25492, 25521, 25520, 25550, 25573, 25576, 25583, 25539, 25757, 25587, 25546, 25568, 25590, 25557, 25586, 25589, 25697, 25567, 25534, 25565, 25564, 25540, 25560, 25555, 25538, 25543, 25548, 25547, 25544, 25584, 25559, 25561, 25906, 25959, 25962, 25956, 25948, 25960, 25957, 25996, 26013, 26014, 26030, 26064, 26066, 26236, 26220, 26235, 26240, 26225, 26233, 26218, 26226, 26369, 26892, 26835, 26884, 26844, 26922, 26860, 26858, 26865, 26895, 26838, 26871, 26859, 26852, 26870, 26899, 26896, 26867, 26849, 26887, 26828, 26888, 26992, 26804, 26897, 26863, 26822, 26900, 26872, 26832, 26877, 26876, 26856, 26891, 26890, 26903, 26830, 26824, 26845, 26846, 26854, 26868, 26833, 26886, 26836, 26857, 26901, 26917, 26823, 27449, 27451, 27455, 27452, 27540, 27543, 27545, 27541, 27581, 27632, 27634, 27635, 27696, 28156, 28230, 28231, 28191, 28233, 28296, 28220, 28221, 28229, 28258, 28203, 28223, 28225, 28253, 28275, 28188, 28211, 28235, 28224, 28241, 28219, 28163, 28206, 28254, 28264, 28252, 28257, 28209, 28200, 28256, 28273, 28267, 28217, 28194, 28208, 28243, 28261, 28199, 28280, 28260, 28279, 28245, 28281, 28242, 28262, 28213, 28214, 28250, 28960, 28958, 28975, 28923, 28974, 28977, 28963, 28965, 28962, 28978, 28959, 28968, 28986, 28955, 29259, 29274, 29320, 29321, 29318, 29317, 29323, 29458, 29451, 29488, 29474, 29489, 29491, 29479, 29490, 29485, 29478, 29475, 29493, 29452, 29742, 29740, 29744, 29739, 29718, 29722, 29729, 29741, 29745, 29732, 29731, 29725, 29737, 29728, 29746, 29947, 29999, 30063, 30060, 30183, 30170, 30177, 30182, 30173, 30175, 30180, 30167, 30357, 30354, 30426, 30534, 30535, 30532, 30541, 30533, 30538, 30542, 30539, 30540, 30686, 30700, 30816, 30820, 30821, 30812, 30829, 30833, 30826, 30830, 30832, 30825, 30824, 30814, 30818, 31092, 31091, 31090, 31088, 31234, 31242, 31235, 31244, 31236, 31385, 31462, 31460, 31562, 31547, 31556, 31560, 31564, 31566, 31552, 31576, 31557, 31906, 31902, 31912, 31905, 32088, 32111, 32099, 32083, 32086, 32103, 32106, 32079, 32109, 32092, 32107, 32082, 32084, 32105, 32081, 32095, 32078, 32574, 32575, 32613, 32614, 32674, 32672, 32673, 32727, 32849, 32847, 32848, 33022, 32980, 33091, 33098, 33106, 33103, 33095, 33085, 33101, 33082, 33254, 33262, 33271, 33272, 33273, 33284, 33340, 33341, 33343, 33397, 33595, 33743, 33785, 33827, 33728, 33768, 33810, 33767, 33764, 33788, 33782, 33808, 33734, 33736, 33771, 33763, 33727, 33793, 33757, 33765, 33752, 33791, 33761, 33739, 33742, 33750, 33781, 33737, 33801, 33807, 33758, 33809, 33798, 33730, 33779, 33749, 33786, 33735, 33745, 33770, 33811, 33731, 33772, 33774, 33732, 33787, 33751, 33762, 33819, 33755, 33790, 34520, 34530, 34534, 34515, 34531, 34522, 34538, 34525, 34539, 34524, 34540, 34537, 34519, 34536, 34513, 34888, 34902, 34901, 35002, 35031, 35001, 35e3, 35008, 35006, 34998, 35004, 34999, 35005, 34994, 35073, 35017, 35221, 35224, 35223, 35293, 35290, 35291, 35406, 35405, 35385, 35417, 35392, 35415, 35416, 35396, 35397, 35410, 35400, 35409, 35402, 35404, 35407, 35935, 35969, 35968, 36026, 36030, 36016, 36025, 36021, 36228, 36224, 36233, 36312, 36307, 36301, 36295, 36310, 36316, 36303, 36309, 36313, 36296, 36311, 36293, 36591, 36599, 36602, 36601, 36582, 36590, 36581, 36597, 36583, 36584, 36598, 36587, 36593, 36588, 36596, 36585, 36909, 36916, 36911, 37126, 37164, 37124, 37119, 37116, 37128, 37113, 37115, 37121, 37120, 37127, 37125, 37123, 37217, 37220, 37215, 37218, 37216, 37377, 37386, 37413, 37379, 37402, 37414, 37391, 37388, 37376, 37394, 37375, 37373, 37382, 37380, 37415, 37378, 37404, 37412, 37401, 37399, 37381, 37398, 38267, 38285, 38284, 38288, 38535, 38526, 38536, 38537, 38531, 38528, 38594, 38600, 38595, 38641, 38640, 38764, 38768, 38766, 38919, 39081, 39147, 40166, 40697, 20099, 20100, 20150, 20669, 20671, 20678, 20654, 20676, 20682, 20660, 20680, 20674, 20656, 20673, 20666, 20657, 20683, 20681, 20662, 20664, 20951, 21114, 21112, 21115, 21116, 21955, 21979, 21964, 21968, 21963, 21962, 21981, 21952, 21972, 21956, 21993, 21951, 21970, 21901, 21967, 21973, 21986, 21974, 21960, 22002, 21965, 21977, 21954, 22292, 22611, 22632, 22628, 22607, 22605, 22601, 22639, 22613, 22606, 22621, 22617, 22629, 22619, 22589, 22627, 22641, 22780, 23239, 23236, 23243, 23226, 23224, 23217, 23221, 23216, 23231, 23240, 23227, 23238, 23223, 23232, 23242, 23220, 23222, 23245, 23225, 23184, 23510, 23512, 23513, 23583, 23603, 23921, 23907, 23882, 23909, 23922, 23916, 23902, 23912, 23911, 23906, 24048, 24143, 24142, 24138, 24141, 24139, 24261, 24268, 24262, 24267, 24263, 24384, 24495, 24493, 24823, 24905, 24906, 24875, 24901, 24886, 24882, 24878, 24902, 24879, 24911, 24873, 24896, 25120, 37224, 25123, 25125, 25124, 25541, 25585, 25579, 25616, 25618, 25609, 25632, 25636, 25651, 25667, 25631, 25621, 25624, 25657, 25655, 25634, 25635, 25612, 25638, 25648, 25640, 25665, 25653, 25647, 25610, 25626, 25664, 25637, 25639, 25611, 25575, 25627, 25646, 25633, 25614, 25967, 26002, 26067, 26246, 26252, 26261, 26256, 26251, 26250, 26265, 26260, 26232, 26400, 26982, 26975, 26936, 26958, 26978, 26993, 26943, 26949, 26986, 26937, 26946, 26967, 26969, 27002, 26952, 26953, 26933, 26988, 26931, 26941, 26981, 26864, 27e3, 26932, 26985, 26944, 26991, 26948, 26998, 26968, 26945, 26996, 26956, 26939, 26955, 26935, 26972, 26959, 26961, 26930, 26962, 26927, 27003, 26940, 27462, 27461, 27459, 27458, 27464, 27457, 27547, 64013, 27643, 27644, 27641, 27639, 27640, 28315, 28374, 28360, 28303, 28352, 28319, 28307, 28308, 28320, 28337, 28345, 28358, 28370, 28349, 28353, 28318, 28361, 28343, 28336, 28365, 28326, 28367, 28338, 28350, 28355, 28380, 28376, 28313, 28306, 28302, 28301, 28324, 28321, 28351, 28339, 28368, 28362, 28311, 28334, 28323, 28999, 29012, 29010, 29027, 29024, 28993, 29021, 29026, 29042, 29048, 29034, 29025, 28994, 29016, 28995, 29003, 29040, 29023, 29008, 29011, 28996, 29005, 29018, 29263, 29325, 29324, 29329, 29328, 29326, 29500, 29506, 29499, 29498, 29504, 29514, 29513, 29764, 29770, 29771, 29778, 29777, 29783, 29760, 29775, 29776, 29774, 29762, 29766, 29773, 29780, 29921, 29951, 29950, 29949, 29981, 30073, 30071, 27011, 30191, 30223, 30211, 30199, 30206, 30204, 30201, 30200, 30224, 30203, 30198, 30189, 30197, 30205, 30361, 30389, 30429, 30549, 30559, 30560, 30546, 30550, 30554, 30569, 30567, 30548, 30553, 30573, 30688, 30855, 30874, 30868, 30863, 30852, 30869, 30853, 30854, 30881, 30851, 30841, 30873, 30848, 30870, 30843, 31100, 31106, 31101, 31097, 31249, 31256, 31257, 31250, 31255, 31253, 31266, 31251, 31259, 31248, 31395, 31394, 31390, 31467, 31590, 31588, 31597, 31604, 31593, 31602, 31589, 31603, 31601, 31600, 31585, 31608, 31606, 31587, 31922, 31924, 31919, 32136, 32134, 32128, 32141, 32127, 32133, 32122, 32142, 32123, 32131, 32124, 32140, 32148, 32132, 32125, 32146, 32621, 32619, 32615, 32616, 32620, 32678, 32677, 32679, 32731, 32732, 32801, 33124, 33120, 33143, 33116, 33129, 33115, 33122, 33138, 26401, 33118, 33142, 33127, 33135, 33092, 33121, 33309, 33353, 33348, 33344, 33346, 33349, 34033, 33855, 33878, 33910, 33913, 33935, 33933, 33893, 33873, 33856, 33926, 33895, 33840, 33869, 33917, 33882, 33881, 33908, 33907, 33885, 34055, 33886, 33847, 33850, 33844, 33914, 33859, 33912, 33842, 33861, 33833, 33753, 33867, 33839, 33858, 33837, 33887, 33904, 33849, 33870, 33868, 33874, 33903, 33989, 33934, 33851, 33863, 33846, 33843, 33896, 33918, 33860, 33835, 33888, 33876, 33902, 33872, 34571, 34564, 34551, 34572, 34554, 34518, 34549, 34637, 34552, 34574, 34569, 34561, 34550, 34573, 34565, 35030, 35019, 35021, 35022, 35038, 35035, 35034, 35020, 35024, 35205, 35227, 35295, 35301, 35300, 35297, 35296, 35298, 35292, 35302, 35446, 35462, 35455, 35425, 35391, 35447, 35458, 35460, 35445, 35459, 35457, 35444, 35450, 35900, 35915, 35914, 35941, 35940, 35942, 35974, 35972, 35973, 36044, 36200, 36201, 36241, 36236, 36238, 36239, 36237, 36243, 36244, 36240, 36242, 36336, 36320, 36332, 36337, 36334, 36304, 36329, 36323, 36322, 36327, 36338, 36331, 36340, 36614, 36607, 36609, 36608, 36613, 36615, 36616, 36610, 36619, 36946, 36927, 36932, 36937, 36925, 37136, 37133, 37135, 37137, 37142, 37140, 37131, 37134, 37230, 37231, 37448, 37458, 37424, 37434, 37478, 37427, 37477, 37470, 37507, 37422, 37450, 37446, 37485, 37484, 37455, 37472, 37479, 37487, 37430, 37473, 37488, 37425, 37460, 37475, 37456, 37490, 37454, 37459, 37452, 37462, 37426, 38303, 38300, 38302, 38299, 38546, 38547, 38545, 38551, 38606, 38650, 38653, 38648, 38645, 38771, 38775, 38776, 38770, 38927, 38925, 38926, 39084, 39158, 39161, 39343, 39346, 39344, 39349, 39597, 39595, 39771, 40170, 40173, 40167, 40576, 40701, 20710, 20692, 20695, 20712, 20723, 20699, 20714, 20701, 20708, 20691, 20716, 20720, 20719, 20707, 20704, 20952, 21120, 21121, 21225, 21227, 21296, 21420, 22055, 22037, 22028, 22034, 22012, 22031, 22044, 22017, 22035, 22018, 22010, 22045, 22020, 22015, 22009, 22665, 22652, 22672, 22680, 22662, 22657, 22655, 22644, 22667, 22650, 22663, 22673, 22670, 22646, 22658, 22664, 22651, 22676, 22671, 22782, 22891, 23260, 23278, 23269, 23253, 23274, 23258, 23277, 23275, 23283, 23266, 23264, 23259, 23276, 23262, 23261, 23257, 23272, 23263, 23415, 23520, 23523, 23651, 23938, 23936, 23933, 23942, 23930, 23937, 23927, 23946, 23945, 23944, 23934, 23932, 23949, 23929, 23935, 24152, 24153, 24147, 24280, 24273, 24279, 24270, 24284, 24277, 24281, 24274, 24276, 24388, 24387, 24431, 24502, 24876, 24872, 24897, 24926, 24945, 24947, 24914, 24915, 24946, 24940, 24960, 24948, 24916, 24954, 24923, 24933, 24891, 24938, 24929, 24918, 25129, 25127, 25131, 25643, 25677, 25691, 25693, 25716, 25718, 25714, 25715, 25725, 25717, 25702, 25766, 25678, 25730, 25694, 25692, 25675, 25683, 25696, 25680, 25727, 25663, 25708, 25707, 25689, 25701, 25719, 25971, 26016, 26273, 26272, 26271, 26373, 26372, 26402, 27057, 27062, 27081, 27040, 27086, 27030, 27056, 27052, 27068, 27025, 27033, 27022, 27047, 27021, 27049, 27070, 27055, 27071, 27076, 27069, 27044, 27092, 27065, 27082, 27034, 27087, 27059, 27027, 27050, 27041, 27038, 27097, 27031, 27024, 27074, 27061, 27045, 27078, 27466, 27469, 27467, 27550, 27551, 27552, 27587, 27588, 27646, 28366, 28405, 28401, 28419, 28453, 28408, 28471, 28411, 28462, 28425, 28494, 28441, 28442, 28455, 28440, 28475, 28434, 28397, 28426, 28470, 28531, 28409, 28398, 28461, 28480, 28464, 28476, 28469, 28395, 28423, 28430, 28483, 28421, 28413, 28406, 28473, 28444, 28412, 28474, 28447, 28429, 28446, 28424, 28449, 29063, 29072, 29065, 29056, 29061, 29058, 29071, 29051, 29062, 29057, 29079, 29252, 29267, 29335, 29333, 29331, 29507, 29517, 29521, 29516, 29794, 29811, 29809, 29813, 29810, 29799, 29806, 29952, 29954, 29955, 30077, 30096, 30230, 30216, 30220, 30229, 30225, 30218, 30228, 30392, 30593, 30588, 30597, 30594, 30574, 30592, 30575, 30590, 30595, 30898, 30890, 30900, 30893, 30888, 30846, 30891, 30878, 30885, 30880, 30892, 30882, 30884, 31128, 31114, 31115, 31126, 31125, 31124, 31123, 31127, 31112, 31122, 31120, 31275, 31306, 31280, 31279, 31272, 31270, 31400, 31403, 31404, 31470, 31624, 31644, 31626, 31633, 31632, 31638, 31629, 31628, 31643, 31630, 31621, 31640, 21124, 31641, 31652, 31618, 31931, 31935, 31932, 31930, 32167, 32183, 32194, 32163, 32170, 32193, 32192, 32197, 32157, 32206, 32196, 32198, 32203, 32204, 32175, 32185, 32150, 32188, 32159, 32166, 32174, 32169, 32161, 32201, 32627, 32738, 32739, 32741, 32734, 32804, 32861, 32860, 33161, 33158, 33155, 33159, 33165, 33164, 33163, 33301, 33943, 33956, 33953, 33951, 33978, 33998, 33986, 33964, 33966, 33963, 33977, 33972, 33985, 33997, 33962, 33946, 33969, 34e3, 33949, 33959, 33979, 33954, 33940, 33991, 33996, 33947, 33961, 33967, 33960, 34006, 33944, 33974, 33999, 33952, 34007, 34004, 34002, 34011, 33968, 33937, 34401, 34611, 34595, 34600, 34667, 34624, 34606, 34590, 34593, 34585, 34587, 34627, 34604, 34625, 34622, 34630, 34592, 34610, 34602, 34605, 34620, 34578, 34618, 34609, 34613, 34626, 34598, 34599, 34616, 34596, 34586, 34608, 34577, 35063, 35047, 35057, 35058, 35066, 35070, 35054, 35068, 35062, 35067, 35056, 35052, 35051, 35229, 35233, 35231, 35230, 35305, 35307, 35304, 35499, 35481, 35467, 35474, 35471, 35478, 35901, 35944, 35945, 36053, 36047, 36055, 36246, 36361, 36354, 36351, 36365, 36349, 36362, 36355, 36359, 36358, 36357, 36350, 36352, 36356, 36624, 36625, 36622, 36621, 37155, 37148, 37152, 37154, 37151, 37149, 37146, 37156, 37153, 37147, 37242, 37234, 37241, 37235, 37541, 37540, 37494, 37531, 37498, 37536, 37524, 37546, 37517, 37542, 37530, 37547, 37497, 37527, 37503, 37539, 37614, 37518, 37506, 37525, 37538, 37501, 37512, 37537, 37514, 37510, 37516, 37529, 37543, 37502, 37511, 37545, 37533, 37515, 37421, 38558, 38561, 38655, 38744, 38781, 38778, 38782, 38787, 38784, 38786, 38779, 38788, 38785, 38783, 38862, 38861, 38934, 39085, 39086, 39170, 39168, 39175, 39325, 39324, 39363, 39353, 39355, 39354, 39362, 39357, 39367, 39601, 39651, 39655, 39742, 39743, 39776, 39777, 39775, 40177, 40178, 40181, 40615, 20735, 20739, 20784, 20728, 20742, 20743, 20726, 20734, 20747, 20748, 20733, 20746, 21131, 21132, 21233, 21231, 22088, 22082, 22092, 22069, 22081, 22090, 22089, 22086, 22104, 22106, 22080, 22067, 22077, 22060, 22078, 22072, 22058, 22074, 22298, 22699, 22685, 22705, 22688, 22691, 22703, 22700, 22693, 22689, 22783, 23295, 23284, 23293, 23287, 23286, 23299, 23288, 23298, 23289, 23297, 23303, 23301, 23311, 23655, 23961, 23959, 23967, 23954, 23970, 23955, 23957, 23968, 23964, 23969, 23962, 23966, 24169, 24157, 24160, 24156, 32243, 24283, 24286, 24289, 24393, 24498, 24971, 24963, 24953, 25009, 25008, 24994, 24969, 24987, 24979, 25007, 25005, 24991, 24978, 25002, 24993, 24973, 24934, 25011, 25133, 25710, 25712, 25750, 25760, 25733, 25751, 25756, 25743, 25739, 25738, 25740, 25763, 25759, 25704, 25777, 25752, 25974, 25978, 25977, 25979, 26034, 26035, 26293, 26288, 26281, 26290, 26295, 26282, 26287, 27136, 27142, 27159, 27109, 27128, 27157, 27121, 27108, 27168, 27135, 27116, 27106, 27163, 27165, 27134, 27175, 27122, 27118, 27156, 27127, 27111, 27200, 27144, 27110, 27131, 27149, 27132, 27115, 27145, 27140, 27160, 27173, 27151, 27126, 27174, 27143, 27124, 27158, 27473, 27557, 27555, 27554, 27558, 27649, 27648, 27647, 27650, 28481, 28454, 28542, 28551, 28614, 28562, 28557, 28553, 28556, 28514, 28495, 28549, 28506, 28566, 28534, 28524, 28546, 28501, 28530, 28498, 28496, 28503, 28564, 28563, 28509, 28416, 28513, 28523, 28541, 28519, 28560, 28499, 28555, 28521, 28543, 28565, 28515, 28535, 28522, 28539, 29106, 29103, 29083, 29104, 29088, 29082, 29097, 29109, 29085, 29093, 29086, 29092, 29089, 29098, 29084, 29095, 29107, 29336, 29338, 29528, 29522, 29534, 29535, 29536, 29533, 29531, 29537, 29530, 29529, 29538, 29831, 29833, 29834, 29830, 29825, 29821, 29829, 29832, 29820, 29817, 29960, 29959, 30078, 30245, 30238, 30233, 30237, 30236, 30243, 30234, 30248, 30235, 30364, 30365, 30366, 30363, 30605, 30607, 30601, 30600, 30925, 30907, 30927, 30924, 30929, 30926, 30932, 30920, 30915, 30916, 30921, 31130, 31137, 31136, 31132, 31138, 31131, 27510, 31289, 31410, 31412, 31411, 31671, 31691, 31678, 31660, 31694, 31663, 31673, 31690, 31669, 31941, 31944, 31948, 31947, 32247, 32219, 32234, 32231, 32215, 32225, 32259, 32250, 32230, 32246, 32241, 32240, 32238, 32223, 32630, 32684, 32688, 32685, 32749, 32747, 32746, 32748, 32742, 32744, 32868, 32871, 33187, 33183, 33182, 33173, 33186, 33177, 33175, 33302, 33359, 33363, 33362, 33360, 33358, 33361, 34084, 34107, 34063, 34048, 34089, 34062, 34057, 34061, 34079, 34058, 34087, 34076, 34043, 34091, 34042, 34056, 34060, 34036, 34090, 34034, 34069, 34039, 34027, 34035, 34044, 34066, 34026, 34025, 34070, 34046, 34088, 34077, 34094, 34050, 34045, 34078, 34038, 34097, 34086, 34023, 34024, 34032, 34031, 34041, 34072, 34080, 34096, 34059, 34073, 34095, 34402, 34646, 34659, 34660, 34679, 34785, 34675, 34648, 34644, 34651, 34642, 34657, 34650, 34641, 34654, 34669, 34666, 34640, 34638, 34655, 34653, 34671, 34668, 34682, 34670, 34652, 34661, 34639, 34683, 34677, 34658, 34663, 34665, 34906, 35077, 35084, 35092, 35083, 35095, 35096, 35097, 35078, 35094, 35089, 35086, 35081, 35234, 35236, 35235, 35309, 35312, 35308, 35535, 35526, 35512, 35539, 35537, 35540, 35541, 35515, 35543, 35518, 35520, 35525, 35544, 35523, 35514, 35517, 35545, 35902, 35917, 35983, 36069, 36063, 36057, 36072, 36058, 36061, 36071, 36256, 36252, 36257, 36251, 36384, 36387, 36389, 36388, 36398, 36373, 36379, 36374, 36369, 36377, 36390, 36391, 36372, 36370, 36376, 36371, 36380, 36375, 36378, 36652, 36644, 36632, 36634, 36640, 36643, 36630, 36631, 36979, 36976, 36975, 36967, 36971, 37167, 37163, 37161, 37162, 37170, 37158, 37166, 37253, 37254, 37258, 37249, 37250, 37252, 37248, 37584, 37571, 37572, 37568, 37593, 37558, 37583, 37617, 37599, 37592, 37609, 37591, 37597, 37580, 37615, 37570, 37608, 37578, 37576, 37582, 37606, 37581, 37589, 37577, 37600, 37598, 37607, 37585, 37587, 37557, 37601, 37574, 37556, 38268, 38316, 38315, 38318, 38320, 38564, 38562, 38611, 38661, 38664, 38658, 38746, 38794, 38798, 38792, 38864, 38863, 38942, 38941, 38950, 38953, 38952, 38944, 38939, 38951, 39090, 39176, 39162, 39185, 39188, 39190, 39191, 39189, 39388, 39373, 39375, 39379, 39380, 39374, 39369, 39382, 39384, 39371, 39383, 39372, 39603, 39660, 39659, 39667, 39666, 39665, 39750, 39747, 39783, 39796, 39793, 39782, 39798, 39797, 39792, 39784, 39780, 39788, 40188, 40186, 40189, 40191, 40183, 40199, 40192, 40185, 40187, 40200, 40197, 40196, 40579, 40659, 40719, 40720, 20764, 20755, 20759, 20762, 20753, 20958, 21300, 21473, 22128, 22112, 22126, 22131, 22118, 22115, 22125, 22130, 22110, 22135, 22300, 22299, 22728, 22717, 22729, 22719, 22714, 22722, 22716, 22726, 23319, 23321, 23323, 23329, 23316, 23315, 23312, 23318, 23336, 23322, 23328, 23326, 23535, 23980, 23985, 23977, 23975, 23989, 23984, 23982, 23978, 23976, 23986, 23981, 23983, 23988, 24167, 24168, 24166, 24175, 24297, 24295, 24294, 24296, 24293, 24395, 24508, 24989, 25e3, 24982, 25029, 25012, 25030, 25025, 25036, 25018, 25023, 25016, 24972, 25815, 25814, 25808, 25807, 25801, 25789, 25737, 25795, 25819, 25843, 25817, 25907, 25983, 25980, 26018, 26312, 26302, 26304, 26314, 26315, 26319, 26301, 26299, 26298, 26316, 26403, 27188, 27238, 27209, 27239, 27186, 27240, 27198, 27229, 27245, 27254, 27227, 27217, 27176, 27226, 27195, 27199, 27201, 27242, 27236, 27216, 27215, 27220, 27247, 27241, 27232, 27196, 27230, 27222, 27221, 27213, 27214, 27206, 27477, 27476, 27478, 27559, 27562, 27563, 27592, 27591, 27652, 27651, 27654, 28589, 28619, 28579, 28615, 28604, 28622, 28616, 28510, 28612, 28605, 28574, 28618, 28584, 28676, 28581, 28590, 28602, 28588, 28586, 28623, 28607, 28600, 28578, 28617, 28587, 28621, 28591, 28594, 28592, 29125, 29122, 29119, 29112, 29142, 29120, 29121, 29131, 29140, 29130, 29127, 29135, 29117, 29144, 29116, 29126, 29146, 29147, 29341, 29342, 29545, 29542, 29543, 29548, 29541, 29547, 29546, 29823, 29850, 29856, 29844, 29842, 29845, 29857, 29963, 30080, 30255, 30253, 30257, 30269, 30259, 30268, 30261, 30258, 30256, 30395, 30438, 30618, 30621, 30625, 30620, 30619, 30626, 30627, 30613, 30617, 30615, 30941, 30953, 30949, 30954, 30942, 30947, 30939, 30945, 30946, 30957, 30943, 30944, 31140, 31300, 31304, 31303, 31414, 31416, 31413, 31409, 31415, 31710, 31715, 31719, 31709, 31701, 31717, 31706, 31720, 31737, 31700, 31722, 31714, 31708, 31723, 31704, 31711, 31954, 31956, 31959, 31952, 31953, 32274, 32289, 32279, 32268, 32287, 32288, 32275, 32270, 32284, 32277, 32282, 32290, 32267, 32271, 32278, 32269, 32276, 32293, 32292, 32579, 32635, 32636, 32634, 32689, 32751, 32810, 32809, 32876, 33201, 33190, 33198, 33209, 33205, 33195, 33200, 33196, 33204, 33202, 33207, 33191, 33266, 33365, 33366, 33367, 34134, 34117, 34155, 34125, 34131, 34145, 34136, 34112, 34118, 34148, 34113, 34146, 34116, 34129, 34119, 34147, 34110, 34139, 34161, 34126, 34158, 34165, 34133, 34151, 34144, 34188, 34150, 34141, 34132, 34149, 34156, 34403, 34405, 34404, 34715, 34703, 34711, 34707, 34706, 34696, 34689, 34710, 34712, 34681, 34695, 34723, 34693, 34704, 34705, 34717, 34692, 34708, 34716, 34714, 34697, 35102, 35110, 35120, 35117, 35118, 35111, 35121, 35106, 35113, 35107, 35119, 35116, 35103, 35313, 35552, 35554, 35570, 35572, 35573, 35549, 35604, 35556, 35551, 35568, 35528, 35550, 35553, 35560, 35583, 35567, 35579, 35985, 35986, 35984, 36085, 36078, 36081, 36080, 36083, 36204, 36206, 36261, 36263, 36403, 36414, 36408, 36416, 36421, 36406, 36412, 36413, 36417, 36400, 36415, 36541, 36662, 36654, 36661, 36658, 36665, 36663, 36660, 36982, 36985, 36987, 36998, 37114, 37171, 37173, 37174, 37267, 37264, 37265, 37261, 37263, 37671, 37662, 37640, 37663, 37638, 37647, 37754, 37688, 37692, 37659, 37667, 37650, 37633, 37702, 37677, 37646, 37645, 37579, 37661, 37626, 37669, 37651, 37625, 37623, 37684, 37634, 37668, 37631, 37673, 37689, 37685, 37674, 37652, 37644, 37643, 37630, 37641, 37632, 37627, 37654, 38332, 38349, 38334, 38329, 38330, 38326, 38335, 38325, 38333, 38569, 38612, 38667, 38674, 38672, 38809, 38807, 38804, 38896, 38904, 38965, 38959, 38962, 39204, 39199, 39207, 39209, 39326, 39406, 39404, 39397, 39396, 39408, 39395, 39402, 39401, 39399, 39609, 39615, 39604, 39611, 39670, 39674, 39673, 39671, 39731, 39808, 39813, 39815, 39804, 39806, 39803, 39810, 39827, 39826, 39824, 39802, 39829, 39805, 39816, 40229, 40215, 40224, 40222, 40212, 40233, 40221, 40216, 40226, 40208, 40217, 40223, 40584, 40582, 40583, 40622, 40621, 40661, 40662, 40698, 40722, 40765, 20774, 20773, 20770, 20772, 20768, 20777, 21236, 22163, 22156, 22157, 22150, 22148, 22147, 22142, 22146, 22143, 22145, 22742, 22740, 22735, 22738, 23341, 23333, 23346, 23331, 23340, 23335, 23334, 23343, 23342, 23419, 23537, 23538, 23991, 24172, 24170, 24510, 24507, 25027, 25013, 25020, 25063, 25056, 25061, 25060, 25064, 25054, 25839, 25833, 25827, 25835, 25828, 25832, 25985, 25984, 26038, 26074, 26322, 27277, 27286, 27265, 27301, 27273, 27295, 27291, 27297, 27294, 27271, 27283, 27278, 27285, 27267, 27304, 27300, 27281, 27263, 27302, 27290, 27269, 27276, 27282, 27483, 27565, 27657, 28620, 28585, 28660, 28628, 28643, 28636, 28653, 28647, 28646, 28638, 28658, 28637, 28642, 28648, 29153, 29169, 29160, 29170, 29156, 29168, 29154, 29555, 29550, 29551, 29847, 29874, 29867, 29840, 29866, 29869, 29873, 29861, 29871, 29968, 29969, 29970, 29967, 30084, 30275, 30280, 30281, 30279, 30372, 30441, 30645, 30635, 30642, 30647, 30646, 30644, 30641, 30632, 30704, 30963, 30973, 30978, 30971, 30972, 30962, 30981, 30969, 30974, 30980, 31147, 31144, 31324, 31323, 31318, 31320, 31316, 31322, 31422, 31424, 31425, 31749, 31759, 31730, 31744, 31743, 31739, 31758, 31732, 31755, 31731, 31746, 31753, 31747, 31745, 31736, 31741, 31750, 31728, 31729, 31760, 31754, 31976, 32301, 32316, 32322, 32307, 38984, 32312, 32298, 32329, 32320, 32327, 32297, 32332, 32304, 32315, 32310, 32324, 32314, 32581, 32639, 32638, 32637, 32756, 32754, 32812, 33211, 33220, 33228, 33226, 33221, 33223, 33212, 33257, 33371, 33370, 33372, 34179, 34176, 34191, 34215, 34197, 34208, 34187, 34211, 34171, 34212, 34202, 34206, 34167, 34172, 34185, 34209, 34170, 34168, 34135, 34190, 34198, 34182, 34189, 34201, 34205, 34177, 34210, 34178, 34184, 34181, 34169, 34166, 34200, 34192, 34207, 34408, 34750, 34730, 34733, 34757, 34736, 34732, 34745, 34741, 34748, 34734, 34761, 34755, 34754, 34764, 34743, 34735, 34756, 34762, 34740, 34742, 34751, 34744, 34749, 34782, 34738, 35125, 35123, 35132, 35134, 35137, 35154, 35127, 35138, 35245, 35247, 35246, 35314, 35315, 35614, 35608, 35606, 35601, 35589, 35595, 35618, 35599, 35602, 35605, 35591, 35597, 35592, 35590, 35612, 35603, 35610, 35919, 35952, 35954, 35953, 35951, 35989, 35988, 36089, 36207, 36430, 36429, 36435, 36432, 36428, 36423, 36675, 36672, 36997, 36990, 37176, 37274, 37282, 37275, 37273, 37279, 37281, 37277, 37280, 37793, 37763, 37807, 37732, 37718, 37703, 37756, 37720, 37724, 37750, 37705, 37712, 37713, 37728, 37741, 37775, 37708, 37738, 37753, 37719, 37717, 37714, 37711, 37745, 37751, 37755, 37729, 37726, 37731, 37735, 37760, 37710, 37721, 38343, 38336, 38345, 38339, 38341, 38327, 38574, 38576, 38572, 38688, 38687, 38680, 38685, 38681, 38810, 38817, 38812, 38814, 38813, 38869, 38868, 38897, 38977, 38980, 38986, 38985, 38981, 38979, 39205, 39211, 39212, 39210, 39219, 39218, 39215, 39213, 39217, 39216, 39320, 39331, 39329, 39426, 39418, 39412, 39415, 39417, 39416, 39414, 39419, 39421, 39422, 39420, 39427, 39614, 39678, 39677, 39681, 39676, 39752, 39834, 39848, 39838, 39835, 39846, 39841, 39845, 39844, 39814, 39842, 39840, 39855, 40243, 40257, 40295, 40246, 40238, 40239, 40241, 40248, 40240, 40261, 40258, 40259, 40254, 40247, 40256, 40253, 32757, 40237, 40586, 40585, 40589, 40624, 40648, 40666, 40699, 40703, 40740, 40739, 40738, 40788, 40864, 20785, 20781, 20782, 22168, 22172, 22167, 22170, 22173, 22169, 22896, 23356, 23657, 23658, 24e3, 24173, 24174, 25048, 25055, 25069, 25070, 25073, 25066, 25072, 25067, 25046, 25065, 25855, 25860, 25853, 25848, 25857, 25859, 25852, 26004, 26075, 26330, 26331, 26328, 27333, 27321, 27325, 27361, 27334, 27322, 27318, 27319, 27335, 27316, 27309, 27486, 27593, 27659, 28679, 28684, 28685, 28673, 28677, 28692, 28686, 28671, 28672, 28667, 28710, 28668, 28663, 28682, 29185, 29183, 29177, 29187, 29181, 29558, 29880, 29888, 29877, 29889, 29886, 29878, 29883, 29890, 29972, 29971, 30300, 30308, 30297, 30288, 30291, 30295, 30298, 30374, 30397, 30444, 30658, 30650, 30975, 30988, 30995, 30996, 30985, 30992, 30994, 30993, 31149, 31148, 31327, 31772, 31785, 31769, 31776, 31775, 31789, 31773, 31782, 31784, 31778, 31781, 31792, 32348, 32336, 32342, 32355, 32344, 32354, 32351, 32337, 32352, 32343, 32339, 32693, 32691, 32759, 32760, 32885, 33233, 33234, 33232, 33375, 33374, 34228, 34246, 34240, 34243, 34242, 34227, 34229, 34237, 34247, 34244, 34239, 34251, 34254, 34248, 34245, 34225, 34230, 34258, 34340, 34232, 34231, 34238, 34409, 34791, 34790, 34786, 34779, 34795, 34794, 34789, 34783, 34803, 34788, 34772, 34780, 34771, 34797, 34776, 34787, 34724, 34775, 34777, 34817, 34804, 34792, 34781, 35155, 35147, 35151, 35148, 35142, 35152, 35153, 35145, 35626, 35623, 35619, 35635, 35632, 35637, 35655, 35631, 35644, 35646, 35633, 35621, 35639, 35622, 35638, 35630, 35620, 35643, 35645, 35642, 35906, 35957, 35993, 35992, 35991, 36094, 36100, 36098, 36096, 36444, 36450, 36448, 36439, 36438, 36446, 36453, 36455, 36443, 36442, 36449, 36445, 36457, 36436, 36678, 36679, 36680, 36683, 37160, 37178, 37179, 37182, 37288, 37285, 37287, 37295, 37290, 37813, 37772, 37778, 37815, 37787, 37789, 37769, 37799, 37774, 37802, 37790, 37798, 37781, 37768, 37785, 37791, 37773, 37809, 37777, 37810, 37796, 37800, 37812, 37795, 37797, 38354, 38355, 38353, 38579, 38615, 38618, 24002, 38623, 38616, 38621, 38691, 38690, 38693, 38828, 38830, 38824, 38827, 38820, 38826, 38818, 38821, 38871, 38873, 38870, 38872, 38906, 38992, 38993, 38994, 39096, 39233, 39228, 39226, 39439, 39435, 39433, 39437, 39428, 39441, 39434, 39429, 39431, 39430, 39616, 39644, 39688, 39684, 39685, 39721, 39733, 39754, 39756, 39755, 39879, 39878, 39875, 39871, 39873, 39861, 39864, 39891, 39862, 39876, 39865, 39869, 40284, 40275, 40271, 40266, 40283, 40267, 40281, 40278, 40268, 40279, 40274, 40276, 40287, 40280, 40282, 40590, 40588, 40671, 40705, 40704, 40726, 40741, 40747, 40746, 40745, 40744, 40780, 40789, 20788, 20789, 21142, 21239, 21428, 22187, 22189, 22182, 22183, 22186, 22188, 22746, 22749, 22747, 22802, 23357, 23358, 23359, 24003, 24176, 24511, 25083, 25863, 25872, 25869, 25865, 25868, 25870, 25988, 26078, 26077, 26334, 27367, 27360, 27340, 27345, 27353, 27339, 27359, 27356, 27344, 27371, 27343, 27341, 27358, 27488, 27568, 27660, 28697, 28711, 28704, 28694, 28715, 28705, 28706, 28707, 28713, 28695, 28708, 28700, 28714, 29196, 29194, 29191, 29186, 29189, 29349, 29350, 29348, 29347, 29345, 29899, 29893, 29879, 29891, 29974, 30304, 30665, 30666, 30660, 30705, 31005, 31003, 31009, 31004, 30999, 31006, 31152, 31335, 31336, 31795, 31804, 31801, 31788, 31803, 31980, 31978, 32374, 32373, 32376, 32368, 32375, 32367, 32378, 32370, 32372, 32360, 32587, 32586, 32643, 32646, 32695, 32765, 32766, 32888, 33239, 33237, 33380, 33377, 33379, 34283, 34289, 34285, 34265, 34273, 34280, 34266, 34263, 34284, 34290, 34296, 34264, 34271, 34275, 34268, 34257, 34288, 34278, 34287, 34270, 34274, 34816, 34810, 34819, 34806, 34807, 34825, 34828, 34827, 34822, 34812, 34824, 34815, 34826, 34818, 35170, 35162, 35163, 35159, 35169, 35164, 35160, 35165, 35161, 35208, 35255, 35254, 35318, 35664, 35656, 35658, 35648, 35667, 35670, 35668, 35659, 35669, 35665, 35650, 35666, 35671, 35907, 35959, 35958, 35994, 36102, 36103, 36105, 36268, 36266, 36269, 36267, 36461, 36472, 36467, 36458, 36463, 36475, 36546, 36690, 36689, 36687, 36688, 36691, 36788, 37184, 37183, 37296, 37293, 37854, 37831, 37839, 37826, 37850, 37840, 37881, 37868, 37836, 37849, 37801, 37862, 37834, 37844, 37870, 37859, 37845, 37828, 37838, 37824, 37842, 37863, 38269, 38362, 38363, 38625, 38697, 38699, 38700, 38696, 38694, 38835, 38839, 38838, 38877, 38878, 38879, 39004, 39001, 39005, 38999, 39103, 39101, 39099, 39102, 39240, 39239, 39235, 39334, 39335, 39450, 39445, 39461, 39453, 39460, 39451, 39458, 39456, 39463, 39459, 39454, 39452, 39444, 39618, 39691, 39690, 39694, 39692, 39735, 39914, 39915, 39904, 39902, 39908, 39910, 39906, 39920, 39892, 39895, 39916, 39900, 39897, 39909, 39893, 39905, 39898, 40311, 40321, 40330, 40324, 40328, 40305, 40320, 40312, 40326, 40331, 40332, 40317, 40299, 40308, 40309, 40304, 40297, 40325, 40307, 40315, 40322, 40303, 40313, 40319, 40327, 40296, 40596, 40593, 40640, 40700, 40749, 40768, 40769, 40781, 40790, 40791, 40792, 21303, 22194, 22197, 22195, 22755, 23365, 24006, 24007, 24302, 24303, 24512, 24513, 25081, 25879, 25878, 25877, 25875, 26079, 26344, 26339, 26340, 27379, 27376, 27370, 27368, 27385, 27377, 27374, 27375, 28732, 28725, 28719, 28727, 28724, 28721, 28738, 28728, 28735, 28730, 28729, 28736, 28731, 28723, 28737, 29203, 29204, 29352, 29565, 29564, 29882, 30379, 30378, 30398, 30445, 30668, 30670, 30671, 30669, 30706, 31013, 31011, 31015, 31016, 31012, 31017, 31154, 31342, 31340, 31341, 31479, 31817, 31816, 31818, 31815, 31813, 31982, 32379, 32382, 32385, 32384, 32698, 32767, 32889, 33243, 33241, 33291, 33384, 33385, 34338, 34303, 34305, 34302, 34331, 34304, 34294, 34308, 34313, 34309, 34316, 34301, 34841, 34832, 34833, 34839, 34835, 34838, 35171, 35174, 35257, 35319, 35680, 35690, 35677, 35688, 35683, 35685, 35687, 35693, 36270, 36486, 36488, 36484, 36697, 36694, 36695, 36693, 36696, 36698, 37005, 37187, 37185, 37303, 37301, 37298, 37299, 37899, 37907, 37883, 37920, 37903, 37908, 37886, 37909, 37904, 37928, 37913, 37901, 37877, 37888, 37879, 37895, 37902, 37910, 37906, 37882, 37897, 37880, 37898, 37887, 37884, 37900, 37878, 37905, 37894, 38366, 38368, 38367, 38702, 38703, 38841, 38843, 38909, 38910, 39008, 39010, 39011, 39007, 39105, 39106, 39248, 39246, 39257, 39244, 39243, 39251, 39474, 39476, 39473, 39468, 39466, 39478, 39465, 39470, 39480, 39469, 39623, 39626, 39622, 39696, 39698, 39697, 39947, 39944, 39927, 39941, 39954, 39928, 4e4, 39943, 39950, 39942, 39959, 39956, 39945, 40351, 40345, 40356, 40349, 40338, 40344, 40336, 40347, 40352, 40340, 40348, 40362, 40343, 40353, 40346, 40354, 40360, 40350, 40355, 40383, 40361, 40342, 40358, 40359, 40601, 40603, 40602, 40677, 40676, 40679, 40678, 40752, 40750, 40795, 40800, 40798, 40797, 40793, 40849, 20794, 20793, 21144, 21143, 22211, 22205, 22206, 23368, 23367, 24011, 24015, 24305, 25085, 25883, 27394, 27388, 27395, 27384, 27392, 28739, 28740, 28746, 28744, 28745, 28741, 28742, 29213, 29210, 29209, 29566, 29975, 30314, 30672, 31021, 31025, 31023, 31828, 31827, 31986, 32394, 32391, 32392, 32395, 32390, 32397, 32589, 32699, 32816, 33245, 34328, 34346, 34342, 34335, 34339, 34332, 34329, 34343, 34350, 34337, 34336, 34345, 34334, 34341, 34857, 34845, 34843, 34848, 34852, 34844, 34859, 34890, 35181, 35177, 35182, 35179, 35322, 35705, 35704, 35653, 35706, 35707, 36112, 36116, 36271, 36494, 36492, 36702, 36699, 36701, 37190, 37188, 37189, 37305, 37951, 37947, 37942, 37929, 37949, 37948, 37936, 37945, 37930, 37943, 37932, 37952, 37937, 38373, 38372, 38371, 38709, 38714, 38847, 38881, 39012, 39113, 39110, 39104, 39256, 39254, 39481, 39485, 39494, 39492, 39490, 39489, 39482, 39487, 39629, 39701, 39703, 39704, 39702, 39738, 39762, 39979, 39965, 39964, 39980, 39971, 39976, 39977, 39972, 39969, 40375, 40374, 40380, 40385, 40391, 40394, 40399, 40382, 40389, 40387, 40379, 40373, 40398, 40377, 40378, 40364, 40392, 40369, 40365, 40396, 40371, 40397, 40370, 40570, 40604, 40683, 40686, 40685, 40731, 40728, 40730, 40753, 40782, 40805, 40804, 40850, 20153, 22214, 22213, 22219, 22897, 23371, 23372, 24021, 24017, 24306, 25889, 25888, 25894, 25890, 27403, 27400, 27401, 27661, 28757, 28758, 28759, 28754, 29214, 29215, 29353, 29567, 29912, 29909, 29913, 29911, 30317, 30381, 31029, 31156, 31344, 31345, 31831, 31836, 31833, 31835, 31834, 31988, 31985, 32401, 32591, 32647, 33246, 33387, 34356, 34357, 34355, 34348, 34354, 34358, 34860, 34856, 34854, 34858, 34853, 35185, 35263, 35262, 35323, 35710, 35716, 35714, 35718, 35717, 35711, 36117, 36501, 36500, 36506, 36498, 36496, 36502, 36503, 36704, 36706, 37191, 37964, 37968, 37962, 37963, 37967, 37959, 37957, 37960, 37961, 37958, 38719, 38883, 39018, 39017, 39115, 39252, 39259, 39502, 39507, 39508, 39500, 39503, 39496, 39498, 39497, 39506, 39504, 39632, 39705, 39723, 39739, 39766, 39765, 40006, 40008, 39999, 40004, 39993, 39987, 40001, 39996, 39991, 39988, 39986, 39997, 39990, 40411, 40402, 40414, 40410, 40395, 40400, 40412, 40401, 40415, 40425, 40409, 40408, 40406, 40437, 40405, 40413, 40630, 40688, 40757, 40755, 40754, 40770, 40811, 40853, 40866, 20797, 21145, 22760, 22759, 22898, 23373, 24024, 34863, 24399, 25089, 25091, 25092, 25897, 25893, 26006, 26347, 27409, 27410, 27407, 27594, 28763, 28762, 29218, 29570, 29569, 29571, 30320, 30676, 31847, 31846, 32405, 33388, 34362, 34368, 34361, 34364, 34353, 34363, 34366, 34864, 34866, 34862, 34867, 35190, 35188, 35187, 35326, 35724, 35726, 35723, 35720, 35909, 36121, 36504, 36708, 36707, 37308, 37986, 37973, 37981, 37975, 37982, 38852, 38853, 38912, 39510, 39513, 39710, 39711, 39712, 40018, 40024, 40016, 40010, 40013, 40011, 40021, 40025, 40012, 40014, 40443, 40439, 40431, 40419, 40427, 40440, 40420, 40438, 40417, 40430, 40422, 40434, 40432, 40418, 40428, 40436, 40435, 40424, 40429, 40642, 40656, 40690, 40691, 40710, 40732, 40760, 40759, 40758, 40771, 40783, 40817, 40816, 40814, 40815, 22227, 22221, 23374, 23661, 25901, 26349, 26350, 27411, 28767, 28769, 28765, 28768, 29219, 29915, 29925, 30677, 31032, 31159, 31158, 31850, 32407, 32649, 33389, 34371, 34872, 34871, 34869, 34891, 35732, 35733, 36510, 36511, 36512, 36509, 37310, 37309, 37314, 37995, 37992, 37993, 38629, 38726, 38723, 38727, 38855, 38885, 39518, 39637, 39769, 40035, 40039, 40038, 40034, 40030, 40032, 40450, 40446, 40455, 40451, 40454, 40453, 40448, 40449, 40457, 40447, 40445, 40452, 40608, 40734, 40774, 40820, 40821, 40822, 22228, 25902, 26040, 27416, 27417, 27415, 27418, 28770, 29222, 29354, 30680, 30681, 31033, 31849, 31851, 31990, 32410, 32408, 32411, 32409, 33248, 33249, 34374, 34375, 34376, 35193, 35194, 35196, 35195, 35327, 35736, 35737, 36517, 36516, 36515, 37998, 37997, 37999, 38001, 38003, 38729, 39026, 39263, 40040, 40046, 40045, 40459, 40461, 40464, 40463, 40466, 40465, 40609, 40693, 40713, 40775, 40824, 40827, 40826, 40825, 22302, 28774, 31855, 34876, 36274, 36518, 37315, 38004, 38008, 38006, 38005, 39520, 40052, 40051, 40049, 40053, 40468, 40467, 40694, 40714, 40868, 28776, 28773, 31991, 34410, 34878, 34877, 34879, 35742, 35996, 36521, 36553, 38731, 39027, 39028, 39116, 39265, 39339, 39524, 39526, 39527, 39716, 40469, 40471, 40776, 25095, 27422, 29223, 34380, 36520, 38018, 38016, 38017, 39529, 39528, 39726, 40473, 29225, 34379, 35743, 38019, 40057, 40631, 30325, 39531, 40058, 40477, 28777, 28778, 40612, 40830, 40777, 40856, 30849, 37561, 35023, 22715, 24658, 31911, 23290, 9556, 9574, 9559, 9568, 9580, 9571, 9562, 9577, 9565, 9554, 9572, 9557, 9566, 9578, 9569, 9560, 9575, 9563, 9555, 9573, 9558, 9567, 9579, 9570, 9561, 9576, 9564, 9553, 9552, 9581, 9582, 9584, 9583, 65517, 132423, 37595, 132575, 147397, 34124, 17077, 29679, 20917, 13897, 149826, 166372, 37700, 137691, 33518, 146632, 30780, 26436, 25311, 149811, 166314, 131744, 158643, 135941, 20395, 140525, 20488, 159017, 162436, 144896, 150193, 140563, 20521, 131966, 24484, 131968, 131911, 28379, 132127, 20605, 20737, 13434, 20750, 39020, 14147, 33814, 149924, 132231, 20832, 144308, 20842, 134143, 139516, 131813, 140592, 132494, 143923, 137603, 23426, 34685, 132531, 146585, 20914, 20920, 40244, 20937, 20943, 20945, 15580, 20947, 150182, 20915, 20962, 21314, 20973, 33741, 26942, 145197, 24443, 21003, 21030, 21052, 21173, 21079, 21140, 21177, 21189, 31765, 34114, 21216, 34317, 158483, 21253, 166622, 21833, 28377, 147328, 133460, 147436, 21299, 21316, 134114, 27851, 136998, 26651, 29653, 24650, 16042, 14540, 136936, 29149, 17570, 21357, 21364, 165547, 21374, 21375, 136598, 136723, 30694, 21395, 166555, 21408, 21419, 21422, 29607, 153458, 16217, 29596, 21441, 21445, 27721, 20041, 22526, 21465, 15019, 134031, 21472, 147435, 142755, 21494, 134263, 21523, 28793, 21803, 26199, 27995, 21613, 158547, 134516, 21853, 21647, 21668, 18342, 136973, 134877, 15796, 134477, 166332, 140952, 21831, 19693, 21551, 29719, 21894, 21929, 22021, 137431, 147514, 17746, 148533, 26291, 135348, 22071, 26317, 144010, 26276, 26285, 22093, 22095, 30961, 22257, 38791, 21502, 22272, 22255, 22253, 166758, 13859, 135759, 22342, 147877, 27758, 28811, 22338, 14001, 158846, 22502, 136214, 22531, 136276, 148323, 22566, 150517, 22620, 22698, 13665, 22752, 22748, 135740, 22779, 23551, 22339, 172368, 148088, 37843, 13729, 22815, 26790, 14019, 28249, 136766, 23076, 21843, 136850, 34053, 22985, 134478, 158849, 159018, 137180, 23001, 137211, 137138, 159142, 28017, 137256, 136917, 23033, 159301, 23211, 23139, 14054, 149929, 23159, 14088, 23190, 29797, 23251, 159649, 140628, 15749, 137489, 14130, 136888, 24195, 21200, 23414, 25992, 23420, 162318, 16388, 18525, 131588, 23509, 24928, 137780, 154060, 132517, 23539, 23453, 19728, 23557, 138052, 23571, 29646, 23572, 138405, 158504, 23625, 18653, 23685, 23785, 23791, 23947, 138745, 138807, 23824, 23832, 23878, 138916, 23738, 24023, 33532, 14381, 149761, 139337, 139635, 33415, 14390, 15298, 24110, 27274, 24181, 24186, 148668, 134355, 21414, 20151, 24272, 21416, 137073, 24073, 24308, 164994, 24313, 24315, 14496, 24316, 26686, 37915, 24333, 131521, 194708, 15070, 18606, 135994, 24378, 157832, 140240, 24408, 140401, 24419, 38845, 159342, 24434, 37696, 166454, 24487, 23990, 15711, 152144, 139114, 159992, 140904, 37334, 131742, 166441, 24625, 26245, 137335, 14691, 15815, 13881, 22416, 141236, 31089, 15936, 24734, 24740, 24755, 149890, 149903, 162387, 29860, 20705, 23200, 24932, 33828, 24898, 194726, 159442, 24961, 20980, 132694, 24967, 23466, 147383, 141407, 25043, 166813, 170333, 25040, 14642, 141696, 141505, 24611, 24924, 25886, 25483, 131352, 25285, 137072, 25301, 142861, 25452, 149983, 14871, 25656, 25592, 136078, 137212, 25744, 28554, 142902, 38932, 147596, 153373, 25825, 25829, 38011, 14950, 25658, 14935, 25933, 28438, 150056, 150051, 25989, 25965, 25951, 143486, 26037, 149824, 19255, 26065, 16600, 137257, 26080, 26083, 24543, 144384, 26136, 143863, 143864, 26180, 143780, 143781, 26187, 134773, 26215, 152038, 26227, 26228, 138813, 143921, 165364, 143816, 152339, 30661, 141559, 39332, 26370, 148380, 150049, 15147, 27130, 145346, 26462, 26471, 26466, 147917, 168173, 26583, 17641, 26658, 28240, 37436, 26625, 144358, 159136, 26717, 144495, 27105, 27147, 166623, 26995, 26819, 144845, 26881, 26880, 15666, 14849, 144956, 15232, 26540, 26977, 166474, 17148, 26934, 27032, 15265, 132041, 33635, 20624, 27129, 144985, 139562, 27205, 145155, 27293, 15347, 26545, 27336, 168348, 15373, 27421, 133411, 24798, 27445, 27508, 141261, 28341, 146139, 132021, 137560, 14144, 21537, 146266, 27617, 147196, 27612, 27703, 140427, 149745, 158545, 27738, 33318, 27769, 146876, 17605, 146877, 147876, 149772, 149760, 146633, 14053, 15595, 134450, 39811, 143865, 140433, 32655, 26679, 159013, 159137, 159211, 28054, 27996, 28284, 28420, 149887, 147589, 159346, 34099, 159604, 20935, 27804, 28189, 33838, 166689, 28207, 146991, 29779, 147330, 31180, 28239, 23185, 143435, 28664, 14093, 28573, 146992, 28410, 136343, 147517, 17749, 37872, 28484, 28508, 15694, 28532, 168304, 15675, 28575, 147780, 28627, 147601, 147797, 147513, 147440, 147380, 147775, 20959, 147798, 147799, 147776, 156125, 28747, 28798, 28839, 28801, 28876, 28885, 28886, 28895, 16644, 15848, 29108, 29078, 148087, 28971, 28997, 23176, 29002, 29038, 23708, 148325, 29007, 37730, 148161, 28972, 148570, 150055, 150050, 29114, 166888, 28861, 29198, 37954, 29205, 22801, 37955, 29220, 37697, 153093, 29230, 29248, 149876, 26813, 29269, 29271, 15957, 143428, 26637, 28477, 29314, 29482, 29483, 149539, 165931, 18669, 165892, 29480, 29486, 29647, 29610, 134202, 158254, 29641, 29769, 147938, 136935, 150052, 26147, 14021, 149943, 149901, 150011, 29687, 29717, 26883, 150054, 29753, 132547, 16087, 29788, 141485, 29792, 167602, 29767, 29668, 29814, 33721, 29804, 14128, 29812, 37873, 27180, 29826, 18771, 150156, 147807, 150137, 166799, 23366, 166915, 137374, 29896, 137608, 29966, 29929, 29982, 167641, 137803, 23511, 167596, 37765, 30029, 30026, 30055, 30062, 151426, 16132, 150803, 30094, 29789, 30110, 30132, 30210, 30252, 30289, 30287, 30319, 30326, 156661, 30352, 33263, 14328, 157969, 157966, 30369, 30373, 30391, 30412, 159647, 33890, 151709, 151933, 138780, 30494, 30502, 30528, 25775, 152096, 30552, 144044, 30639, 166244, 166248, 136897, 30708, 30729, 136054, 150034, 26826, 30895, 30919, 30931, 38565, 31022, 153056, 30935, 31028, 30897, 161292, 36792, 34948, 166699, 155779, 140828, 31110, 35072, 26882, 31104, 153687, 31133, 162617, 31036, 31145, 28202, 160038, 16040, 31174, 168205, 31188],
|
||
"euc-kr": [44034, 44035, 44037, 44038, 44043, 44044, 44045, 44046, 44047, 44056, 44062, 44063, 44065, 44066, 44067, 44069, 44070, 44071, 44072, 44073, 44074, 44075, 44078, 44082, 44083, 44084, null, null, null, null, null, null, 44085, 44086, 44087, 44090, 44091, 44093, 44094, 44095, 44097, 44098, 44099, 44100, 44101, 44102, 44103, 44104, 44105, 44106, 44108, 44110, 44111, 44112, 44113, 44114, 44115, 44117, null, null, null, null, null, null, 44118, 44119, 44121, 44122, 44123, 44125, 44126, 44127, 44128, 44129, 44130, 44131, 44132, 44133, 44134, 44135, 44136, 44137, 44138, 44139, 44140, 44141, 44142, 44143, 44146, 44147, 44149, 44150, 44153, 44155, 44156, 44157, 44158, 44159, 44162, 44167, 44168, 44173, 44174, 44175, 44177, 44178, 44179, 44181, 44182, 44183, 44184, 44185, 44186, 44187, 44190, 44194, 44195, 44196, 44197, 44198, 44199, 44203, 44205, 44206, 44209, 44210, 44211, 44212, 44213, 44214, 44215, 44218, 44222, 44223, 44224, 44226, 44227, 44229, 44230, 44231, 44233, 44234, 44235, 44237, 44238, 44239, 44240, 44241, 44242, 44243, 44244, 44246, 44248, 44249, 44250, 44251, 44252, 44253, 44254, 44255, 44258, 44259, 44261, 44262, 44265, 44267, 44269, 44270, 44274, 44276, 44279, 44280, 44281, 44282, 44283, 44286, 44287, 44289, 44290, 44291, 44293, 44295, 44296, 44297, 44298, 44299, 44302, 44304, 44306, 44307, 44308, 44309, 44310, 44311, 44313, 44314, 44315, 44317, 44318, 44319, 44321, 44322, 44323, 44324, 44325, 44326, 44327, 44328, 44330, 44331, 44334, 44335, 44336, 44337, 44338, 44339, null, null, null, null, null, null, 44342, 44343, 44345, 44346, 44347, 44349, 44350, 44351, 44352, 44353, 44354, 44355, 44358, 44360, 44362, 44363, 44364, 44365, 44366, 44367, 44369, 44370, 44371, 44373, 44374, 44375, null, null, null, null, null, null, 44377, 44378, 44379, 44380, 44381, 44382, 44383, 44384, 44386, 44388, 44389, 44390, 44391, 44392, 44393, 44394, 44395, 44398, 44399, 44401, 44402, 44407, 44408, 44409, 44410, 44414, 44416, 44419, 44420, 44421, 44422, 44423, 44426, 44427, 44429, 44430, 44431, 44433, 44434, 44435, 44436, 44437, 44438, 44439, 44440, 44441, 44442, 44443, 44446, 44447, 44448, 44449, 44450, 44451, 44453, 44454, 44455, 44456, 44457, 44458, 44459, 44460, 44461, 44462, 44463, 44464, 44465, 44466, 44467, 44468, 44469, 44470, 44472, 44473, 44474, 44475, 44476, 44477, 44478, 44479, 44482, 44483, 44485, 44486, 44487, 44489, 44490, 44491, 44492, 44493, 44494, 44495, 44498, 44500, 44501, 44502, 44503, 44504, 44505, 44506, 44507, 44509, 44510, 44511, 44513, 44514, 44515, 44517, 44518, 44519, 44520, 44521, 44522, 44523, 44524, 44525, 44526, 44527, 44528, 44529, 44530, 44531, 44532, 44533, 44534, 44535, 44538, 44539, 44541, 44542, 44546, 44547, 44548, 44549, 44550, 44551, 44554, 44556, 44558, 44559, 44560, 44561, 44562, 44563, 44565, 44566, 44567, 44568, 44569, 44570, 44571, 44572, null, null, null, null, null, null, 44573, 44574, 44575, 44576, 44577, 44578, 44579, 44580, 44581, 44582, 44583, 44584, 44585, 44586, 44587, 44588, 44589, 44590, 44591, 44594, 44595, 44597, 44598, 44601, 44603, 44604, null, null, null, null, null, null, 44605, 44606, 44607, 44610, 44612, 44615, 44616, 44617, 44619, 44623, 44625, 44626, 44627, 44629, 44631, 44632, 44633, 44634, 44635, 44638, 44642, 44643, 44644, 44646, 44647, 44650, 44651, 44653, 44654, 44655, 44657, 44658, 44659, 44660, 44661, 44662, 44663, 44666, 44670, 44671, 44672, 44673, 44674, 44675, 44678, 44679, 44680, 44681, 44682, 44683, 44685, 44686, 44687, 44688, 44689, 44690, 44691, 44692, 44693, 44694, 44695, 44696, 44697, 44698, 44699, 44700, 44701, 44702, 44703, 44704, 44705, 44706, 44707, 44708, 44709, 44710, 44711, 44712, 44713, 44714, 44715, 44716, 44717, 44718, 44719, 44720, 44721, 44722, 44723, 44724, 44725, 44726, 44727, 44728, 44729, 44730, 44731, 44735, 44737, 44738, 44739, 44741, 44742, 44743, 44744, 44745, 44746, 44747, 44750, 44754, 44755, 44756, 44757, 44758, 44759, 44762, 44763, 44765, 44766, 44767, 44768, 44769, 44770, 44771, 44772, 44773, 44774, 44775, 44777, 44778, 44780, 44782, 44783, 44784, 44785, 44786, 44787, 44789, 44790, 44791, 44793, 44794, 44795, 44797, 44798, 44799, 44800, 44801, 44802, 44803, 44804, 44805, null, null, null, null, null, null, 44806, 44809, 44810, 44811, 44812, 44814, 44815, 44817, 44818, 44819, 44820, 44821, 44822, 44823, 44824, 44825, 44826, 44827, 44828, 44829, 44830, 44831, 44832, 44833, 44834, 44835, null, null, null, null, null, null, 44836, 44837, 44838, 44839, 44840, 44841, 44842, 44843, 44846, 44847, 44849, 44851, 44853, 44854, 44855, 44856, 44857, 44858, 44859, 44862, 44864, 44868, 44869, 44870, 44871, 44874, 44875, 44876, 44877, 44878, 44879, 44881, 44882, 44883, 44884, 44885, 44886, 44887, 44888, 44889, 44890, 44891, 44894, 44895, 44896, 44897, 44898, 44899, 44902, 44903, 44904, 44905, 44906, 44907, 44908, 44909, 44910, 44911, 44912, 44913, 44914, 44915, 44916, 44917, 44918, 44919, 44920, 44922, 44923, 44924, 44925, 44926, 44927, 44929, 44930, 44931, 44933, 44934, 44935, 44937, 44938, 44939, 44940, 44941, 44942, 44943, 44946, 44947, 44948, 44950, 44951, 44952, 44953, 44954, 44955, 44957, 44958, 44959, 44960, 44961, 44962, 44963, 44964, 44965, 44966, 44967, 44968, 44969, 44970, 44971, 44972, 44973, 44974, 44975, 44976, 44977, 44978, 44979, 44980, 44981, 44982, 44983, 44986, 44987, 44989, 44990, 44991, 44993, 44994, 44995, 44996, 44997, 44998, 45002, 45004, 45007, 45008, 45009, 45010, 45011, 45013, 45014, 45015, 45016, 45017, 45018, 45019, 45021, 45022, 45023, 45024, 45025, null, null, null, null, null, null, 45026, 45027, 45028, 45029, 45030, 45031, 45034, 45035, 45036, 45037, 45038, 45039, 45042, 45043, 45045, 45046, 45047, 45049, 45050, 45051, 45052, 45053, 45054, 45055, 45058, 45059, null, null, null, null, null, null, 45061, 45062, 45063, 45064, 45065, 45066, 45067, 45069, 45070, 45071, 45073, 45074, 45075, 45077, 45078, 45079, 45080, 45081, 45082, 45083, 45086, 45087, 45088, 45089, 45090, 45091, 45092, 45093, 45094, 45095, 45097, 45098, 45099, 45100, 45101, 45102, 45103, 45104, 45105, 45106, 45107, 45108, 45109, 45110, 45111, 45112, 45113, 45114, 45115, 45116, 45117, 45118, 45119, 45120, 45121, 45122, 45123, 45126, 45127, 45129, 45131, 45133, 45135, 45136, 45137, 45138, 45142, 45144, 45146, 45147, 45148, 45150, 45151, 45152, 45153, 45154, 45155, 45156, 45157, 45158, 45159, 45160, 45161, 45162, 45163, 45164, 45165, 45166, 45167, 45168, 45169, 45170, 45171, 45172, 45173, 45174, 45175, 45176, 45177, 45178, 45179, 45182, 45183, 45185, 45186, 45187, 45189, 45190, 45191, 45192, 45193, 45194, 45195, 45198, 45200, 45202, 45203, 45204, 45205, 45206, 45207, 45211, 45213, 45214, 45219, 45220, 45221, 45222, 45223, 45226, 45232, 45234, 45238, 45239, 45241, 45242, 45243, 45245, 45246, 45247, 45248, 45249, 45250, 45251, 45254, 45258, 45259, 45260, 45261, 45262, 45263, 45266, null, null, null, null, null, null, 45267, 45269, 45270, 45271, 45273, 45274, 45275, 45276, 45277, 45278, 45279, 45281, 45282, 45283, 45284, 45286, 45287, 45288, 45289, 45290, 45291, 45292, 45293, 45294, 45295, 45296, null, null, null, null, null, null, 45297, 45298, 45299, 45300, 45301, 45302, 45303, 45304, 45305, 45306, 45307, 45308, 45309, 45310, 45311, 45312, 45313, 45314, 45315, 45316, 45317, 45318, 45319, 45322, 45325, 45326, 45327, 45329, 45332, 45333, 45334, 45335, 45338, 45342, 45343, 45344, 45345, 45346, 45350, 45351, 45353, 45354, 45355, 45357, 45358, 45359, 45360, 45361, 45362, 45363, 45366, 45370, 45371, 45372, 45373, 45374, 45375, 45378, 45379, 45381, 45382, 45383, 45385, 45386, 45387, 45388, 45389, 45390, 45391, 45394, 45395, 45398, 45399, 45401, 45402, 45403, 45405, 45406, 45407, 45409, 45410, 45411, 45412, 45413, 45414, 45415, 45416, 45417, 45418, 45419, 45420, 45421, 45422, 45423, 45424, 45425, 45426, 45427, 45428, 45429, 45430, 45431, 45434, 45435, 45437, 45438, 45439, 45441, 45443, 45444, 45445, 45446, 45447, 45450, 45452, 45454, 45455, 45456, 45457, 45461, 45462, 45463, 45465, 45466, 45467, 45469, 45470, 45471, 45472, 45473, 45474, 45475, 45476, 45477, 45478, 45479, 45481, 45482, 45483, 45484, 45485, 45486, 45487, 45488, 45489, 45490, 45491, 45492, 45493, 45494, 45495, 45496, null, null, null, null, null, null, 45497, 45498, 45499, 45500, 45501, 45502, 45503, 45504, 45505, 45506, 45507, 45508, 45509, 45510, 45511, 45512, 45513, 45514, 45515, 45517, 45518, 45519, 45521, 45522, 45523, 45525, null, null, null, null, null, null, 45526, 45527, 45528, 45529, 45530, 45531, 45534, 45536, 45537, 45538, 45539, 45540, 45541, 45542, 45543, 45546, 45547, 45549, 45550, 45551, 45553, 45554, 45555, 45556, 45557, 45558, 45559, 45560, 45562, 45564, 45566, 45567, 45568, 45569, 45570, 45571, 45574, 45575, 45577, 45578, 45581, 45582, 45583, 45584, 45585, 45586, 45587, 45590, 45592, 45594, 45595, 45596, 45597, 45598, 45599, 45601, 45602, 45603, 45604, 45605, 45606, 45607, 45608, 45609, 45610, 45611, 45612, 45613, 45614, 45615, 45616, 45617, 45618, 45619, 45621, 45622, 45623, 45624, 45625, 45626, 45627, 45629, 45630, 45631, 45632, 45633, 45634, 45635, 45636, 45637, 45638, 45639, 45640, 45641, 45642, 45643, 45644, 45645, 45646, 45647, 45648, 45649, 45650, 45651, 45652, 45653, 45654, 45655, 45657, 45658, 45659, 45661, 45662, 45663, 45665, 45666, 45667, 45668, 45669, 45670, 45671, 45674, 45675, 45676, 45677, 45678, 45679, 45680, 45681, 45682, 45683, 45686, 45687, 45688, 45689, 45690, 45691, 45693, 45694, 45695, 45696, 45697, 45698, 45699, 45702, 45703, 45704, 45706, 45707, 45708, 45709, 45710, null, null, null, null, null, null, 45711, 45714, 45715, 45717, 45718, 45719, 45723, 45724, 45725, 45726, 45727, 45730, 45732, 45735, 45736, 45737, 45739, 45741, 45742, 45743, 45745, 45746, 45747, 45749, 45750, 45751, null, null, null, null, null, null, 45752, 45753, 45754, 45755, 45756, 45757, 45758, 45759, 45760, 45761, 45762, 45763, 45764, 45765, 45766, 45767, 45770, 45771, 45773, 45774, 45775, 45777, 45779, 45780, 45781, 45782, 45783, 45786, 45788, 45790, 45791, 45792, 45793, 45795, 45799, 45801, 45802, 45808, 45809, 45810, 45814, 45820, 45821, 45822, 45826, 45827, 45829, 45830, 45831, 45833, 45834, 45835, 45836, 45837, 45838, 45839, 45842, 45846, 45847, 45848, 45849, 45850, 45851, 45853, 45854, 45855, 45856, 45857, 45858, 45859, 45860, 45861, 45862, 45863, 45864, 45865, 45866, 45867, 45868, 45869, 45870, 45871, 45872, 45873, 45874, 45875, 45876, 45877, 45878, 45879, 45880, 45881, 45882, 45883, 45884, 45885, 45886, 45887, 45888, 45889, 45890, 45891, 45892, 45893, 45894, 45895, 45896, 45897, 45898, 45899, 45900, 45901, 45902, 45903, 45904, 45905, 45906, 45907, 45911, 45913, 45914, 45917, 45920, 45921, 45922, 45923, 45926, 45928, 45930, 45932, 45933, 45935, 45938, 45939, 45941, 45942, 45943, 45945, 45946, 45947, 45948, 45949, 45950, 45951, 45954, 45958, 45959, 45960, 45961, 45962, 45963, 45965, null, null, null, null, null, null, 45966, 45967, 45969, 45970, 45971, 45973, 45974, 45975, 45976, 45977, 45978, 45979, 45980, 45981, 45982, 45983, 45986, 45987, 45988, 45989, 45990, 45991, 45993, 45994, 45995, 45997, null, null, null, null, null, null, 45998, 45999, 46e3, 46001, 46002, 46003, 46004, 46005, 46006, 46007, 46008, 46009, 46010, 46011, 46012, 46013, 46014, 46015, 46016, 46017, 46018, 46019, 46022, 46023, 46025, 46026, 46029, 46031, 46033, 46034, 46035, 46038, 46040, 46042, 46044, 46046, 46047, 46049, 46050, 46051, 46053, 46054, 46055, 46057, 46058, 46059, 46060, 46061, 46062, 46063, 46064, 46065, 46066, 46067, 46068, 46069, 46070, 46071, 46072, 46073, 46074, 46075, 46077, 46078, 46079, 46080, 46081, 46082, 46083, 46084, 46085, 46086, 46087, 46088, 46089, 46090, 46091, 46092, 46093, 46094, 46095, 46097, 46098, 46099, 46100, 46101, 46102, 46103, 46105, 46106, 46107, 46109, 46110, 46111, 46113, 46114, 46115, 46116, 46117, 46118, 46119, 46122, 46124, 46125, 46126, 46127, 46128, 46129, 46130, 46131, 46133, 46134, 46135, 46136, 46137, 46138, 46139, 46140, 46141, 46142, 46143, 46144, 46145, 46146, 46147, 46148, 46149, 46150, 46151, 46152, 46153, 46154, 46155, 46156, 46157, 46158, 46159, 46162, 46163, 46165, 46166, 46167, 46169, 46170, 46171, 46172, 46173, 46174, 46175, 46178, 46180, 46182, null, null, null, null, null, null, 46183, 46184, 46185, 46186, 46187, 46189, 46190, 46191, 46192, 46193, 46194, 46195, 46196, 46197, 46198, 46199, 46200, 46201, 46202, 46203, 46204, 46205, 46206, 46207, 46209, 46210, null, null, null, null, null, null, 46211, 46212, 46213, 46214, 46215, 46217, 46218, 46219, 46220, 46221, 46222, 46223, 46224, 46225, 46226, 46227, 46228, 46229, 46230, 46231, 46232, 46233, 46234, 46235, 46236, 46238, 46239, 46240, 46241, 46242, 46243, 46245, 46246, 46247, 46249, 46250, 46251, 46253, 46254, 46255, 46256, 46257, 46258, 46259, 46260, 46262, 46264, 46266, 46267, 46268, 46269, 46270, 46271, 46273, 46274, 46275, 46277, 46278, 46279, 46281, 46282, 46283, 46284, 46285, 46286, 46287, 46289, 46290, 46291, 46292, 46294, 46295, 46296, 46297, 46298, 46299, 46302, 46303, 46305, 46306, 46309, 46311, 46312, 46313, 46314, 46315, 46318, 46320, 46322, 46323, 46324, 46325, 46326, 46327, 46329, 46330, 46331, 46332, 46333, 46334, 46335, 46336, 46337, 46338, 46339, 46340, 46341, 46342, 46343, 46344, 46345, 46346, 46347, 46348, 46349, 46350, 46351, 46352, 46353, 46354, 46355, 46358, 46359, 46361, 46362, 46365, 46366, 46367, 46368, 46369, 46370, 46371, 46374, 46379, 46380, 46381, 46382, 46383, 46386, 46387, 46389, 46390, 46391, 46393, 46394, 46395, 46396, 46397, 46398, 46399, 46402, 46406, null, null, null, null, null, null, 46407, 46408, 46409, 46410, 46414, 46415, 46417, 46418, 46419, 46421, 46422, 46423, 46424, 46425, 46426, 46427, 46430, 46434, 46435, 46436, 46437, 46438, 46439, 46440, 46441, 46442, null, null, null, null, null, null, 46443, 46444, 46445, 46446, 46447, 46448, 46449, 46450, 46451, 46452, 46453, 46454, 46455, 46456, 46457, 46458, 46459, 46460, 46461, 46462, 46463, 46464, 46465, 46466, 46467, 46468, 46469, 46470, 46471, 46472, 46473, 46474, 46475, 46476, 46477, 46478, 46479, 46480, 46481, 46482, 46483, 46484, 46485, 46486, 46487, 46488, 46489, 46490, 46491, 46492, 46493, 46494, 46495, 46498, 46499, 46501, 46502, 46503, 46505, 46508, 46509, 46510, 46511, 46514, 46518, 46519, 46520, 46521, 46522, 46526, 46527, 46529, 46530, 46531, 46533, 46534, 46535, 46536, 46537, 46538, 46539, 46542, 46546, 46547, 46548, 46549, 46550, 46551, 46553, 46554, 46555, 46556, 46557, 46558, 46559, 46560, 46561, 46562, 46563, 46564, 46565, 46566, 46567, 46568, 46569, 46570, 46571, 46573, 46574, 46575, 46576, 46577, 46578, 46579, 46580, 46581, 46582, 46583, 46584, 46585, 46586, 46587, 46588, 46589, 46590, 46591, 46592, 46593, 46594, 46595, 46596, 46597, 46598, 46599, 46600, 46601, 46602, 46603, 46604, 46605, 46606, 46607, 46610, 46611, 46613, 46614, 46615, 46617, 46618, 46619, 46620, 46621, null, null, null, null, null, null, 46622, 46623, 46624, 46625, 46626, 46627, 46628, 46630, 46631, 46632, 46633, 46634, 46635, 46637, 46638, 46639, 46640, 46641, 46642, 46643, 46645, 46646, 46647, 46648, 46649, 46650, null, null, null, null, null, null, 46651, 46652, 46653, 46654, 46655, 46656, 46657, 46658, 46659, 46660, 46661, 46662, 46663, 46665, 46666, 46667, 46668, 46669, 46670, 46671, 46672, 46673, 46674, 46675, 46676, 46677, 46678, 46679, 46680, 46681, 46682, 46683, 46684, 46685, 46686, 46687, 46688, 46689, 46690, 46691, 46693, 46694, 46695, 46697, 46698, 46699, 46700, 46701, 46702, 46703, 46704, 46705, 46706, 46707, 46708, 46709, 46710, 46711, 46712, 46713, 46714, 46715, 46716, 46717, 46718, 46719, 46720, 46721, 46722, 46723, 46724, 46725, 46726, 46727, 46728, 46729, 46730, 46731, 46732, 46733, 46734, 46735, 46736, 46737, 46738, 46739, 46740, 46741, 46742, 46743, 46744, 46745, 46746, 46747, 46750, 46751, 46753, 46754, 46755, 46757, 46758, 46759, 46760, 46761, 46762, 46765, 46766, 46767, 46768, 46770, 46771, 46772, 46773, 46774, 46775, 46776, 46777, 46778, 46779, 46780, 46781, 46782, 46783, 46784, 46785, 46786, 46787, 46788, 46789, 46790, 46791, 46792, 46793, 46794, 46795, 46796, 46797, 46798, 46799, 46800, 46801, 46802, 46803, 46805, 46806, 46807, 46808, 46809, 46810, 46811, 46812, 46813, null, null, null, null, null, null, 46814, 46815, 46816, 46817, 46818, 46819, 46820, 46821, 46822, 46823, 46824, 46825, 46826, 46827, 46828, 46829, 46830, 46831, 46833, 46834, 46835, 46837, 46838, 46839, 46841, 46842, null, null, null, null, null, null, 46843, 46844, 46845, 46846, 46847, 46850, 46851, 46852, 46854, 46855, 46856, 46857, 46858, 46859, 46860, 46861, 46862, 46863, 46864, 46865, 46866, 46867, 46868, 46869, 46870, 46871, 46872, 46873, 46874, 46875, 46876, 46877, 46878, 46879, 46880, 46881, 46882, 46883, 46884, 46885, 46886, 46887, 46890, 46891, 46893, 46894, 46897, 46898, 46899, 46900, 46901, 46902, 46903, 46906, 46908, 46909, 46910, 46911, 46912, 46913, 46914, 46915, 46917, 46918, 46919, 46921, 46922, 46923, 46925, 46926, 46927, 46928, 46929, 46930, 46931, 46934, 46935, 46936, 46937, 46938, 46939, 46940, 46941, 46942, 46943, 46945, 46946, 46947, 46949, 46950, 46951, 46953, 46954, 46955, 46956, 46957, 46958, 46959, 46962, 46964, 46966, 46967, 46968, 46969, 46970, 46971, 46974, 46975, 46977, 46978, 46979, 46981, 46982, 46983, 46984, 46985, 46986, 46987, 46990, 46995, 46996, 46997, 47002, 47003, 47005, 47006, 47007, 47009, 47010, 47011, 47012, 47013, 47014, 47015, 47018, 47022, 47023, 47024, 47025, 47026, 47027, 47030, 47031, 47033, 47034, 47035, 47036, 47037, 47038, 47039, 47040, 47041, null, null, null, null, null, null, 47042, 47043, 47044, 47045, 47046, 47048, 47050, 47051, 47052, 47053, 47054, 47055, 47056, 47057, 47058, 47059, 47060, 47061, 47062, 47063, 47064, 47065, 47066, 47067, 47068, 47069, null, null, null, null, null, null, 47070, 47071, 47072, 47073, 47074, 47075, 47076, 47077, 47078, 47079, 47080, 47081, 47082, 47083, 47086, 47087, 47089, 47090, 47091, 47093, 47094, 47095, 47096, 47097, 47098, 47099, 47102, 47106, 47107, 47108, 47109, 47110, 47114, 47115, 47117, 47118, 47119, 47121, 47122, 47123, 47124, 47125, 47126, 47127, 47130, 47132, 47134, 47135, 47136, 47137, 47138, 47139, 47142, 47143, 47145, 47146, 47147, 47149, 47150, 47151, 47152, 47153, 47154, 47155, 47158, 47162, 47163, 47164, 47165, 47166, 47167, 47169, 47170, 47171, 47173, 47174, 47175, 47176, 47177, 47178, 47179, 47180, 47181, 47182, 47183, 47184, 47186, 47188, 47189, 47190, 47191, 47192, 47193, 47194, 47195, 47198, 47199, 47201, 47202, 47203, 47205, 47206, 47207, 47208, 47209, 47210, 47211, 47214, 47216, 47218, 47219, 47220, 47221, 47222, 47223, 47225, 47226, 47227, 47229, 47230, 47231, 47232, 47233, 47234, 47235, 47236, 47237, 47238, 47239, 47240, 47241, 47242, 47243, 47244, 47246, 47247, 47248, 47249, 47250, 47251, 47252, 47253, 47254, 47255, 47256, 47257, 47258, 47259, 47260, 47261, 47262, 47263, null, null, null, null, null, null, 47264, 47265, 47266, 47267, 47268, 47269, 47270, 47271, 47273, 47274, 47275, 47276, 47277, 47278, 47279, 47281, 47282, 47283, 47285, 47286, 47287, 47289, 47290, 47291, 47292, 47293, null, null, null, null, null, null, 47294, 47295, 47298, 47300, 47302, 47303, 47304, 47305, 47306, 47307, 47309, 47310, 47311, 47313, 47314, 47315, 47317, 47318, 47319, 47320, 47321, 47322, 47323, 47324, 47326, 47328, 47330, 47331, 47332, 47333, 47334, 47335, 47338, 47339, 47341, 47342, 47343, 47345, 47346, 47347, 47348, 47349, 47350, 47351, 47354, 47356, 47358, 47359, 47360, 47361, 47362, 47363, 47365, 47366, 47367, 47368, 47369, 47370, 47371, 47372, 47373, 47374, 47375, 47376, 47377, 47378, 47379, 47380, 47381, 47382, 47383, 47385, 47386, 47387, 47388, 47389, 47390, 47391, 47393, 47394, 47395, 47396, 47397, 47398, 47399, 47400, 47401, 47402, 47403, 47404, 47405, 47406, 47407, 47408, 47409, 47410, 47411, 47412, 47413, 47414, 47415, 47416, 47417, 47418, 47419, 47422, 47423, 47425, 47426, 47427, 47429, 47430, 47431, 47432, 47433, 47434, 47435, 47437, 47438, 47440, 47442, 47443, 47444, 47445, 47446, 47447, 47450, 47451, 47453, 47454, 47455, 47457, 47458, 47459, 47460, 47461, 47462, 47463, 47466, 47468, 47470, 47471, 47472, 47473, 47474, 47475, 47478, 47479, 47481, 47482, 47483, 47485, null, null, null, null, null, null, 47486, 47487, 47488, 47489, 47490, 47491, 47494, 47496, 47499, 47500, 47503, 47504, 47505, 47506, 47507, 47508, 47509, 47510, 47511, 47512, 47513, 47514, 47515, 47516, 47517, 47518, null, null, null, null, null, null, 47519, 47520, 47521, 47522, 47523, 47524, 47525, 47526, 47527, 47528, 47529, 47530, 47531, 47534, 47535, 47537, 47538, 47539, 47541, 47542, 47543, 47544, 47545, 47546, 47547, 47550, 47552, 47554, 47555, 47556, 47557, 47558, 47559, 47562, 47563, 47565, 47571, 47572, 47573, 47574, 47575, 47578, 47580, 47583, 47584, 47586, 47590, 47591, 47593, 47594, 47595, 47597, 47598, 47599, 47600, 47601, 47602, 47603, 47606, 47611, 47612, 47613, 47614, 47615, 47618, 47619, 47620, 47621, 47622, 47623, 47625, 47626, 47627, 47628, 47629, 47630, 47631, 47632, 47633, 47634, 47635, 47636, 47638, 47639, 47640, 47641, 47642, 47643, 47644, 47645, 47646, 47647, 47648, 47649, 47650, 47651, 47652, 47653, 47654, 47655, 47656, 47657, 47658, 47659, 47660, 47661, 47662, 47663, 47664, 47665, 47666, 47667, 47668, 47669, 47670, 47671, 47674, 47675, 47677, 47678, 47679, 47681, 47683, 47684, 47685, 47686, 47687, 47690, 47692, 47695, 47696, 47697, 47698, 47702, 47703, 47705, 47706, 47707, 47709, 47710, 47711, 47712, 47713, 47714, 47715, 47718, 47722, 47723, 47724, 47725, 47726, 47727, null, null, null, null, null, null, 47730, 47731, 47733, 47734, 47735, 47737, 47738, 47739, 47740, 47741, 47742, 47743, 47744, 47745, 47746, 47750, 47752, 47753, 47754, 47755, 47757, 47758, 47759, 47760, 47761, 47762, null, null, null, null, null, null, 47763, 47764, 47765, 47766, 47767, 47768, 47769, 47770, 47771, 47772, 47773, 47774, 47775, 47776, 47777, 47778, 47779, 47780, 47781, 47782, 47783, 47786, 47789, 47790, 47791, 47793, 47795, 47796, 47797, 47798, 47799, 47802, 47804, 47806, 47807, 47808, 47809, 47810, 47811, 47813, 47814, 47815, 47817, 47818, 47819, 47820, 47821, 47822, 47823, 47824, 47825, 47826, 47827, 47828, 47829, 47830, 47831, 47834, 47835, 47836, 47837, 47838, 47839, 47840, 47841, 47842, 47843, 47844, 47845, 47846, 47847, 47848, 47849, 47850, 47851, 47852, 47853, 47854, 47855, 47856, 47857, 47858, 47859, 47860, 47861, 47862, 47863, 47864, 47865, 47866, 47867, 47869, 47870, 47871, 47873, 47874, 47875, 47877, 47878, 47879, 47880, 47881, 47882, 47883, 47884, 47886, 47888, 47890, 47891, 47892, 47893, 47894, 47895, 47897, 47898, 47899, 47901, 47902, 47903, 47905, 47906, 47907, 47908, 47909, 47910, 47911, 47912, 47914, 47916, 47917, 47918, 47919, 47920, 47921, 47922, 47923, 47927, 47929, 47930, 47935, 47936, 47937, 47938, 47939, 47942, 47944, 47946, 47947, 47948, 47950, 47953, 47954, null, null, null, null, null, null, 47955, 47957, 47958, 47959, 47961, 47962, 47963, 47964, 47965, 47966, 47967, 47968, 47970, 47972, 47973, 47974, 47975, 47976, 47977, 47978, 47979, 47981, 47982, 47983, 47984, 47985, null, null, null, null, null, null, 47986, 47987, 47988, 47989, 47990, 47991, 47992, 47993, 47994, 47995, 47996, 47997, 47998, 47999, 48e3, 48001, 48002, 48003, 48004, 48005, 48006, 48007, 48009, 48010, 48011, 48013, 48014, 48015, 48017, 48018, 48019, 48020, 48021, 48022, 48023, 48024, 48025, 48026, 48027, 48028, 48029, 48030, 48031, 48032, 48033, 48034, 48035, 48037, 48038, 48039, 48041, 48042, 48043, 48045, 48046, 48047, 48048, 48049, 48050, 48051, 48053, 48054, 48056, 48057, 48058, 48059, 48060, 48061, 48062, 48063, 48065, 48066, 48067, 48069, 48070, 48071, 48073, 48074, 48075, 48076, 48077, 48078, 48079, 48081, 48082, 48084, 48085, 48086, 48087, 48088, 48089, 48090, 48091, 48092, 48093, 48094, 48095, 48096, 48097, 48098, 48099, 48100, 48101, 48102, 48103, 48104, 48105, 48106, 48107, 48108, 48109, 48110, 48111, 48112, 48113, 48114, 48115, 48116, 48117, 48118, 48119, 48122, 48123, 48125, 48126, 48129, 48131, 48132, 48133, 48134, 48135, 48138, 48142, 48144, 48146, 48147, 48153, 48154, 48160, 48161, 48162, 48163, 48166, 48168, 48170, 48171, 48172, 48174, 48175, 48178, 48179, 48181, null, null, null, null, null, null, 48182, 48183, 48185, 48186, 48187, 48188, 48189, 48190, 48191, 48194, 48198, 48199, 48200, 48202, 48203, 48206, 48207, 48209, 48210, 48211, 48212, 48213, 48214, 48215, 48216, 48217, null, null, null, null, null, null, 48218, 48219, 48220, 48222, 48223, 48224, 48225, 48226, 48227, 48228, 48229, 48230, 48231, 48232, 48233, 48234, 48235, 48236, 48237, 48238, 48239, 48240, 48241, 48242, 48243, 48244, 48245, 48246, 48247, 48248, 48249, 48250, 48251, 48252, 48253, 48254, 48255, 48256, 48257, 48258, 48259, 48262, 48263, 48265, 48266, 48269, 48271, 48272, 48273, 48274, 48275, 48278, 48280, 48283, 48284, 48285, 48286, 48287, 48290, 48291, 48293, 48294, 48297, 48298, 48299, 48300, 48301, 48302, 48303, 48306, 48310, 48311, 48312, 48313, 48314, 48315, 48318, 48319, 48321, 48322, 48323, 48325, 48326, 48327, 48328, 48329, 48330, 48331, 48332, 48334, 48338, 48339, 48340, 48342, 48343, 48345, 48346, 48347, 48349, 48350, 48351, 48352, 48353, 48354, 48355, 48356, 48357, 48358, 48359, 48360, 48361, 48362, 48363, 48364, 48365, 48366, 48367, 48368, 48369, 48370, 48371, 48375, 48377, 48378, 48379, 48381, 48382, 48383, 48384, 48385, 48386, 48387, 48390, 48392, 48394, 48395, 48396, 48397, 48398, 48399, 48401, 48402, 48403, 48405, 48406, 48407, 48408, 48409, 48410, 48411, 48412, 48413, null, null, null, null, null, null, 48414, 48415, 48416, 48417, 48418, 48419, 48421, 48422, 48423, 48424, 48425, 48426, 48427, 48429, 48430, 48431, 48432, 48433, 48434, 48435, 48436, 48437, 48438, 48439, 48440, 48441, null, null, null, null, null, null, 48442, 48443, 48444, 48445, 48446, 48447, 48449, 48450, 48451, 48452, 48453, 48454, 48455, 48458, 48459, 48461, 48462, 48463, 48465, 48466, 48467, 48468, 48469, 48470, 48471, 48474, 48475, 48476, 48477, 48478, 48479, 48480, 48481, 48482, 48483, 48485, 48486, 48487, 48489, 48490, 48491, 48492, 48493, 48494, 48495, 48496, 48497, 48498, 48499, 48500, 48501, 48502, 48503, 48504, 48505, 48506, 48507, 48508, 48509, 48510, 48511, 48514, 48515, 48517, 48518, 48523, 48524, 48525, 48526, 48527, 48530, 48532, 48534, 48535, 48536, 48539, 48541, 48542, 48543, 48544, 48545, 48546, 48547, 48549, 48550, 48551, 48552, 48553, 48554, 48555, 48556, 48557, 48558, 48559, 48561, 48562, 48563, 48564, 48565, 48566, 48567, 48569, 48570, 48571, 48572, 48573, 48574, 48575, 48576, 48577, 48578, 48579, 48580, 48581, 48582, 48583, 48584, 48585, 48586, 48587, 48588, 48589, 48590, 48591, 48592, 48593, 48594, 48595, 48598, 48599, 48601, 48602, 48603, 48605, 48606, 48607, 48608, 48609, 48610, 48611, 48612, 48613, 48614, 48615, 48616, 48618, 48619, 48620, 48621, 48622, 48623, 48625, null, null, null, null, null, null, 48626, 48627, 48629, 48630, 48631, 48633, 48634, 48635, 48636, 48637, 48638, 48639, 48641, 48642, 48644, 48646, 48647, 48648, 48649, 48650, 48651, 48654, 48655, 48657, 48658, 48659, null, null, null, null, null, null, 48661, 48662, 48663, 48664, 48665, 48666, 48667, 48670, 48672, 48673, 48674, 48675, 48676, 48677, 48678, 48679, 48680, 48681, 48682, 48683, 48684, 48685, 48686, 48687, 48688, 48689, 48690, 48691, 48692, 48693, 48694, 48695, 48696, 48697, 48698, 48699, 48700, 48701, 48702, 48703, 48704, 48705, 48706, 48707, 48710, 48711, 48713, 48714, 48715, 48717, 48719, 48720, 48721, 48722, 48723, 48726, 48728, 48732, 48733, 48734, 48735, 48738, 48739, 48741, 48742, 48743, 48745, 48747, 48748, 48749, 48750, 48751, 48754, 48758, 48759, 48760, 48761, 48762, 48766, 48767, 48769, 48770, 48771, 48773, 48774, 48775, 48776, 48777, 48778, 48779, 48782, 48786, 48787, 48788, 48789, 48790, 48791, 48794, 48795, 48796, 48797, 48798, 48799, 48800, 48801, 48802, 48803, 48804, 48805, 48806, 48807, 48809, 48810, 48811, 48812, 48813, 48814, 48815, 48816, 48817, 48818, 48819, 48820, 48821, 48822, 48823, 48824, 48825, 48826, 48827, 48828, 48829, 48830, 48831, 48832, 48833, 48834, 48835, 48836, 48837, 48838, 48839, 48840, 48841, 48842, 48843, 48844, 48845, 48846, 48847, 48850, 48851, null, null, null, null, null, null, 48853, 48854, 48857, 48858, 48859, 48860, 48861, 48862, 48863, 48865, 48866, 48870, 48871, 48872, 48873, 48874, 48875, 48877, 48878, 48879, 48880, 48881, 48882, 48883, 48884, 48885, null, null, null, null, null, null, 48886, 48887, 48888, 48889, 48890, 48891, 48892, 48893, 48894, 48895, 48896, 48898, 48899, 48900, 48901, 48902, 48903, 48906, 48907, 48908, 48909, 48910, 48911, 48912, 48913, 48914, 48915, 48916, 48917, 48918, 48919, 48922, 48926, 48927, 48928, 48929, 48930, 48931, 48932, 48933, 48934, 48935, 48936, 48937, 48938, 48939, 48940, 48941, 48942, 48943, 48944, 48945, 48946, 48947, 48948, 48949, 48950, 48951, 48952, 48953, 48954, 48955, 48956, 48957, 48958, 48959, 48962, 48963, 48965, 48966, 48967, 48969, 48970, 48971, 48972, 48973, 48974, 48975, 48978, 48979, 48980, 48982, 48983, 48984, 48985, 48986, 48987, 48988, 48989, 48990, 48991, 48992, 48993, 48994, 48995, 48996, 48997, 48998, 48999, 49e3, 49001, 49002, 49003, 49004, 49005, 49006, 49007, 49008, 49009, 49010, 49011, 49012, 49013, 49014, 49015, 49016, 49017, 49018, 49019, 49020, 49021, 49022, 49023, 49024, 49025, 49026, 49027, 49028, 49029, 49030, 49031, 49032, 49033, 49034, 49035, 49036, 49037, 49038, 49039, 49040, 49041, 49042, 49043, 49045, 49046, 49047, 49048, 49049, 49050, 49051, 49052, 49053, null, null, null, null, null, null, 49054, 49055, 49056, 49057, 49058, 49059, 49060, 49061, 49062, 49063, 49064, 49065, 49066, 49067, 49068, 49069, 49070, 49071, 49073, 49074, 49075, 49076, 49077, 49078, 49079, 49080, null, null, null, null, null, null, 49081, 49082, 49083, 49084, 49085, 49086, 49087, 49088, 49089, 49090, 49091, 49092, 49094, 49095, 49096, 49097, 49098, 49099, 49102, 49103, 49105, 49106, 49107, 49109, 49110, 49111, 49112, 49113, 49114, 49115, 49117, 49118, 49120, 49122, 49123, 49124, 49125, 49126, 49127, 49128, 49129, 49130, 49131, 49132, 49133, 49134, 49135, 49136, 49137, 49138, 49139, 49140, 49141, 49142, 49143, 49144, 49145, 49146, 49147, 49148, 49149, 49150, 49151, 49152, 49153, 49154, 49155, 49156, 49157, 49158, 49159, 49160, 49161, 49162, 49163, 49164, 49165, 49166, 49167, 49168, 49169, 49170, 49171, 49172, 49173, 49174, 49175, 49176, 49177, 49178, 49179, 49180, 49181, 49182, 49183, 49184, 49185, 49186, 49187, 49188, 49189, 49190, 49191, 49192, 49193, 49194, 49195, 49196, 49197, 49198, 49199, 49200, 49201, 49202, 49203, 49204, 49205, 49206, 49207, 49208, 49209, 49210, 49211, 49213, 49214, 49215, 49216, 49217, 49218, 49219, 49220, 49221, 49222, 49223, 49224, 49225, 49226, 49227, 49228, 49229, 49230, 49231, 49232, 49234, 49235, 49236, 49237, 49238, 49239, 49241, 49242, 49243, null, null, null, null, null, null, 49245, 49246, 49247, 49249, 49250, 49251, 49252, 49253, 49254, 49255, 49258, 49259, 49260, 49261, 49262, 49263, 49264, 49265, 49266, 49267, 49268, 49269, 49270, 49271, 49272, 49273, null, null, null, null, null, null, 49274, 49275, 49276, 49277, 49278, 49279, 49280, 49281, 49282, 49283, 49284, 49285, 49286, 49287, 49288, 49289, 49290, 49291, 49292, 49293, 49294, 49295, 49298, 49299, 49301, 49302, 49303, 49305, 49306, 49307, 49308, 49309, 49310, 49311, 49314, 49316, 49318, 49319, 49320, 49321, 49322, 49323, 49326, 49329, 49330, 49335, 49336, 49337, 49338, 49339, 49342, 49346, 49347, 49348, 49350, 49351, 49354, 49355, 49357, 49358, 49359, 49361, 49362, 49363, 49364, 49365, 49366, 49367, 49370, 49374, 49375, 49376, 49377, 49378, 49379, 49382, 49383, 49385, 49386, 49387, 49389, 49390, 49391, 49392, 49393, 49394, 49395, 49398, 49400, 49402, 49403, 49404, 49405, 49406, 49407, 49409, 49410, 49411, 49413, 49414, 49415, 49417, 49418, 49419, 49420, 49421, 49422, 49423, 49425, 49426, 49427, 49428, 49430, 49431, 49432, 49433, 49434, 49435, 49441, 49442, 49445, 49448, 49449, 49450, 49451, 49454, 49458, 49459, 49460, 49461, 49463, 49466, 49467, 49469, 49470, 49471, 49473, 49474, 49475, 49476, 49477, 49478, 49479, 49482, 49486, 49487, 49488, 49489, 49490, 49491, 49494, 49495, null, null, null, null, null, null, 49497, 49498, 49499, 49501, 49502, 49503, 49504, 49505, 49506, 49507, 49510, 49514, 49515, 49516, 49517, 49518, 49519, 49521, 49522, 49523, 49525, 49526, 49527, 49529, 49530, 49531, null, null, null, null, null, null, 49532, 49533, 49534, 49535, 49536, 49537, 49538, 49539, 49540, 49542, 49543, 49544, 49545, 49546, 49547, 49551, 49553, 49554, 49555, 49557, 49559, 49560, 49561, 49562, 49563, 49566, 49568, 49570, 49571, 49572, 49574, 49575, 49578, 49579, 49581, 49582, 49583, 49585, 49586, 49587, 49588, 49589, 49590, 49591, 49592, 49593, 49594, 49595, 49596, 49598, 49599, 49600, 49601, 49602, 49603, 49605, 49606, 49607, 49609, 49610, 49611, 49613, 49614, 49615, 49616, 49617, 49618, 49619, 49621, 49622, 49625, 49626, 49627, 49628, 49629, 49630, 49631, 49633, 49634, 49635, 49637, 49638, 49639, 49641, 49642, 49643, 49644, 49645, 49646, 49647, 49650, 49652, 49653, 49654, 49655, 49656, 49657, 49658, 49659, 49662, 49663, 49665, 49666, 49667, 49669, 49670, 49671, 49672, 49673, 49674, 49675, 49678, 49680, 49682, 49683, 49684, 49685, 49686, 49687, 49690, 49691, 49693, 49694, 49697, 49698, 49699, 49700, 49701, 49702, 49703, 49706, 49708, 49710, 49712, 49715, 49717, 49718, 49719, 49720, 49721, 49722, 49723, 49724, 49725, 49726, 49727, 49728, 49729, 49730, 49731, 49732, 49733, null, null, null, null, null, null, 49734, 49735, 49737, 49738, 49739, 49740, 49741, 49742, 49743, 49746, 49747, 49749, 49750, 49751, 49753, 49754, 49755, 49756, 49757, 49758, 49759, 49761, 49762, 49763, 49764, 49766, null, null, null, null, null, null, 49767, 49768, 49769, 49770, 49771, 49774, 49775, 49777, 49778, 49779, 49781, 49782, 49783, 49784, 49785, 49786, 49787, 49790, 49792, 49794, 49795, 49796, 49797, 49798, 49799, 49802, 49803, 49804, 49805, 49806, 49807, 49809, 49810, 49811, 49812, 49813, 49814, 49815, 49817, 49818, 49820, 49822, 49823, 49824, 49825, 49826, 49827, 49830, 49831, 49833, 49834, 49835, 49838, 49839, 49840, 49841, 49842, 49843, 49846, 49848, 49850, 49851, 49852, 49853, 49854, 49855, 49856, 49857, 49858, 49859, 49860, 49861, 49862, 49863, 49864, 49865, 49866, 49867, 49868, 49869, 49870, 49871, 49872, 49873, 49874, 49875, 49876, 49877, 49878, 49879, 49880, 49881, 49882, 49883, 49886, 49887, 49889, 49890, 49893, 49894, 49895, 49896, 49897, 49898, 49902, 49904, 49906, 49907, 49908, 49909, 49911, 49914, 49917, 49918, 49919, 49921, 49922, 49923, 49924, 49925, 49926, 49927, 49930, 49931, 49934, 49935, 49936, 49937, 49938, 49942, 49943, 49945, 49946, 49947, 49949, 49950, 49951, 49952, 49953, 49954, 49955, 49958, 49959, 49962, 49963, 49964, 49965, 49966, 49967, 49968, 49969, 49970, null, null, null, null, null, null, 49971, 49972, 49973, 49974, 49975, 49976, 49977, 49978, 49979, 49980, 49981, 49982, 49983, 49984, 49985, 49986, 49987, 49988, 49990, 49991, 49992, 49993, 49994, 49995, 49996, 49997, null, null, null, null, null, null, 49998, 49999, 5e4, 50001, 50002, 50003, 50004, 50005, 50006, 50007, 50008, 50009, 50010, 50011, 50012, 50013, 50014, 50015, 50016, 50017, 50018, 50019, 50020, 50021, 50022, 50023, 50026, 50027, 50029, 50030, 50031, 50033, 50035, 50036, 50037, 50038, 50039, 50042, 50043, 50046, 50047, 50048, 50049, 50050, 50051, 50053, 50054, 50055, 50057, 50058, 50059, 50061, 50062, 50063, 50064, 50065, 50066, 50067, 50068, 50069, 50070, 50071, 50072, 50073, 50074, 50075, 50076, 50077, 50078, 50079, 50080, 50081, 50082, 50083, 50084, 50085, 50086, 50087, 50088, 50089, 50090, 50091, 50092, 50093, 50094, 50095, 50096, 50097, 50098, 50099, 50100, 50101, 50102, 50103, 50104, 50105, 50106, 50107, 50108, 50109, 50110, 50111, 50113, 50114, 50115, 50116, 50117, 50118, 50119, 50120, 50121, 50122, 50123, 50124, 50125, 50126, 50127, 50128, 50129, 50130, 50131, 50132, 50133, 50134, 50135, 50138, 50139, 50141, 50142, 50145, 50147, 50148, 50149, 50150, 50151, 50154, 50155, 50156, 50158, 50159, 50160, 50161, 50162, 50163, 50166, 50167, 50169, 50170, 50171, 50172, 50173, 50174, null, null, null, null, null, null, 50175, 50176, 50177, 50178, 50179, 50180, 50181, 50182, 50183, 50185, 50186, 50187, 50188, 50189, 50190, 50191, 50193, 50194, 50195, 50196, 50197, 50198, 50199, 50200, 50201, 50202, null, null, null, null, null, null, 50203, 50204, 50205, 50206, 50207, 50208, 50209, 50210, 50211, 50213, 50214, 50215, 50216, 50217, 50218, 50219, 50221, 50222, 50223, 50225, 50226, 50227, 50229, 50230, 50231, 50232, 50233, 50234, 50235, 50238, 50239, 50240, 50241, 50242, 50243, 50244, 50245, 50246, 50247, 50249, 50250, 50251, 50252, 50253, 50254, 50255, 50256, 50257, 50258, 50259, 50260, 50261, 50262, 50263, 50264, 50265, 50266, 50267, 50268, 50269, 50270, 50271, 50272, 50273, 50274, 50275, 50278, 50279, 50281, 50282, 50283, 50285, 50286, 50287, 50288, 50289, 50290, 50291, 50294, 50295, 50296, 50298, 50299, 50300, 50301, 50302, 50303, 50305, 50306, 50307, 50308, 50309, 50310, 50311, 50312, 50313, 50314, 50315, 50316, 50317, 50318, 50319, 50320, 50321, 50322, 50323, 50325, 50326, 50327, 50328, 50329, 50330, 50331, 50333, 50334, 50335, 50336, 50337, 50338, 50339, 50340, 50341, 50342, 50343, 50344, 50345, 50346, 50347, 50348, 50349, 50350, 50351, 50352, 50353, 50354, 50355, 50356, 50357, 50358, 50359, 50361, 50362, 50363, 50365, 50366, 50367, 50368, 50369, 50370, 50371, 50372, 50373, null, null, null, null, null, null, 50374, 50375, 50376, 50377, 50378, 50379, 50380, 50381, 50382, 50383, 50384, 50385, 50386, 50387, 50388, 50389, 50390, 50391, 50392, 50393, 50394, 50395, 50396, 50397, 50398, 50399, null, null, null, null, null, null, 50400, 50401, 50402, 50403, 50404, 50405, 50406, 50407, 50408, 50410, 50411, 50412, 50413, 50414, 50415, 50418, 50419, 50421, 50422, 50423, 50425, 50427, 50428, 50429, 50430, 50434, 50435, 50436, 50437, 50438, 50439, 50440, 50441, 50442, 50443, 50445, 50446, 50447, 50449, 50450, 50451, 50453, 50454, 50455, 50456, 50457, 50458, 50459, 50461, 50462, 50463, 50464, 50465, 50466, 50467, 50468, 50469, 50470, 50471, 50474, 50475, 50477, 50478, 50479, 50481, 50482, 50483, 50484, 50485, 50486, 50487, 50490, 50492, 50494, 50495, 50496, 50497, 50498, 50499, 50502, 50503, 50507, 50511, 50512, 50513, 50514, 50518, 50522, 50523, 50524, 50527, 50530, 50531, 50533, 50534, 50535, 50537, 50538, 50539, 50540, 50541, 50542, 50543, 50546, 50550, 50551, 50552, 50553, 50554, 50555, 50558, 50559, 50561, 50562, 50563, 50565, 50566, 50568, 50569, 50570, 50571, 50574, 50576, 50578, 50579, 50580, 50582, 50585, 50586, 50587, 50589, 50590, 50591, 50593, 50594, 50595, 50596, 50597, 50598, 50599, 50600, 50602, 50603, 50604, 50605, 50606, 50607, 50608, 50609, 50610, 50611, 50614, null, null, null, null, null, null, 50615, 50618, 50623, 50624, 50625, 50626, 50627, 50635, 50637, 50639, 50642, 50643, 50645, 50646, 50647, 50649, 50650, 50651, 50652, 50653, 50654, 50655, 50658, 50660, 50662, 50663, null, null, null, null, null, null, 50664, 50665, 50666, 50667, 50671, 50673, 50674, 50675, 50677, 50680, 50681, 50682, 50683, 50690, 50691, 50692, 50697, 50698, 50699, 50701, 50702, 50703, 50705, 50706, 50707, 50708, 50709, 50710, 50711, 50714, 50717, 50718, 50719, 50720, 50721, 50722, 50723, 50726, 50727, 50729, 50730, 50731, 50735, 50737, 50738, 50742, 50744, 50746, 50748, 50749, 50750, 50751, 50754, 50755, 50757, 50758, 50759, 50761, 50762, 50763, 50764, 50765, 50766, 50767, 50770, 50774, 50775, 50776, 50777, 50778, 50779, 50782, 50783, 50785, 50786, 50787, 50788, 50789, 50790, 50791, 50792, 50793, 50794, 50795, 50797, 50798, 50800, 50802, 50803, 50804, 50805, 50806, 50807, 50810, 50811, 50813, 50814, 50815, 50817, 50818, 50819, 50820, 50821, 50822, 50823, 50826, 50828, 50830, 50831, 50832, 50833, 50834, 50835, 50838, 50839, 50841, 50842, 50843, 50845, 50846, 50847, 50848, 50849, 50850, 50851, 50854, 50856, 50858, 50859, 50860, 50861, 50862, 50863, 50866, 50867, 50869, 50870, 50871, 50875, 50876, 50877, 50878, 50879, 50882, 50884, 50886, 50887, 50888, 50889, 50890, 50891, 50894, null, null, null, null, null, null, 50895, 50897, 50898, 50899, 50901, 50902, 50903, 50904, 50905, 50906, 50907, 50910, 50911, 50914, 50915, 50916, 50917, 50918, 50919, 50922, 50923, 50925, 50926, 50927, 50929, 50930, null, null, null, null, null, null, 50931, 50932, 50933, 50934, 50935, 50938, 50939, 50940, 50942, 50943, 50944, 50945, 50946, 50947, 50950, 50951, 50953, 50954, 50955, 50957, 50958, 50959, 50960, 50961, 50962, 50963, 50966, 50968, 50970, 50971, 50972, 50973, 50974, 50975, 50978, 50979, 50981, 50982, 50983, 50985, 50986, 50987, 50988, 50989, 50990, 50991, 50994, 50996, 50998, 51e3, 51001, 51002, 51003, 51006, 51007, 51009, 51010, 51011, 51013, 51014, 51015, 51016, 51017, 51019, 51022, 51024, 51033, 51034, 51035, 51037, 51038, 51039, 51041, 51042, 51043, 51044, 51045, 51046, 51047, 51049, 51050, 51052, 51053, 51054, 51055, 51056, 51057, 51058, 51059, 51062, 51063, 51065, 51066, 51067, 51071, 51072, 51073, 51074, 51078, 51083, 51084, 51085, 51087, 51090, 51091, 51093, 51097, 51099, 51100, 51101, 51102, 51103, 51106, 51111, 51112, 51113, 51114, 51115, 51118, 51119, 51121, 51122, 51123, 51125, 51126, 51127, 51128, 51129, 51130, 51131, 51134, 51138, 51139, 51140, 51141, 51142, 51143, 51146, 51147, 51149, 51151, 51153, 51154, 51155, 51156, 51157, 51158, 51159, 51161, 51162, 51163, 51164, null, null, null, null, null, null, 51166, 51167, 51168, 51169, 51170, 51171, 51173, 51174, 51175, 51177, 51178, 51179, 51181, 51182, 51183, 51184, 51185, 51186, 51187, 51188, 51189, 51190, 51191, 51192, 51193, 51194, null, null, null, null, null, null, 51195, 51196, 51197, 51198, 51199, 51202, 51203, 51205, 51206, 51207, 51209, 51211, 51212, 51213, 51214, 51215, 51218, 51220, 51223, 51224, 51225, 51226, 51227, 51230, 51231, 51233, 51234, 51235, 51237, 51238, 51239, 51240, 51241, 51242, 51243, 51246, 51248, 51250, 51251, 51252, 51253, 51254, 51255, 51257, 51258, 51259, 51261, 51262, 51263, 51265, 51266, 51267, 51268, 51269, 51270, 51271, 51274, 51275, 51278, 51279, 51280, 51281, 51282, 51283, 51285, 51286, 51287, 51288, 51289, 51290, 51291, 51292, 51293, 51294, 51295, 51296, 51297, 51298, 51299, 51300, 51301, 51302, 51303, 51304, 51305, 51306, 51307, 51308, 51309, 51310, 51311, 51314, 51315, 51317, 51318, 51319, 51321, 51323, 51324, 51325, 51326, 51327, 51330, 51332, 51336, 51337, 51338, 51342, 51343, 51344, 51345, 51346, 51347, 51349, 51350, 51351, 51352, 51353, 51354, 51355, 51356, 51358, 51360, 51362, 51363, 51364, 51365, 51366, 51367, 51369, 51370, 51371, 51372, 51373, 51374, 51375, 51376, 51377, 51378, 51379, 51380, 51381, 51382, 51383, 51384, 51385, 51386, 51387, 51390, 51391, 51392, 51393, null, null, null, null, null, null, 51394, 51395, 51397, 51398, 51399, 51401, 51402, 51403, 51405, 51406, 51407, 51408, 51409, 51410, 51411, 51414, 51416, 51418, 51419, 51420, 51421, 51422, 51423, 51426, 51427, 51429, null, null, null, null, null, null, 51430, 51431, 51432, 51433, 51434, 51435, 51436, 51437, 51438, 51439, 51440, 51441, 51442, 51443, 51444, 51446, 51447, 51448, 51449, 51450, 51451, 51454, 51455, 51457, 51458, 51459, 51463, 51464, 51465, 51466, 51467, 51470, 12288, 12289, 12290, 183, 8229, 8230, 168, 12291, 173, 8213, 8741, 65340, 8764, 8216, 8217, 8220, 8221, 12308, 12309, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 177, 215, 247, 8800, 8804, 8805, 8734, 8756, 176, 8242, 8243, 8451, 8491, 65504, 65505, 65509, 9794, 9792, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 167, 8251, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8594, 8592, 8593, 8595, 8596, 12307, 8810, 8811, 8730, 8765, 8733, 8757, 8747, 8748, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, 8743, 8744, 65506, 51472, 51474, 51475, 51476, 51477, 51478, 51479, 51481, 51482, 51483, 51484, 51485, 51486, 51487, 51488, 51489, 51490, 51491, 51492, 51493, 51494, 51495, 51496, 51497, 51498, 51499, null, null, null, null, null, null, 51501, 51502, 51503, 51504, 51505, 51506, 51507, 51509, 51510, 51511, 51512, 51513, 51514, 51515, 51516, 51517, 51518, 51519, 51520, 51521, 51522, 51523, 51524, 51525, 51526, 51527, null, null, null, null, null, null, 51528, 51529, 51530, 51531, 51532, 51533, 51534, 51535, 51538, 51539, 51541, 51542, 51543, 51545, 51546, 51547, 51548, 51549, 51550, 51551, 51554, 51556, 51557, 51558, 51559, 51560, 51561, 51562, 51563, 51565, 51566, 51567, 8658, 8660, 8704, 8707, 180, 65374, 711, 728, 733, 730, 729, 184, 731, 161, 191, 720, 8750, 8721, 8719, 164, 8457, 8240, 9665, 9664, 9655, 9654, 9828, 9824, 9825, 9829, 9831, 9827, 8857, 9672, 9635, 9680, 9681, 9618, 9636, 9637, 9640, 9639, 9638, 9641, 9832, 9743, 9742, 9756, 9758, 182, 8224, 8225, 8597, 8599, 8601, 8598, 8600, 9837, 9833, 9834, 9836, 12927, 12828, 8470, 13255, 8482, 13250, 13272, 8481, 8364, 174, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 51569, 51570, 51571, 51573, 51574, 51575, 51576, 51577, 51578, 51579, 51581, 51582, 51583, 51584, 51585, 51586, 51587, 51588, 51589, 51590, 51591, 51594, 51595, 51597, 51598, 51599, null, null, null, null, null, null, 51601, 51602, 51603, 51604, 51605, 51606, 51607, 51610, 51612, 51614, 51615, 51616, 51617, 51618, 51619, 51620, 51621, 51622, 51623, 51624, 51625, 51626, 51627, 51628, 51629, 51630, null, null, null, null, null, null, 51631, 51632, 51633, 51634, 51635, 51636, 51637, 51638, 51639, 51640, 51641, 51642, 51643, 51644, 51645, 51646, 51647, 51650, 51651, 51653, 51654, 51657, 51659, 51660, 51661, 51662, 51663, 51666, 51668, 51671, 51672, 51675, 65281, 65282, 65283, 65284, 65285, 65286, 65287, 65288, 65289, 65290, 65291, 65292, 65293, 65294, 65295, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65306, 65307, 65308, 65309, 65310, 65311, 65312, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65339, 65510, 65341, 65342, 65343, 65344, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 65371, 65372, 65373, 65507, 51678, 51679, 51681, 51683, 51685, 51686, 51688, 51689, 51690, 51691, 51694, 51698, 51699, 51700, 51701, 51702, 51703, 51706, 51707, 51709, 51710, 51711, 51713, 51714, 51715, 51716, null, null, null, null, null, null, 51717, 51718, 51719, 51722, 51726, 51727, 51728, 51729, 51730, 51731, 51733, 51734, 51735, 51737, 51738, 51739, 51740, 51741, 51742, 51743, 51744, 51745, 51746, 51747, 51748, 51749, null, null, null, null, null, null, 51750, 51751, 51752, 51754, 51755, 51756, 51757, 51758, 51759, 51760, 51761, 51762, 51763, 51764, 51765, 51766, 51767, 51768, 51769, 51770, 51771, 51772, 51773, 51774, 51775, 51776, 51777, 51778, 51779, 51780, 51781, 51782, 12593, 12594, 12595, 12596, 12597, 12598, 12599, 12600, 12601, 12602, 12603, 12604, 12605, 12606, 12607, 12608, 12609, 12610, 12611, 12612, 12613, 12614, 12615, 12616, 12617, 12618, 12619, 12620, 12621, 12622, 12623, 12624, 12625, 12626, 12627, 12628, 12629, 12630, 12631, 12632, 12633, 12634, 12635, 12636, 12637, 12638, 12639, 12640, 12641, 12642, 12643, 12644, 12645, 12646, 12647, 12648, 12649, 12650, 12651, 12652, 12653, 12654, 12655, 12656, 12657, 12658, 12659, 12660, 12661, 12662, 12663, 12664, 12665, 12666, 12667, 12668, 12669, 12670, 12671, 12672, 12673, 12674, 12675, 12676, 12677, 12678, 12679, 12680, 12681, 12682, 12683, 12684, 12685, 12686, 51783, 51784, 51785, 51786, 51787, 51790, 51791, 51793, 51794, 51795, 51797, 51798, 51799, 51800, 51801, 51802, 51803, 51806, 51810, 51811, 51812, 51813, 51814, 51815, 51817, 51818, null, null, null, null, null, null, 51819, 51820, 51821, 51822, 51823, 51824, 51825, 51826, 51827, 51828, 51829, 51830, 51831, 51832, 51833, 51834, 51835, 51836, 51838, 51839, 51840, 51841, 51842, 51843, 51845, 51846, null, null, null, null, null, null, 51847, 51848, 51849, 51850, 51851, 51852, 51853, 51854, 51855, 51856, 51857, 51858, 51859, 51860, 51861, 51862, 51863, 51865, 51866, 51867, 51868, 51869, 51870, 51871, 51872, 51873, 51874, 51875, 51876, 51877, 51878, 51879, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, null, null, null, null, null, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, null, null, null, null, null, null, null, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, null, null, null, null, null, null, null, null, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, null, null, null, null, null, null, 51880, 51881, 51882, 51883, 51884, 51885, 51886, 51887, 51888, 51889, 51890, 51891, 51892, 51893, 51894, 51895, 51896, 51897, 51898, 51899, 51902, 51903, 51905, 51906, 51907, 51909, null, null, null, null, null, null, 51910, 51911, 51912, 51913, 51914, 51915, 51918, 51920, 51922, 51924, 51925, 51926, 51927, 51930, 51931, 51932, 51933, 51934, 51935, 51937, 51938, 51939, 51940, 51941, 51942, 51943, null, null, null, null, null, null, 51944, 51945, 51946, 51947, 51949, 51950, 51951, 51952, 51953, 51954, 51955, 51957, 51958, 51959, 51960, 51961, 51962, 51963, 51964, 51965, 51966, 51967, 51968, 51969, 51970, 51971, 51972, 51973, 51974, 51975, 51977, 51978, 9472, 9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475, 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512, 9527, 9535, 9501, 9520, 9509, 9528, 9538, 9490, 9489, 9498, 9497, 9494, 9493, 9486, 9485, 9502, 9503, 9505, 9506, 9510, 9511, 9513, 9514, 9517, 9518, 9521, 9522, 9525, 9526, 9529, 9530, 9533, 9534, 9536, 9537, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 51979, 51980, 51981, 51982, 51983, 51985, 51986, 51987, 51989, 51990, 51991, 51993, 51994, 51995, 51996, 51997, 51998, 51999, 52002, 52003, 52004, 52005, 52006, 52007, 52008, 52009, null, null, null, null, null, null, 52010, 52011, 52012, 52013, 52014, 52015, 52016, 52017, 52018, 52019, 52020, 52021, 52022, 52023, 52024, 52025, 52026, 52027, 52028, 52029, 52030, 52031, 52032, 52034, 52035, 52036, null, null, null, null, null, null, 52037, 52038, 52039, 52042, 52043, 52045, 52046, 52047, 52049, 52050, 52051, 52052, 52053, 52054, 52055, 52058, 52059, 52060, 52062, 52063, 52064, 52065, 52066, 52067, 52069, 52070, 52071, 52072, 52073, 52074, 52075, 52076, 13205, 13206, 13207, 8467, 13208, 13252, 13219, 13220, 13221, 13222, 13209, 13210, 13211, 13212, 13213, 13214, 13215, 13216, 13217, 13218, 13258, 13197, 13198, 13199, 13263, 13192, 13193, 13256, 13223, 13224, 13232, 13233, 13234, 13235, 13236, 13237, 13238, 13239, 13240, 13241, 13184, 13185, 13186, 13187, 13188, 13242, 13243, 13244, 13245, 13246, 13247, 13200, 13201, 13202, 13203, 13204, 8486, 13248, 13249, 13194, 13195, 13196, 13270, 13253, 13229, 13230, 13231, 13275, 13225, 13226, 13227, 13228, 13277, 13264, 13267, 13251, 13257, 13276, 13254, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52077, 52078, 52079, 52080, 52081, 52082, 52083, 52084, 52085, 52086, 52087, 52090, 52091, 52092, 52093, 52094, 52095, 52096, 52097, 52098, 52099, 52100, 52101, 52102, 52103, 52104, null, null, null, null, null, null, 52105, 52106, 52107, 52108, 52109, 52110, 52111, 52112, 52113, 52114, 52115, 52116, 52117, 52118, 52119, 52120, 52121, 52122, 52123, 52125, 52126, 52127, 52128, 52129, 52130, 52131, null, null, null, null, null, null, 52132, 52133, 52134, 52135, 52136, 52137, 52138, 52139, 52140, 52141, 52142, 52143, 52144, 52145, 52146, 52147, 52148, 52149, 52150, 52151, 52153, 52154, 52155, 52156, 52157, 52158, 52159, 52160, 52161, 52162, 52163, 52164, 198, 208, 170, 294, null, 306, null, 319, 321, 216, 338, 186, 222, 358, 330, null, 12896, 12897, 12898, 12899, 12900, 12901, 12902, 12903, 12904, 12905, 12906, 12907, 12908, 12909, 12910, 12911, 12912, 12913, 12914, 12915, 12916, 12917, 12918, 12919, 12920, 12921, 12922, 12923, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431, 9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442, 9443, 9444, 9445, 9446, 9447, 9448, 9449, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 189, 8531, 8532, 188, 190, 8539, 8540, 8541, 8542, 52165, 52166, 52167, 52168, 52169, 52170, 52171, 52172, 52173, 52174, 52175, 52176, 52177, 52178, 52179, 52181, 52182, 52183, 52184, 52185, 52186, 52187, 52188, 52189, 52190, 52191, null, null, null, null, null, null, 52192, 52193, 52194, 52195, 52197, 52198, 52200, 52202, 52203, 52204, 52205, 52206, 52207, 52208, 52209, 52210, 52211, 52212, 52213, 52214, 52215, 52216, 52217, 52218, 52219, 52220, null, null, null, null, null, null, 52221, 52222, 52223, 52224, 52225, 52226, 52227, 52228, 52229, 52230, 52231, 52232, 52233, 52234, 52235, 52238, 52239, 52241, 52242, 52243, 52245, 52246, 52247, 52248, 52249, 52250, 52251, 52254, 52255, 52256, 52259, 52260, 230, 273, 240, 295, 305, 307, 312, 320, 322, 248, 339, 223, 254, 359, 331, 329, 12800, 12801, 12802, 12803, 12804, 12805, 12806, 12807, 12808, 12809, 12810, 12811, 12812, 12813, 12814, 12815, 12816, 12817, 12818, 12819, 12820, 12821, 12822, 12823, 12824, 12825, 12826, 12827, 9372, 9373, 9374, 9375, 9376, 9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387, 9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 185, 178, 179, 8308, 8319, 8321, 8322, 8323, 8324, 52261, 52262, 52266, 52267, 52269, 52271, 52273, 52274, 52275, 52276, 52277, 52278, 52279, 52282, 52287, 52288, 52289, 52290, 52291, 52294, 52295, 52297, 52298, 52299, 52301, 52302, null, null, null, null, null, null, 52303, 52304, 52305, 52306, 52307, 52310, 52314, 52315, 52316, 52317, 52318, 52319, 52321, 52322, 52323, 52325, 52327, 52329, 52330, 52331, 52332, 52333, 52334, 52335, 52337, 52338, null, null, null, null, null, null, 52339, 52340, 52342, 52343, 52344, 52345, 52346, 52347, 52348, 52349, 52350, 52351, 52352, 52353, 52354, 52355, 52356, 52357, 52358, 52359, 52360, 52361, 52362, 52363, 52364, 52365, 52366, 52367, 52368, 52369, 52370, 52371, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, null, null, null, null, null, null, null, null, null, null, null, 52372, 52373, 52374, 52375, 52378, 52379, 52381, 52382, 52383, 52385, 52386, 52387, 52388, 52389, 52390, 52391, 52394, 52398, 52399, 52400, 52401, 52402, 52403, 52406, 52407, 52409, null, null, null, null, null, null, 52410, 52411, 52413, 52414, 52415, 52416, 52417, 52418, 52419, 52422, 52424, 52426, 52427, 52428, 52429, 52430, 52431, 52433, 52434, 52435, 52437, 52438, 52439, 52440, 52441, 52442, null, null, null, null, null, null, 52443, 52444, 52445, 52446, 52447, 52448, 52449, 52450, 52451, 52453, 52454, 52455, 52456, 52457, 52458, 52459, 52461, 52462, 52463, 52465, 52466, 52467, 52468, 52469, 52470, 52471, 52472, 52473, 52474, 52475, 52476, 52477, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, null, null, null, null, null, null, null, null, 52478, 52479, 52480, 52482, 52483, 52484, 52485, 52486, 52487, 52490, 52491, 52493, 52494, 52495, 52497, 52498, 52499, 52500, 52501, 52502, 52503, 52506, 52508, 52510, 52511, 52512, null, null, null, null, null, null, 52513, 52514, 52515, 52517, 52518, 52519, 52521, 52522, 52523, 52525, 52526, 52527, 52528, 52529, 52530, 52531, 52532, 52533, 52534, 52535, 52536, 52538, 52539, 52540, 52541, 52542, null, null, null, null, null, null, 52543, 52544, 52545, 52546, 52547, 52548, 52549, 52550, 52551, 52552, 52553, 52554, 52555, 52556, 52557, 52558, 52559, 52560, 52561, 52562, 52563, 52564, 52565, 52566, 52567, 52568, 52569, 52570, 52571, 52573, 52574, 52575, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, null, null, null, null, null, null, null, null, null, null, null, null, null, 52577, 52578, 52579, 52581, 52582, 52583, 52584, 52585, 52586, 52587, 52590, 52592, 52594, 52595, 52596, 52597, 52598, 52599, 52601, 52602, 52603, 52604, 52605, 52606, 52607, 52608, null, null, null, null, null, null, 52609, 52610, 52611, 52612, 52613, 52614, 52615, 52617, 52618, 52619, 52620, 52621, 52622, 52623, 52624, 52625, 52626, 52627, 52630, 52631, 52633, 52634, 52635, 52637, 52638, 52639, null, null, null, null, null, null, 52640, 52641, 52642, 52643, 52646, 52648, 52650, 52651, 52652, 52653, 52654, 52655, 52657, 52658, 52659, 52660, 52661, 52662, 52663, 52664, 52665, 52666, 52667, 52668, 52669, 52670, 52671, 52672, 52673, 52674, 52675, 52677, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52678, 52679, 52680, 52681, 52682, 52683, 52685, 52686, 52687, 52689, 52690, 52691, 52692, 52693, 52694, 52695, 52696, 52697, 52698, 52699, 52700, 52701, 52702, 52703, 52704, 52705, null, null, null, null, null, null, 52706, 52707, 52708, 52709, 52710, 52711, 52713, 52714, 52715, 52717, 52718, 52719, 52721, 52722, 52723, 52724, 52725, 52726, 52727, 52730, 52732, 52734, 52735, 52736, 52737, 52738, null, null, null, null, null, null, 52739, 52741, 52742, 52743, 52745, 52746, 52747, 52749, 52750, 52751, 52752, 52753, 52754, 52755, 52757, 52758, 52759, 52760, 52762, 52763, 52764, 52765, 52766, 52767, 52770, 52771, 52773, 52774, 52775, 52777, 52778, 52779, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52780, 52781, 52782, 52783, 52786, 52788, 52790, 52791, 52792, 52793, 52794, 52795, 52796, 52797, 52798, 52799, 52800, 52801, 52802, 52803, 52804, 52805, 52806, 52807, 52808, 52809, null, null, null, null, null, null, 52810, 52811, 52812, 52813, 52814, 52815, 52816, 52817, 52818, 52819, 52820, 52821, 52822, 52823, 52826, 52827, 52829, 52830, 52834, 52835, 52836, 52837, 52838, 52839, 52842, 52844, null, null, null, null, null, null, 52846, 52847, 52848, 52849, 52850, 52851, 52854, 52855, 52857, 52858, 52859, 52861, 52862, 52863, 52864, 52865, 52866, 52867, 52870, 52872, 52874, 52875, 52876, 52877, 52878, 52879, 52882, 52883, 52885, 52886, 52887, 52889, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 52890, 52891, 52892, 52893, 52894, 52895, 52898, 52902, 52903, 52904, 52905, 52906, 52907, 52910, 52911, 52912, 52913, 52914, 52915, 52916, 52917, 52918, 52919, 52920, 52921, 52922, null, null, null, null, null, null, 52923, 52924, 52925, 52926, 52927, 52928, 52930, 52931, 52932, 52933, 52934, 52935, 52936, 52937, 52938, 52939, 52940, 52941, 52942, 52943, 52944, 52945, 52946, 52947, 52948, 52949, null, null, null, null, null, null, 52950, 52951, 52952, 52953, 52954, 52955, 52956, 52957, 52958, 52959, 52960, 52961, 52962, 52963, 52966, 52967, 52969, 52970, 52973, 52974, 52975, 52976, 52977, 52978, 52979, 52982, 52986, 52987, 52988, 52989, 52990, 52991, 44032, 44033, 44036, 44039, 44040, 44041, 44042, 44048, 44049, 44050, 44051, 44052, 44053, 44054, 44055, 44057, 44058, 44059, 44060, 44061, 44064, 44068, 44076, 44077, 44079, 44080, 44081, 44088, 44089, 44092, 44096, 44107, 44109, 44116, 44120, 44124, 44144, 44145, 44148, 44151, 44152, 44154, 44160, 44161, 44163, 44164, 44165, 44166, 44169, 44170, 44171, 44172, 44176, 44180, 44188, 44189, 44191, 44192, 44193, 44200, 44201, 44202, 44204, 44207, 44208, 44216, 44217, 44219, 44220, 44221, 44225, 44228, 44232, 44236, 44245, 44247, 44256, 44257, 44260, 44263, 44264, 44266, 44268, 44271, 44272, 44273, 44275, 44277, 44278, 44284, 44285, 44288, 44292, 44294, 52994, 52995, 52997, 52998, 52999, 53001, 53002, 53003, 53004, 53005, 53006, 53007, 53010, 53012, 53014, 53015, 53016, 53017, 53018, 53019, 53021, 53022, 53023, 53025, 53026, 53027, null, null, null, null, null, null, 53029, 53030, 53031, 53032, 53033, 53034, 53035, 53038, 53042, 53043, 53044, 53045, 53046, 53047, 53049, 53050, 53051, 53052, 53053, 53054, 53055, 53056, 53057, 53058, 53059, 53060, null, null, null, null, null, null, 53061, 53062, 53063, 53064, 53065, 53066, 53067, 53068, 53069, 53070, 53071, 53072, 53073, 53074, 53075, 53078, 53079, 53081, 53082, 53083, 53085, 53086, 53087, 53088, 53089, 53090, 53091, 53094, 53096, 53098, 53099, 53100, 44300, 44301, 44303, 44305, 44312, 44316, 44320, 44329, 44332, 44333, 44340, 44341, 44344, 44348, 44356, 44357, 44359, 44361, 44368, 44372, 44376, 44385, 44387, 44396, 44397, 44400, 44403, 44404, 44405, 44406, 44411, 44412, 44413, 44415, 44417, 44418, 44424, 44425, 44428, 44432, 44444, 44445, 44452, 44471, 44480, 44481, 44484, 44488, 44496, 44497, 44499, 44508, 44512, 44516, 44536, 44537, 44540, 44543, 44544, 44545, 44552, 44553, 44555, 44557, 44564, 44592, 44593, 44596, 44599, 44600, 44602, 44608, 44609, 44611, 44613, 44614, 44618, 44620, 44621, 44622, 44624, 44628, 44630, 44636, 44637, 44639, 44640, 44641, 44645, 44648, 44649, 44652, 44656, 44664, 53101, 53102, 53103, 53106, 53107, 53109, 53110, 53111, 53113, 53114, 53115, 53116, 53117, 53118, 53119, 53121, 53122, 53123, 53124, 53126, 53127, 53128, 53129, 53130, 53131, 53133, null, null, null, null, null, null, 53134, 53135, 53136, 53137, 53138, 53139, 53140, 53141, 53142, 53143, 53144, 53145, 53146, 53147, 53148, 53149, 53150, 53151, 53152, 53154, 53155, 53156, 53157, 53158, 53159, 53161, null, null, null, null, null, null, 53162, 53163, 53164, 53165, 53166, 53167, 53169, 53170, 53171, 53172, 53173, 53174, 53175, 53176, 53177, 53178, 53179, 53180, 53181, 53182, 53183, 53184, 53185, 53186, 53187, 53189, 53190, 53191, 53192, 53193, 53194, 53195, 44665, 44667, 44668, 44669, 44676, 44677, 44684, 44732, 44733, 44734, 44736, 44740, 44748, 44749, 44751, 44752, 44753, 44760, 44761, 44764, 44776, 44779, 44781, 44788, 44792, 44796, 44807, 44808, 44813, 44816, 44844, 44845, 44848, 44850, 44852, 44860, 44861, 44863, 44865, 44866, 44867, 44872, 44873, 44880, 44892, 44893, 44900, 44901, 44921, 44928, 44932, 44936, 44944, 44945, 44949, 44956, 44984, 44985, 44988, 44992, 44999, 45e3, 45001, 45003, 45005, 45006, 45012, 45020, 45032, 45033, 45040, 45041, 45044, 45048, 45056, 45057, 45060, 45068, 45072, 45076, 45084, 45085, 45096, 45124, 45125, 45128, 45130, 45132, 45134, 45139, 45140, 45141, 45143, 45145, 53196, 53197, 53198, 53199, 53200, 53201, 53202, 53203, 53204, 53205, 53206, 53207, 53208, 53209, 53210, 53211, 53212, 53213, 53214, 53215, 53218, 53219, 53221, 53222, 53223, 53225, null, null, null, null, null, null, 53226, 53227, 53228, 53229, 53230, 53231, 53234, 53236, 53238, 53239, 53240, 53241, 53242, 53243, 53245, 53246, 53247, 53249, 53250, 53251, 53253, 53254, 53255, 53256, 53257, 53258, null, null, null, null, null, null, 53259, 53260, 53261, 53262, 53263, 53264, 53266, 53267, 53268, 53269, 53270, 53271, 53273, 53274, 53275, 53276, 53277, 53278, 53279, 53280, 53281, 53282, 53283, 53284, 53285, 53286, 53287, 53288, 53289, 53290, 53291, 53292, 45149, 45180, 45181, 45184, 45188, 45196, 45197, 45199, 45201, 45208, 45209, 45210, 45212, 45215, 45216, 45217, 45218, 45224, 45225, 45227, 45228, 45229, 45230, 45231, 45233, 45235, 45236, 45237, 45240, 45244, 45252, 45253, 45255, 45256, 45257, 45264, 45265, 45268, 45272, 45280, 45285, 45320, 45321, 45323, 45324, 45328, 45330, 45331, 45336, 45337, 45339, 45340, 45341, 45347, 45348, 45349, 45352, 45356, 45364, 45365, 45367, 45368, 45369, 45376, 45377, 45380, 45384, 45392, 45393, 45396, 45397, 45400, 45404, 45408, 45432, 45433, 45436, 45440, 45442, 45448, 45449, 45451, 45453, 45458, 45459, 45460, 45464, 45468, 45480, 45516, 45520, 45524, 45532, 45533, 53294, 53295, 53296, 53297, 53298, 53299, 53302, 53303, 53305, 53306, 53307, 53309, 53310, 53311, 53312, 53313, 53314, 53315, 53318, 53320, 53322, 53323, 53324, 53325, 53326, 53327, null, null, null, null, null, null, 53329, 53330, 53331, 53333, 53334, 53335, 53337, 53338, 53339, 53340, 53341, 53342, 53343, 53345, 53346, 53347, 53348, 53349, 53350, 53351, 53352, 53353, 53354, 53355, 53358, 53359, null, null, null, null, null, null, 53361, 53362, 53363, 53365, 53366, 53367, 53368, 53369, 53370, 53371, 53374, 53375, 53376, 53378, 53379, 53380, 53381, 53382, 53383, 53384, 53385, 53386, 53387, 53388, 53389, 53390, 53391, 53392, 53393, 53394, 53395, 53396, 45535, 45544, 45545, 45548, 45552, 45561, 45563, 45565, 45572, 45573, 45576, 45579, 45580, 45588, 45589, 45591, 45593, 45600, 45620, 45628, 45656, 45660, 45664, 45672, 45673, 45684, 45685, 45692, 45700, 45701, 45705, 45712, 45713, 45716, 45720, 45721, 45722, 45728, 45729, 45731, 45733, 45734, 45738, 45740, 45744, 45748, 45768, 45769, 45772, 45776, 45778, 45784, 45785, 45787, 45789, 45794, 45796, 45797, 45798, 45800, 45803, 45804, 45805, 45806, 45807, 45811, 45812, 45813, 45815, 45816, 45817, 45818, 45819, 45823, 45824, 45825, 45828, 45832, 45840, 45841, 45843, 45844, 45845, 45852, 45908, 45909, 45910, 45912, 45915, 45916, 45918, 45919, 45924, 45925, 53397, 53398, 53399, 53400, 53401, 53402, 53403, 53404, 53405, 53406, 53407, 53408, 53409, 53410, 53411, 53414, 53415, 53417, 53418, 53419, 53421, 53422, 53423, 53424, 53425, 53426, null, null, null, null, null, null, 53427, 53430, 53432, 53434, 53435, 53436, 53437, 53438, 53439, 53442, 53443, 53445, 53446, 53447, 53450, 53451, 53452, 53453, 53454, 53455, 53458, 53462, 53463, 53464, 53465, 53466, null, null, null, null, null, null, 53467, 53470, 53471, 53473, 53474, 53475, 53477, 53478, 53479, 53480, 53481, 53482, 53483, 53486, 53490, 53491, 53492, 53493, 53494, 53495, 53497, 53498, 53499, 53500, 53501, 53502, 53503, 53504, 53505, 53506, 53507, 53508, 45927, 45929, 45931, 45934, 45936, 45937, 45940, 45944, 45952, 45953, 45955, 45956, 45957, 45964, 45968, 45972, 45984, 45985, 45992, 45996, 46020, 46021, 46024, 46027, 46028, 46030, 46032, 46036, 46037, 46039, 46041, 46043, 46045, 46048, 46052, 46056, 46076, 46096, 46104, 46108, 46112, 46120, 46121, 46123, 46132, 46160, 46161, 46164, 46168, 46176, 46177, 46179, 46181, 46188, 46208, 46216, 46237, 46244, 46248, 46252, 46261, 46263, 46265, 46272, 46276, 46280, 46288, 46293, 46300, 46301, 46304, 46307, 46308, 46310, 46316, 46317, 46319, 46321, 46328, 46356, 46357, 46360, 46363, 46364, 46372, 46373, 46375, 46376, 46377, 46378, 46384, 46385, 46388, 46392, 53509, 53510, 53511, 53512, 53513, 53514, 53515, 53516, 53518, 53519, 53520, 53521, 53522, 53523, 53524, 53525, 53526, 53527, 53528, 53529, 53530, 53531, 53532, 53533, 53534, 53535, null, null, null, null, null, null, 53536, 53537, 53538, 53539, 53540, 53541, 53542, 53543, 53544, 53545, 53546, 53547, 53548, 53549, 53550, 53551, 53554, 53555, 53557, 53558, 53559, 53561, 53563, 53564, 53565, 53566, null, null, null, null, null, null, 53567, 53570, 53574, 53575, 53576, 53577, 53578, 53579, 53582, 53583, 53585, 53586, 53587, 53589, 53590, 53591, 53592, 53593, 53594, 53595, 53598, 53600, 53602, 53603, 53604, 53605, 53606, 53607, 53609, 53610, 53611, 53613, 46400, 46401, 46403, 46404, 46405, 46411, 46412, 46413, 46416, 46420, 46428, 46429, 46431, 46432, 46433, 46496, 46497, 46500, 46504, 46506, 46507, 46512, 46513, 46515, 46516, 46517, 46523, 46524, 46525, 46528, 46532, 46540, 46541, 46543, 46544, 46545, 46552, 46572, 46608, 46609, 46612, 46616, 46629, 46636, 46644, 46664, 46692, 46696, 46748, 46749, 46752, 46756, 46763, 46764, 46769, 46804, 46832, 46836, 46840, 46848, 46849, 46853, 46888, 46889, 46892, 46895, 46896, 46904, 46905, 46907, 46916, 46920, 46924, 46932, 46933, 46944, 46948, 46952, 46960, 46961, 46963, 46965, 46972, 46973, 46976, 46980, 46988, 46989, 46991, 46992, 46993, 46994, 46998, 46999, 53614, 53615, 53616, 53617, 53618, 53619, 53620, 53621, 53622, 53623, 53624, 53625, 53626, 53627, 53629, 53630, 53631, 53632, 53633, 53634, 53635, 53637, 53638, 53639, 53641, 53642, null, null, null, null, null, null, 53643, 53644, 53645, 53646, 53647, 53648, 53649, 53650, 53651, 53652, 53653, 53654, 53655, 53656, 53657, 53658, 53659, 53660, 53661, 53662, 53663, 53666, 53667, 53669, 53670, 53671, null, null, null, null, null, null, 53673, 53674, 53675, 53676, 53677, 53678, 53679, 53682, 53684, 53686, 53687, 53688, 53689, 53691, 53693, 53694, 53695, 53697, 53698, 53699, 53700, 53701, 53702, 53703, 53704, 53705, 53706, 53707, 53708, 53709, 53710, 53711, 47e3, 47001, 47004, 47008, 47016, 47017, 47019, 47020, 47021, 47028, 47029, 47032, 47047, 47049, 47084, 47085, 47088, 47092, 47100, 47101, 47103, 47104, 47105, 47111, 47112, 47113, 47116, 47120, 47128, 47129, 47131, 47133, 47140, 47141, 47144, 47148, 47156, 47157, 47159, 47160, 47161, 47168, 47172, 47185, 47187, 47196, 47197, 47200, 47204, 47212, 47213, 47215, 47217, 47224, 47228, 47245, 47272, 47280, 47284, 47288, 47296, 47297, 47299, 47301, 47308, 47312, 47316, 47325, 47327, 47329, 47336, 47337, 47340, 47344, 47352, 47353, 47355, 47357, 47364, 47384, 47392, 47420, 47421, 47424, 47428, 47436, 47439, 47441, 47448, 47449, 47452, 47456, 47464, 47465, 53712, 53713, 53714, 53715, 53716, 53717, 53718, 53719, 53721, 53722, 53723, 53724, 53725, 53726, 53727, 53728, 53729, 53730, 53731, 53732, 53733, 53734, 53735, 53736, 53737, 53738, null, null, null, null, null, null, 53739, 53740, 53741, 53742, 53743, 53744, 53745, 53746, 53747, 53749, 53750, 53751, 53753, 53754, 53755, 53756, 53757, 53758, 53759, 53760, 53761, 53762, 53763, 53764, 53765, 53766, null, null, null, null, null, null, 53768, 53770, 53771, 53772, 53773, 53774, 53775, 53777, 53778, 53779, 53780, 53781, 53782, 53783, 53784, 53785, 53786, 53787, 53788, 53789, 53790, 53791, 53792, 53793, 53794, 53795, 53796, 53797, 53798, 53799, 53800, 53801, 47467, 47469, 47476, 47477, 47480, 47484, 47492, 47493, 47495, 47497, 47498, 47501, 47502, 47532, 47533, 47536, 47540, 47548, 47549, 47551, 47553, 47560, 47561, 47564, 47566, 47567, 47568, 47569, 47570, 47576, 47577, 47579, 47581, 47582, 47585, 47587, 47588, 47589, 47592, 47596, 47604, 47605, 47607, 47608, 47609, 47610, 47616, 47617, 47624, 47637, 47672, 47673, 47676, 47680, 47682, 47688, 47689, 47691, 47693, 47694, 47699, 47700, 47701, 47704, 47708, 47716, 47717, 47719, 47720, 47721, 47728, 47729, 47732, 47736, 47747, 47748, 47749, 47751, 47756, 47784, 47785, 47787, 47788, 47792, 47794, 47800, 47801, 47803, 47805, 47812, 47816, 47832, 47833, 47868, 53802, 53803, 53806, 53807, 53809, 53810, 53811, 53813, 53814, 53815, 53816, 53817, 53818, 53819, 53822, 53824, 53826, 53827, 53828, 53829, 53830, 53831, 53833, 53834, 53835, 53836, null, null, null, null, null, null, 53837, 53838, 53839, 53840, 53841, 53842, 53843, 53844, 53845, 53846, 53847, 53848, 53849, 53850, 53851, 53853, 53854, 53855, 53856, 53857, 53858, 53859, 53861, 53862, 53863, 53864, null, null, null, null, null, null, 53865, 53866, 53867, 53868, 53869, 53870, 53871, 53872, 53873, 53874, 53875, 53876, 53877, 53878, 53879, 53880, 53881, 53882, 53883, 53884, 53885, 53886, 53887, 53890, 53891, 53893, 53894, 53895, 53897, 53898, 53899, 53900, 47872, 47876, 47885, 47887, 47889, 47896, 47900, 47904, 47913, 47915, 47924, 47925, 47926, 47928, 47931, 47932, 47933, 47934, 47940, 47941, 47943, 47945, 47949, 47951, 47952, 47956, 47960, 47969, 47971, 47980, 48008, 48012, 48016, 48036, 48040, 48044, 48052, 48055, 48064, 48068, 48072, 48080, 48083, 48120, 48121, 48124, 48127, 48128, 48130, 48136, 48137, 48139, 48140, 48141, 48143, 48145, 48148, 48149, 48150, 48151, 48152, 48155, 48156, 48157, 48158, 48159, 48164, 48165, 48167, 48169, 48173, 48176, 48177, 48180, 48184, 48192, 48193, 48195, 48196, 48197, 48201, 48204, 48205, 48208, 48221, 48260, 48261, 48264, 48267, 48268, 48270, 48276, 48277, 48279, 53901, 53902, 53903, 53906, 53907, 53908, 53910, 53911, 53912, 53913, 53914, 53915, 53917, 53918, 53919, 53921, 53922, 53923, 53925, 53926, 53927, 53928, 53929, 53930, 53931, 53933, null, null, null, null, null, null, 53934, 53935, 53936, 53938, 53939, 53940, 53941, 53942, 53943, 53946, 53947, 53949, 53950, 53953, 53955, 53956, 53957, 53958, 53959, 53962, 53964, 53965, 53966, 53967, 53968, 53969, null, null, null, null, null, null, 53970, 53971, 53973, 53974, 53975, 53977, 53978, 53979, 53981, 53982, 53983, 53984, 53985, 53986, 53987, 53990, 53991, 53992, 53993, 53994, 53995, 53996, 53997, 53998, 53999, 54002, 54003, 54005, 54006, 54007, 54009, 54010, 48281, 48282, 48288, 48289, 48292, 48295, 48296, 48304, 48305, 48307, 48308, 48309, 48316, 48317, 48320, 48324, 48333, 48335, 48336, 48337, 48341, 48344, 48348, 48372, 48373, 48374, 48376, 48380, 48388, 48389, 48391, 48393, 48400, 48404, 48420, 48428, 48448, 48456, 48457, 48460, 48464, 48472, 48473, 48484, 48488, 48512, 48513, 48516, 48519, 48520, 48521, 48522, 48528, 48529, 48531, 48533, 48537, 48538, 48540, 48548, 48560, 48568, 48596, 48597, 48600, 48604, 48617, 48624, 48628, 48632, 48640, 48643, 48645, 48652, 48653, 48656, 48660, 48668, 48669, 48671, 48708, 48709, 48712, 48716, 48718, 48724, 48725, 48727, 48729, 48730, 48731, 48736, 48737, 48740, 54011, 54012, 54013, 54014, 54015, 54018, 54020, 54022, 54023, 54024, 54025, 54026, 54027, 54031, 54033, 54034, 54035, 54037, 54039, 54040, 54041, 54042, 54043, 54046, 54050, 54051, null, null, null, null, null, null, 54052, 54054, 54055, 54058, 54059, 54061, 54062, 54063, 54065, 54066, 54067, 54068, 54069, 54070, 54071, 54074, 54078, 54079, 54080, 54081, 54082, 54083, 54086, 54087, 54088, 54089, null, null, null, null, null, null, 54090, 54091, 54092, 54093, 54094, 54095, 54096, 54097, 54098, 54099, 54100, 54101, 54102, 54103, 54104, 54105, 54106, 54107, 54108, 54109, 54110, 54111, 54112, 54113, 54114, 54115, 54116, 54117, 54118, 54119, 54120, 54121, 48744, 48746, 48752, 48753, 48755, 48756, 48757, 48763, 48764, 48765, 48768, 48772, 48780, 48781, 48783, 48784, 48785, 48792, 48793, 48808, 48848, 48849, 48852, 48855, 48856, 48864, 48867, 48868, 48869, 48876, 48897, 48904, 48905, 48920, 48921, 48923, 48924, 48925, 48960, 48961, 48964, 48968, 48976, 48977, 48981, 49044, 49072, 49093, 49100, 49101, 49104, 49108, 49116, 49119, 49121, 49212, 49233, 49240, 49244, 49248, 49256, 49257, 49296, 49297, 49300, 49304, 49312, 49313, 49315, 49317, 49324, 49325, 49327, 49328, 49331, 49332, 49333, 49334, 49340, 49341, 49343, 49344, 49345, 49349, 49352, 49353, 49356, 49360, 49368, 49369, 49371, 49372, 49373, 49380, 54122, 54123, 54124, 54125, 54126, 54127, 54128, 54129, 54130, 54131, 54132, 54133, 54134, 54135, 54136, 54137, 54138, 54139, 54142, 54143, 54145, 54146, 54147, 54149, 54150, 54151, null, null, null, null, null, null, 54152, 54153, 54154, 54155, 54158, 54162, 54163, 54164, 54165, 54166, 54167, 54170, 54171, 54173, 54174, 54175, 54177, 54178, 54179, 54180, 54181, 54182, 54183, 54186, 54188, 54190, null, null, null, null, null, null, 54191, 54192, 54193, 54194, 54195, 54197, 54198, 54199, 54201, 54202, 54203, 54205, 54206, 54207, 54208, 54209, 54210, 54211, 54214, 54215, 54218, 54219, 54220, 54221, 54222, 54223, 54225, 54226, 54227, 54228, 54229, 54230, 49381, 49384, 49388, 49396, 49397, 49399, 49401, 49408, 49412, 49416, 49424, 49429, 49436, 49437, 49438, 49439, 49440, 49443, 49444, 49446, 49447, 49452, 49453, 49455, 49456, 49457, 49462, 49464, 49465, 49468, 49472, 49480, 49481, 49483, 49484, 49485, 49492, 49493, 49496, 49500, 49508, 49509, 49511, 49512, 49513, 49520, 49524, 49528, 49541, 49548, 49549, 49550, 49552, 49556, 49558, 49564, 49565, 49567, 49569, 49573, 49576, 49577, 49580, 49584, 49597, 49604, 49608, 49612, 49620, 49623, 49624, 49632, 49636, 49640, 49648, 49649, 49651, 49660, 49661, 49664, 49668, 49676, 49677, 49679, 49681, 49688, 49689, 49692, 49695, 49696, 49704, 49705, 49707, 49709, 54231, 54233, 54234, 54235, 54236, 54237, 54238, 54239, 54240, 54242, 54244, 54245, 54246, 54247, 54248, 54249, 54250, 54251, 54254, 54255, 54257, 54258, 54259, 54261, 54262, 54263, null, null, null, null, null, null, 54264, 54265, 54266, 54267, 54270, 54272, 54274, 54275, 54276, 54277, 54278, 54279, 54281, 54282, 54283, 54284, 54285, 54286, 54287, 54288, 54289, 54290, 54291, 54292, 54293, 54294, null, null, null, null, null, null, 54295, 54296, 54297, 54298, 54299, 54300, 54302, 54303, 54304, 54305, 54306, 54307, 54308, 54309, 54310, 54311, 54312, 54313, 54314, 54315, 54316, 54317, 54318, 54319, 54320, 54321, 54322, 54323, 54324, 54325, 54326, 54327, 49711, 49713, 49714, 49716, 49736, 49744, 49745, 49748, 49752, 49760, 49765, 49772, 49773, 49776, 49780, 49788, 49789, 49791, 49793, 49800, 49801, 49808, 49816, 49819, 49821, 49828, 49829, 49832, 49836, 49837, 49844, 49845, 49847, 49849, 49884, 49885, 49888, 49891, 49892, 49899, 49900, 49901, 49903, 49905, 49910, 49912, 49913, 49915, 49916, 49920, 49928, 49929, 49932, 49933, 49939, 49940, 49941, 49944, 49948, 49956, 49957, 49960, 49961, 49989, 50024, 50025, 50028, 50032, 50034, 50040, 50041, 50044, 50045, 50052, 50056, 50060, 50112, 50136, 50137, 50140, 50143, 50144, 50146, 50152, 50153, 50157, 50164, 50165, 50168, 50184, 50192, 50212, 50220, 50224, 54328, 54329, 54330, 54331, 54332, 54333, 54334, 54335, 54337, 54338, 54339, 54341, 54342, 54343, 54344, 54345, 54346, 54347, 54348, 54349, 54350, 54351, 54352, 54353, 54354, 54355, null, null, null, null, null, null, 54356, 54357, 54358, 54359, 54360, 54361, 54362, 54363, 54365, 54366, 54367, 54369, 54370, 54371, 54373, 54374, 54375, 54376, 54377, 54378, 54379, 54380, 54382, 54384, 54385, 54386, null, null, null, null, null, null, 54387, 54388, 54389, 54390, 54391, 54394, 54395, 54397, 54398, 54401, 54403, 54404, 54405, 54406, 54407, 54410, 54412, 54414, 54415, 54416, 54417, 54418, 54419, 54421, 54422, 54423, 54424, 54425, 54426, 54427, 54428, 54429, 50228, 50236, 50237, 50248, 50276, 50277, 50280, 50284, 50292, 50293, 50297, 50304, 50324, 50332, 50360, 50364, 50409, 50416, 50417, 50420, 50424, 50426, 50431, 50432, 50433, 50444, 50448, 50452, 50460, 50472, 50473, 50476, 50480, 50488, 50489, 50491, 50493, 50500, 50501, 50504, 50505, 50506, 50508, 50509, 50510, 50515, 50516, 50517, 50519, 50520, 50521, 50525, 50526, 50528, 50529, 50532, 50536, 50544, 50545, 50547, 50548, 50549, 50556, 50557, 50560, 50564, 50567, 50572, 50573, 50575, 50577, 50581, 50583, 50584, 50588, 50592, 50601, 50612, 50613, 50616, 50617, 50619, 50620, 50621, 50622, 50628, 50629, 50630, 50631, 50632, 50633, 50634, 50636, 50638, 54430, 54431, 54432, 54433, 54434, 54435, 54436, 54437, 54438, 54439, 54440, 54442, 54443, 54444, 54445, 54446, 54447, 54448, 54449, 54450, 54451, 54452, 54453, 54454, 54455, 54456, null, null, null, null, null, null, 54457, 54458, 54459, 54460, 54461, 54462, 54463, 54464, 54465, 54466, 54467, 54468, 54469, 54470, 54471, 54472, 54473, 54474, 54475, 54477, 54478, 54479, 54481, 54482, 54483, 54485, null, null, null, null, null, null, 54486, 54487, 54488, 54489, 54490, 54491, 54493, 54494, 54496, 54497, 54498, 54499, 54500, 54501, 54502, 54503, 54505, 54506, 54507, 54509, 54510, 54511, 54513, 54514, 54515, 54516, 54517, 54518, 54519, 54521, 54522, 54524, 50640, 50641, 50644, 50648, 50656, 50657, 50659, 50661, 50668, 50669, 50670, 50672, 50676, 50678, 50679, 50684, 50685, 50686, 50687, 50688, 50689, 50693, 50694, 50695, 50696, 50700, 50704, 50712, 50713, 50715, 50716, 50724, 50725, 50728, 50732, 50733, 50734, 50736, 50739, 50740, 50741, 50743, 50745, 50747, 50752, 50753, 50756, 50760, 50768, 50769, 50771, 50772, 50773, 50780, 50781, 50784, 50796, 50799, 50801, 50808, 50809, 50812, 50816, 50824, 50825, 50827, 50829, 50836, 50837, 50840, 50844, 50852, 50853, 50855, 50857, 50864, 50865, 50868, 50872, 50873, 50874, 50880, 50881, 50883, 50885, 50892, 50893, 50896, 50900, 50908, 50909, 50912, 50913, 50920, 54526, 54527, 54528, 54529, 54530, 54531, 54533, 54534, 54535, 54537, 54538, 54539, 54541, 54542, 54543, 54544, 54545, 54546, 54547, 54550, 54552, 54553, 54554, 54555, 54556, 54557, null, null, null, null, null, null, 54558, 54559, 54560, 54561, 54562, 54563, 54564, 54565, 54566, 54567, 54568, 54569, 54570, 54571, 54572, 54573, 54574, 54575, 54576, 54577, 54578, 54579, 54580, 54581, 54582, 54583, null, null, null, null, null, null, 54584, 54585, 54586, 54587, 54590, 54591, 54593, 54594, 54595, 54597, 54598, 54599, 54600, 54601, 54602, 54603, 54606, 54608, 54610, 54611, 54612, 54613, 54614, 54615, 54618, 54619, 54621, 54622, 54623, 54625, 54626, 54627, 50921, 50924, 50928, 50936, 50937, 50941, 50948, 50949, 50952, 50956, 50964, 50965, 50967, 50969, 50976, 50977, 50980, 50984, 50992, 50993, 50995, 50997, 50999, 51004, 51005, 51008, 51012, 51018, 51020, 51021, 51023, 51025, 51026, 51027, 51028, 51029, 51030, 51031, 51032, 51036, 51040, 51048, 51051, 51060, 51061, 51064, 51068, 51069, 51070, 51075, 51076, 51077, 51079, 51080, 51081, 51082, 51086, 51088, 51089, 51092, 51094, 51095, 51096, 51098, 51104, 51105, 51107, 51108, 51109, 51110, 51116, 51117, 51120, 51124, 51132, 51133, 51135, 51136, 51137, 51144, 51145, 51148, 51150, 51152, 51160, 51165, 51172, 51176, 51180, 51200, 51201, 51204, 51208, 51210, 54628, 54630, 54631, 54634, 54636, 54638, 54639, 54640, 54641, 54642, 54643, 54646, 54647, 54649, 54650, 54651, 54653, 54654, 54655, 54656, 54657, 54658, 54659, 54662, 54666, 54667, null, null, null, null, null, null, 54668, 54669, 54670, 54671, 54673, 54674, 54675, 54676, 54677, 54678, 54679, 54680, 54681, 54682, 54683, 54684, 54685, 54686, 54687, 54688, 54689, 54690, 54691, 54692, 54694, 54695, null, null, null, null, null, null, 54696, 54697, 54698, 54699, 54700, 54701, 54702, 54703, 54704, 54705, 54706, 54707, 54708, 54709, 54710, 54711, 54712, 54713, 54714, 54715, 54716, 54717, 54718, 54719, 54720, 54721, 54722, 54723, 54724, 54725, 54726, 54727, 51216, 51217, 51219, 51221, 51222, 51228, 51229, 51232, 51236, 51244, 51245, 51247, 51249, 51256, 51260, 51264, 51272, 51273, 51276, 51277, 51284, 51312, 51313, 51316, 51320, 51322, 51328, 51329, 51331, 51333, 51334, 51335, 51339, 51340, 51341, 51348, 51357, 51359, 51361, 51368, 51388, 51389, 51396, 51400, 51404, 51412, 51413, 51415, 51417, 51424, 51425, 51428, 51445, 51452, 51453, 51456, 51460, 51461, 51462, 51468, 51469, 51471, 51473, 51480, 51500, 51508, 51536, 51537, 51540, 51544, 51552, 51553, 51555, 51564, 51568, 51572, 51580, 51592, 51593, 51596, 51600, 51608, 51609, 51611, 51613, 51648, 51649, 51652, 51655, 51656, 51658, 51664, 51665, 51667, 54730, 54731, 54733, 54734, 54735, 54737, 54739, 54740, 54741, 54742, 54743, 54746, 54748, 54750, 54751, 54752, 54753, 54754, 54755, 54758, 54759, 54761, 54762, 54763, 54765, 54766, null, null, null, null, null, null, 54767, 54768, 54769, 54770, 54771, 54774, 54776, 54778, 54779, 54780, 54781, 54782, 54783, 54786, 54787, 54789, 54790, 54791, 54793, 54794, 54795, 54796, 54797, 54798, 54799, 54802, null, null, null, null, null, null, 54806, 54807, 54808, 54809, 54810, 54811, 54813, 54814, 54815, 54817, 54818, 54819, 54821, 54822, 54823, 54824, 54825, 54826, 54827, 54828, 54830, 54831, 54832, 54833, 54834, 54835, 54836, 54837, 54838, 54839, 54842, 54843, 51669, 51670, 51673, 51674, 51676, 51677, 51680, 51682, 51684, 51687, 51692, 51693, 51695, 51696, 51697, 51704, 51705, 51708, 51712, 51720, 51721, 51723, 51724, 51725, 51732, 51736, 51753, 51788, 51789, 51792, 51796, 51804, 51805, 51807, 51808, 51809, 51816, 51837, 51844, 51864, 51900, 51901, 51904, 51908, 51916, 51917, 51919, 51921, 51923, 51928, 51929, 51936, 51948, 51956, 51976, 51984, 51988, 51992, 52e3, 52001, 52033, 52040, 52041, 52044, 52048, 52056, 52057, 52061, 52068, 52088, 52089, 52124, 52152, 52180, 52196, 52199, 52201, 52236, 52237, 52240, 52244, 52252, 52253, 52257, 52258, 52263, 52264, 52265, 52268, 52270, 52272, 52280, 52281, 52283, 54845, 54846, 54847, 54849, 54850, 54851, 54852, 54854, 54855, 54858, 54860, 54862, 54863, 54864, 54866, 54867, 54870, 54871, 54873, 54874, 54875, 54877, 54878, 54879, 54880, 54881, null, null, null, null, null, null, 54882, 54883, 54884, 54885, 54886, 54888, 54890, 54891, 54892, 54893, 54894, 54895, 54898, 54899, 54901, 54902, 54903, 54904, 54905, 54906, 54907, 54908, 54909, 54910, 54911, 54912, null, null, null, null, null, null, 54913, 54914, 54916, 54918, 54919, 54920, 54921, 54922, 54923, 54926, 54927, 54929, 54930, 54931, 54933, 54934, 54935, 54936, 54937, 54938, 54939, 54940, 54942, 54944, 54946, 54947, 54948, 54949, 54950, 54951, 54953, 54954, 52284, 52285, 52286, 52292, 52293, 52296, 52300, 52308, 52309, 52311, 52312, 52313, 52320, 52324, 52326, 52328, 52336, 52341, 52376, 52377, 52380, 52384, 52392, 52393, 52395, 52396, 52397, 52404, 52405, 52408, 52412, 52420, 52421, 52423, 52425, 52432, 52436, 52452, 52460, 52464, 52481, 52488, 52489, 52492, 52496, 52504, 52505, 52507, 52509, 52516, 52520, 52524, 52537, 52572, 52576, 52580, 52588, 52589, 52591, 52593, 52600, 52616, 52628, 52629, 52632, 52636, 52644, 52645, 52647, 52649, 52656, 52676, 52684, 52688, 52712, 52716, 52720, 52728, 52729, 52731, 52733, 52740, 52744, 52748, 52756, 52761, 52768, 52769, 52772, 52776, 52784, 52785, 52787, 52789, 54955, 54957, 54958, 54959, 54961, 54962, 54963, 54964, 54965, 54966, 54967, 54968, 54970, 54972, 54973, 54974, 54975, 54976, 54977, 54978, 54979, 54982, 54983, 54985, 54986, 54987, null, null, null, null, null, null, 54989, 54990, 54991, 54992, 54994, 54995, 54997, 54998, 55e3, 55002, 55003, 55004, 55005, 55006, 55007, 55009, 55010, 55011, 55013, 55014, 55015, 55017, 55018, 55019, 55020, 55021, null, null, null, null, null, null, 55022, 55023, 55025, 55026, 55027, 55028, 55030, 55031, 55032, 55033, 55034, 55035, 55038, 55039, 55041, 55042, 55043, 55045, 55046, 55047, 55048, 55049, 55050, 55051, 55052, 55053, 55054, 55055, 55056, 55058, 55059, 55060, 52824, 52825, 52828, 52831, 52832, 52833, 52840, 52841, 52843, 52845, 52852, 52853, 52856, 52860, 52868, 52869, 52871, 52873, 52880, 52881, 52884, 52888, 52896, 52897, 52899, 52900, 52901, 52908, 52909, 52929, 52964, 52965, 52968, 52971, 52972, 52980, 52981, 52983, 52984, 52985, 52992, 52993, 52996, 53e3, 53008, 53009, 53011, 53013, 53020, 53024, 53028, 53036, 53037, 53039, 53040, 53041, 53048, 53076, 53077, 53080, 53084, 53092, 53093, 53095, 53097, 53104, 53105, 53108, 53112, 53120, 53125, 53132, 53153, 53160, 53168, 53188, 53216, 53217, 53220, 53224, 53232, 53233, 53235, 53237, 53244, 53248, 53252, 53265, 53272, 53293, 53300, 53301, 53304, 53308, 55061, 55062, 55063, 55066, 55067, 55069, 55070, 55071, 55073, 55074, 55075, 55076, 55077, 55078, 55079, 55082, 55084, 55086, 55087, 55088, 55089, 55090, 55091, 55094, 55095, 55097, null, null, null, null, null, null, 55098, 55099, 55101, 55102, 55103, 55104, 55105, 55106, 55107, 55109, 55110, 55112, 55114, 55115, 55116, 55117, 55118, 55119, 55122, 55123, 55125, 55130, 55131, 55132, 55133, 55134, null, null, null, null, null, null, 55135, 55138, 55140, 55142, 55143, 55144, 55146, 55147, 55149, 55150, 55151, 55153, 55154, 55155, 55157, 55158, 55159, 55160, 55161, 55162, 55163, 55166, 55167, 55168, 55170, 55171, 55172, 55173, 55174, 55175, 55178, 55179, 53316, 53317, 53319, 53321, 53328, 53332, 53336, 53344, 53356, 53357, 53360, 53364, 53372, 53373, 53377, 53412, 53413, 53416, 53420, 53428, 53429, 53431, 53433, 53440, 53441, 53444, 53448, 53449, 53456, 53457, 53459, 53460, 53461, 53468, 53469, 53472, 53476, 53484, 53485, 53487, 53488, 53489, 53496, 53517, 53552, 53553, 53556, 53560, 53562, 53568, 53569, 53571, 53572, 53573, 53580, 53581, 53584, 53588, 53596, 53597, 53599, 53601, 53608, 53612, 53628, 53636, 53640, 53664, 53665, 53668, 53672, 53680, 53681, 53683, 53685, 53690, 53692, 53696, 53720, 53748, 53752, 53767, 53769, 53776, 53804, 53805, 53808, 53812, 53820, 53821, 53823, 53825, 53832, 53852, 55181, 55182, 55183, 55185, 55186, 55187, 55188, 55189, 55190, 55191, 55194, 55196, 55198, 55199, 55200, 55201, 55202, 55203, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 53860, 53888, 53889, 53892, 53896, 53904, 53905, 53909, 53916, 53920, 53924, 53932, 53937, 53944, 53945, 53948, 53951, 53952, 53954, 53960, 53961, 53963, 53972, 53976, 53980, 53988, 53989, 54e3, 54001, 54004, 54008, 54016, 54017, 54019, 54021, 54028, 54029, 54030, 54032, 54036, 54038, 54044, 54045, 54047, 54048, 54049, 54053, 54056, 54057, 54060, 54064, 54072, 54073, 54075, 54076, 54077, 54084, 54085, 54140, 54141, 54144, 54148, 54156, 54157, 54159, 54160, 54161, 54168, 54169, 54172, 54176, 54184, 54185, 54187, 54189, 54196, 54200, 54204, 54212, 54213, 54216, 54217, 54224, 54232, 54241, 54243, 54252, 54253, 54256, 54260, 54268, 54269, 54271, 54273, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 54280, 54301, 54336, 54340, 54364, 54368, 54372, 54381, 54383, 54392, 54393, 54396, 54399, 54400, 54402, 54408, 54409, 54411, 54413, 54420, 54441, 54476, 54480, 54484, 54492, 54495, 54504, 54508, 54512, 54520, 54523, 54525, 54532, 54536, 54540, 54548, 54549, 54551, 54588, 54589, 54592, 54596, 54604, 54605, 54607, 54609, 54616, 54617, 54620, 54624, 54629, 54632, 54633, 54635, 54637, 54644, 54645, 54648, 54652, 54660, 54661, 54663, 54664, 54665, 54672, 54693, 54728, 54729, 54732, 54736, 54738, 54744, 54745, 54747, 54749, 54756, 54757, 54760, 54764, 54772, 54773, 54775, 54777, 54784, 54785, 54788, 54792, 54800, 54801, 54803, 54804, 54805, 54812, 54816, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 54820, 54829, 54840, 54841, 54844, 54848, 54853, 54856, 54857, 54859, 54861, 54865, 54868, 54869, 54872, 54876, 54887, 54889, 54896, 54897, 54900, 54915, 54917, 54924, 54925, 54928, 54932, 54941, 54943, 54945, 54952, 54956, 54960, 54969, 54971, 54980, 54981, 54984, 54988, 54993, 54996, 54999, 55001, 55008, 55012, 55016, 55024, 55029, 55036, 55037, 55040, 55044, 55057, 55064, 55065, 55068, 55072, 55080, 55081, 55083, 55085, 55092, 55093, 55096, 55100, 55108, 55111, 55113, 55120, 55121, 55124, 55126, 55127, 55128, 55129, 55136, 55137, 55139, 55141, 55145, 55148, 55152, 55156, 55164, 55165, 55169, 55176, 55177, 55180, 55184, 55192, 55193, 55195, 55197, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20285, 20339, 20551, 20729, 21152, 21487, 21621, 21733, 22025, 23233, 23478, 26247, 26550, 26551, 26607, 27468, 29634, 30146, 31292, 33499, 33540, 34903, 34952, 35382, 36040, 36303, 36603, 36838, 39381, 21051, 21364, 21508, 24682, 24932, 27580, 29647, 33050, 35258, 35282, 38307, 20355, 21002, 22718, 22904, 23014, 24178, 24185, 25031, 25536, 26438, 26604, 26751, 28567, 30286, 30475, 30965, 31240, 31487, 31777, 32925, 33390, 33393, 35563, 38291, 20075, 21917, 26359, 28212, 30883, 31469, 33883, 35088, 34638, 38824, 21208, 22350, 22570, 23884, 24863, 25022, 25121, 25954, 26577, 27204, 28187, 29976, 30131, 30435, 30640, 32058, 37039, 37969, 37970, 40853, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21283, 23724, 30002, 32987, 37440, 38296, 21083, 22536, 23004, 23713, 23831, 24247, 24378, 24394, 24951, 27743, 30074, 30086, 31968, 32115, 32177, 32652, 33108, 33313, 34193, 35137, 35611, 37628, 38477, 40007, 20171, 20215, 20491, 20977, 22607, 24887, 24894, 24936, 25913, 27114, 28433, 30117, 30342, 30422, 31623, 33445, 33995, 63744, 37799, 38283, 21888, 23458, 22353, 63745, 31923, 32697, 37301, 20520, 21435, 23621, 24040, 25298, 25454, 25818, 25831, 28192, 28844, 31067, 36317, 36382, 63746, 36989, 37445, 37624, 20094, 20214, 20581, 24062, 24314, 24838, 26967, 33137, 34388, 36423, 37749, 39467, 20062, 20625, 26480, 26688, 20745, 21133, 21138, 27298, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30652, 37392, 40660, 21163, 24623, 36850, 20552, 25001, 25581, 25802, 26684, 27268, 28608, 33160, 35233, 38548, 22533, 29309, 29356, 29956, 32121, 32365, 32937, 35211, 35700, 36963, 40273, 25225, 27770, 28500, 32080, 32570, 35363, 20860, 24906, 31645, 35609, 37463, 37772, 20140, 20435, 20510, 20670, 20742, 21185, 21197, 21375, 22384, 22659, 24218, 24465, 24950, 25004, 25806, 25964, 26223, 26299, 26356, 26775, 28039, 28805, 28913, 29855, 29861, 29898, 30169, 30828, 30956, 31455, 31478, 32069, 32147, 32789, 32831, 33051, 33686, 35686, 36629, 36885, 37857, 38915, 38968, 39514, 39912, 20418, 21843, 22586, 22865, 23395, 23622, 24760, 25106, 26690, 26800, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26856, 28330, 30028, 30328, 30926, 31293, 31995, 32363, 32380, 35336, 35489, 35903, 38542, 40388, 21476, 21481, 21578, 21617, 22266, 22993, 23396, 23611, 24235, 25335, 25911, 25925, 25970, 26272, 26543, 27073, 27837, 30204, 30352, 30590, 31295, 32660, 32771, 32929, 33167, 33510, 33533, 33776, 34241, 34865, 34996, 35493, 63747, 36764, 37678, 38599, 39015, 39640, 40723, 21741, 26011, 26354, 26767, 31296, 35895, 40288, 22256, 22372, 23825, 26118, 26801, 26829, 28414, 29736, 34974, 39908, 27752, 63748, 39592, 20379, 20844, 20849, 21151, 23380, 24037, 24656, 24685, 25329, 25511, 25915, 29657, 31354, 34467, 36002, 38799, 20018, 23521, 25096, 26524, 29916, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31185, 33747, 35463, 35506, 36328, 36942, 37707, 38982, 24275, 27112, 34303, 37101, 63749, 20896, 23448, 23532, 24931, 26874, 27454, 28748, 29743, 29912, 31649, 32592, 33733, 35264, 36011, 38364, 39208, 21038, 24669, 25324, 36866, 20362, 20809, 21281, 22745, 24291, 26336, 27960, 28826, 29378, 29654, 31568, 33009, 37979, 21350, 25499, 32619, 20054, 20608, 22602, 22750, 24618, 24871, 25296, 27088, 39745, 23439, 32024, 32945, 36703, 20132, 20689, 21676, 21932, 23308, 23968, 24039, 25898, 25934, 26657, 27211, 29409, 30350, 30703, 32094, 32761, 33184, 34126, 34527, 36611, 36686, 37066, 39171, 39509, 39851, 19992, 20037, 20061, 20167, 20465, 20855, 21246, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21312, 21475, 21477, 21646, 22036, 22389, 22434, 23495, 23943, 24272, 25084, 25304, 25937, 26552, 26601, 27083, 27472, 27590, 27628, 27714, 28317, 28792, 29399, 29590, 29699, 30655, 30697, 31350, 32127, 32777, 33276, 33285, 33290, 33503, 34914, 35635, 36092, 36544, 36881, 37041, 37476, 37558, 39378, 39493, 40169, 40407, 40860, 22283, 23616, 33738, 38816, 38827, 40628, 21531, 31384, 32676, 35033, 36557, 37089, 22528, 23624, 25496, 31391, 23470, 24339, 31353, 31406, 33422, 36524, 20518, 21048, 21240, 21367, 22280, 25331, 25458, 27402, 28099, 30519, 21413, 29527, 34152, 36470, 38357, 26426, 27331, 28528, 35437, 36556, 39243, 63750, 26231, 27512, 36020, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 39740, 63751, 21483, 22317, 22862, 25542, 27131, 29674, 30789, 31418, 31429, 31998, 33909, 35215, 36211, 36917, 38312, 21243, 22343, 30023, 31584, 33740, 37406, 63752, 27224, 20811, 21067, 21127, 25119, 26840, 26997, 38553, 20677, 21156, 21220, 25027, 26020, 26681, 27135, 29822, 31563, 33465, 33771, 35250, 35641, 36817, 39241, 63753, 20170, 22935, 25810, 26129, 27278, 29748, 31105, 31165, 33449, 34942, 34943, 35167, 63754, 37670, 20235, 21450, 24613, 25201, 27762, 32026, 32102, 20120, 20834, 30684, 32943, 20225, 20238, 20854, 20864, 21980, 22120, 22331, 22522, 22524, 22804, 22855, 22931, 23492, 23696, 23822, 24049, 24190, 24524, 25216, 26071, 26083, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26398, 26399, 26462, 26827, 26820, 27231, 27450, 27683, 27773, 27778, 28103, 29592, 29734, 29738, 29826, 29859, 30072, 30079, 30849, 30959, 31041, 31047, 31048, 31098, 31637, 32e3, 32186, 32648, 32774, 32813, 32908, 35352, 35663, 35912, 36215, 37665, 37668, 39138, 39249, 39438, 39439, 39525, 40594, 32202, 20342, 21513, 25326, 26708, 37329, 21931, 20794, 63755, 63756, 23068, 25062, 63757, 25295, 25343, 63758, 63759, 63760, 63761, 63762, 63763, 37027, 63764, 63765, 63766, 63767, 63768, 35582, 63769, 63770, 63771, 63772, 26262, 63773, 29014, 63774, 63775, 38627, 63776, 25423, 25466, 21335, 63777, 26511, 26976, 28275, 63778, 30007, 63779, 63780, 63781, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32013, 63782, 63783, 34930, 22218, 23064, 63784, 63785, 63786, 63787, 63788, 20035, 63789, 20839, 22856, 26608, 32784, 63790, 22899, 24180, 25754, 31178, 24565, 24684, 25288, 25467, 23527, 23511, 21162, 63791, 22900, 24361, 24594, 63792, 63793, 63794, 29785, 63795, 63796, 63797, 63798, 63799, 63800, 39377, 63801, 63802, 63803, 63804, 63805, 63806, 63807, 63808, 63809, 63810, 63811, 28611, 63812, 63813, 33215, 36786, 24817, 63814, 63815, 33126, 63816, 63817, 23615, 63818, 63819, 63820, 63821, 63822, 63823, 63824, 63825, 23273, 35365, 26491, 32016, 63826, 63827, 63828, 63829, 63830, 63831, 33021, 63832, 63833, 23612, 27877, 21311, 28346, 22810, 33590, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20025, 20150, 20294, 21934, 22296, 22727, 24406, 26039, 26086, 27264, 27573, 28237, 30701, 31471, 31774, 32222, 34507, 34962, 37170, 37723, 25787, 28606, 29562, 30136, 36948, 21846, 22349, 25018, 25812, 26311, 28129, 28251, 28525, 28601, 30192, 32835, 33213, 34113, 35203, 35527, 35674, 37663, 27795, 30035, 31572, 36367, 36957, 21776, 22530, 22616, 24162, 25095, 25758, 26848, 30070, 31958, 34739, 40680, 20195, 22408, 22382, 22823, 23565, 23729, 24118, 24453, 25140, 25825, 29619, 33274, 34955, 36024, 38538, 40667, 23429, 24503, 24755, 20498, 20992, 21040, 22294, 22581, 22615, 23566, 23648, 23798, 23947, 24230, 24466, 24764, 25361, 25481, 25623, 26691, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26873, 27330, 28120, 28193, 28372, 28644, 29182, 30428, 30585, 31153, 31291, 33796, 35241, 36077, 36339, 36424, 36867, 36884, 36947, 37117, 37709, 38518, 38876, 27602, 28678, 29272, 29346, 29544, 30563, 31167, 31716, 32411, 35712, 22697, 24775, 25958, 26109, 26302, 27788, 28958, 29129, 35930, 38931, 20077, 31361, 20189, 20908, 20941, 21205, 21516, 24999, 26481, 26704, 26847, 27934, 28540, 30140, 30643, 31461, 33012, 33891, 37509, 20828, 26007, 26460, 26515, 30168, 31431, 33651, 63834, 35910, 36887, 38957, 23663, 33216, 33434, 36929, 36975, 37389, 24471, 23965, 27225, 29128, 30331, 31561, 34276, 35588, 37159, 39472, 21895, 25078, 63835, 30313, 32645, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 34367, 34746, 35064, 37007, 63836, 27931, 28889, 29662, 32097, 33853, 63837, 37226, 39409, 63838, 20098, 21365, 27396, 27410, 28734, 29211, 34349, 40478, 21068, 36771, 23888, 25829, 25900, 27414, 28651, 31811, 32412, 34253, 35172, 35261, 25289, 33240, 34847, 24266, 26391, 28010, 29436, 29701, 29807, 34690, 37086, 20358, 23821, 24480, 33802, 20919, 25504, 30053, 20142, 20486, 20841, 20937, 26753, 27153, 31918, 31921, 31975, 33391, 35538, 36635, 37327, 20406, 20791, 21237, 21570, 24300, 24942, 25150, 26053, 27354, 28670, 31018, 34268, 34851, 38317, 39522, 39530, 40599, 40654, 21147, 26310, 27511, 28701, 31019, 36706, 38722, 24976, 25088, 25891, 28451, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29001, 29833, 32244, 32879, 34030, 36646, 36899, 37706, 20925, 21015, 21155, 27916, 28872, 35010, 24265, 25986, 27566, 28610, 31806, 29557, 20196, 20278, 22265, 63839, 23738, 23994, 24604, 29618, 31533, 32666, 32718, 32838, 36894, 37428, 38646, 38728, 38936, 40801, 20363, 28583, 31150, 37300, 38583, 21214, 63840, 25736, 25796, 27347, 28510, 28696, 29200, 30439, 32769, 34310, 34396, 36335, 36613, 38706, 39791, 40442, 40565, 30860, 31103, 32160, 33737, 37636, 40575, 40595, 35542, 22751, 24324, 26407, 28711, 29903, 31840, 32894, 20769, 28712, 29282, 30922, 36034, 36058, 36084, 38647, 20102, 20698, 23534, 24278, 26009, 29134, 30274, 30637, 32842, 34044, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36988, 39719, 40845, 22744, 23105, 23650, 27155, 28122, 28431, 30267, 32047, 32311, 34078, 35128, 37860, 38475, 21129, 26066, 26611, 27060, 27969, 28316, 28687, 29705, 29792, 30041, 30244, 30827, 35628, 39006, 20845, 25134, 38520, 20374, 20523, 23833, 28138, 32184, 36650, 24459, 24900, 26647, 63841, 38534, 21202, 32907, 20956, 20940, 26974, 31260, 32190, 33777, 38517, 20442, 21033, 21400, 21519, 21774, 23653, 24743, 26446, 26792, 28012, 29313, 29432, 29702, 29827, 63842, 30178, 31852, 32633, 32696, 33673, 35023, 35041, 37324, 37328, 38626, 39881, 21533, 28542, 29136, 29848, 34298, 36522, 38563, 40023, 40607, 26519, 28107, 29747, 33256, 38678, 30764, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31435, 31520, 31890, 25705, 29802, 30194, 30908, 30952, 39340, 39764, 40635, 23518, 24149, 28448, 33180, 33707, 37e3, 19975, 21325, 23081, 24018, 24398, 24930, 25405, 26217, 26364, 28415, 28459, 28771, 30622, 33836, 34067, 34875, 36627, 39237, 39995, 21788, 25273, 26411, 27819, 33545, 35178, 38778, 20129, 22916, 24536, 24537, 26395, 32178, 32596, 33426, 33579, 33725, 36638, 37017, 22475, 22969, 23186, 23504, 26151, 26522, 26757, 27599, 29028, 32629, 36023, 36067, 36993, 39749, 33032, 35978, 38476, 39488, 40613, 23391, 27667, 29467, 30450, 30431, 33804, 20906, 35219, 20813, 20885, 21193, 26825, 27796, 30468, 30496, 32191, 32236, 38754, 40629, 28357, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 34065, 20901, 21517, 21629, 26126, 26269, 26919, 28319, 30399, 30609, 33559, 33986, 34719, 37225, 37528, 40180, 34946, 20398, 20882, 21215, 22982, 24125, 24917, 25720, 25721, 26286, 26576, 27169, 27597, 27611, 29279, 29281, 29761, 30520, 30683, 32791, 33468, 33541, 35584, 35624, 35980, 26408, 27792, 29287, 30446, 30566, 31302, 40361, 27519, 27794, 22818, 26406, 33945, 21359, 22675, 22937, 24287, 25551, 26164, 26483, 28218, 29483, 31447, 33495, 37672, 21209, 24043, 25006, 25035, 25098, 25287, 25771, 26080, 26969, 27494, 27595, 28961, 29687, 30045, 32326, 33310, 33538, 34154, 35491, 36031, 38695, 40289, 22696, 40664, 20497, 21006, 21563, 21839, 25991, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 27766, 32010, 32011, 32862, 34442, 38272, 38639, 21247, 27797, 29289, 21619, 23194, 23614, 23883, 24396, 24494, 26410, 26806, 26979, 28220, 28228, 30473, 31859, 32654, 34183, 35598, 36855, 38753, 40692, 23735, 24758, 24845, 25003, 25935, 26107, 26108, 27665, 27887, 29599, 29641, 32225, 38292, 23494, 34588, 35600, 21085, 21338, 25293, 25615, 25778, 26420, 27192, 27850, 29632, 29854, 31636, 31893, 32283, 33162, 33334, 34180, 36843, 38649, 39361, 20276, 21322, 21453, 21467, 25292, 25644, 25856, 26001, 27075, 27886, 28504, 29677, 30036, 30242, 30436, 30460, 30928, 30971, 31020, 32070, 33324, 34784, 36820, 38930, 39151, 21187, 25300, 25765, 28196, 28497, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30332, 36299, 37297, 37474, 39662, 39747, 20515, 20621, 22346, 22952, 23592, 24135, 24439, 25151, 25918, 26041, 26049, 26121, 26507, 27036, 28354, 30917, 32033, 32938, 33152, 33323, 33459, 33953, 34444, 35370, 35607, 37030, 38450, 40848, 20493, 20467, 63843, 22521, 24472, 25308, 25490, 26479, 28227, 28953, 30403, 32972, 32986, 35060, 35061, 35097, 36064, 36649, 37197, 38506, 20271, 20336, 24091, 26575, 26658, 30333, 30334, 39748, 24161, 27146, 29033, 29140, 30058, 63844, 32321, 34115, 34281, 39132, 20240, 31567, 32624, 38309, 20961, 24070, 26805, 27710, 27726, 27867, 29359, 31684, 33539, 27861, 29754, 20731, 21128, 22721, 25816, 27287, 29863, 30294, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 30887, 34327, 38370, 38713, 63845, 21342, 24321, 35722, 36776, 36783, 37002, 21029, 30629, 40009, 40712, 19993, 20482, 20853, 23643, 24183, 26142, 26170, 26564, 26821, 28851, 29953, 30149, 31177, 31453, 36647, 39200, 39432, 20445, 22561, 22577, 23542, 26222, 27493, 27921, 28282, 28541, 29668, 29995, 33769, 35036, 35091, 35676, 36628, 20239, 20693, 21264, 21340, 23443, 24489, 26381, 31119, 33145, 33583, 34068, 35079, 35206, 36665, 36667, 39333, 39954, 26412, 20086, 20472, 22857, 23553, 23791, 23792, 25447, 26834, 28925, 29090, 29739, 32299, 34028, 34562, 36898, 37586, 40179, 19981, 20184, 20463, 20613, 21078, 21103, 21542, 21648, 22496, 22827, 23142, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 23386, 23413, 23500, 24220, 63846, 25206, 25975, 26023, 28014, 28325, 29238, 31526, 31807, 32566, 33104, 33105, 33178, 33344, 33433, 33705, 35331, 36e3, 36070, 36091, 36212, 36282, 37096, 37340, 38428, 38468, 39385, 40167, 21271, 20998, 21545, 22132, 22707, 22868, 22894, 24575, 24996, 25198, 26128, 27774, 28954, 30406, 31881, 31966, 32027, 33452, 36033, 38640, 63847, 20315, 24343, 24447, 25282, 23849, 26379, 26842, 30844, 32323, 40300, 19989, 20633, 21269, 21290, 21329, 22915, 23138, 24199, 24754, 24970, 25161, 25209, 26e3, 26503, 27047, 27604, 27606, 27607, 27608, 27832, 63848, 29749, 30202, 30738, 30865, 31189, 31192, 31875, 32203, 32737, 32933, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 33086, 33218, 33778, 34586, 35048, 35513, 35692, 36027, 37145, 38750, 39131, 40763, 22188, 23338, 24428, 25996, 27315, 27567, 27996, 28657, 28693, 29277, 29613, 36007, 36051, 38971, 24977, 27703, 32856, 39425, 20045, 20107, 20123, 20181, 20282, 20284, 20351, 20447, 20735, 21490, 21496, 21766, 21987, 22235, 22763, 22882, 23057, 23531, 23546, 23556, 24051, 24107, 24473, 24605, 25448, 26012, 26031, 26614, 26619, 26797, 27515, 27801, 27863, 28195, 28681, 29509, 30722, 31038, 31040, 31072, 31169, 31721, 32023, 32114, 32902, 33293, 33678, 34001, 34503, 35039, 35408, 35422, 35613, 36060, 36198, 36781, 37034, 39164, 39391, 40605, 21066, 63849, 26388, 63850, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20632, 21034, 23665, 25955, 27733, 29642, 29987, 30109, 31639, 33948, 37240, 38704, 20087, 25746, 27578, 29022, 34217, 19977, 63851, 26441, 26862, 28183, 33439, 34072, 34923, 25591, 28545, 37394, 39087, 19978, 20663, 20687, 20767, 21830, 21930, 22039, 23360, 23577, 23776, 24120, 24202, 24224, 24258, 24819, 26705, 27233, 28248, 29245, 29248, 29376, 30456, 31077, 31665, 32724, 35059, 35316, 35443, 35937, 36062, 38684, 22622, 29885, 36093, 21959, 63852, 31329, 32034, 33394, 29298, 29983, 29989, 63853, 31513, 22661, 22779, 23996, 24207, 24246, 24464, 24661, 25234, 25471, 25933, 26257, 26329, 26360, 26646, 26866, 29312, 29790, 31598, 32110, 32214, 32626, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32997, 33298, 34223, 35199, 35475, 36893, 37604, 40653, 40736, 22805, 22893, 24109, 24796, 26132, 26227, 26512, 27728, 28101, 28511, 30707, 30889, 33990, 37323, 37675, 20185, 20682, 20808, 21892, 23307, 23459, 25159, 25982, 26059, 28210, 29053, 29697, 29764, 29831, 29887, 30316, 31146, 32218, 32341, 32680, 33146, 33203, 33337, 34330, 34796, 35445, 36323, 36984, 37521, 37925, 39245, 39854, 21352, 23633, 26964, 27844, 27945, 28203, 33292, 34203, 35131, 35373, 35498, 38634, 40807, 21089, 26297, 27570, 32406, 34814, 36109, 38275, 38493, 25885, 28041, 29166, 63854, 22478, 22995, 23468, 24615, 24826, 25104, 26143, 26207, 29481, 29689, 30427, 30465, 31596, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32854, 32882, 33125, 35488, 37266, 19990, 21218, 27506, 27927, 31237, 31545, 32048, 63855, 36016, 21484, 22063, 22609, 23477, 23567, 23569, 24034, 25152, 25475, 25620, 26157, 26803, 27836, 28040, 28335, 28703, 28836, 29138, 29990, 30095, 30094, 30233, 31505, 31712, 31787, 32032, 32057, 34092, 34157, 34311, 35380, 36877, 36961, 37045, 37559, 38902, 39479, 20439, 23660, 26463, 28049, 31903, 32396, 35606, 36118, 36895, 23403, 24061, 25613, 33984, 36956, 39137, 29575, 23435, 24730, 26494, 28126, 35359, 35494, 36865, 38924, 21047, 63856, 28753, 30862, 37782, 34928, 37335, 20462, 21463, 22013, 22234, 22402, 22781, 23234, 23432, 23723, 23744, 24101, 24833, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 25101, 25163, 25480, 25628, 25910, 25976, 27193, 27530, 27700, 27929, 28465, 29159, 29417, 29560, 29703, 29874, 30246, 30561, 31168, 31319, 31466, 31929, 32143, 32172, 32353, 32670, 33065, 33585, 33936, 34010, 34282, 34966, 35504, 35728, 36664, 36930, 36995, 37228, 37526, 37561, 38539, 38567, 38568, 38614, 38656, 38920, 39318, 39635, 39706, 21460, 22654, 22809, 23408, 23487, 28113, 28506, 29087, 29729, 29881, 32901, 33789, 24033, 24455, 24490, 24642, 26092, 26642, 26991, 27219, 27529, 27957, 28147, 29667, 30462, 30636, 31565, 32020, 33059, 33308, 33600, 34036, 34147, 35426, 35524, 37255, 37662, 38918, 39348, 25100, 34899, 36848, 37477, 23815, 23847, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 23913, 29791, 33181, 34664, 28629, 25342, 32722, 35126, 35186, 19998, 20056, 20711, 21213, 21319, 25215, 26119, 32361, 34821, 38494, 20365, 21273, 22070, 22987, 23204, 23608, 23630, 23629, 24066, 24337, 24643, 26045, 26159, 26178, 26558, 26612, 29468, 30690, 31034, 32709, 33940, 33997, 35222, 35430, 35433, 35553, 35925, 35962, 22516, 23508, 24335, 24687, 25325, 26893, 27542, 28252, 29060, 31698, 34645, 35672, 36606, 39135, 39166, 20280, 20353, 20449, 21627, 23072, 23480, 24892, 26032, 26216, 29180, 30003, 31070, 32051, 33102, 33251, 33688, 34218, 34254, 34563, 35338, 36523, 36763, 63857, 36805, 22833, 23460, 23526, 24713, 23529, 23563, 24515, 27777, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63858, 28145, 28683, 29978, 33455, 35574, 20160, 21313, 63859, 38617, 27663, 20126, 20420, 20818, 21854, 23077, 23784, 25105, 29273, 33469, 33706, 34558, 34905, 35357, 38463, 38597, 39187, 40201, 40285, 22538, 23731, 23997, 24132, 24801, 24853, 25569, 27138, 28197, 37122, 37716, 38990, 39952, 40823, 23433, 23736, 25353, 26191, 26696, 30524, 38593, 38797, 38996, 39839, 26017, 35585, 36555, 38332, 21813, 23721, 24022, 24245, 26263, 30284, 33780, 38343, 22739, 25276, 29390, 40232, 20208, 22830, 24591, 26171, 27523, 31207, 40230, 21395, 21696, 22467, 23830, 24859, 26326, 28079, 30861, 33406, 38552, 38724, 21380, 25212, 25494, 28082, 32266, 33099, 38989, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 27387, 32588, 40367, 40474, 20063, 20539, 20918, 22812, 24825, 25590, 26928, 29242, 32822, 63860, 37326, 24369, 63861, 63862, 32004, 33509, 33903, 33979, 34277, 36493, 63863, 20335, 63864, 63865, 22756, 23363, 24665, 25562, 25880, 25965, 26264, 63866, 26954, 27171, 27915, 28673, 29036, 30162, 30221, 31155, 31344, 63867, 32650, 63868, 35140, 63869, 35731, 37312, 38525, 63870, 39178, 22276, 24481, 26044, 28417, 30208, 31142, 35486, 39341, 39770, 40812, 20740, 25014, 25233, 27277, 33222, 20547, 22576, 24422, 28937, 35328, 35578, 23420, 34326, 20474, 20796, 22196, 22852, 25513, 28153, 23978, 26989, 20870, 20104, 20313, 63871, 63872, 63873, 22914, 63874, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63875, 27487, 27741, 63876, 29877, 30998, 63877, 33287, 33349, 33593, 36671, 36701, 63878, 39192, 63879, 63880, 63881, 20134, 63882, 22495, 24441, 26131, 63883, 63884, 30123, 32377, 35695, 63885, 36870, 39515, 22181, 22567, 23032, 23071, 23476, 63886, 24310, 63887, 63888, 25424, 25403, 63889, 26941, 27783, 27839, 28046, 28051, 28149, 28436, 63890, 28895, 28982, 29017, 63891, 29123, 29141, 63892, 30799, 30831, 63893, 31605, 32227, 63894, 32303, 63895, 34893, 36575, 63896, 63897, 63898, 37467, 63899, 40182, 63900, 63901, 63902, 24709, 28037, 63903, 29105, 63904, 63905, 38321, 21421, 63906, 63907, 63908, 26579, 63909, 28814, 28976, 29744, 33398, 33490, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63910, 38331, 39653, 40573, 26308, 63911, 29121, 33865, 63912, 63913, 22603, 63914, 63915, 23992, 24433, 63916, 26144, 26254, 27001, 27054, 27704, 27891, 28214, 28481, 28634, 28699, 28719, 29008, 29151, 29552, 63917, 29787, 63918, 29908, 30408, 31310, 32403, 63919, 63920, 33521, 35424, 36814, 63921, 37704, 63922, 38681, 63923, 63924, 20034, 20522, 63925, 21e3, 21473, 26355, 27757, 28618, 29450, 30591, 31330, 33454, 34269, 34306, 63926, 35028, 35427, 35709, 35947, 63927, 37555, 63928, 38675, 38928, 20116, 20237, 20425, 20658, 21320, 21566, 21555, 21978, 22626, 22714, 22887, 23067, 23524, 24735, 63929, 25034, 25942, 26111, 26212, 26791, 27738, 28595, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 28879, 29100, 29522, 31613, 34568, 35492, 39986, 40711, 23627, 27779, 29508, 29577, 37434, 28331, 29797, 30239, 31337, 32277, 34314, 20800, 22725, 25793, 29934, 29973, 30320, 32705, 37013, 38605, 39252, 28198, 29926, 31401, 31402, 33253, 34521, 34680, 35355, 23113, 23436, 23451, 26785, 26880, 28003, 29609, 29715, 29740, 30871, 32233, 32747, 33048, 33109, 33694, 35916, 38446, 38929, 26352, 24448, 26106, 26505, 27754, 29579, 20525, 23043, 27498, 30702, 22806, 23916, 24013, 29477, 30031, 63930, 63931, 20709, 20985, 22575, 22829, 22934, 23002, 23525, 63932, 63933, 23970, 25303, 25622, 25747, 25854, 63934, 26332, 63935, 27208, 63936, 29183, 29796, 63937, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31368, 31407, 32327, 32350, 32768, 33136, 63938, 34799, 35201, 35616, 36953, 63939, 36992, 39250, 24958, 27442, 28020, 32287, 35109, 36785, 20433, 20653, 20887, 21191, 22471, 22665, 23481, 24248, 24898, 27029, 28044, 28263, 28342, 29076, 29794, 29992, 29996, 32883, 33592, 33993, 36362, 37780, 37854, 63940, 20110, 20305, 20598, 20778, 21448, 21451, 21491, 23431, 23507, 23588, 24858, 24962, 26100, 29275, 29591, 29760, 30402, 31056, 31121, 31161, 32006, 32701, 33419, 34261, 34398, 36802, 36935, 37109, 37354, 38533, 38632, 38633, 21206, 24423, 26093, 26161, 26671, 29020, 31286, 37057, 38922, 20113, 63941, 27218, 27550, 28560, 29065, 32792, 33464, 34131, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36939, 38549, 38642, 38907, 34074, 39729, 20112, 29066, 38596, 20803, 21407, 21729, 22291, 22290, 22435, 23195, 23236, 23491, 24616, 24895, 25588, 27781, 27961, 28274, 28304, 29232, 29503, 29783, 33489, 34945, 36677, 36960, 63942, 38498, 39e3, 40219, 26376, 36234, 37470, 20301, 20553, 20702, 21361, 22285, 22996, 23041, 23561, 24944, 26256, 28205, 29234, 29771, 32239, 32963, 33806, 33894, 34111, 34655, 34907, 35096, 35586, 36949, 38859, 39759, 20083, 20369, 20754, 20842, 63943, 21807, 21929, 23418, 23461, 24188, 24189, 24254, 24736, 24799, 24840, 24841, 25540, 25912, 26377, 63944, 26580, 26586, 63945, 26977, 26978, 27833, 27943, 63946, 28216, 63947, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 28641, 29494, 29495, 63948, 29788, 30001, 63949, 30290, 63950, 63951, 32173, 33278, 33848, 35029, 35480, 35547, 35565, 36400, 36418, 36938, 36926, 36986, 37193, 37321, 37742, 63952, 63953, 22537, 63954, 27603, 32905, 32946, 63955, 63956, 20801, 22891, 23609, 63957, 63958, 28516, 29607, 32996, 36103, 63959, 37399, 38287, 63960, 63961, 63962, 63963, 32895, 25102, 28700, 32104, 34701, 63964, 22432, 24681, 24903, 27575, 35518, 37504, 38577, 20057, 21535, 28139, 34093, 38512, 38899, 39150, 25558, 27875, 37009, 20957, 25033, 33210, 40441, 20381, 20506, 20736, 23452, 24847, 25087, 25836, 26885, 27589, 30097, 30691, 32681, 33380, 34191, 34811, 34915, 35516, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 35696, 37291, 20108, 20197, 20234, 63965, 63966, 22839, 23016, 63967, 24050, 24347, 24411, 24609, 63968, 63969, 63970, 63971, 29246, 29669, 63972, 30064, 30157, 63973, 31227, 63974, 32780, 32819, 32900, 33505, 33617, 63975, 63976, 36029, 36019, 36999, 63977, 63978, 39156, 39180, 63979, 63980, 28727, 30410, 32714, 32716, 32764, 35610, 20154, 20161, 20995, 21360, 63981, 21693, 22240, 23035, 23493, 24341, 24525, 28270, 63982, 63983, 32106, 33589, 63984, 34451, 35469, 63985, 38765, 38775, 63986, 63987, 19968, 20314, 20350, 22777, 26085, 28322, 36920, 37808, 39353, 20219, 22764, 22922, 23001, 24641, 63988, 63989, 31252, 63990, 33615, 36035, 20837, 21316, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 63991, 63992, 63993, 20173, 21097, 23381, 33471, 20180, 21050, 21672, 22985, 23039, 23376, 23383, 23388, 24675, 24904, 28363, 28825, 29038, 29574, 29943, 30133, 30913, 32043, 32773, 33258, 33576, 34071, 34249, 35566, 36039, 38604, 20316, 21242, 22204, 26027, 26152, 28796, 28856, 29237, 32189, 33421, 37196, 38592, 40306, 23409, 26855, 27544, 28538, 30430, 23697, 26283, 28507, 31668, 31786, 34870, 38620, 19976, 20183, 21280, 22580, 22715, 22767, 22892, 23559, 24115, 24196, 24373, 25484, 26290, 26454, 27167, 27299, 27404, 28479, 29254, 63994, 29520, 29835, 31456, 31911, 33144, 33247, 33255, 33674, 33900, 34083, 34196, 34255, 35037, 36115, 37292, 38263, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38556, 20877, 21705, 22312, 23472, 25165, 26448, 26685, 26771, 28221, 28371, 28797, 32289, 35009, 36001, 36617, 40779, 40782, 29229, 31631, 35533, 37658, 20295, 20302, 20786, 21632, 22992, 24213, 25269, 26485, 26990, 27159, 27822, 28186, 29401, 29482, 30141, 31672, 32053, 33511, 33785, 33879, 34295, 35419, 36015, 36487, 36889, 37048, 38606, 40799, 21219, 21514, 23265, 23490, 25688, 25973, 28404, 29380, 63995, 30340, 31309, 31515, 31821, 32318, 32735, 33659, 35627, 36042, 36196, 36321, 36447, 36842, 36857, 36969, 37841, 20291, 20346, 20659, 20840, 20856, 21069, 21098, 22625, 22652, 22880, 23560, 23637, 24283, 24731, 25136, 26643, 27583, 27656, 28593, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29006, 29728, 3e4, 30008, 30033, 30322, 31564, 31627, 31661, 31686, 32399, 35438, 36670, 36681, 37439, 37523, 37666, 37931, 38651, 39002, 39019, 39198, 20999, 25130, 25240, 27993, 30308, 31434, 31680, 32118, 21344, 23742, 24215, 28472, 28857, 31896, 38673, 39822, 40670, 25509, 25722, 34678, 19969, 20117, 20141, 20572, 20597, 21576, 22979, 23450, 24128, 24237, 24311, 24449, 24773, 25402, 25919, 25972, 26060, 26230, 26232, 26622, 26984, 27273, 27491, 27712, 28096, 28136, 28191, 28254, 28702, 28833, 29582, 29693, 30010, 30555, 30855, 31118, 31243, 31357, 31934, 32142, 33351, 35330, 35562, 35998, 37165, 37194, 37336, 37478, 37580, 37664, 38662, 38742, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38748, 38914, 40718, 21046, 21137, 21884, 22564, 24093, 24351, 24716, 25552, 26799, 28639, 31085, 31532, 33229, 34234, 35069, 35576, 36420, 37261, 38500, 38555, 38717, 38988, 40778, 20430, 20806, 20939, 21161, 22066, 24340, 24427, 25514, 25805, 26089, 26177, 26362, 26361, 26397, 26781, 26839, 27133, 28437, 28526, 29031, 29157, 29226, 29866, 30522, 31062, 31066, 31199, 31264, 31381, 31895, 31967, 32068, 32368, 32903, 34299, 34468, 35412, 35519, 36249, 36481, 36896, 36973, 37347, 38459, 38613, 40165, 26063, 31751, 36275, 37827, 23384, 23562, 21330, 25305, 29469, 20519, 23447, 24478, 24752, 24939, 26837, 28121, 29742, 31278, 32066, 32156, 32305, 33131, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36394, 36405, 37758, 37912, 20304, 22352, 24038, 24231, 25387, 32618, 20027, 20303, 20367, 20570, 23005, 32964, 21610, 21608, 22014, 22863, 23449, 24030, 24282, 26205, 26417, 26609, 26666, 27880, 27954, 28234, 28557, 28855, 29664, 30087, 31820, 32002, 32044, 32162, 33311, 34523, 35387, 35461, 36208, 36490, 36659, 36913, 37198, 37202, 37956, 39376, 31481, 31909, 20426, 20737, 20934, 22472, 23535, 23803, 26201, 27197, 27994, 28310, 28652, 28940, 30063, 31459, 34850, 36897, 36981, 38603, 39423, 33537, 20013, 20210, 34886, 37325, 21373, 27355, 26987, 27713, 33914, 22686, 24974, 26366, 25327, 28893, 29969, 30151, 32338, 33976, 35657, 36104, 20043, 21482, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21675, 22320, 22336, 24535, 25345, 25351, 25711, 25903, 26088, 26234, 26525, 26547, 27490, 27744, 27802, 28460, 30693, 30757, 31049, 31063, 32025, 32930, 33026, 33267, 33437, 33463, 34584, 35468, 63996, 36100, 36286, 36978, 30452, 31257, 31287, 32340, 32887, 21767, 21972, 22645, 25391, 25634, 26185, 26187, 26733, 27035, 27524, 27941, 28337, 29645, 29800, 29857, 30043, 30137, 30433, 30494, 30603, 31206, 32265, 32285, 33275, 34095, 34967, 35386, 36049, 36587, 36784, 36914, 37805, 38499, 38515, 38663, 20356, 21489, 23018, 23241, 24089, 26702, 29894, 30142, 31209, 31378, 33187, 34541, 36074, 36300, 36845, 26015, 26389, 63997, 22519, 28503, 32221, 36655, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 37878, 38598, 24501, 25074, 28548, 19988, 20376, 20511, 21449, 21983, 23919, 24046, 27425, 27492, 30923, 31642, 63998, 36425, 36554, 36974, 25417, 25662, 30528, 31364, 37679, 38015, 40810, 25776, 28591, 29158, 29864, 29914, 31428, 31762, 32386, 31922, 32408, 35738, 36106, 38013, 39184, 39244, 21049, 23519, 25830, 26413, 32046, 20717, 21443, 22649, 24920, 24921, 25082, 26028, 31449, 35730, 35734, 20489, 20513, 21109, 21809, 23100, 24288, 24432, 24884, 25950, 26124, 26166, 26274, 27085, 28356, 28466, 29462, 30241, 31379, 33081, 33369, 33750, 33980, 20661, 22512, 23488, 23528, 24425, 25505, 30758, 32181, 33756, 34081, 37319, 37365, 20874, 26613, 31574, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36012, 20932, 22971, 24765, 34389, 20508, 63999, 21076, 23610, 24957, 25114, 25299, 25842, 26021, 28364, 30240, 33034, 36448, 38495, 38587, 20191, 21315, 21912, 22825, 24029, 25797, 27849, 28154, 29588, 31359, 33307, 34214, 36068, 36368, 36983, 37351, 38369, 38433, 38854, 20984, 21746, 21894, 24505, 25764, 28552, 32180, 36639, 36685, 37941, 20681, 23574, 27838, 28155, 29979, 30651, 31805, 31844, 35449, 35522, 22558, 22974, 24086, 25463, 29266, 30090, 30571, 35548, 36028, 36626, 24307, 26228, 28152, 32893, 33729, 35531, 38737, 39894, 64e3, 21059, 26367, 28053, 28399, 32224, 35558, 36910, 36958, 39636, 21021, 21119, 21736, 24980, 25220, 25307, 26786, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 26898, 26970, 27189, 28818, 28966, 30813, 30977, 30990, 31186, 31245, 32918, 33400, 33493, 33609, 34121, 35970, 36229, 37218, 37259, 37294, 20419, 22225, 29165, 30679, 34560, 35320, 23544, 24534, 26449, 37032, 21474, 22618, 23541, 24740, 24961, 25696, 32317, 32880, 34085, 37507, 25774, 20652, 23828, 26368, 22684, 25277, 25512, 26894, 27e3, 27166, 28267, 30394, 31179, 33467, 33833, 35535, 36264, 36861, 37138, 37195, 37276, 37648, 37656, 37786, 38619, 39478, 39949, 19985, 30044, 31069, 31482, 31569, 31689, 32302, 33988, 36441, 36468, 36600, 36880, 26149, 26943, 29763, 20986, 26414, 40668, 20805, 24544, 27798, 34802, 34909, 34935, 24756, 33205, 33795, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 36101, 21462, 21561, 22068, 23094, 23601, 28810, 32736, 32858, 33030, 33261, 36259, 37257, 39519, 40434, 20596, 20164, 21408, 24827, 28204, 23652, 20360, 20516, 21988, 23769, 24159, 24677, 26772, 27835, 28100, 29118, 30164, 30196, 30305, 31258, 31305, 32199, 32251, 32622, 33268, 34473, 36636, 38601, 39347, 40786, 21063, 21189, 39149, 35242, 19971, 26578, 28422, 20405, 23522, 26517, 27784, 28024, 29723, 30759, 37341, 37756, 34756, 31204, 31281, 24555, 20182, 21668, 21822, 22702, 22949, 24816, 25171, 25302, 26422, 26965, 33333, 38464, 39345, 39389, 20524, 21331, 21828, 22396, 64001, 25176, 64002, 25826, 26219, 26589, 28609, 28655, 29730, 29752, 35351, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 37944, 21585, 22022, 22374, 24392, 24986, 27470, 28760, 28845, 32187, 35477, 22890, 33067, 25506, 30472, 32829, 36010, 22612, 25645, 27067, 23445, 24081, 28271, 64003, 34153, 20812, 21488, 22826, 24608, 24907, 27526, 27760, 27888, 31518, 32974, 33492, 36294, 37040, 39089, 64004, 25799, 28580, 25745, 25860, 20814, 21520, 22303, 35342, 24927, 26742, 64005, 30171, 31570, 32113, 36890, 22534, 27084, 33151, 35114, 36864, 38969, 20600, 22871, 22956, 25237, 36879, 39722, 24925, 29305, 38358, 22369, 23110, 24052, 25226, 25773, 25850, 26487, 27874, 27966, 29228, 29750, 30772, 32631, 33453, 36315, 38935, 21028, 22338, 26495, 29256, 29923, 36009, 36774, 37393, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 38442, 20843, 21485, 25420, 20329, 21764, 24726, 25943, 27803, 28031, 29260, 29437, 31255, 35207, 35997, 24429, 28558, 28921, 33192, 24846, 20415, 20559, 25153, 29255, 31687, 32232, 32745, 36941, 38829, 39449, 36022, 22378, 24179, 26544, 33805, 35413, 21536, 23318, 24163, 24290, 24330, 25987, 32954, 34109, 38281, 38491, 20296, 21253, 21261, 21263, 21638, 21754, 22275, 24067, 24598, 25243, 25265, 25429, 64006, 27873, 28006, 30129, 30770, 32990, 33071, 33502, 33889, 33970, 34957, 35090, 36875, 37610, 39165, 39825, 24133, 26292, 26333, 28689, 29190, 64007, 20469, 21117, 24426, 24915, 26451, 27161, 28418, 29922, 31080, 34920, 35961, 39111, 39108, 39491, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 21697, 31263, 26963, 35575, 35914, 39080, 39342, 24444, 25259, 30130, 30382, 34987, 36991, 38466, 21305, 24380, 24517, 27852, 29644, 30050, 30091, 31558, 33534, 39325, 20047, 36924, 19979, 20309, 21414, 22799, 24264, 26160, 27827, 29781, 33655, 34662, 36032, 36944, 38686, 39957, 22737, 23416, 34384, 35604, 40372, 23506, 24680, 24717, 26097, 27735, 28450, 28579, 28698, 32597, 32752, 38289, 38290, 38480, 38867, 21106, 36676, 20989, 21547, 21688, 21859, 21898, 27323, 28085, 32216, 33382, 37532, 38519, 40569, 21512, 21704, 30418, 34532, 38308, 38356, 38492, 20130, 20233, 23022, 23270, 24055, 24658, 25239, 26477, 26689, 27782, 28207, 32568, 32923, 33322, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 64008, 64009, 38917, 20133, 20565, 21683, 22419, 22874, 23401, 23475, 25032, 26999, 28023, 28707, 34809, 35299, 35442, 35559, 36994, 39405, 39608, 21182, 26680, 20502, 24184, 26447, 33607, 34892, 20139, 21521, 22190, 29670, 37141, 38911, 39177, 39255, 39321, 22099, 22687, 34395, 35377, 25010, 27382, 29563, 36562, 27463, 38570, 39511, 22869, 29184, 36203, 38761, 20436, 23796, 24358, 25080, 26203, 27883, 28843, 29572, 29625, 29694, 30505, 30541, 32067, 32098, 32291, 33335, 34898, 64010, 36066, 37449, 39023, 23377, 31348, 34880, 38913, 23244, 20448, 21332, 22846, 23805, 25406, 28025, 29433, 33029, 33031, 33698, 37583, 38960, 20136, 20804, 21009, 22411, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 24418, 27842, 28366, 28677, 28752, 28847, 29074, 29673, 29801, 33610, 34722, 34913, 36872, 37026, 37795, 39336, 20846, 24407, 24800, 24935, 26291, 34137, 36426, 37295, 38795, 20046, 20114, 21628, 22741, 22778, 22909, 23733, 24359, 25142, 25160, 26122, 26215, 27627, 28009, 28111, 28246, 28408, 28564, 28640, 28649, 28765, 29392, 29733, 29786, 29920, 30355, 31068, 31946, 32286, 32993, 33446, 33899, 33983, 34382, 34399, 34676, 35703, 35946, 37804, 38912, 39013, 24785, 25110, 37239, 23130, 26127, 28151, 28222, 29759, 39746, 24573, 24794, 31503, 21700, 24344, 27742, 27859, 27946, 28888, 32005, 34425, 35340, 40251, 21270, 21644, 23301, 27194, 28779, 30069, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 31117, 31166, 33457, 33775, 35441, 35649, 36008, 38772, 64011, 25844, 25899, 30906, 30907, 31339, 20024, 21914, 22864, 23462, 24187, 24739, 25563, 27489, 26213, 26707, 28185, 29029, 29872, 32008, 36996, 39529, 39973, 27963, 28369, 29502, 35905, 38346, 20976, 24140, 24488, 24653, 24822, 24880, 24908, 26179, 26180, 27045, 27841, 28255, 28361, 28514, 29004, 29852, 30343, 31681, 31783, 33618, 34647, 36945, 38541, 40643, 21295, 22238, 24315, 24458, 24674, 24724, 25079, 26214, 26371, 27292, 28142, 28590, 28784, 29546, 32362, 33214, 33588, 34516, 35496, 36036, 21123, 29554, 23446, 27243, 37892, 21742, 22150, 23389, 25928, 25989, 26313, 26783, 28045, 28102, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 29243, 32948, 37237, 39501, 20399, 20505, 21402, 21518, 21564, 21897, 21957, 24127, 24460, 26429, 29030, 29661, 36869, 21211, 21235, 22628, 22734, 28932, 29071, 29179, 34224, 35347, 26248, 34216, 21927, 26244, 29002, 33841, 21321, 21913, 27585, 24409, 24509, 25582, 26249, 28999, 35569, 36637, 40638, 20241, 25658, 28875, 30054, 34407, 24676, 35662, 40440, 20807, 20982, 21256, 27958, 33016, 40657, 26133, 27427, 28824, 30165, 21507, 23673, 32007, 35350, 27424, 27453, 27462, 21560, 24688, 27965, 32725, 33288, 20694, 20958, 21916, 22123, 22221, 23020, 23305, 24076, 24985, 24984, 25137, 26206, 26342, 29081, 29113, 29114, 29351, 31143, 31232, 32690, 35440, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
||
"gb18030": [19970, 19972, 19973, 19974, 19983, 19986, 19991, 19999, 2e4, 20001, 20003, 20006, 20009, 20014, 20015, 20017, 20019, 20021, 20023, 20028, 20032, 20033, 20034, 20036, 20038, 20042, 20049, 20053, 20055, 20058, 20059, 20066, 20067, 20068, 20069, 20071, 20072, 20074, 20075, 20076, 20077, 20078, 20079, 20082, 20084, 20085, 20086, 20087, 20088, 20089, 20090, 20091, 20092, 20093, 20095, 20096, 20097, 20098, 20099, 20100, 20101, 20103, 20106, 20112, 20118, 20119, 20121, 20124, 20125, 20126, 20131, 20138, 20143, 20144, 20145, 20148, 20150, 20151, 20152, 20153, 20156, 20157, 20158, 20168, 20172, 20175, 20176, 20178, 20186, 20187, 20188, 20192, 20194, 20198, 20199, 20201, 20205, 20206, 20207, 20209, 20212, 20216, 20217, 20218, 20220, 20222, 20224, 20226, 20227, 20228, 20229, 20230, 20231, 20232, 20235, 20236, 20242, 20243, 20244, 20245, 20246, 20252, 20253, 20257, 20259, 20264, 20265, 20268, 20269, 20270, 20273, 20275, 20277, 20279, 20281, 20283, 20286, 20287, 20288, 20289, 20290, 20292, 20293, 20295, 20296, 20297, 20298, 20299, 20300, 20306, 20308, 20310, 20321, 20322, 20326, 20328, 20330, 20331, 20333, 20334, 20337, 20338, 20341, 20343, 20344, 20345, 20346, 20349, 20352, 20353, 20354, 20357, 20358, 20359, 20362, 20364, 20366, 20368, 20370, 20371, 20373, 20374, 20376, 20377, 20378, 20380, 20382, 20383, 20385, 20386, 20388, 20395, 20397, 20400, 20401, 20402, 20403, 20404, 20406, 20407, 20408, 20409, 20410, 20411, 20412, 20413, 20414, 20416, 20417, 20418, 20422, 20423, 20424, 20425, 20427, 20428, 20429, 20434, 20435, 20436, 20437, 20438, 20441, 20443, 20448, 20450, 20452, 20453, 20455, 20459, 20460, 20464, 20466, 20468, 20469, 20470, 20471, 20473, 20475, 20476, 20477, 20479, 20480, 20481, 20482, 20483, 20484, 20485, 20486, 20487, 20488, 20489, 20490, 20491, 20494, 20496, 20497, 20499, 20501, 20502, 20503, 20507, 20509, 20510, 20512, 20514, 20515, 20516, 20519, 20523, 20527, 20528, 20529, 20530, 20531, 20532, 20533, 20534, 20535, 20536, 20537, 20539, 20541, 20543, 20544, 20545, 20546, 20548, 20549, 20550, 20553, 20554, 20555, 20557, 20560, 20561, 20562, 20563, 20564, 20566, 20567, 20568, 20569, 20571, 20573, 20574, 20575, 20576, 20577, 20578, 20579, 20580, 20582, 20583, 20584, 20585, 20586, 20587, 20589, 20590, 20591, 20592, 20593, 20594, 20595, 20596, 20597, 20600, 20601, 20602, 20604, 20605, 20609, 20610, 20611, 20612, 20614, 20615, 20617, 20618, 20619, 20620, 20622, 20623, 20624, 20625, 20626, 20627, 20628, 20629, 20630, 20631, 20632, 20633, 20634, 20635, 20636, 20637, 20638, 20639, 20640, 20641, 20642, 20644, 20646, 20650, 20651, 20653, 20654, 20655, 20656, 20657, 20659, 20660, 20661, 20662, 20663, 20664, 20665, 20668, 20669, 20670, 20671, 20672, 20673, 20674, 20675, 20676, 20677, 20678, 20679, 20680, 20681, 20682, 20683, 20684, 20685, 20686, 20688, 20689, 20690, 20691, 20692, 20693, 20695, 20696, 20697, 20699, 20700, 20701, 20702, 20703, 20704, 20705, 20706, 20707, 20708, 20709, 20712, 20713, 20714, 20715, 20719, 20720, 20721, 20722, 20724, 20726, 20727, 20728, 20729, 20730, 20732, 20733, 20734, 20735, 20736, 20737, 20738, 20739, 20740, 20741, 20744, 20745, 20746, 20748, 20749, 20750, 20751, 20752, 20753, 20755, 20756, 20757, 20758, 20759, 20760, 20761, 20762, 20763, 20764, 20765, 20766, 20767, 20768, 20770, 20771, 20772, 20773, 20774, 20775, 20776, 20777, 20778, 20779, 20780, 20781, 20782, 20783, 20784, 20785, 20786, 20787, 20788, 20789, 20790, 20791, 20792, 20793, 20794, 20795, 20796, 20797, 20798, 20802, 20807, 20810, 20812, 20814, 20815, 20816, 20818, 20819, 20823, 20824, 20825, 20827, 20829, 20830, 20831, 20832, 20833, 20835, 20836, 20838, 20839, 20841, 20842, 20847, 20850, 20858, 20862, 20863, 20867, 20868, 20870, 20871, 20874, 20875, 20878, 20879, 20880, 20881, 20883, 20884, 20888, 20890, 20893, 20894, 20895, 20897, 20899, 20902, 20903, 20904, 20905, 20906, 20909, 20910, 20916, 20920, 20921, 20922, 20926, 20927, 20929, 20930, 20931, 20933, 20936, 20938, 20941, 20942, 20944, 20946, 20947, 20948, 20949, 20950, 20951, 20952, 20953, 20954, 20956, 20958, 20959, 20962, 20963, 20965, 20966, 20967, 20968, 20969, 20970, 20972, 20974, 20977, 20978, 20980, 20983, 20990, 20996, 20997, 21001, 21003, 21004, 21007, 21008, 21011, 21012, 21013, 21020, 21022, 21023, 21025, 21026, 21027, 21029, 21030, 21031, 21034, 21036, 21039, 21041, 21042, 21044, 21045, 21052, 21054, 21060, 21061, 21062, 21063, 21064, 21065, 21067, 21070, 21071, 21074, 21075, 21077, 21079, 21080, 21081, 21082, 21083, 21085, 21087, 21088, 21090, 21091, 21092, 21094, 21096, 21099, 21100, 21101, 21102, 21104, 21105, 21107, 21108, 21109, 21110, 21111, 21112, 21113, 21114, 21115, 21116, 21118, 21120, 21123, 21124, 21125, 21126, 21127, 21129, 21130, 21131, 21132, 21133, 21134, 21135, 21137, 21138, 21140, 21141, 21142, 21143, 21144, 21145, 21146, 21148, 21156, 21157, 21158, 21159, 21166, 21167, 21168, 21172, 21173, 21174, 21175, 21176, 21177, 21178, 21179, 21180, 21181, 21184, 21185, 21186, 21188, 21189, 21190, 21192, 21194, 21196, 21197, 21198, 21199, 21201, 21203, 21204, 21205, 21207, 21209, 21210, 21211, 21212, 21213, 21214, 21216, 21217, 21218, 21219, 21221, 21222, 21223, 21224, 21225, 21226, 21227, 21228, 21229, 21230, 21231, 21233, 21234, 21235, 21236, 21237, 21238, 21239, 21240, 21243, 21244, 21245, 21249, 21250, 21251, 21252, 21255, 21257, 21258, 21259, 21260, 21262, 21265, 21266, 21267, 21268, 21272, 21275, 21276, 21278, 21279, 21282, 21284, 21285, 21287, 21288, 21289, 21291, 21292, 21293, 21295, 21296, 21297, 21298, 21299, 21300, 21301, 21302, 21303, 21304, 21308, 21309, 21312, 21314, 21316, 21318, 21323, 21324, 21325, 21328, 21332, 21336, 21337, 21339, 21341, 21349, 21352, 21354, 21356, 21357, 21362, 21366, 21369, 21371, 21372, 21373, 21374, 21376, 21377, 21379, 21383, 21384, 21386, 21390, 21391, 21392, 21393, 21394, 21395, 21396, 21398, 21399, 21401, 21403, 21404, 21406, 21408, 21409, 21412, 21415, 21418, 21419, 21420, 21421, 21423, 21424, 21425, 21426, 21427, 21428, 21429, 21431, 21432, 21433, 21434, 21436, 21437, 21438, 21440, 21443, 21444, 21445, 21446, 21447, 21454, 21455, 21456, 21458, 21459, 21461, 21466, 21468, 21469, 21470, 21473, 21474, 21479, 21492, 21498, 21502, 21503, 21504, 21506, 21509, 21511, 21515, 21524, 21528, 21529, 21530, 21532, 21538, 21540, 21541, 21546, 21552, 21555, 21558, 21559, 21562, 21565, 21567, 21569, 21570, 21572, 21573, 21575, 21577, 21580, 21581, 21582, 21583, 21585, 21594, 21597, 21598, 21599, 21600, 21601, 21603, 21605, 21607, 21609, 21610, 21611, 21612, 21613, 21614, 21615, 21616, 21620, 21625, 21626, 21630, 21631, 21633, 21635, 21637, 21639, 21640, 21641, 21642, 21645, 21649, 21651, 21655, 21656, 21660, 21662, 21663, 21664, 21665, 21666, 21669, 21678, 21680, 21682, 21685, 21686, 21687, 21689, 21690, 21692, 21694, 21699, 21701, 21706, 21707, 21718, 21720, 21723, 21728, 21729, 21730, 21731, 21732, 21739, 21740, 21743, 21744, 21745, 21748, 21749, 21750, 21751, 21752, 21753, 21755, 21758, 21760, 21762, 21763, 21764, 21765, 21768, 21770, 21771, 21772, 21773, 21774, 21778, 21779, 21781, 21782, 21783, 21784, 21785, 21786, 21788, 21789, 21790, 21791, 21793, 21797, 21798, 21800, 21801, 21803, 21805, 21810, 21812, 21813, 21814, 21816, 21817, 21818, 21819, 21821, 21824, 21826, 21829, 21831, 21832, 21835, 21836, 21837, 21838, 21839, 21841, 21842, 21843, 21844, 21847, 21848, 21849, 21850, 21851, 21853, 21854, 21855, 21856, 21858, 21859, 21864, 21865, 21867, 21871, 21872, 21873, 21874, 21875, 21876, 21881, 21882, 21885, 21887, 21893, 21894, 21900, 21901, 21902, 21904, 21906, 21907, 21909, 21910, 21911, 21914, 21915, 21918, 21920, 21921, 21922, 21923, 21924, 21925, 21926, 21928, 21929, 21930, 21931, 21932, 21933, 21934, 21935, 21936, 21938, 21940, 21942, 21944, 21946, 21948, 21951, 21952, 21953, 21954, 21955, 21958, 21959, 21960, 21962, 21963, 21966, 21967, 21968, 21973, 21975, 21976, 21977, 21978, 21979, 21982, 21984, 21986, 21991, 21993, 21997, 21998, 22e3, 22001, 22004, 22006, 22008, 22009, 22010, 22011, 22012, 22015, 22018, 22019, 22020, 22021, 22022, 22023, 22026, 22027, 22029, 22032, 22033, 22034, 22035, 22036, 22037, 22038, 22039, 22041, 22042, 22044, 22045, 22048, 22049, 22050, 22053, 22054, 22056, 22057, 22058, 22059, 22062, 22063, 22064, 22067, 22069, 22071, 22072, 22074, 22076, 22077, 22078, 22080, 22081, 22082, 22083, 22084, 22085, 22086, 22087, 22088, 22089, 22090, 22091, 22095, 22096, 22097, 22098, 22099, 22101, 22102, 22106, 22107, 22109, 22110, 22111, 22112, 22113, 22115, 22117, 22118, 22119, 22125, 22126, 22127, 22128, 22130, 22131, 22132, 22133, 22135, 22136, 22137, 22138, 22141, 22142, 22143, 22144, 22145, 22146, 22147, 22148, 22151, 22152, 22153, 22154, 22155, 22156, 22157, 22160, 22161, 22162, 22164, 22165, 22166, 22167, 22168, 22169, 22170, 22171, 22172, 22173, 22174, 22175, 22176, 22177, 22178, 22180, 22181, 22182, 22183, 22184, 22185, 22186, 22187, 22188, 22189, 22190, 22192, 22193, 22194, 22195, 22196, 22197, 22198, 22200, 22201, 22202, 22203, 22205, 22206, 22207, 22208, 22209, 22210, 22211, 22212, 22213, 22214, 22215, 22216, 22217, 22219, 22220, 22221, 22222, 22223, 22224, 22225, 22226, 22227, 22229, 22230, 22232, 22233, 22236, 22243, 22245, 22246, 22247, 22248, 22249, 22250, 22252, 22254, 22255, 22258, 22259, 22262, 22263, 22264, 22267, 22268, 22272, 22273, 22274, 22277, 22279, 22283, 22284, 22285, 22286, 22287, 22288, 22289, 22290, 22291, 22292, 22293, 22294, 22295, 22296, 22297, 22298, 22299, 22301, 22302, 22304, 22305, 22306, 22308, 22309, 22310, 22311, 22315, 22321, 22322, 22324, 22325, 22326, 22327, 22328, 22332, 22333, 22335, 22337, 22339, 22340, 22341, 22342, 22344, 22345, 22347, 22354, 22355, 22356, 22357, 22358, 22360, 22361, 22370, 22371, 22373, 22375, 22380, 22382, 22384, 22385, 22386, 22388, 22389, 22392, 22393, 22394, 22397, 22398, 22399, 22400, 22401, 22407, 22408, 22409, 22410, 22413, 22414, 22415, 22416, 22417, 22420, 22421, 22422, 22423, 22424, 22425, 22426, 22428, 22429, 22430, 22431, 22437, 22440, 22442, 22444, 22447, 22448, 22449, 22451, 22453, 22454, 22455, 22457, 22458, 22459, 22460, 22461, 22462, 22463, 22464, 22465, 22468, 22469, 22470, 22471, 22472, 22473, 22474, 22476, 22477, 22480, 22481, 22483, 22486, 22487, 22491, 22492, 22494, 22497, 22498, 22499, 22501, 22502, 22503, 22504, 22505, 22506, 22507, 22508, 22510, 22512, 22513, 22514, 22515, 22517, 22518, 22519, 22523, 22524, 22526, 22527, 22529, 22531, 22532, 22533, 22536, 22537, 22538, 22540, 22542, 22543, 22544, 22546, 22547, 22548, 22550, 22551, 22552, 22554, 22555, 22556, 22557, 22559, 22562, 22563, 22565, 22566, 22567, 22568, 22569, 22571, 22572, 22573, 22574, 22575, 22577, 22578, 22579, 22580, 22582, 22583, 22584, 22585, 22586, 22587, 22588, 22589, 22590, 22591, 22592, 22593, 22594, 22595, 22597, 22598, 22599, 22600, 22601, 22602, 22603, 22606, 22607, 22608, 22610, 22611, 22613, 22614, 22615, 22617, 22618, 22619, 22620, 22621, 22623, 22624, 22625, 22626, 22627, 22628, 22630, 22631, 22632, 22633, 22634, 22637, 22638, 22639, 22640, 22641, 22642, 22643, 22644, 22645, 22646, 22647, 22648, 22649, 22650, 22651, 22652, 22653, 22655, 22658, 22660, 22662, 22663, 22664, 22666, 22667, 22668, 22669, 22670, 22671, 22672, 22673, 22676, 22677, 22678, 22679, 22680, 22683, 22684, 22685, 22688, 22689, 22690, 22691, 22692, 22693, 22694, 22695, 22698, 22699, 22700, 22701, 22702, 22703, 22704, 22705, 22706, 22707, 22708, 22709, 22710, 22711, 22712, 22713, 22714, 22715, 22717, 22718, 22719, 22720, 22722, 22723, 22724, 22726, 22727, 22728, 22729, 22730, 22731, 22732, 22733, 22734, 22735, 22736, 22738, 22739, 22740, 22742, 22743, 22744, 22745, 22746, 22747, 22748, 22749, 22750, 22751, 22752, 22753, 22754, 22755, 22757, 22758, 22759, 22760, 22761, 22762, 22765, 22767, 22769, 22770, 22772, 22773, 22775, 22776, 22778, 22779, 22780, 22781, 22782, 22783, 22784, 22785, 22787, 22789, 22790, 22792, 22793, 22794, 22795, 22796, 22798, 22800, 22801, 22802, 22803, 22807, 22808, 22811, 22813, 22814, 22816, 22817, 22818, 22819, 22822, 22824, 22828, 22832, 22834, 22835, 22837, 22838, 22843, 22845, 22846, 22847, 22848, 22851, 22853, 22854, 22858, 22860, 22861, 22864, 22866, 22867, 22873, 22875, 22876, 22877, 22878, 22879, 22881, 22883, 22884, 22886, 22887, 22888, 22889, 22890, 22891, 22892, 22893, 22894, 22895, 22896, 22897, 22898, 22901, 22903, 22906, 22907, 22908, 22910, 22911, 22912, 22917, 22921, 22923, 22924, 22926, 22927, 22928, 22929, 22932, 22933, 22936, 22938, 22939, 22940, 22941, 22943, 22944, 22945, 22946, 22950, 22951, 22956, 22957, 22960, 22961, 22963, 22964, 22965, 22966, 22967, 22968, 22970, 22972, 22973, 22975, 22976, 22977, 22978, 22979, 22980, 22981, 22983, 22984, 22985, 22988, 22989, 22990, 22991, 22997, 22998, 23001, 23003, 23006, 23007, 23008, 23009, 23010, 23012, 23014, 23015, 23017, 23018, 23019, 23021, 23022, 23023, 23024, 23025, 23026, 23027, 23028, 23029, 23030, 23031, 23032, 23034, 23036, 23037, 23038, 23040, 23042, 23050, 23051, 23053, 23054, 23055, 23056, 23058, 23060, 23061, 23062, 23063, 23065, 23066, 23067, 23069, 23070, 23073, 23074, 23076, 23078, 23079, 23080, 23082, 23083, 23084, 23085, 23086, 23087, 23088, 23091, 23093, 23095, 23096, 23097, 23098, 23099, 23101, 23102, 23103, 23105, 23106, 23107, 23108, 23109, 23111, 23112, 23115, 23116, 23117, 23118, 23119, 23120, 23121, 23122, 23123, 23124, 23126, 23127, 23128, 23129, 23131, 23132, 23133, 23134, 23135, 23136, 23137, 23139, 23140, 23141, 23142, 23144, 23145, 23147, 23148, 23149, 23150, 23151, 23152, 23153, 23154, 23155, 23160, 23161, 23163, 23164, 23165, 23166, 23168, 23169, 23170, 23171, 23172, 23173, 23174, 23175, 23176, 23177, 23178, 23179, 23180, 23181, 23182, 23183, 23184, 23185, 23187, 23188, 23189, 23190, 23191, 23192, 23193, 23196, 23197, 23198, 23199, 23200, 23201, 23202, 23203, 23204, 23205, 23206, 23207, 23208, 23209, 23211, 23212, 23213, 23214, 23215, 23216, 23217, 23220, 23222, 23223, 23225, 23226, 23227, 23228, 23229, 23231, 23232, 23235, 23236, 23237, 23238, 23239, 23240, 23242, 23243, 23245, 23246, 23247, 23248, 23249, 23251, 23253, 23255, 23257, 23258, 23259, 23261, 23262, 23263, 23266, 23268, 23269, 23271, 23272, 23274, 23276, 23277, 23278, 23279, 23280, 23282, 23283, 23284, 23285, 23286, 23287, 23288, 23289, 23290, 23291, 23292, 23293, 23294, 23295, 23296, 23297, 23298, 23299, 23300, 23301, 23302, 23303, 23304, 23306, 23307, 23308, 23309, 23310, 23311, 23312, 23313, 23314, 23315, 23316, 23317, 23320, 23321, 23322, 23323, 23324, 23325, 23326, 23327, 23328, 23329, 23330, 23331, 23332, 23333, 23334, 23335, 23336, 23337, 23338, 23339, 23340, 23341, 23342, 23343, 23344, 23345, 23347, 23349, 23350, 23352, 23353, 23354, 23355, 23356, 23357, 23358, 23359, 23361, 23362, 23363, 23364, 23365, 23366, 23367, 23368, 23369, 23370, 23371, 23372, 23373, 23374, 23375, 23378, 23382, 23390, 23392, 23393, 23399, 23400, 23403, 23405, 23406, 23407, 23410, 23412, 23414, 23415, 23416, 23417, 23419, 23420, 23422, 23423, 23426, 23430, 23434, 23437, 23438, 23440, 23441, 23442, 23444, 23446, 23455, 23463, 23464, 23465, 23468, 23469, 23470, 23471, 23473, 23474, 23479, 23482, 23483, 23484, 23488, 23489, 23491, 23496, 23497, 23498, 23499, 23501, 23502, 23503, 23505, 23508, 23509, 23510, 23511, 23512, 23513, 23514, 23515, 23516, 23520, 23522, 23523, 23526, 23527, 23529, 23530, 23531, 23532, 23533, 23535, 23537, 23538, 23539, 23540, 23541, 23542, 23543, 23549, 23550, 23552, 23554, 23555, 23557, 23559, 23560, 23563, 23564, 23565, 23566, 23568, 23570, 23571, 23575, 23577, 23579, 23582, 23583, 23584, 23585, 23587, 23590, 23592, 23593, 23594, 23595, 23597, 23598, 23599, 23600, 23602, 23603, 23605, 23606, 23607, 23619, 23620, 23622, 23623, 23628, 23629, 23634, 23635, 23636, 23638, 23639, 23640, 23642, 23643, 23644, 23645, 23647, 23650, 23652, 23655, 23656, 23657, 23658, 23659, 23660, 23661, 23664, 23666, 23667, 23668, 23669, 23670, 23671, 23672, 23675, 23676, 23677, 23678, 23680, 23683, 23684, 23685, 23686, 23687, 23689, 23690, 23691, 23694, 23695, 23698, 23699, 23701, 23709, 23710, 23711, 23712, 23713, 23716, 23717, 23718, 23719, 23720, 23722, 23726, 23727, 23728, 23730, 23732, 23734, 23737, 23738, 23739, 23740, 23742, 23744, 23746, 23747, 23749, 23750, 23751, 23752, 23753, 23754, 23756, 23757, 23758, 23759, 23760, 23761, 23763, 23764, 23765, 23766, 23767, 23768, 23770, 23771, 23772, 23773, 23774, 23775, 23776, 23778, 23779, 23783, 23785, 23787, 23788, 23790, 23791, 23793, 23794, 23795, 23796, 23797, 23798, 23799, 23800, 23801, 23802, 23804, 23805, 23806, 23807, 23808, 23809, 23812, 23813, 23816, 23817, 23818, 23819, 23820, 23821, 23823, 23824, 23825, 23826, 23827, 23829, 23831, 23832, 23833, 23834, 23836, 23837, 23839, 23840, 23841, 23842, 23843, 23845, 23848, 23850, 23851, 23852, 23855, 23856, 23857, 23858, 23859, 23861, 23862, 23863, 23864, 23865, 23866, 23867, 23868, 23871, 23872, 23873, 23874, 23875, 23876, 23877, 23878, 23880, 23881, 23885, 23886, 23887, 23888, 23889, 23890, 23891, 23892, 23893, 23894, 23895, 23897, 23898, 23900, 23902, 23903, 23904, 23905, 23906, 23907, 23908, 23909, 23910, 23911, 23912, 23914, 23917, 23918, 23920, 23921, 23922, 23923, 23925, 23926, 23927, 23928, 23929, 23930, 23931, 23932, 23933, 23934, 23935, 23936, 23937, 23939, 23940, 23941, 23942, 23943, 23944, 23945, 23946, 23947, 23948, 23949, 23950, 23951, 23952, 23953, 23954, 23955, 23956, 23957, 23958, 23959, 23960, 23962, 23963, 23964, 23966, 23967, 23968, 23969, 23970, 23971, 23972, 23973, 23974, 23975, 23976, 23977, 23978, 23979, 23980, 23981, 23982, 23983, 23984, 23985, 23986, 23987, 23988, 23989, 23990, 23992, 23993, 23994, 23995, 23996, 23997, 23998, 23999, 24e3, 24001, 24002, 24003, 24004, 24006, 24007, 24008, 24009, 24010, 24011, 24012, 24014, 24015, 24016, 24017, 24018, 24019, 24020, 24021, 24022, 24023, 24024, 24025, 24026, 24028, 24031, 24032, 24035, 24036, 24042, 24044, 24045, 24048, 24053, 24054, 24056, 24057, 24058, 24059, 24060, 24063, 24064, 24068, 24071, 24073, 24074, 24075, 24077, 24078, 24082, 24083, 24087, 24094, 24095, 24096, 24097, 24098, 24099, 24100, 24101, 24104, 24105, 24106, 24107, 24108, 24111, 24112, 24114, 24115, 24116, 24117, 24118, 24121, 24122, 24126, 24127, 24128, 24129, 24131, 24134, 24135, 24136, 24137, 24138, 24139, 24141, 24142, 24143, 24144, 24145, 24146, 24147, 24150, 24151, 24152, 24153, 24154, 24156, 24157, 24159, 24160, 24163, 24164, 24165, 24166, 24167, 24168, 24169, 24170, 24171, 24172, 24173, 24174, 24175, 24176, 24177, 24181, 24183, 24185, 24190, 24193, 24194, 24195, 24197, 24200, 24201, 24204, 24205, 24206, 24210, 24216, 24219, 24221, 24225, 24226, 24227, 24228, 24232, 24233, 24234, 24235, 24236, 24238, 24239, 24240, 24241, 24242, 24244, 24250, 24251, 24252, 24253, 24255, 24256, 24257, 24258, 24259, 24260, 24261, 24262, 24263, 24264, 24267, 24268, 24269, 24270, 24271, 24272, 24276, 24277, 24279, 24280, 24281, 24282, 24284, 24285, 24286, 24287, 24288, 24289, 24290, 24291, 24292, 24293, 24294, 24295, 24297, 24299, 24300, 24301, 24302, 24303, 24304, 24305, 24306, 24307, 24309, 24312, 24313, 24315, 24316, 24317, 24325, 24326, 24327, 24329, 24332, 24333, 24334, 24336, 24338, 24340, 24342, 24345, 24346, 24348, 24349, 24350, 24353, 24354, 24355, 24356, 24360, 24363, 24364, 24366, 24368, 24370, 24371, 24372, 24373, 24374, 24375, 24376, 24379, 24381, 24382, 24383, 24385, 24386, 24387, 24388, 24389, 24390, 24391, 24392, 24393, 24394, 24395, 24396, 24397, 24398, 24399, 24401, 24404, 24409, 24410, 24411, 24412, 24414, 24415, 24416, 24419, 24421, 24423, 24424, 24427, 24430, 24431, 24434, 24436, 24437, 24438, 24440, 24442, 24445, 24446, 24447, 24451, 24454, 24461, 24462, 24463, 24465, 24467, 24468, 24470, 24474, 24475, 24477, 24478, 24479, 24480, 24482, 24483, 24484, 24485, 24486, 24487, 24489, 24491, 24492, 24495, 24496, 24497, 24498, 24499, 24500, 24502, 24504, 24505, 24506, 24507, 24510, 24511, 24512, 24513, 24514, 24519, 24520, 24522, 24523, 24526, 24531, 24532, 24533, 24538, 24539, 24540, 24542, 24543, 24546, 24547, 24549, 24550, 24552, 24553, 24556, 24559, 24560, 24562, 24563, 24564, 24566, 24567, 24569, 24570, 24572, 24583, 24584, 24585, 24587, 24588, 24592, 24593, 24595, 24599, 24600, 24602, 24606, 24607, 24610, 24611, 24612, 24620, 24621, 24622, 24624, 24625, 24626, 24627, 24628, 24630, 24631, 24632, 24633, 24634, 24637, 24638, 24640, 24644, 24645, 24646, 24647, 24648, 24649, 24650, 24652, 24654, 24655, 24657, 24659, 24660, 24662, 24663, 24664, 24667, 24668, 24670, 24671, 24672, 24673, 24677, 24678, 24686, 24689, 24690, 24692, 24693, 24695, 24702, 24704, 24705, 24706, 24709, 24710, 24711, 24712, 24714, 24715, 24718, 24719, 24720, 24721, 24723, 24725, 24727, 24728, 24729, 24732, 24734, 24737, 24738, 24740, 24741, 24743, 24745, 24746, 24750, 24752, 24755, 24757, 24758, 24759, 24761, 24762, 24765, 24766, 24767, 24768, 24769, 24770, 24771, 24772, 24775, 24776, 24777, 24780, 24781, 24782, 24783, 24784, 24786, 24787, 24788, 24790, 24791, 24793, 24795, 24798, 24801, 24802, 24803, 24804, 24805, 24810, 24817, 24818, 24821, 24823, 24824, 24827, 24828, 24829, 24830, 24831, 24834, 24835, 24836, 24837, 24839, 24842, 24843, 24844, 24848, 24849, 24850, 24851, 24852, 24854, 24855, 24856, 24857, 24859, 24860, 24861, 24862, 24865, 24866, 24869, 24872, 24873, 24874, 24876, 24877, 24878, 24879, 24880, 24881, 24882, 24883, 24884, 24885, 24886, 24887, 24888, 24889, 24890, 24891, 24892, 24893, 24894, 24896, 24897, 24898, 24899, 24900, 24901, 24902, 24903, 24905, 24907, 24909, 24911, 24912, 24914, 24915, 24916, 24918, 24919, 24920, 24921, 24922, 24923, 24924, 24926, 24927, 24928, 24929, 24931, 24932, 24933, 24934, 24937, 24938, 24939, 24940, 24941, 24942, 24943, 24945, 24946, 24947, 24948, 24950, 24952, 24953, 24954, 24955, 24956, 24957, 24958, 24959, 24960, 24961, 24962, 24963, 24964, 24965, 24966, 24967, 24968, 24969, 24970, 24972, 24973, 24975, 24976, 24977, 24978, 24979, 24981, 24982, 24983, 24984, 24985, 24986, 24987, 24988, 24990, 24991, 24992, 24993, 24994, 24995, 24996, 24997, 24998, 25002, 25003, 25005, 25006, 25007, 25008, 25009, 25010, 25011, 25012, 25013, 25014, 25016, 25017, 25018, 25019, 25020, 25021, 25023, 25024, 25025, 25027, 25028, 25029, 25030, 25031, 25033, 25036, 25037, 25038, 25039, 25040, 25043, 25045, 25046, 25047, 25048, 25049, 25050, 25051, 25052, 25053, 25054, 25055, 25056, 25057, 25058, 25059, 25060, 25061, 25063, 25064, 25065, 25066, 25067, 25068, 25069, 25070, 25071, 25072, 25073, 25074, 25075, 25076, 25078, 25079, 25080, 25081, 25082, 25083, 25084, 25085, 25086, 25088, 25089, 25090, 25091, 25092, 25093, 25095, 25097, 25107, 25108, 25113, 25116, 25117, 25118, 25120, 25123, 25126, 25127, 25128, 25129, 25131, 25133, 25135, 25136, 25137, 25138, 25141, 25142, 25144, 25145, 25146, 25147, 25148, 25154, 25156, 25157, 25158, 25162, 25167, 25168, 25173, 25174, 25175, 25177, 25178, 25180, 25181, 25182, 25183, 25184, 25185, 25186, 25188, 25189, 25192, 25201, 25202, 25204, 25205, 25207, 25208, 25210, 25211, 25213, 25217, 25218, 25219, 25221, 25222, 25223, 25224, 25227, 25228, 25229, 25230, 25231, 25232, 25236, 25241, 25244, 25245, 25246, 25251, 25254, 25255, 25257, 25258, 25261, 25262, 25263, 25264, 25266, 25267, 25268, 25270, 25271, 25272, 25274, 25278, 25280, 25281, 25283, 25291, 25295, 25297, 25301, 25309, 25310, 25312, 25313, 25316, 25322, 25323, 25328, 25330, 25333, 25336, 25337, 25338, 25339, 25344, 25347, 25348, 25349, 25350, 25354, 25355, 25356, 25357, 25359, 25360, 25362, 25363, 25364, 25365, 25367, 25368, 25369, 25372, 25382, 25383, 25385, 25388, 25389, 25390, 25392, 25393, 25395, 25396, 25397, 25398, 25399, 25400, 25403, 25404, 25406, 25407, 25408, 25409, 25412, 25415, 25416, 25418, 25425, 25426, 25427, 25428, 25430, 25431, 25432, 25433, 25434, 25435, 25436, 25437, 25440, 25444, 25445, 25446, 25448, 25450, 25451, 25452, 25455, 25456, 25458, 25459, 25460, 25461, 25464, 25465, 25468, 25469, 25470, 25471, 25473, 25475, 25476, 25477, 25478, 25483, 25485, 25489, 25491, 25492, 25493, 25495, 25497, 25498, 25499, 25500, 25501, 25502, 25503, 25505, 25508, 25510, 25515, 25519, 25521, 25522, 25525, 25526, 25529, 25531, 25533, 25535, 25536, 25537, 25538, 25539, 25541, 25543, 25544, 25546, 25547, 25548, 25553, 25555, 25556, 25557, 25559, 25560, 25561, 25562, 25563, 25564, 25565, 25567, 25570, 25572, 25573, 25574, 25575, 25576, 25579, 25580, 25582, 25583, 25584, 25585, 25587, 25589, 25591, 25593, 25594, 25595, 25596, 25598, 25603, 25604, 25606, 25607, 25608, 25609, 25610, 25613, 25614, 25617, 25618, 25621, 25622, 25623, 25624, 25625, 25626, 25629, 25631, 25634, 25635, 25636, 25637, 25639, 25640, 25641, 25643, 25646, 25647, 25648, 25649, 25650, 25651, 25653, 25654, 25655, 25656, 25657, 25659, 25660, 25662, 25664, 25666, 25667, 25673, 25675, 25676, 25677, 25678, 25679, 25680, 25681, 25683, 25685, 25686, 25687, 25689, 25690, 25691, 25692, 25693, 25695, 25696, 25697, 25698, 25699, 25700, 25701, 25702, 25704, 25706, 25707, 25708, 25710, 25711, 25712, 25713, 25714, 25715, 25716, 25717, 25718, 25719, 25723, 25724, 25725, 25726, 25727, 25728, 25729, 25731, 25734, 25736, 25737, 25738, 25739, 25740, 25741, 25742, 25743, 25744, 25747, 25748, 25751, 25752, 25754, 25755, 25756, 25757, 25759, 25760, 25761, 25762, 25763, 25765, 25766, 25767, 25768, 25770, 25771, 25775, 25777, 25778, 25779, 25780, 25782, 25785, 25787, 25789, 25790, 25791, 25793, 25795, 25796, 25798, 25799, 25800, 25801, 25802, 25803, 25804, 25807, 25809, 25811, 25812, 25813, 25814, 25817, 25818, 25819, 25820, 25821, 25823, 25824, 25825, 25827, 25829, 25831, 25832, 25833, 25834, 25835, 25836, 25837, 25838, 25839, 25840, 25841, 25842, 25843, 25844, 25845, 25846, 25847, 25848, 25849, 25850, 25851, 25852, 25853, 25854, 25855, 25857, 25858, 25859, 25860, 25861, 25862, 25863, 25864, 25866, 25867, 25868, 25869, 25870, 25871, 25872, 25873, 25875, 25876, 25877, 25878, 25879, 25881, 25882, 25883, 25884, 25885, 25886, 25887, 25888, 25889, 25890, 25891, 25892, 25894, 25895, 25896, 25897, 25898, 25900, 25901, 25904, 25905, 25906, 25907, 25911, 25914, 25916, 25917, 25920, 25921, 25922, 25923, 25924, 25926, 25927, 25930, 25931, 25933, 25934, 25936, 25938, 25939, 25940, 25943, 25944, 25946, 25948, 25951, 25952, 25953, 25956, 25957, 25959, 25960, 25961, 25962, 25965, 25966, 25967, 25969, 25971, 25973, 25974, 25976, 25977, 25978, 25979, 25980, 25981, 25982, 25983, 25984, 25985, 25986, 25987, 25988, 25989, 25990, 25992, 25993, 25994, 25997, 25998, 25999, 26002, 26004, 26005, 26006, 26008, 26010, 26013, 26014, 26016, 26018, 26019, 26022, 26024, 26026, 26028, 26030, 26033, 26034, 26035, 26036, 26037, 26038, 26039, 26040, 26042, 26043, 26046, 26047, 26048, 26050, 26055, 26056, 26057, 26058, 26061, 26064, 26065, 26067, 26068, 26069, 26072, 26073, 26074, 26075, 26076, 26077, 26078, 26079, 26081, 26083, 26084, 26090, 26091, 26098, 26099, 26100, 26101, 26104, 26105, 26107, 26108, 26109, 26110, 26111, 26113, 26116, 26117, 26119, 26120, 26121, 26123, 26125, 26128, 26129, 26130, 26134, 26135, 26136, 26138, 26139, 26140, 26142, 26145, 26146, 26147, 26148, 26150, 26153, 26154, 26155, 26156, 26158, 26160, 26162, 26163, 26167, 26168, 26169, 26170, 26171, 26173, 26175, 26176, 26178, 26180, 26181, 26182, 26183, 26184, 26185, 26186, 26189, 26190, 26192, 26193, 26200, 26201, 26203, 26204, 26205, 26206, 26208, 26210, 26211, 26213, 26215, 26217, 26218, 26219, 26220, 26221, 26225, 26226, 26227, 26229, 26232, 26233, 26235, 26236, 26237, 26239, 26240, 26241, 26243, 26245, 26246, 26248, 26249, 26250, 26251, 26253, 26254, 26255, 26256, 26258, 26259, 26260, 26261, 26264, 26265, 26266, 26267, 26268, 26270, 26271, 26272, 26273, 26274, 26275, 26276, 26277, 26278, 26281, 26282, 26283, 26284, 26285, 26287, 26288, 26289, 26290, 26291, 26293, 26294, 26295, 26296, 26298, 26299, 26300, 26301, 26303, 26304, 26305, 26306, 26307, 26308, 26309, 26310, 26311, 26312, 26313, 26314, 26315, 26316, 26317, 26318, 26319, 26320, 26321, 26322, 26323, 26324, 26325, 26326, 26327, 26328, 26330, 26334, 26335, 26336, 26337, 26338, 26339, 26340, 26341, 26343, 26344, 26346, 26347, 26348, 26349, 26350, 26351, 26353, 26357, 26358, 26360, 26362, 26363, 26365, 26369, 26370, 26371, 26372, 26373, 26374, 26375, 26380, 26382, 26383, 26385, 26386, 26387, 26390, 26392, 26393, 26394, 26396, 26398, 26400, 26401, 26402, 26403, 26404, 26405, 26407, 26409, 26414, 26416, 26418, 26419, 26422, 26423, 26424, 26425, 26427, 26428, 26430, 26431, 26433, 26436, 26437, 26439, 26442, 26443, 26445, 26450, 26452, 26453, 26455, 26456, 26457, 26458, 26459, 26461, 26466, 26467, 26468, 26470, 26471, 26475, 26476, 26478, 26481, 26484, 26486, 26488, 26489, 26490, 26491, 26493, 26496, 26498, 26499, 26501, 26502, 26504, 26506, 26508, 26509, 26510, 26511, 26513, 26514, 26515, 26516, 26518, 26521, 26523, 26527, 26528, 26529, 26532, 26534, 26537, 26540, 26542, 26545, 26546, 26548, 26553, 26554, 26555, 26556, 26557, 26558, 26559, 26560, 26562, 26565, 26566, 26567, 26568, 26569, 26570, 26571, 26572, 26573, 26574, 26581, 26582, 26583, 26587, 26591, 26593, 26595, 26596, 26598, 26599, 26600, 26602, 26603, 26605, 26606, 26610, 26613, 26614, 26615, 26616, 26617, 26618, 26619, 26620, 26622, 26625, 26626, 26627, 26628, 26630, 26637, 26640, 26642, 26644, 26645, 26648, 26649, 26650, 26651, 26652, 26654, 26655, 26656, 26658, 26659, 26660, 26661, 26662, 26663, 26664, 26667, 26668, 26669, 26670, 26671, 26672, 26673, 26676, 26677, 26678, 26682, 26683, 26687, 26695, 26699, 26701, 26703, 26706, 26710, 26711, 26712, 26713, 26714, 26715, 26716, 26717, 26718, 26719, 26730, 26732, 26733, 26734, 26735, 26736, 26737, 26738, 26739, 26741, 26744, 26745, 26746, 26747, 26748, 26749, 26750, 26751, 26752, 26754, 26756, 26759, 26760, 26761, 26762, 26763, 26764, 26765, 26766, 26768, 26769, 26770, 26772, 26773, 26774, 26776, 26777, 26778, 26779, 26780, 26781, 26782, 26783, 26784, 26785, 26787, 26788, 26789, 26793, 26794, 26795, 26796, 26798, 26801, 26802, 26804, 26806, 26807, 26808, 26809, 26810, 26811, 26812, 26813, 26814, 26815, 26817, 26819, 26820, 26821, 26822, 26823, 26824, 26826, 26828, 26830, 26831, 26832, 26833, 26835, 26836, 26838, 26839, 26841, 26843, 26844, 26845, 26846, 26847, 26849, 26850, 26852, 26853, 26854, 26855, 26856, 26857, 26858, 26859, 26860, 26861, 26863, 26866, 26867, 26868, 26870, 26871, 26872, 26875, 26877, 26878, 26879, 26880, 26882, 26883, 26884, 26886, 26887, 26888, 26889, 26890, 26892, 26895, 26897, 26899, 26900, 26901, 26902, 26903, 26904, 26905, 26906, 26907, 26908, 26909, 26910, 26913, 26914, 26915, 26917, 26918, 26919, 26920, 26921, 26922, 26923, 26924, 26926, 26927, 26929, 26930, 26931, 26933, 26934, 26935, 26936, 26938, 26939, 26940, 26942, 26944, 26945, 26947, 26948, 26949, 26950, 26951, 26952, 26953, 26954, 26955, 26956, 26957, 26958, 26959, 26960, 26961, 26962, 26963, 26965, 26966, 26968, 26969, 26971, 26972, 26975, 26977, 26978, 26980, 26981, 26983, 26984, 26985, 26986, 26988, 26989, 26991, 26992, 26994, 26995, 26996, 26997, 26998, 27002, 27003, 27005, 27006, 27007, 27009, 27011, 27013, 27018, 27019, 27020, 27022, 27023, 27024, 27025, 27026, 27027, 27030, 27031, 27033, 27034, 27037, 27038, 27039, 27040, 27041, 27042, 27043, 27044, 27045, 27046, 27049, 27050, 27052, 27054, 27055, 27056, 27058, 27059, 27061, 27062, 27064, 27065, 27066, 27068, 27069, 27070, 27071, 27072, 27074, 27075, 27076, 27077, 27078, 27079, 27080, 27081, 27083, 27085, 27087, 27089, 27090, 27091, 27093, 27094, 27095, 27096, 27097, 27098, 27100, 27101, 27102, 27105, 27106, 27107, 27108, 27109, 27110, 27111, 27112, 27113, 27114, 27115, 27116, 27118, 27119, 27120, 27121, 27123, 27124, 27125, 27126, 27127, 27128, 27129, 27130, 27131, 27132, 27134, 27136, 27137, 27138, 27139, 27140, 27141, 27142, 27143, 27144, 27145, 27147, 27148, 27149, 27150, 27151, 27152, 27153, 27154, 27155, 27156, 27157, 27158, 27161, 27162, 27163, 27164, 27165, 27166, 27168, 27170, 27171, 27172, 27173, 27174, 27175, 27177, 27179, 27180, 27181, 27182, 27184, 27186, 27187, 27188, 27190, 27191, 27192, 27193, 27194, 27195, 27196, 27199, 27200, 27201, 27202, 27203, 27205, 27206, 27208, 27209, 27210, 27211, 27212, 27213, 27214, 27215, 27217, 27218, 27219, 27220, 27221, 27222, 27223, 27226, 27228, 27229, 27230, 27231, 27232, 27234, 27235, 27236, 27238, 27239, 27240, 27241, 27242, 27243, 27244, 27245, 27246, 27247, 27248, 27250, 27251, 27252, 27253, 27254, 27255, 27256, 27258, 27259, 27261, 27262, 27263, 27265, 27266, 27267, 27269, 27270, 27271, 27272, 27273, 27274, 27275, 27276, 27277, 27279, 27282, 27283, 27284, 27285, 27286, 27288, 27289, 27290, 27291, 27292, 27293, 27294, 27295, 27297, 27298, 27299, 27300, 27301, 27302, 27303, 27304, 27306, 27309, 27310, 27311, 27312, 27313, 27314, 27315, 27316, 27317, 27318, 27319, 27320, 27321, 27322, 27323, 27324, 27325, 27326, 27327, 27328, 27329, 27330, 27331, 27332, 27333, 27334, 27335, 27336, 27337, 27338, 27339, 27340, 27341, 27342, 27343, 27344, 27345, 27346, 27347, 27348, 27349, 27350, 27351, 27352, 27353, 27354, 27355, 27356, 27357, 27358, 27359, 27360, 27361, 27362, 27363, 27364, 27365, 27366, 27367, 27368, 27369, 27370, 27371, 27372, 27373, 27374, 27375, 27376, 27377, 27378, 27379, 27380, 27381, 27382, 27383, 27384, 27385, 27386, 27387, 27388, 27389, 27390, 27391, 27392, 27393, 27394, 27395, 27396, 27397, 27398, 27399, 27400, 27401, 27402, 27403, 27404, 27405, 27406, 27407, 27408, 27409, 27410, 27411, 27412, 27413, 27414, 27415, 27416, 27417, 27418, 27419, 27420, 27421, 27422, 27423, 27429, 27430, 27432, 27433, 27434, 27435, 27436, 27437, 27438, 27439, 27440, 27441, 27443, 27444, 27445, 27446, 27448, 27451, 27452, 27453, 27455, 27456, 27457, 27458, 27460, 27461, 27464, 27466, 27467, 27469, 27470, 27471, 27472, 27473, 27474, 27475, 27476, 27477, 27478, 27479, 27480, 27482, 27483, 27484, 27485, 27486, 27487, 27488, 27489, 27496, 27497, 27499, 27500, 27501, 27502, 27503, 27504, 27505, 27506, 27507, 27508, 27509, 27510, 27511, 27512, 27514, 27517, 27518, 27519, 27520, 27525, 27528, 27532, 27534, 27535, 27536, 27537, 27540, 27541, 27543, 27544, 27545, 27548, 27549, 27550, 27551, 27552, 27554, 27555, 27556, 27557, 27558, 27559, 27560, 27561, 27563, 27564, 27565, 27566, 27567, 27568, 27569, 27570, 27574, 27576, 27577, 27578, 27579, 27580, 27581, 27582, 27584, 27587, 27588, 27590, 27591, 27592, 27593, 27594, 27596, 27598, 27600, 27601, 27608, 27610, 27612, 27613, 27614, 27615, 27616, 27618, 27619, 27620, 27621, 27622, 27623, 27624, 27625, 27628, 27629, 27630, 27632, 27633, 27634, 27636, 27638, 27639, 27640, 27642, 27643, 27644, 27646, 27647, 27648, 27649, 27650, 27651, 27652, 27656, 27657, 27658, 27659, 27660, 27662, 27666, 27671, 27676, 27677, 27678, 27680, 27683, 27685, 27691, 27692, 27693, 27697, 27699, 27702, 27703, 27705, 27706, 27707, 27708, 27710, 27711, 27715, 27716, 27717, 27720, 27723, 27724, 27725, 27726, 27727, 27729, 27730, 27731, 27734, 27736, 27737, 27738, 27746, 27747, 27749, 27750, 27751, 27755, 27756, 27757, 27758, 27759, 27761, 27763, 27765, 27767, 27768, 27770, 27771, 27772, 27775, 27776, 27780, 27783, 27786, 27787, 27789, 27790, 27793, 27794, 27797, 27798, 27799, 27800, 27802, 27804, 27805, 27806, 27808, 27810, 27816, 27820, 27823, 27824, 27828, 27829, 27830, 27831, 27834, 27840, 27841, 27842, 27843, 27846, 27847, 27848, 27851, 27853, 27854, 27855, 27857, 27858, 27864, 27865, 27866, 27868, 27869, 27871, 27876, 27878, 27879, 27881, 27884, 27885, 27890, 27892, 27897, 27903, 27904, 27906, 27907, 27909, 27910, 27912, 27913, 27914, 27917, 27919, 27920, 27921, 27923, 27924, 27925, 27926, 27928, 27932, 27933, 27935, 27936, 27937, 27938, 27939, 27940, 27942, 27944, 27945, 27948, 27949, 27951, 27952, 27956, 27958, 27959, 27960, 27962, 27967, 27968, 27970, 27972, 27977, 27980, 27984, 27989, 27990, 27991, 27992, 27995, 27997, 27999, 28001, 28002, 28004, 28005, 28007, 28008, 28011, 28012, 28013, 28016, 28017, 28018, 28019, 28021, 28022, 28025, 28026, 28027, 28029, 28030, 28031, 28032, 28033, 28035, 28036, 28038, 28039, 28042, 28043, 28045, 28047, 28048, 28050, 28054, 28055, 28056, 28057, 28058, 28060, 28066, 28069, 28076, 28077, 28080, 28081, 28083, 28084, 28086, 28087, 28089, 28090, 28091, 28092, 28093, 28094, 28097, 28098, 28099, 28104, 28105, 28106, 28109, 28110, 28111, 28112, 28114, 28115, 28116, 28117, 28119, 28122, 28123, 28124, 28127, 28130, 28131, 28133, 28135, 28136, 28137, 28138, 28141, 28143, 28144, 28146, 28148, 28149, 28150, 28152, 28154, 28157, 28158, 28159, 28160, 28161, 28162, 28163, 28164, 28166, 28167, 28168, 28169, 28171, 28175, 28178, 28179, 28181, 28184, 28185, 28187, 28188, 28190, 28191, 28194, 28198, 28199, 28200, 28202, 28204, 28206, 28208, 28209, 28211, 28213, 28214, 28215, 28217, 28219, 28220, 28221, 28222, 28223, 28224, 28225, 28226, 28229, 28230, 28231, 28232, 28233, 28234, 28235, 28236, 28239, 28240, 28241, 28242, 28245, 28247, 28249, 28250, 28252, 28253, 28254, 28256, 28257, 28258, 28259, 28260, 28261, 28262, 28263, 28264, 28265, 28266, 28268, 28269, 28271, 28272, 28273, 28274, 28275, 28276, 28277, 28278, 28279, 28280, 28281, 28282, 28283, 28284, 28285, 28288, 28289, 28290, 28292, 28295, 28296, 28298, 28299, 28300, 28301, 28302, 28305, 28306, 28307, 28308, 28309, 28310, 28311, 28313, 28314, 28315, 28317, 28318, 28320, 28321, 28323, 28324, 28326, 28328, 28329, 28331, 28332, 28333, 28334, 28336, 28339, 28341, 28344, 28345, 28348, 28350, 28351, 28352, 28355, 28356, 28357, 28358, 28360, 28361, 28362, 28364, 28365, 28366, 28368, 28370, 28374, 28376, 28377, 28379, 28380, 28381, 28387, 28391, 28394, 28395, 28396, 28397, 28398, 28399, 28400, 28401, 28402, 28403, 28405, 28406, 28407, 28408, 28410, 28411, 28412, 28413, 28414, 28415, 28416, 28417, 28419, 28420, 28421, 28423, 28424, 28426, 28427, 28428, 28429, 28430, 28432, 28433, 28434, 28438, 28439, 28440, 28441, 28442, 28443, 28444, 28445, 28446, 28447, 28449, 28450, 28451, 28453, 28454, 28455, 28456, 28460, 28462, 28464, 28466, 28468, 28469, 28471, 28472, 28473, 28474, 28475, 28476, 28477, 28479, 28480, 28481, 28482, 28483, 28484, 28485, 28488, 28489, 28490, 28492, 28494, 28495, 28496, 28497, 28498, 28499, 28500, 28501, 28502, 28503, 28505, 28506, 28507, 28509, 28511, 28512, 28513, 28515, 28516, 28517, 28519, 28520, 28521, 28522, 28523, 28524, 28527, 28528, 28529, 28531, 28533, 28534, 28535, 28537, 28539, 28541, 28542, 28543, 28544, 28545, 28546, 28547, 28549, 28550, 28551, 28554, 28555, 28559, 28560, 28561, 28562, 28563, 28564, 28565, 28566, 28567, 28568, 28569, 28570, 28571, 28573, 28574, 28575, 28576, 28578, 28579, 28580, 28581, 28582, 28584, 28585, 28586, 28587, 28588, 28589, 28590, 28591, 28592, 28593, 28594, 28596, 28597, 28599, 28600, 28602, 28603, 28604, 28605, 28606, 28607, 28609, 28611, 28612, 28613, 28614, 28615, 28616, 28618, 28619, 28620, 28621, 28622, 28623, 28624, 28627, 28628, 28629, 28630, 28631, 28632, 28633, 28634, 28635, 28636, 28637, 28639, 28642, 28643, 28644, 28645, 28646, 28647, 28648, 28649, 28650, 28651, 28652, 28653, 28656, 28657, 28658, 28659, 28660, 28661, 28662, 28663, 28664, 28665, 28666, 28667, 28668, 28669, 28670, 28671, 28672, 28673, 28674, 28675, 28676, 28677, 28678, 28679, 28680, 28681, 28682, 28683, 28684, 28685, 28686, 28687, 28688, 28690, 28691, 28692, 28693, 28694, 28695, 28696, 28697, 28700, 28701, 28702, 28703, 28704, 28705, 28706, 28708, 28709, 28710, 28711, 28712, 28713, 28714, 28715, 28716, 28717, 28718, 28719, 28720, 28721, 28722, 28723, 28724, 28726, 28727, 28728, 28730, 28731, 28732, 28733, 28734, 28735, 28736, 28737, 28738, 28739, 28740, 28741, 28742, 28743, 28744, 28745, 28746, 28747, 28749, 28750, 28752, 28753, 28754, 28755, 28756, 28757, 28758, 28759, 28760, 28761, 28762, 28763, 28764, 28765, 28767, 28768, 28769, 28770, 28771, 28772, 28773, 28774, 28775, 28776, 28777, 28778, 28782, 28785, 28786, 28787, 28788, 28791, 28793, 28794, 28795, 28797, 28801, 28802, 28803, 28804, 28806, 28807, 28808, 28811, 28812, 28813, 28815, 28816, 28817, 28819, 28823, 28824, 28826, 28827, 28830, 28831, 28832, 28833, 28834, 28835, 28836, 28837, 28838, 28839, 28840, 28841, 28842, 28848, 28850, 28852, 28853, 28854, 28858, 28862, 28863, 28868, 28869, 28870, 28871, 28873, 28875, 28876, 28877, 28878, 28879, 28880, 28881, 28882, 28883, 28884, 28885, 28886, 28887, 28890, 28892, 28893, 28894, 28896, 28897, 28898, 28899, 28901, 28906, 28910, 28912, 28913, 28914, 28915, 28916, 28917, 28918, 28920, 28922, 28923, 28924, 28926, 28927, 28928, 28929, 28930, 28931, 28932, 28933, 28934, 28935, 28936, 28939, 28940, 28941, 28942, 28943, 28945, 28946, 28948, 28951, 28955, 28956, 28957, 28958, 28959, 28960, 28961, 28962, 28963, 28964, 28965, 28967, 28968, 28969, 28970, 28971, 28972, 28973, 28974, 28978, 28979, 28980, 28981, 28983, 28984, 28985, 28986, 28987, 28988, 28989, 28990, 28991, 28992, 28993, 28994, 28995, 28996, 28998, 28999, 29e3, 29001, 29003, 29005, 29007, 29008, 29009, 29010, 29011, 29012, 29013, 29014, 29015, 29016, 29017, 29018, 29019, 29021, 29023, 29024, 29025, 29026, 29027, 29029, 29033, 29034, 29035, 29036, 29037, 29039, 29040, 29041, 29044, 29045, 29046, 29047, 29049, 29051, 29052, 29054, 29055, 29056, 29057, 29058, 29059, 29061, 29062, 29063, 29064, 29065, 29067, 29068, 29069, 29070, 29072, 29073, 29074, 29075, 29077, 29078, 29079, 29082, 29083, 29084, 29085, 29086, 29089, 29090, 29091, 29092, 29093, 29094, 29095, 29097, 29098, 29099, 29101, 29102, 29103, 29104, 29105, 29106, 29108, 29110, 29111, 29112, 29114, 29115, 29116, 29117, 29118, 29119, 29120, 29121, 29122, 29124, 29125, 29126, 29127, 29128, 29129, 29130, 29131, 29132, 29133, 29135, 29136, 29137, 29138, 29139, 29142, 29143, 29144, 29145, 29146, 29147, 29148, 29149, 29150, 29151, 29153, 29154, 29155, 29156, 29158, 29160, 29161, 29162, 29163, 29164, 29165, 29167, 29168, 29169, 29170, 29171, 29172, 29173, 29174, 29175, 29176, 29178, 29179, 29180, 29181, 29182, 29183, 29184, 29185, 29186, 29187, 29188, 29189, 29191, 29192, 29193, 29194, 29195, 29196, 29197, 29198, 29199, 29200, 29201, 29202, 29203, 29204, 29205, 29206, 29207, 29208, 29209, 29210, 29211, 29212, 29214, 29215, 29216, 29217, 29218, 29219, 29220, 29221, 29222, 29223, 29225, 29227, 29229, 29230, 29231, 29234, 29235, 29236, 29242, 29244, 29246, 29248, 29249, 29250, 29251, 29252, 29253, 29254, 29257, 29258, 29259, 29262, 29263, 29264, 29265, 29267, 29268, 29269, 29271, 29272, 29274, 29276, 29278, 29280, 29283, 29284, 29285, 29288, 29290, 29291, 29292, 29293, 29296, 29297, 29299, 29300, 29302, 29303, 29304, 29307, 29308, 29309, 29314, 29315, 29317, 29318, 29319, 29320, 29321, 29324, 29326, 29328, 29329, 29331, 29332, 29333, 29334, 29335, 29336, 29337, 29338, 29339, 29340, 29341, 29342, 29344, 29345, 29346, 29347, 29348, 29349, 29350, 29351, 29352, 29353, 29354, 29355, 29358, 29361, 29362, 29363, 29365, 29370, 29371, 29372, 29373, 29374, 29375, 29376, 29381, 29382, 29383, 29385, 29386, 29387, 29388, 29391, 29393, 29395, 29396, 29397, 29398, 29400, 29402, 29403, 58566, 58567, 58568, 58569, 58570, 58571, 58572, 58573, 58574, 58575, 58576, 58577, 58578, 58579, 58580, 58581, 58582, 58583, 58584, 58585, 58586, 58587, 58588, 58589, 58590, 58591, 58592, 58593, 58594, 58595, 58596, 58597, 58598, 58599, 58600, 58601, 58602, 58603, 58604, 58605, 58606, 58607, 58608, 58609, 58610, 58611, 58612, 58613, 58614, 58615, 58616, 58617, 58618, 58619, 58620, 58621, 58622, 58623, 58624, 58625, 58626, 58627, 58628, 58629, 58630, 58631, 58632, 58633, 58634, 58635, 58636, 58637, 58638, 58639, 58640, 58641, 58642, 58643, 58644, 58645, 58646, 58647, 58648, 58649, 58650, 58651, 58652, 58653, 58654, 58655, 58656, 58657, 58658, 58659, 58660, 58661, 12288, 12289, 12290, 183, 713, 711, 168, 12291, 12293, 8212, 65374, 8214, 8230, 8216, 8217, 8220, 8221, 12308, 12309, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12310, 12311, 12304, 12305, 177, 215, 247, 8758, 8743, 8744, 8721, 8719, 8746, 8745, 8712, 8759, 8730, 8869, 8741, 8736, 8978, 8857, 8747, 8750, 8801, 8780, 8776, 8765, 8733, 8800, 8814, 8815, 8804, 8805, 8734, 8757, 8756, 9794, 9792, 176, 8242, 8243, 8451, 65284, 164, 65504, 65505, 8240, 167, 8470, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 8251, 8594, 8592, 8593, 8595, 12307, 58662, 58663, 58664, 58665, 58666, 58667, 58668, 58669, 58670, 58671, 58672, 58673, 58674, 58675, 58676, 58677, 58678, 58679, 58680, 58681, 58682, 58683, 58684, 58685, 58686, 58687, 58688, 58689, 58690, 58691, 58692, 58693, 58694, 58695, 58696, 58697, 58698, 58699, 58700, 58701, 58702, 58703, 58704, 58705, 58706, 58707, 58708, 58709, 58710, 58711, 58712, 58713, 58714, 58715, 58716, 58717, 58718, 58719, 58720, 58721, 58722, 58723, 58724, 58725, 58726, 58727, 58728, 58729, 58730, 58731, 58732, 58733, 58734, 58735, 58736, 58737, 58738, 58739, 58740, 58741, 58742, 58743, 58744, 58745, 58746, 58747, 58748, 58749, 58750, 58751, 58752, 58753, 58754, 58755, 58756, 58757, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 59238, 59239, 59240, 59241, 59242, 59243, 9352, 9353, 9354, 9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365, 9366, 9367, 9368, 9369, 9370, 9371, 9332, 9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343, 9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 8364, 59245, 12832, 12833, 12834, 12835, 12836, 12837, 12838, 12839, 12840, 12841, 59246, 59247, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 8554, 8555, 59248, 59249, 58758, 58759, 58760, 58761, 58762, 58763, 58764, 58765, 58766, 58767, 58768, 58769, 58770, 58771, 58772, 58773, 58774, 58775, 58776, 58777, 58778, 58779, 58780, 58781, 58782, 58783, 58784, 58785, 58786, 58787, 58788, 58789, 58790, 58791, 58792, 58793, 58794, 58795, 58796, 58797, 58798, 58799, 58800, 58801, 58802, 58803, 58804, 58805, 58806, 58807, 58808, 58809, 58810, 58811, 58812, 58813, 58814, 58815, 58816, 58817, 58818, 58819, 58820, 58821, 58822, 58823, 58824, 58825, 58826, 58827, 58828, 58829, 58830, 58831, 58832, 58833, 58834, 58835, 58836, 58837, 58838, 58839, 58840, 58841, 58842, 58843, 58844, 58845, 58846, 58847, 58848, 58849, 58850, 58851, 58852, 12288, 65281, 65282, 65283, 65509, 65285, 65286, 65287, 65288, 65289, 65290, 65291, 65292, 65293, 65294, 65295, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, 65306, 65307, 65308, 65309, 65310, 65311, 65312, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, 65339, 65340, 65341, 65342, 65343, 65344, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, 65371, 65372, 65373, 65507, 58854, 58855, 58856, 58857, 58858, 58859, 58860, 58861, 58862, 58863, 58864, 58865, 58866, 58867, 58868, 58869, 58870, 58871, 58872, 58873, 58874, 58875, 58876, 58877, 58878, 58879, 58880, 58881, 58882, 58883, 58884, 58885, 58886, 58887, 58888, 58889, 58890, 58891, 58892, 58893, 58894, 58895, 58896, 58897, 58898, 58899, 58900, 58901, 58902, 58903, 58904, 58905, 58906, 58907, 58908, 58909, 58910, 58911, 58912, 58913, 58914, 58915, 58916, 58917, 58918, 58919, 58920, 58921, 58922, 58923, 58924, 58925, 58926, 58927, 58928, 58929, 58930, 58931, 58932, 58933, 58934, 58935, 58936, 58937, 58938, 58939, 58940, 58941, 58942, 58943, 58944, 58945, 58946, 58947, 58948, 58949, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, 59250, 59251, 59252, 59253, 59254, 59255, 59256, 59257, 59258, 59259, 59260, 58950, 58951, 58952, 58953, 58954, 58955, 58956, 58957, 58958, 58959, 58960, 58961, 58962, 58963, 58964, 58965, 58966, 58967, 58968, 58969, 58970, 58971, 58972, 58973, 58974, 58975, 58976, 58977, 58978, 58979, 58980, 58981, 58982, 58983, 58984, 58985, 58986, 58987, 58988, 58989, 58990, 58991, 58992, 58993, 58994, 58995, 58996, 58997, 58998, 58999, 59e3, 59001, 59002, 59003, 59004, 59005, 59006, 59007, 59008, 59009, 59010, 59011, 59012, 59013, 59014, 59015, 59016, 59017, 59018, 59019, 59020, 59021, 59022, 59023, 59024, 59025, 59026, 59027, 59028, 59029, 59030, 59031, 59032, 59033, 59034, 59035, 59036, 59037, 59038, 59039, 59040, 59041, 59042, 59043, 59044, 59045, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, 59261, 59262, 59263, 59264, 59265, 59266, 59267, 59268, 59046, 59047, 59048, 59049, 59050, 59051, 59052, 59053, 59054, 59055, 59056, 59057, 59058, 59059, 59060, 59061, 59062, 59063, 59064, 59065, 59066, 59067, 59068, 59069, 59070, 59071, 59072, 59073, 59074, 59075, 59076, 59077, 59078, 59079, 59080, 59081, 59082, 59083, 59084, 59085, 59086, 59087, 59088, 59089, 59090, 59091, 59092, 59093, 59094, 59095, 59096, 59097, 59098, 59099, 59100, 59101, 59102, 59103, 59104, 59105, 59106, 59107, 59108, 59109, 59110, 59111, 59112, 59113, 59114, 59115, 59116, 59117, 59118, 59119, 59120, 59121, 59122, 59123, 59124, 59125, 59126, 59127, 59128, 59129, 59130, 59131, 59132, 59133, 59134, 59135, 59136, 59137, 59138, 59139, 59140, 59141, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, 59269, 59270, 59271, 59272, 59273, 59274, 59275, 59276, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, 59277, 59278, 59279, 59280, 59281, 59282, 59283, 65077, 65078, 65081, 65082, 65087, 65088, 65085, 65086, 65089, 65090, 65091, 65092, 59284, 59285, 65083, 65084, 65079, 65080, 65073, 59286, 65075, 65076, 59287, 59288, 59289, 59290, 59291, 59292, 59293, 59294, 59295, 59142, 59143, 59144, 59145, 59146, 59147, 59148, 59149, 59150, 59151, 59152, 59153, 59154, 59155, 59156, 59157, 59158, 59159, 59160, 59161, 59162, 59163, 59164, 59165, 59166, 59167, 59168, 59169, 59170, 59171, 59172, 59173, 59174, 59175, 59176, 59177, 59178, 59179, 59180, 59181, 59182, 59183, 59184, 59185, 59186, 59187, 59188, 59189, 59190, 59191, 59192, 59193, 59194, 59195, 59196, 59197, 59198, 59199, 59200, 59201, 59202, 59203, 59204, 59205, 59206, 59207, 59208, 59209, 59210, 59211, 59212, 59213, 59214, 59215, 59216, 59217, 59218, 59219, 59220, 59221, 59222, 59223, 59224, 59225, 59226, 59227, 59228, 59229, 59230, 59231, 59232, 59233, 59234, 59235, 59236, 59237, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 59296, 59297, 59298, 59299, 59300, 59301, 59302, 59303, 59304, 59305, 59306, 59307, 59308, 59309, 59310, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 59311, 59312, 59313, 59314, 59315, 59316, 59317, 59318, 59319, 59320, 59321, 59322, 59323, 714, 715, 729, 8211, 8213, 8229, 8245, 8453, 8457, 8598, 8599, 8600, 8601, 8725, 8735, 8739, 8786, 8806, 8807, 8895, 9552, 9553, 9554, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 9581, 9582, 9583, 9584, 9585, 9586, 9587, 9601, 9602, 9603, 9604, 9605, 9606, 9607, 9608, 9609, 9610, 9611, 9612, 9613, 9614, 9615, 9619, 9620, 9621, 9660, 9661, 9698, 9699, 9700, 9701, 9737, 8853, 12306, 12317, 12318, 59324, 59325, 59326, 59327, 59328, 59329, 59330, 59331, 59332, 59333, 59334, 257, 225, 462, 224, 275, 233, 283, 232, 299, 237, 464, 236, 333, 243, 466, 242, 363, 250, 468, 249, 470, 472, 474, 476, 252, 234, 593, 7743, 324, 328, 505, 609, 59337, 59338, 59339, 59340, 12549, 12550, 12551, 12552, 12553, 12554, 12555, 12556, 12557, 12558, 12559, 12560, 12561, 12562, 12563, 12564, 12565, 12566, 12567, 12568, 12569, 12570, 12571, 12572, 12573, 12574, 12575, 12576, 12577, 12578, 12579, 12580, 12581, 12582, 12583, 12584, 12585, 59341, 59342, 59343, 59344, 59345, 59346, 59347, 59348, 59349, 59350, 59351, 59352, 59353, 59354, 59355, 59356, 59357, 59358, 59359, 59360, 59361, 12321, 12322, 12323, 12324, 12325, 12326, 12327, 12328, 12329, 12963, 13198, 13199, 13212, 13213, 13214, 13217, 13252, 13262, 13265, 13266, 13269, 65072, 65506, 65508, 59362, 8481, 12849, 59363, 8208, 59364, 59365, 59366, 12540, 12443, 12444, 12541, 12542, 12294, 12445, 12446, 65097, 65098, 65099, 65100, 65101, 65102, 65103, 65104, 65105, 65106, 65108, 65109, 65110, 65111, 65113, 65114, 65115, 65116, 65117, 65118, 65119, 65120, 65121, 65122, 65123, 65124, 65125, 65126, 65128, 65129, 65130, 65131, 12350, 12272, 12273, 12274, 12275, 12276, 12277, 12278, 12279, 12280, 12281, 12282, 12283, 12295, 59380, 59381, 59382, 59383, 59384, 59385, 59386, 59387, 59388, 59389, 59390, 59391, 59392, 9472, 9473, 9474, 9475, 9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486, 9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495, 9496, 9497, 9498, 9499, 9500, 9501, 9502, 9503, 9504, 9505, 9506, 9507, 9508, 9509, 9510, 9511, 9512, 9513, 9514, 9515, 9516, 9517, 9518, 9519, 9520, 9521, 9522, 9523, 9524, 9525, 9526, 9527, 9528, 9529, 9530, 9531, 9532, 9533, 9534, 9535, 9536, 9537, 9538, 9539, 9540, 9541, 9542, 9543, 9544, 9545, 9546, 9547, 59393, 59394, 59395, 59396, 59397, 59398, 59399, 59400, 59401, 59402, 59403, 59404, 59405, 59406, 59407, 29404, 29405, 29407, 29410, 29411, 29412, 29413, 29414, 29415, 29418, 29419, 29429, 29430, 29433, 29437, 29438, 29439, 29440, 29442, 29444, 29445, 29446, 29447, 29448, 29449, 29451, 29452, 29453, 29455, 29456, 29457, 29458, 29460, 29464, 29465, 29466, 29471, 29472, 29475, 29476, 29478, 29479, 29480, 29485, 29487, 29488, 29490, 29491, 29493, 29494, 29498, 29499, 29500, 29501, 29504, 29505, 29506, 29507, 29508, 29509, 29510, 29511, 29512, 29513, 29514, 29515, 29516, 29518, 29519, 29521, 29523, 29524, 29525, 29526, 29528, 29529, 29530, 29531, 29532, 29533, 29534, 29535, 29537, 29538, 29539, 29540, 29541, 29542, 29543, 29544, 29545, 29546, 29547, 29550, 29552, 29553, 57344, 57345, 57346, 57347, 57348, 57349, 57350, 57351, 57352, 57353, 57354, 57355, 57356, 57357, 57358, 57359, 57360, 57361, 57362, 57363, 57364, 57365, 57366, 57367, 57368, 57369, 57370, 57371, 57372, 57373, 57374, 57375, 57376, 57377, 57378, 57379, 57380, 57381, 57382, 57383, 57384, 57385, 57386, 57387, 57388, 57389, 57390, 57391, 57392, 57393, 57394, 57395, 57396, 57397, 57398, 57399, 57400, 57401, 57402, 57403, 57404, 57405, 57406, 57407, 57408, 57409, 57410, 57411, 57412, 57413, 57414, 57415, 57416, 57417, 57418, 57419, 57420, 57421, 57422, 57423, 57424, 57425, 57426, 57427, 57428, 57429, 57430, 57431, 57432, 57433, 57434, 57435, 57436, 57437, 29554, 29555, 29556, 29557, 29558, 29559, 29560, 29561, 29562, 29563, 29564, 29565, 29567, 29568, 29569, 29570, 29571, 29573, 29574, 29576, 29578, 29580, 29581, 29583, 29584, 29586, 29587, 29588, 29589, 29591, 29592, 29593, 29594, 29596, 29597, 29598, 29600, 29601, 29603, 29604, 29605, 29606, 29607, 29608, 29610, 29612, 29613, 29617, 29620, 29621, 29622, 29624, 29625, 29628, 29629, 29630, 29631, 29633, 29635, 29636, 29637, 29638, 29639, 29643, 29644, 29646, 29650, 29651, 29652, 29653, 29654, 29655, 29656, 29658, 29659, 29660, 29661, 29663, 29665, 29666, 29667, 29668, 29670, 29672, 29674, 29675, 29676, 29678, 29679, 29680, 29681, 29683, 29684, 29685, 29686, 29687, 57438, 57439, 57440, 57441, 57442, 57443, 57444, 57445, 57446, 57447, 57448, 57449, 57450, 57451, 57452, 57453, 57454, 57455, 57456, 57457, 57458, 57459, 57460, 57461, 57462, 57463, 57464, 57465, 57466, 57467, 57468, 57469, 57470, 57471, 57472, 57473, 57474, 57475, 57476, 57477, 57478, 57479, 57480, 57481, 57482, 57483, 57484, 57485, 57486, 57487, 57488, 57489, 57490, 57491, 57492, 57493, 57494, 57495, 57496, 57497, 57498, 57499, 57500, 57501, 57502, 57503, 57504, 57505, 57506, 57507, 57508, 57509, 57510, 57511, 57512, 57513, 57514, 57515, 57516, 57517, 57518, 57519, 57520, 57521, 57522, 57523, 57524, 57525, 57526, 57527, 57528, 57529, 57530, 57531, 29688, 29689, 29690, 29691, 29692, 29693, 29694, 29695, 29696, 29697, 29698, 29700, 29703, 29704, 29707, 29708, 29709, 29710, 29713, 29714, 29715, 29716, 29717, 29718, 29719, 29720, 29721, 29724, 29725, 29726, 29727, 29728, 29729, 29731, 29732, 29735, 29737, 29739, 29741, 29743, 29745, 29746, 29751, 29752, 29753, 29754, 29755, 29757, 29758, 29759, 29760, 29762, 29763, 29764, 29765, 29766, 29767, 29768, 29769, 29770, 29771, 29772, 29773, 29774, 29775, 29776, 29777, 29778, 29779, 29780, 29782, 29784, 29789, 29792, 29793, 29794, 29795, 29796, 29797, 29798, 29799, 29800, 29801, 29802, 29803, 29804, 29806, 29807, 29809, 29810, 29811, 29812, 29813, 29816, 29817, 29818, 57532, 57533, 57534, 57535, 57536, 57537, 57538, 57539, 57540, 57541, 57542, 57543, 57544, 57545, 57546, 57547, 57548, 57549, 57550, 57551, 57552, 57553, 57554, 57555, 57556, 57557, 57558, 57559, 57560, 57561, 57562, 57563, 57564, 57565, 57566, 57567, 57568, 57569, 57570, 57571, 57572, 57573, 57574, 57575, 57576, 57577, 57578, 57579, 57580, 57581, 57582, 57583, 57584, 57585, 57586, 57587, 57588, 57589, 57590, 57591, 57592, 57593, 57594, 57595, 57596, 57597, 57598, 57599, 57600, 57601, 57602, 57603, 57604, 57605, 57606, 57607, 57608, 57609, 57610, 57611, 57612, 57613, 57614, 57615, 57616, 57617, 57618, 57619, 57620, 57621, 57622, 57623, 57624, 57625, 29819, 29820, 29821, 29823, 29826, 29828, 29829, 29830, 29832, 29833, 29834, 29836, 29837, 29839, 29841, 29842, 29843, 29844, 29845, 29846, 29847, 29848, 29849, 29850, 29851, 29853, 29855, 29856, 29857, 29858, 29859, 29860, 29861, 29862, 29866, 29867, 29868, 29869, 29870, 29871, 29872, 29873, 29874, 29875, 29876, 29877, 29878, 29879, 29880, 29881, 29883, 29884, 29885, 29886, 29887, 29888, 29889, 29890, 29891, 29892, 29893, 29894, 29895, 29896, 29897, 29898, 29899, 29900, 29901, 29902, 29903, 29904, 29905, 29907, 29908, 29909, 29910, 29911, 29912, 29913, 29914, 29915, 29917, 29919, 29921, 29925, 29927, 29928, 29929, 29930, 29931, 29932, 29933, 29936, 29937, 29938, 57626, 57627, 57628, 57629, 57630, 57631, 57632, 57633, 57634, 57635, 57636, 57637, 57638, 57639, 57640, 57641, 57642, 57643, 57644, 57645, 57646, 57647, 57648, 57649, 57650, 57651, 57652, 57653, 57654, 57655, 57656, 57657, 57658, 57659, 57660, 57661, 57662, 57663, 57664, 57665, 57666, 57667, 57668, 57669, 57670, 57671, 57672, 57673, 57674, 57675, 57676, 57677, 57678, 57679, 57680, 57681, 57682, 57683, 57684, 57685, 57686, 57687, 57688, 57689, 57690, 57691, 57692, 57693, 57694, 57695, 57696, 57697, 57698, 57699, 57700, 57701, 57702, 57703, 57704, 57705, 57706, 57707, 57708, 57709, 57710, 57711, 57712, 57713, 57714, 57715, 57716, 57717, 57718, 57719, 29939, 29941, 29944, 29945, 29946, 29947, 29948, 29949, 29950, 29952, 29953, 29954, 29955, 29957, 29958, 29959, 29960, 29961, 29962, 29963, 29964, 29966, 29968, 29970, 29972, 29973, 29974, 29975, 29979, 29981, 29982, 29984, 29985, 29986, 29987, 29988, 29990, 29991, 29994, 29998, 30004, 30006, 30009, 30012, 30013, 30015, 30017, 30018, 30019, 30020, 30022, 30023, 30025, 30026, 30029, 30032, 30033, 30034, 30035, 30037, 30038, 30039, 30040, 30045, 30046, 30047, 30048, 30049, 30050, 30051, 30052, 30055, 30056, 30057, 30059, 30060, 30061, 30062, 30063, 30064, 30065, 30067, 30069, 30070, 30071, 30074, 30075, 30076, 30077, 30078, 30080, 30081, 30082, 30084, 30085, 30087, 57720, 57721, 57722, 57723, 57724, 57725, 57726, 57727, 57728, 57729, 57730, 57731, 57732, 57733, 57734, 57735, 57736, 57737, 57738, 57739, 57740, 57741, 57742, 57743, 57744, 57745, 57746, 57747, 57748, 57749, 57750, 57751, 57752, 57753, 57754, 57755, 57756, 57757, 57758, 57759, 57760, 57761, 57762, 57763, 57764, 57765, 57766, 57767, 57768, 57769, 57770, 57771, 57772, 57773, 57774, 57775, 57776, 57777, 57778, 57779, 57780, 57781, 57782, 57783, 57784, 57785, 57786, 57787, 57788, 57789, 57790, 57791, 57792, 57793, 57794, 57795, 57796, 57797, 57798, 57799, 57800, 57801, 57802, 57803, 57804, 57805, 57806, 57807, 57808, 57809, 57810, 57811, 57812, 57813, 30088, 30089, 30090, 30092, 30093, 30094, 30096, 30099, 30101, 30104, 30107, 30108, 30110, 30114, 30118, 30119, 30120, 30121, 30122, 30125, 30134, 30135, 30138, 30139, 30143, 30144, 30145, 30150, 30155, 30156, 30158, 30159, 30160, 30161, 30163, 30167, 30169, 30170, 30172, 30173, 30175, 30176, 30177, 30181, 30185, 30188, 30189, 30190, 30191, 30194, 30195, 30197, 30198, 30199, 30200, 30202, 30203, 30205, 30206, 30210, 30212, 30214, 30215, 30216, 30217, 30219, 30221, 30222, 30223, 30225, 30226, 30227, 30228, 30230, 30234, 30236, 30237, 30238, 30241, 30243, 30247, 30248, 30252, 30254, 30255, 30257, 30258, 30262, 30263, 30265, 30266, 30267, 30269, 30273, 30274, 30276, 57814, 57815, 57816, 57817, 57818, 57819, 57820, 57821, 57822, 57823, 57824, 57825, 57826, 57827, 57828, 57829, 57830, 57831, 57832, 57833, 57834, 57835, 57836, 57837, 57838, 57839, 57840, 57841, 57842, 57843, 57844, 57845, 57846, 57847, 57848, 57849, 57850, 57851, 57852, 57853, 57854, 57855, 57856, 57857, 57858, 57859, 57860, 57861, 57862, 57863, 57864, 57865, 57866, 57867, 57868, 57869, 57870, 57871, 57872, 57873, 57874, 57875, 57876, 57877, 57878, 57879, 57880, 57881, 57882, 57883, 57884, 57885, 57886, 57887, 57888, 57889, 57890, 57891, 57892, 57893, 57894, 57895, 57896, 57897, 57898, 57899, 57900, 57901, 57902, 57903, 57904, 57905, 57906, 57907, 30277, 30278, 30279, 30280, 30281, 30282, 30283, 30286, 30287, 30288, 30289, 30290, 30291, 30293, 30295, 30296, 30297, 30298, 30299, 30301, 30303, 30304, 30305, 30306, 30308, 30309, 30310, 30311, 30312, 30313, 30314, 30316, 30317, 30318, 30320, 30321, 30322, 30323, 30324, 30325, 30326, 30327, 30329, 30330, 30332, 30335, 30336, 30337, 30339, 30341, 30345, 30346, 30348, 30349, 30351, 30352, 30354, 30356, 30357, 30359, 30360, 30362, 30363, 30364, 30365, 30366, 30367, 30368, 30369, 30370, 30371, 30373, 30374, 30375, 30376, 30377, 30378, 30379, 30380, 30381, 30383, 30384, 30387, 30389, 30390, 30391, 30392, 30393, 30394, 30395, 30396, 30397, 30398, 30400, 30401, 30403, 21834, 38463, 22467, 25384, 21710, 21769, 21696, 30353, 30284, 34108, 30702, 33406, 30861, 29233, 38552, 38797, 27688, 23433, 20474, 25353, 26263, 23736, 33018, 26696, 32942, 26114, 30414, 20985, 25942, 29100, 32753, 34948, 20658, 22885, 25034, 28595, 33453, 25420, 25170, 21485, 21543, 31494, 20843, 30116, 24052, 25300, 36299, 38774, 25226, 32793, 22365, 38712, 32610, 29240, 30333, 26575, 30334, 25670, 20336, 36133, 25308, 31255, 26001, 29677, 25644, 25203, 33324, 39041, 26495, 29256, 25198, 25292, 20276, 29923, 21322, 21150, 32458, 37030, 24110, 26758, 27036, 33152, 32465, 26834, 30917, 34444, 38225, 20621, 35876, 33502, 32990, 21253, 35090, 21093, 30404, 30407, 30409, 30411, 30412, 30419, 30421, 30425, 30426, 30428, 30429, 30430, 30432, 30433, 30434, 30435, 30436, 30438, 30439, 30440, 30441, 30442, 30443, 30444, 30445, 30448, 30451, 30453, 30454, 30455, 30458, 30459, 30461, 30463, 30464, 30466, 30467, 30469, 30470, 30474, 30476, 30478, 30479, 30480, 30481, 30482, 30483, 30484, 30485, 30486, 30487, 30488, 30491, 30492, 30493, 30494, 30497, 30499, 30500, 30501, 30503, 30506, 30507, 30508, 30510, 30512, 30513, 30514, 30515, 30516, 30521, 30523, 30525, 30526, 30527, 30530, 30532, 30533, 30534, 30536, 30537, 30538, 30539, 30540, 30541, 30542, 30543, 30546, 30547, 30548, 30549, 30550, 30551, 30552, 30553, 30556, 34180, 38649, 20445, 22561, 39281, 23453, 25265, 25253, 26292, 35961, 40077, 29190, 26479, 30865, 24754, 21329, 21271, 36744, 32972, 36125, 38049, 20493, 29384, 22791, 24811, 28953, 34987, 22868, 33519, 26412, 31528, 23849, 32503, 29997, 27893, 36454, 36856, 36924, 40763, 27604, 37145, 31508, 24444, 30887, 34006, 34109, 27605, 27609, 27606, 24065, 24199, 30201, 38381, 25949, 24330, 24517, 36767, 22721, 33218, 36991, 38491, 38829, 36793, 32534, 36140, 25153, 20415, 21464, 21342, 36776, 36777, 36779, 36941, 26631, 24426, 33176, 34920, 40150, 24971, 21035, 30250, 24428, 25996, 28626, 28392, 23486, 25672, 20853, 20912, 26564, 19993, 31177, 39292, 28851, 30557, 30558, 30559, 30560, 30564, 30567, 30569, 30570, 30573, 30574, 30575, 30576, 30577, 30578, 30579, 30580, 30581, 30582, 30583, 30584, 30586, 30587, 30588, 30593, 30594, 30595, 30598, 30599, 30600, 30601, 30602, 30603, 30607, 30608, 30611, 30612, 30613, 30614, 30615, 30616, 30617, 30618, 30619, 30620, 30621, 30622, 30625, 30627, 30628, 30630, 30632, 30635, 30637, 30638, 30639, 30641, 30642, 30644, 30646, 30647, 30648, 30649, 30650, 30652, 30654, 30656, 30657, 30658, 30659, 30660, 30661, 30662, 30663, 30664, 30665, 30666, 30667, 30668, 30670, 30671, 30672, 30673, 30674, 30675, 30676, 30677, 30678, 30680, 30681, 30682, 30685, 30686, 30687, 30688, 30689, 30692, 30149, 24182, 29627, 33760, 25773, 25320, 38069, 27874, 21338, 21187, 25615, 38082, 31636, 20271, 24091, 33334, 33046, 33162, 28196, 27850, 39539, 25429, 21340, 21754, 34917, 22496, 19981, 24067, 27493, 31807, 37096, 24598, 25830, 29468, 35009, 26448, 25165, 36130, 30572, 36393, 37319, 24425, 33756, 34081, 39184, 21442, 34453, 27531, 24813, 24808, 28799, 33485, 33329, 20179, 27815, 34255, 25805, 31961, 27133, 26361, 33609, 21397, 31574, 20391, 20876, 27979, 23618, 36461, 25554, 21449, 33580, 33590, 26597, 30900, 25661, 23519, 23700, 24046, 35815, 25286, 26612, 35962, 25600, 25530, 34633, 39307, 35863, 32544, 38130, 20135, 38416, 39076, 26124, 29462, 30694, 30696, 30698, 30703, 30704, 30705, 30706, 30708, 30709, 30711, 30713, 30714, 30715, 30716, 30723, 30724, 30725, 30726, 30727, 30728, 30730, 30731, 30734, 30735, 30736, 30739, 30741, 30745, 30747, 30750, 30752, 30753, 30754, 30756, 30760, 30762, 30763, 30766, 30767, 30769, 30770, 30771, 30773, 30774, 30781, 30783, 30785, 30786, 30787, 30788, 30790, 30792, 30793, 30794, 30795, 30797, 30799, 30801, 30803, 30804, 30808, 30809, 30810, 30811, 30812, 30814, 30815, 30816, 30817, 30818, 30819, 30820, 30821, 30822, 30823, 30824, 30825, 30831, 30832, 30833, 30834, 30835, 30836, 30837, 30838, 30840, 30841, 30842, 30843, 30845, 30846, 30847, 30848, 30849, 30850, 30851, 22330, 23581, 24120, 38271, 20607, 32928, 21378, 25950, 30021, 21809, 20513, 36229, 25220, 38046, 26397, 22066, 28526, 24034, 21557, 28818, 36710, 25199, 25764, 25507, 24443, 28552, 37108, 33251, 36784, 23576, 26216, 24561, 27785, 38472, 36225, 34924, 25745, 31216, 22478, 27225, 25104, 21576, 20056, 31243, 24809, 28548, 35802, 25215, 36894, 39563, 31204, 21507, 30196, 25345, 21273, 27744, 36831, 24347, 39536, 32827, 40831, 20360, 23610, 36196, 32709, 26021, 28861, 20805, 20914, 34411, 23815, 23456, 25277, 37228, 30068, 36364, 31264, 24833, 31609, 20167, 32504, 30597, 19985, 33261, 21021, 20986, 27249, 21416, 36487, 38148, 38607, 28353, 38500, 26970, 30852, 30853, 30854, 30856, 30858, 30859, 30863, 30864, 30866, 30868, 30869, 30870, 30873, 30877, 30878, 30880, 30882, 30884, 30886, 30888, 30889, 30890, 30891, 30892, 30893, 30894, 30895, 30901, 30902, 30903, 30904, 30906, 30907, 30908, 30909, 30911, 30912, 30914, 30915, 30916, 30918, 30919, 30920, 30924, 30925, 30926, 30927, 30929, 30930, 30931, 30934, 30935, 30936, 30938, 30939, 30940, 30941, 30942, 30943, 30944, 30945, 30946, 30947, 30948, 30949, 30950, 30951, 30953, 30954, 30955, 30957, 30958, 30959, 30960, 30961, 30963, 30965, 30966, 30968, 30969, 30971, 30972, 30973, 30974, 30975, 30976, 30978, 30979, 30980, 30982, 30983, 30984, 30985, 30986, 30987, 30988, 30784, 20648, 30679, 25616, 35302, 22788, 25571, 24029, 31359, 26941, 20256, 33337, 21912, 20018, 30126, 31383, 24162, 24202, 38383, 21019, 21561, 28810, 25462, 38180, 22402, 26149, 26943, 37255, 21767, 28147, 32431, 34850, 25139, 32496, 30133, 33576, 30913, 38604, 36766, 24904, 29943, 35789, 27492, 21050, 36176, 27425, 32874, 33905, 22257, 21254, 20174, 19995, 20945, 31895, 37259, 31751, 20419, 36479, 31713, 31388, 25703, 23828, 20652, 33030, 30209, 31929, 28140, 32736, 26449, 23384, 23544, 30923, 25774, 25619, 25514, 25387, 38169, 25645, 36798, 31572, 30249, 25171, 22823, 21574, 27513, 20643, 25140, 24102, 27526, 20195, 36151, 34955, 24453, 36910, 30989, 30990, 30991, 30992, 30993, 30994, 30996, 30997, 30998, 30999, 31e3, 31001, 31002, 31003, 31004, 31005, 31007, 31008, 31009, 31010, 31011, 31013, 31014, 31015, 31016, 31017, 31018, 31019, 31020, 31021, 31022, 31023, 31024, 31025, 31026, 31027, 31029, 31030, 31031, 31032, 31033, 31037, 31039, 31042, 31043, 31044, 31045, 31047, 31050, 31051, 31052, 31053, 31054, 31055, 31056, 31057, 31058, 31060, 31061, 31064, 31065, 31073, 31075, 31076, 31078, 31081, 31082, 31083, 31084, 31086, 31088, 31089, 31090, 31091, 31092, 31093, 31094, 31097, 31099, 31100, 31101, 31102, 31103, 31106, 31107, 31110, 31111, 31112, 31113, 31115, 31116, 31117, 31118, 31120, 31121, 31122, 24608, 32829, 25285, 20025, 21333, 37112, 25528, 32966, 26086, 27694, 20294, 24814, 28129, 35806, 24377, 34507, 24403, 25377, 20826, 33633, 26723, 20992, 25443, 36424, 20498, 23707, 31095, 23548, 21040, 31291, 24764, 36947, 30423, 24503, 24471, 30340, 36460, 28783, 30331, 31561, 30634, 20979, 37011, 22564, 20302, 28404, 36842, 25932, 31515, 29380, 28068, 32735, 23265, 25269, 24213, 22320, 33922, 31532, 24093, 24351, 36882, 32532, 39072, 25474, 28359, 30872, 28857, 20856, 38747, 22443, 30005, 20291, 30008, 24215, 24806, 22880, 28096, 27583, 30857, 21500, 38613, 20939, 20993, 25481, 21514, 38035, 35843, 36300, 29241, 30879, 34678, 36845, 35853, 21472, 31123, 31124, 31125, 31126, 31127, 31128, 31129, 31131, 31132, 31133, 31134, 31135, 31136, 31137, 31138, 31139, 31140, 31141, 31142, 31144, 31145, 31146, 31147, 31148, 31149, 31150, 31151, 31152, 31153, 31154, 31156, 31157, 31158, 31159, 31160, 31164, 31167, 31170, 31172, 31173, 31175, 31176, 31178, 31180, 31182, 31183, 31184, 31187, 31188, 31190, 31191, 31193, 31194, 31195, 31196, 31197, 31198, 31200, 31201, 31202, 31205, 31208, 31210, 31212, 31214, 31217, 31218, 31219, 31220, 31221, 31222, 31223, 31225, 31226, 31228, 31230, 31231, 31233, 31236, 31237, 31239, 31240, 31241, 31242, 31244, 31247, 31248, 31249, 31250, 31251, 31253, 31254, 31256, 31257, 31259, 31260, 19969, 30447, 21486, 38025, 39030, 40718, 38189, 23450, 35746, 20002, 19996, 20908, 33891, 25026, 21160, 26635, 20375, 24683, 20923, 27934, 20828, 25238, 26007, 38497, 35910, 36887, 30168, 37117, 30563, 27602, 29322, 29420, 35835, 22581, 30585, 36172, 26460, 38208, 32922, 24230, 28193, 22930, 31471, 30701, 38203, 27573, 26029, 32526, 22534, 20817, 38431, 23545, 22697, 21544, 36466, 25958, 39039, 22244, 38045, 30462, 36929, 25479, 21702, 22810, 22842, 22427, 36530, 26421, 36346, 33333, 21057, 24816, 22549, 34558, 23784, 40517, 20420, 39069, 35769, 23077, 24694, 21380, 25212, 36943, 37122, 39295, 24681, 32780, 20799, 32819, 23572, 39285, 27953, 20108, 31261, 31263, 31265, 31266, 31268, 31269, 31270, 31271, 31272, 31273, 31274, 31275, 31276, 31277, 31278, 31279, 31280, 31281, 31282, 31284, 31285, 31286, 31288, 31290, 31294, 31296, 31297, 31298, 31299, 31300, 31301, 31303, 31304, 31305, 31306, 31307, 31308, 31309, 31310, 31311, 31312, 31314, 31315, 31316, 31317, 31318, 31320, 31321, 31322, 31323, 31324, 31325, 31326, 31327, 31328, 31329, 31330, 31331, 31332, 31333, 31334, 31335, 31336, 31337, 31338, 31339, 31340, 31341, 31342, 31343, 31345, 31346, 31347, 31349, 31355, 31356, 31357, 31358, 31362, 31365, 31367, 31369, 31370, 31371, 31372, 31374, 31375, 31376, 31379, 31380, 31385, 31386, 31387, 31390, 31393, 31394, 36144, 21457, 32602, 31567, 20240, 20047, 38400, 27861, 29648, 34281, 24070, 30058, 32763, 27146, 30718, 38034, 32321, 20961, 28902, 21453, 36820, 33539, 36137, 29359, 39277, 27867, 22346, 33459, 26041, 32938, 25151, 38450, 22952, 20223, 35775, 32442, 25918, 33778, 38750, 21857, 39134, 32933, 21290, 35837, 21536, 32954, 24223, 27832, 36153, 33452, 37210, 21545, 27675, 20998, 32439, 22367, 28954, 27774, 31881, 22859, 20221, 24575, 24868, 31914, 20016, 23553, 26539, 34562, 23792, 38155, 39118, 30127, 28925, 36898, 20911, 32541, 35773, 22857, 20964, 20315, 21542, 22827, 25975, 32932, 23413, 25206, 25282, 36752, 24133, 27679, 31526, 20239, 20440, 26381, 31395, 31396, 31399, 31401, 31402, 31403, 31406, 31407, 31408, 31409, 31410, 31412, 31413, 31414, 31415, 31416, 31417, 31418, 31419, 31420, 31421, 31422, 31424, 31425, 31426, 31427, 31428, 31429, 31430, 31431, 31432, 31433, 31434, 31436, 31437, 31438, 31439, 31440, 31441, 31442, 31443, 31444, 31445, 31447, 31448, 31450, 31451, 31452, 31453, 31457, 31458, 31460, 31463, 31464, 31465, 31466, 31467, 31468, 31470, 31472, 31473, 31474, 31475, 31476, 31477, 31478, 31479, 31480, 31483, 31484, 31486, 31488, 31489, 31490, 31493, 31495, 31497, 31500, 31501, 31502, 31504, 31506, 31507, 31510, 31511, 31512, 31514, 31516, 31517, 31519, 31521, 31522, 31523, 31527, 31529, 31533, 28014, 28074, 31119, 34993, 24343, 29995, 25242, 36741, 20463, 37340, 26023, 33071, 33105, 24220, 33104, 36212, 21103, 35206, 36171, 22797, 20613, 20184, 38428, 29238, 33145, 36127, 23500, 35747, 38468, 22919, 32538, 21648, 22134, 22030, 35813, 25913, 27010, 38041, 30422, 28297, 24178, 29976, 26438, 26577, 31487, 32925, 36214, 24863, 31174, 25954, 36195, 20872, 21018, 38050, 32568, 32923, 32434, 23703, 28207, 26464, 31705, 30347, 39640, 33167, 32660, 31957, 25630, 38224, 31295, 21578, 21733, 27468, 25601, 25096, 40509, 33011, 30105, 21106, 38761, 33883, 26684, 34532, 38401, 38548, 38124, 20010, 21508, 32473, 26681, 36319, 32789, 26356, 24218, 32697, 31535, 31536, 31538, 31540, 31541, 31542, 31543, 31545, 31547, 31549, 31551, 31552, 31553, 31554, 31555, 31556, 31558, 31560, 31562, 31565, 31566, 31571, 31573, 31575, 31577, 31580, 31582, 31583, 31585, 31587, 31588, 31589, 31590, 31591, 31592, 31593, 31594, 31595, 31596, 31597, 31599, 31600, 31603, 31604, 31606, 31608, 31610, 31612, 31613, 31615, 31617, 31618, 31619, 31620, 31622, 31623, 31624, 31625, 31626, 31627, 31628, 31630, 31631, 31633, 31634, 31635, 31638, 31640, 31641, 31642, 31643, 31646, 31647, 31648, 31651, 31652, 31653, 31662, 31663, 31664, 31666, 31667, 31669, 31670, 31671, 31673, 31674, 31675, 31676, 31677, 31678, 31679, 31680, 31682, 31683, 31684, 22466, 32831, 26775, 24037, 25915, 21151, 24685, 40858, 20379, 36524, 20844, 23467, 24339, 24041, 27742, 25329, 36129, 20849, 38057, 21246, 27807, 33503, 29399, 22434, 26500, 36141, 22815, 36764, 33735, 21653, 31629, 20272, 27837, 23396, 22993, 40723, 21476, 34506, 39592, 35895, 32929, 25925, 39038, 22266, 38599, 21038, 29916, 21072, 23521, 25346, 35074, 20054, 25296, 24618, 26874, 20851, 23448, 20896, 35266, 31649, 39302, 32592, 24815, 28748, 36143, 20809, 24191, 36891, 29808, 35268, 22317, 30789, 24402, 40863, 38394, 36712, 39740, 35809, 30328, 26690, 26588, 36330, 36149, 21053, 36746, 28378, 26829, 38149, 37101, 22269, 26524, 35065, 36807, 21704, 31685, 31688, 31689, 31690, 31691, 31693, 31694, 31695, 31696, 31698, 31700, 31701, 31702, 31703, 31704, 31707, 31708, 31710, 31711, 31712, 31714, 31715, 31716, 31719, 31720, 31721, 31723, 31724, 31725, 31727, 31728, 31730, 31731, 31732, 31733, 31734, 31736, 31737, 31738, 31739, 31741, 31743, 31744, 31745, 31746, 31747, 31748, 31749, 31750, 31752, 31753, 31754, 31757, 31758, 31760, 31761, 31762, 31763, 31764, 31765, 31767, 31768, 31769, 31770, 31771, 31772, 31773, 31774, 31776, 31777, 31778, 31779, 31780, 31781, 31784, 31785, 31787, 31788, 31789, 31790, 31791, 31792, 31793, 31794, 31795, 31796, 31797, 31798, 31799, 31801, 31802, 31803, 31804, 31805, 31806, 31810, 39608, 23401, 28023, 27686, 20133, 23475, 39559, 37219, 25e3, 37039, 38889, 21547, 28085, 23506, 20989, 21898, 32597, 32752, 25788, 25421, 26097, 25022, 24717, 28938, 27735, 27721, 22831, 26477, 33322, 22741, 22158, 35946, 27627, 37085, 22909, 32791, 21495, 28009, 21621, 21917, 33655, 33743, 26680, 31166, 21644, 20309, 21512, 30418, 35977, 38402, 27827, 28088, 36203, 35088, 40548, 36154, 22079, 40657, 30165, 24456, 29408, 24680, 21756, 20136, 27178, 34913, 24658, 36720, 21700, 28888, 34425, 40511, 27946, 23439, 24344, 32418, 21897, 20399, 29492, 21564, 21402, 20505, 21518, 21628, 20046, 24573, 29786, 22774, 33899, 32993, 34676, 29392, 31946, 28246, 31811, 31812, 31813, 31814, 31815, 31816, 31817, 31818, 31819, 31820, 31822, 31823, 31824, 31825, 31826, 31827, 31828, 31829, 31830, 31831, 31832, 31833, 31834, 31835, 31836, 31837, 31838, 31839, 31840, 31841, 31842, 31843, 31844, 31845, 31846, 31847, 31848, 31849, 31850, 31851, 31852, 31853, 31854, 31855, 31856, 31857, 31858, 31861, 31862, 31863, 31864, 31865, 31866, 31870, 31871, 31872, 31873, 31874, 31875, 31876, 31877, 31878, 31879, 31880, 31882, 31883, 31884, 31885, 31886, 31887, 31888, 31891, 31892, 31894, 31897, 31898, 31899, 31904, 31905, 31907, 31910, 31911, 31912, 31913, 31915, 31916, 31917, 31919, 31920, 31924, 31925, 31926, 31927, 31928, 31930, 31931, 24359, 34382, 21804, 25252, 20114, 27818, 25143, 33457, 21719, 21326, 29502, 28369, 30011, 21010, 21270, 35805, 27088, 24458, 24576, 28142, 22351, 27426, 29615, 26707, 36824, 32531, 25442, 24739, 21796, 30186, 35938, 28949, 28067, 23462, 24187, 33618, 24908, 40644, 30970, 34647, 31783, 30343, 20976, 24822, 29004, 26179, 24140, 24653, 35854, 28784, 25381, 36745, 24509, 24674, 34516, 22238, 27585, 24724, 24935, 21321, 24800, 26214, 36159, 31229, 20250, 28905, 27719, 35763, 35826, 32472, 33636, 26127, 23130, 39746, 27985, 28151, 35905, 27963, 20249, 28779, 33719, 25110, 24785, 38669, 36135, 31096, 20987, 22334, 22522, 26426, 30072, 31293, 31215, 31637, 31935, 31936, 31938, 31939, 31940, 31942, 31945, 31947, 31950, 31951, 31952, 31953, 31954, 31955, 31956, 31960, 31962, 31963, 31965, 31966, 31969, 31970, 31971, 31972, 31973, 31974, 31975, 31977, 31978, 31979, 31980, 31981, 31982, 31984, 31985, 31986, 31987, 31988, 31989, 31990, 31991, 31993, 31994, 31996, 31997, 31998, 31999, 32e3, 32001, 32002, 32003, 32004, 32005, 32006, 32007, 32008, 32009, 32011, 32012, 32013, 32014, 32015, 32016, 32017, 32018, 32019, 32020, 32021, 32022, 32023, 32024, 32025, 32026, 32027, 32028, 32029, 32030, 32031, 32033, 32035, 32036, 32037, 32038, 32040, 32041, 32042, 32044, 32045, 32046, 32048, 32049, 32050, 32051, 32052, 32053, 32054, 32908, 39269, 36857, 28608, 35749, 40481, 23020, 32489, 32521, 21513, 26497, 26840, 36753, 31821, 38598, 21450, 24613, 30142, 27762, 21363, 23241, 32423, 25380, 20960, 33034, 24049, 34015, 25216, 20864, 23395, 20238, 31085, 21058, 24760, 27982, 23492, 23490, 35745, 35760, 26082, 24524, 38469, 22931, 32487, 32426, 22025, 26551, 22841, 20339, 23478, 21152, 33626, 39050, 36158, 30002, 38078, 20551, 31292, 20215, 26550, 39550, 23233, 27516, 30417, 22362, 23574, 31546, 38388, 29006, 20860, 32937, 33392, 22904, 32516, 33575, 26816, 26604, 30897, 30839, 25315, 25441, 31616, 20461, 21098, 20943, 33616, 27099, 37492, 36341, 36145, 35265, 38190, 31661, 20214, 32055, 32056, 32057, 32058, 32059, 32060, 32061, 32062, 32063, 32064, 32065, 32066, 32067, 32068, 32069, 32070, 32071, 32072, 32073, 32074, 32075, 32076, 32077, 32078, 32079, 32080, 32081, 32082, 32083, 32084, 32085, 32086, 32087, 32088, 32089, 32090, 32091, 32092, 32093, 32094, 32095, 32096, 32097, 32098, 32099, 32100, 32101, 32102, 32103, 32104, 32105, 32106, 32107, 32108, 32109, 32111, 32112, 32113, 32114, 32115, 32116, 32117, 32118, 32120, 32121, 32122, 32123, 32124, 32125, 32126, 32127, 32128, 32129, 32130, 32131, 32132, 32133, 32134, 32135, 32136, 32137, 32138, 32139, 32140, 32141, 32142, 32143, 32144, 32145, 32146, 32147, 32148, 32149, 32150, 32151, 32152, 20581, 33328, 21073, 39279, 28176, 28293, 28071, 24314, 20725, 23004, 23558, 27974, 27743, 30086, 33931, 26728, 22870, 35762, 21280, 37233, 38477, 34121, 26898, 30977, 28966, 33014, 20132, 37066, 27975, 39556, 23047, 22204, 25605, 38128, 30699, 20389, 33050, 29409, 35282, 39290, 32564, 32478, 21119, 25945, 37237, 36735, 36739, 21483, 31382, 25581, 25509, 30342, 31224, 34903, 38454, 25130, 21163, 33410, 26708, 26480, 25463, 30571, 31469, 27905, 32467, 35299, 22992, 25106, 34249, 33445, 30028, 20511, 20171, 30117, 35819, 23626, 24062, 31563, 26020, 37329, 20170, 27941, 35167, 32039, 38182, 20165, 35880, 36827, 38771, 26187, 31105, 36817, 28908, 28024, 32153, 32154, 32155, 32156, 32157, 32158, 32159, 32160, 32161, 32162, 32163, 32164, 32165, 32167, 32168, 32169, 32170, 32171, 32172, 32173, 32175, 32176, 32177, 32178, 32179, 32180, 32181, 32182, 32183, 32184, 32185, 32186, 32187, 32188, 32189, 32190, 32191, 32192, 32193, 32194, 32195, 32196, 32197, 32198, 32199, 32200, 32201, 32202, 32203, 32204, 32205, 32206, 32207, 32208, 32209, 32210, 32211, 32212, 32213, 32214, 32215, 32216, 32217, 32218, 32219, 32220, 32221, 32222, 32223, 32224, 32225, 32226, 32227, 32228, 32229, 32230, 32231, 32232, 32233, 32234, 32235, 32236, 32237, 32238, 32239, 32240, 32241, 32242, 32243, 32244, 32245, 32246, 32247, 32248, 32249, 32250, 23613, 21170, 33606, 20834, 33550, 30555, 26230, 40120, 20140, 24778, 31934, 31923, 32463, 20117, 35686, 26223, 39048, 38745, 22659, 25964, 38236, 24452, 30153, 38742, 31455, 31454, 20928, 28847, 31384, 25578, 31350, 32416, 29590, 38893, 20037, 28792, 20061, 37202, 21417, 25937, 26087, 33276, 33285, 21646, 23601, 30106, 38816, 25304, 29401, 30141, 23621, 39545, 33738, 23616, 21632, 30697, 20030, 27822, 32858, 25298, 25454, 24040, 20855, 36317, 36382, 38191, 20465, 21477, 24807, 28844, 21095, 25424, 40515, 23071, 20518, 30519, 21367, 32482, 25733, 25899, 25225, 25496, 20500, 29237, 35273, 20915, 35776, 32477, 22343, 33740, 38055, 20891, 21531, 23803, 32251, 32252, 32253, 32254, 32255, 32256, 32257, 32258, 32259, 32260, 32261, 32262, 32263, 32264, 32265, 32266, 32267, 32268, 32269, 32270, 32271, 32272, 32273, 32274, 32275, 32276, 32277, 32278, 32279, 32280, 32281, 32282, 32283, 32284, 32285, 32286, 32287, 32288, 32289, 32290, 32291, 32292, 32293, 32294, 32295, 32296, 32297, 32298, 32299, 32300, 32301, 32302, 32303, 32304, 32305, 32306, 32307, 32308, 32309, 32310, 32311, 32312, 32313, 32314, 32316, 32317, 32318, 32319, 32320, 32322, 32323, 32324, 32325, 32326, 32328, 32329, 32330, 32331, 32332, 32333, 32334, 32335, 32336, 32337, 32338, 32339, 32340, 32341, 32342, 32343, 32344, 32345, 32346, 32347, 32348, 32349, 20426, 31459, 27994, 37089, 39567, 21888, 21654, 21345, 21679, 24320, 25577, 26999, 20975, 24936, 21002, 22570, 21208, 22350, 30733, 30475, 24247, 24951, 31968, 25179, 25239, 20130, 28821, 32771, 25335, 28900, 38752, 22391, 33499, 26607, 26869, 30933, 39063, 31185, 22771, 21683, 21487, 28212, 20811, 21051, 23458, 35838, 32943, 21827, 22438, 24691, 22353, 21549, 31354, 24656, 23380, 25511, 25248, 21475, 25187, 23495, 26543, 21741, 31391, 33510, 37239, 24211, 35044, 22840, 22446, 25358, 36328, 33007, 22359, 31607, 20393, 24555, 23485, 27454, 21281, 31568, 29378, 26694, 30719, 30518, 26103, 20917, 20111, 30420, 23743, 31397, 33909, 22862, 39745, 20608, 32350, 32351, 32352, 32353, 32354, 32355, 32356, 32357, 32358, 32359, 32360, 32361, 32362, 32363, 32364, 32365, 32366, 32367, 32368, 32369, 32370, 32371, 32372, 32373, 32374, 32375, 32376, 32377, 32378, 32379, 32380, 32381, 32382, 32383, 32384, 32385, 32387, 32388, 32389, 32390, 32391, 32392, 32393, 32394, 32395, 32396, 32397, 32398, 32399, 32400, 32401, 32402, 32403, 32404, 32405, 32406, 32407, 32408, 32409, 32410, 32412, 32413, 32414, 32430, 32436, 32443, 32444, 32470, 32484, 32492, 32505, 32522, 32528, 32542, 32567, 32569, 32571, 32572, 32573, 32574, 32575, 32576, 32577, 32579, 32582, 32583, 32584, 32585, 32586, 32587, 32588, 32589, 32590, 32591, 32594, 32595, 39304, 24871, 28291, 22372, 26118, 25414, 22256, 25324, 25193, 24275, 38420, 22403, 25289, 21895, 34593, 33098, 36771, 21862, 33713, 26469, 36182, 34013, 23146, 26639, 25318, 31726, 38417, 20848, 28572, 35888, 25597, 35272, 25042, 32518, 28866, 28389, 29701, 27028, 29436, 24266, 37070, 26391, 28010, 25438, 21171, 29282, 32769, 20332, 23013, 37226, 28889, 28061, 21202, 20048, 38647, 38253, 34174, 30922, 32047, 20769, 22418, 25794, 32907, 31867, 27882, 26865, 26974, 20919, 21400, 26792, 29313, 40654, 31729, 29432, 31163, 28435, 29702, 26446, 37324, 40100, 31036, 33673, 33620, 21519, 26647, 20029, 21385, 21169, 30782, 21382, 21033, 20616, 20363, 20432, 32598, 32601, 32603, 32604, 32605, 32606, 32608, 32611, 32612, 32613, 32614, 32615, 32619, 32620, 32621, 32623, 32624, 32627, 32629, 32630, 32631, 32632, 32634, 32635, 32636, 32637, 32639, 32640, 32642, 32643, 32644, 32645, 32646, 32647, 32648, 32649, 32651, 32653, 32655, 32656, 32657, 32658, 32659, 32661, 32662, 32663, 32664, 32665, 32667, 32668, 32672, 32674, 32675, 32677, 32678, 32680, 32681, 32682, 32683, 32684, 32685, 32686, 32689, 32691, 32692, 32693, 32694, 32695, 32698, 32699, 32702, 32704, 32706, 32707, 32708, 32710, 32711, 32712, 32713, 32715, 32717, 32719, 32720, 32721, 32722, 32723, 32726, 32727, 32729, 32730, 32731, 32732, 32733, 32734, 32738, 32739, 30178, 31435, 31890, 27813, 38582, 21147, 29827, 21737, 20457, 32852, 33714, 36830, 38256, 24265, 24604, 28063, 24088, 25947, 33080, 38142, 24651, 28860, 32451, 31918, 20937, 26753, 31921, 33391, 20004, 36742, 37327, 26238, 20142, 35845, 25769, 32842, 20698, 30103, 29134, 23525, 36797, 28518, 20102, 25730, 38243, 24278, 26009, 21015, 35010, 28872, 21155, 29454, 29747, 26519, 30967, 38678, 20020, 37051, 40158, 28107, 20955, 36161, 21533, 25294, 29618, 33777, 38646, 40836, 38083, 20278, 32666, 20940, 28789, 38517, 23725, 39046, 21478, 20196, 28316, 29705, 27060, 30827, 39311, 30041, 21016, 30244, 27969, 26611, 20845, 40857, 32843, 21657, 31548, 31423, 32740, 32743, 32744, 32746, 32747, 32748, 32749, 32751, 32754, 32756, 32757, 32758, 32759, 32760, 32761, 32762, 32765, 32766, 32767, 32770, 32775, 32776, 32777, 32778, 32782, 32783, 32785, 32787, 32794, 32795, 32797, 32798, 32799, 32801, 32803, 32804, 32811, 32812, 32813, 32814, 32815, 32816, 32818, 32820, 32825, 32826, 32828, 32830, 32832, 32833, 32836, 32837, 32839, 32840, 32841, 32846, 32847, 32848, 32849, 32851, 32853, 32854, 32855, 32857, 32859, 32860, 32861, 32862, 32863, 32864, 32865, 32866, 32867, 32868, 32869, 32870, 32871, 32872, 32875, 32876, 32877, 32878, 32879, 32880, 32882, 32883, 32884, 32885, 32886, 32887, 32888, 32889, 32890, 32891, 32892, 32893, 38534, 22404, 25314, 38471, 27004, 23044, 25602, 31699, 28431, 38475, 33446, 21346, 39045, 24208, 28809, 25523, 21348, 34383, 40065, 40595, 30860, 38706, 36335, 36162, 40575, 28510, 31108, 24405, 38470, 25134, 39540, 21525, 38109, 20387, 26053, 23653, 23649, 32533, 34385, 27695, 24459, 29575, 28388, 32511, 23782, 25371, 23402, 28390, 21365, 20081, 25504, 30053, 25249, 36718, 20262, 20177, 27814, 32438, 35770, 33821, 34746, 32599, 36923, 38179, 31657, 39585, 35064, 33853, 27931, 39558, 32476, 22920, 40635, 29595, 30721, 34434, 39532, 39554, 22043, 21527, 22475, 20080, 40614, 21334, 36808, 33033, 30610, 39314, 34542, 28385, 34067, 26364, 24930, 28459, 32894, 32897, 32898, 32901, 32904, 32906, 32909, 32910, 32911, 32912, 32913, 32914, 32916, 32917, 32919, 32921, 32926, 32931, 32934, 32935, 32936, 32940, 32944, 32947, 32949, 32950, 32952, 32953, 32955, 32965, 32967, 32968, 32969, 32970, 32971, 32975, 32976, 32977, 32978, 32979, 32980, 32981, 32984, 32991, 32992, 32994, 32995, 32998, 33006, 33013, 33015, 33017, 33019, 33022, 33023, 33024, 33025, 33027, 33028, 33029, 33031, 33032, 33035, 33036, 33045, 33047, 33049, 33051, 33052, 33053, 33055, 33056, 33057, 33058, 33059, 33060, 33061, 33062, 33063, 33064, 33065, 33066, 33067, 33069, 33070, 33072, 33075, 33076, 33077, 33079, 33081, 33082, 33083, 33084, 33085, 33087, 35881, 33426, 33579, 30450, 27667, 24537, 33725, 29483, 33541, 38170, 27611, 30683, 38086, 21359, 33538, 20882, 24125, 35980, 36152, 20040, 29611, 26522, 26757, 37238, 38665, 29028, 27809, 30473, 23186, 38209, 27599, 32654, 26151, 23504, 22969, 23194, 38376, 38391, 20204, 33804, 33945, 27308, 30431, 38192, 29467, 26790, 23391, 30511, 37274, 38753, 31964, 36855, 35868, 24357, 31859, 31192, 35269, 27852, 34588, 23494, 24130, 26825, 30496, 32501, 20885, 20813, 21193, 23081, 32517, 38754, 33495, 25551, 30596, 34256, 31186, 28218, 24217, 22937, 34065, 28781, 27665, 25279, 30399, 25935, 24751, 38397, 26126, 34719, 40483, 38125, 21517, 21629, 35884, 25720, 33088, 33089, 33090, 33091, 33092, 33093, 33095, 33097, 33101, 33102, 33103, 33106, 33110, 33111, 33112, 33115, 33116, 33117, 33118, 33119, 33121, 33122, 33123, 33124, 33126, 33128, 33130, 33131, 33132, 33135, 33138, 33139, 33141, 33142, 33143, 33144, 33153, 33155, 33156, 33157, 33158, 33159, 33161, 33163, 33164, 33165, 33166, 33168, 33170, 33171, 33172, 33173, 33174, 33175, 33177, 33178, 33182, 33183, 33184, 33185, 33186, 33188, 33189, 33191, 33193, 33195, 33196, 33197, 33198, 33199, 33200, 33201, 33202, 33204, 33205, 33206, 33207, 33208, 33209, 33212, 33213, 33214, 33215, 33220, 33221, 33223, 33224, 33225, 33227, 33229, 33230, 33231, 33232, 33233, 33234, 33235, 25721, 34321, 27169, 33180, 30952, 25705, 39764, 25273, 26411, 33707, 22696, 40664, 27819, 28448, 23518, 38476, 35851, 29279, 26576, 25287, 29281, 20137, 22982, 27597, 22675, 26286, 24149, 21215, 24917, 26408, 30446, 30566, 29287, 31302, 25343, 21738, 21584, 38048, 37027, 23068, 32435, 27670, 20035, 22902, 32784, 22856, 21335, 30007, 38590, 22218, 25376, 33041, 24700, 38393, 28118, 21602, 39297, 20869, 23273, 33021, 22958, 38675, 20522, 27877, 23612, 25311, 20320, 21311, 33147, 36870, 28346, 34091, 25288, 24180, 30910, 25781, 25467, 24565, 23064, 37247, 40479, 23615, 25423, 32834, 23421, 21870, 38218, 38221, 28037, 24744, 26592, 29406, 20957, 23425, 33236, 33237, 33238, 33239, 33240, 33241, 33242, 33243, 33244, 33245, 33246, 33247, 33248, 33249, 33250, 33252, 33253, 33254, 33256, 33257, 33259, 33262, 33263, 33264, 33265, 33266, 33269, 33270, 33271, 33272, 33273, 33274, 33277, 33279, 33283, 33287, 33288, 33289, 33290, 33291, 33294, 33295, 33297, 33299, 33301, 33302, 33303, 33304, 33305, 33306, 33309, 33312, 33316, 33317, 33318, 33319, 33321, 33326, 33330, 33338, 33340, 33341, 33343, 33344, 33345, 33346, 33347, 33349, 33350, 33352, 33354, 33356, 33357, 33358, 33360, 33361, 33362, 33363, 33364, 33365, 33366, 33367, 33369, 33371, 33372, 33373, 33374, 33376, 33377, 33378, 33379, 33380, 33381, 33382, 33383, 33385, 25319, 27870, 29275, 25197, 38062, 32445, 33043, 27987, 20892, 24324, 22900, 21162, 24594, 22899, 26262, 34384, 30111, 25386, 25062, 31983, 35834, 21734, 27431, 40485, 27572, 34261, 21589, 20598, 27812, 21866, 36276, 29228, 24085, 24597, 29750, 25293, 25490, 29260, 24472, 28227, 27966, 25856, 28504, 30424, 30928, 30460, 30036, 21028, 21467, 20051, 24222, 26049, 32810, 32982, 25243, 21638, 21032, 28846, 34957, 36305, 27873, 21624, 32986, 22521, 35060, 36180, 38506, 37197, 20329, 27803, 21943, 30406, 30768, 25256, 28921, 28558, 24429, 34028, 26842, 30844, 31735, 33192, 26379, 40527, 25447, 30896, 22383, 30738, 38713, 25209, 25259, 21128, 29749, 27607, 33386, 33387, 33388, 33389, 33393, 33397, 33398, 33399, 33400, 33403, 33404, 33408, 33409, 33411, 33413, 33414, 33415, 33417, 33420, 33424, 33427, 33428, 33429, 33430, 33434, 33435, 33438, 33440, 33442, 33443, 33447, 33458, 33461, 33462, 33466, 33467, 33468, 33471, 33472, 33474, 33475, 33477, 33478, 33481, 33488, 33494, 33497, 33498, 33501, 33506, 33511, 33512, 33513, 33514, 33516, 33517, 33518, 33520, 33522, 33523, 33525, 33526, 33528, 33530, 33532, 33533, 33534, 33535, 33536, 33546, 33547, 33549, 33552, 33554, 33555, 33558, 33560, 33561, 33565, 33566, 33567, 33568, 33569, 33570, 33571, 33572, 33573, 33574, 33577, 33578, 33582, 33584, 33586, 33591, 33595, 33597, 21860, 33086, 30130, 30382, 21305, 30174, 20731, 23617, 35692, 31687, 20559, 29255, 39575, 39128, 28418, 29922, 31080, 25735, 30629, 25340, 39057, 36139, 21697, 32856, 20050, 22378, 33529, 33805, 24179, 20973, 29942, 35780, 23631, 22369, 27900, 39047, 23110, 30772, 39748, 36843, 31893, 21078, 25169, 38138, 20166, 33670, 33889, 33769, 33970, 22484, 26420, 22275, 26222, 28006, 35889, 26333, 28689, 26399, 27450, 26646, 25114, 22971, 19971, 20932, 28422, 26578, 27791, 20854, 26827, 22855, 27495, 30054, 23822, 33040, 40784, 26071, 31048, 31041, 39569, 36215, 23682, 20062, 20225, 21551, 22865, 30732, 22120, 27668, 36804, 24323, 27773, 27875, 35755, 25488, 33598, 33599, 33601, 33602, 33604, 33605, 33608, 33610, 33611, 33612, 33613, 33614, 33619, 33621, 33622, 33623, 33624, 33625, 33629, 33634, 33648, 33649, 33650, 33651, 33652, 33653, 33654, 33657, 33658, 33662, 33663, 33664, 33665, 33666, 33667, 33668, 33671, 33672, 33674, 33675, 33676, 33677, 33679, 33680, 33681, 33684, 33685, 33686, 33687, 33689, 33690, 33693, 33695, 33697, 33698, 33699, 33700, 33701, 33702, 33703, 33708, 33709, 33710, 33711, 33717, 33723, 33726, 33727, 33730, 33731, 33732, 33734, 33736, 33737, 33739, 33741, 33742, 33744, 33745, 33746, 33747, 33749, 33751, 33753, 33754, 33755, 33758, 33762, 33763, 33764, 33766, 33767, 33768, 33771, 33772, 33773, 24688, 27965, 29301, 25190, 38030, 38085, 21315, 36801, 31614, 20191, 35878, 20094, 40660, 38065, 38067, 21069, 28508, 36963, 27973, 35892, 22545, 23884, 27424, 27465, 26538, 21595, 33108, 32652, 22681, 34103, 24378, 25250, 27207, 38201, 25970, 24708, 26725, 30631, 20052, 20392, 24039, 38808, 25772, 32728, 23789, 20431, 31373, 20999, 33540, 19988, 24623, 31363, 38054, 20405, 20146, 31206, 29748, 21220, 33465, 25810, 31165, 23517, 27777, 38738, 36731, 27682, 20542, 21375, 28165, 25806, 26228, 27696, 24773, 39031, 35831, 24198, 29756, 31351, 31179, 19992, 37041, 29699, 27714, 22234, 37195, 27845, 36235, 21306, 34502, 26354, 36527, 23624, 39537, 28192, 33774, 33775, 33779, 33780, 33781, 33782, 33783, 33786, 33787, 33788, 33790, 33791, 33792, 33794, 33797, 33799, 33800, 33801, 33802, 33808, 33810, 33811, 33812, 33813, 33814, 33815, 33817, 33818, 33819, 33822, 33823, 33824, 33825, 33826, 33827, 33833, 33834, 33835, 33836, 33837, 33838, 33839, 33840, 33842, 33843, 33844, 33845, 33846, 33847, 33849, 33850, 33851, 33854, 33855, 33856, 33857, 33858, 33859, 33860, 33861, 33863, 33864, 33865, 33866, 33867, 33868, 33869, 33870, 33871, 33872, 33874, 33875, 33876, 33877, 33878, 33880, 33885, 33886, 33887, 33888, 33890, 33892, 33893, 33894, 33895, 33896, 33898, 33902, 33903, 33904, 33906, 33908, 33911, 33913, 33915, 33916, 21462, 23094, 40843, 36259, 21435, 22280, 39079, 26435, 37275, 27849, 20840, 30154, 25331, 29356, 21048, 21149, 32570, 28820, 30264, 21364, 40522, 27063, 30830, 38592, 35033, 32676, 28982, 29123, 20873, 26579, 29924, 22756, 25880, 22199, 35753, 39286, 25200, 32469, 24825, 28909, 22764, 20161, 20154, 24525, 38887, 20219, 35748, 20995, 22922, 32427, 25172, 20173, 26085, 25102, 33592, 33993, 33635, 34701, 29076, 28342, 23481, 32466, 20887, 25545, 26580, 32905, 33593, 34837, 20754, 23418, 22914, 36785, 20083, 27741, 20837, 35109, 36719, 38446, 34122, 29790, 38160, 38384, 28070, 33509, 24369, 25746, 27922, 33832, 33134, 40131, 22622, 36187, 19977, 21441, 33917, 33918, 33919, 33920, 33921, 33923, 33924, 33925, 33926, 33930, 33933, 33935, 33936, 33937, 33938, 33939, 33940, 33941, 33942, 33944, 33946, 33947, 33949, 33950, 33951, 33952, 33954, 33955, 33956, 33957, 33958, 33959, 33960, 33961, 33962, 33963, 33964, 33965, 33966, 33968, 33969, 33971, 33973, 33974, 33975, 33979, 33980, 33982, 33984, 33986, 33987, 33989, 33990, 33991, 33992, 33995, 33996, 33998, 33999, 34002, 34004, 34005, 34007, 34008, 34009, 34010, 34011, 34012, 34014, 34017, 34018, 34020, 34023, 34024, 34025, 34026, 34027, 34029, 34030, 34031, 34033, 34034, 34035, 34036, 34037, 34038, 34039, 34040, 34041, 34042, 34043, 34045, 34046, 34048, 34049, 34050, 20254, 25955, 26705, 21971, 20007, 25620, 39578, 25195, 23234, 29791, 33394, 28073, 26862, 20711, 33678, 30722, 26432, 21049, 27801, 32433, 20667, 21861, 29022, 31579, 26194, 29642, 33515, 26441, 23665, 21024, 29053, 34923, 38378, 38485, 25797, 36193, 33203, 21892, 27733, 25159, 32558, 22674, 20260, 21830, 36175, 26188, 19978, 23578, 35059, 26786, 25422, 31245, 28903, 33421, 21242, 38902, 23569, 21736, 37045, 32461, 22882, 36170, 34503, 33292, 33293, 36198, 25668, 23556, 24913, 28041, 31038, 35774, 30775, 30003, 21627, 20280, 36523, 28145, 23072, 32453, 31070, 27784, 23457, 23158, 29978, 32958, 24910, 28183, 22768, 29983, 29989, 29298, 21319, 32499, 34051, 34052, 34053, 34054, 34055, 34056, 34057, 34058, 34059, 34061, 34062, 34063, 34064, 34066, 34068, 34069, 34070, 34072, 34073, 34075, 34076, 34077, 34078, 34080, 34082, 34083, 34084, 34085, 34086, 34087, 34088, 34089, 34090, 34093, 34094, 34095, 34096, 34097, 34098, 34099, 34100, 34101, 34102, 34110, 34111, 34112, 34113, 34114, 34116, 34117, 34118, 34119, 34123, 34124, 34125, 34126, 34127, 34128, 34129, 34130, 34131, 34132, 34133, 34135, 34136, 34138, 34139, 34140, 34141, 34143, 34144, 34145, 34146, 34147, 34149, 34150, 34151, 34153, 34154, 34155, 34156, 34157, 34158, 34159, 34160, 34161, 34163, 34165, 34166, 34167, 34168, 34172, 34173, 34175, 34176, 34177, 30465, 30427, 21097, 32988, 22307, 24072, 22833, 29422, 26045, 28287, 35799, 23608, 34417, 21313, 30707, 25342, 26102, 20160, 39135, 34432, 23454, 35782, 21490, 30690, 20351, 23630, 39542, 22987, 24335, 31034, 22763, 19990, 26623, 20107, 25325, 35475, 36893, 21183, 26159, 21980, 22124, 36866, 20181, 20365, 37322, 39280, 27663, 24066, 24643, 23460, 35270, 35797, 25910, 25163, 39318, 23432, 23551, 25480, 21806, 21463, 30246, 20861, 34092, 26530, 26803, 27530, 25234, 36755, 21460, 33298, 28113, 30095, 20070, 36174, 23408, 29087, 34223, 26257, 26329, 32626, 34560, 40653, 40736, 23646, 26415, 36848, 26641, 26463, 25101, 31446, 22661, 24246, 25968, 28465, 34178, 34179, 34182, 34184, 34185, 34186, 34187, 34188, 34189, 34190, 34192, 34193, 34194, 34195, 34196, 34197, 34198, 34199, 34200, 34201, 34202, 34205, 34206, 34207, 34208, 34209, 34210, 34211, 34213, 34214, 34215, 34217, 34219, 34220, 34221, 34225, 34226, 34227, 34228, 34229, 34230, 34232, 34234, 34235, 34236, 34237, 34238, 34239, 34240, 34242, 34243, 34244, 34245, 34246, 34247, 34248, 34250, 34251, 34252, 34253, 34254, 34257, 34258, 34260, 34262, 34263, 34264, 34265, 34266, 34267, 34269, 34270, 34271, 34272, 34273, 34274, 34275, 34277, 34278, 34279, 34280, 34282, 34283, 34284, 34285, 34286, 34287, 34288, 34289, 34290, 34291, 34292, 34293, 34294, 34295, 34296, 24661, 21047, 32781, 25684, 34928, 29993, 24069, 26643, 25332, 38684, 21452, 29245, 35841, 27700, 30561, 31246, 21550, 30636, 39034, 33308, 35828, 30805, 26388, 28865, 26031, 25749, 22070, 24605, 31169, 21496, 19997, 27515, 32902, 23546, 21987, 22235, 20282, 20284, 39282, 24051, 26494, 32824, 24578, 39042, 36865, 23435, 35772, 35829, 25628, 33368, 25822, 22013, 33487, 37221, 20439, 32032, 36895, 31903, 20723, 22609, 28335, 23487, 35785, 32899, 37240, 33948, 31639, 34429, 38539, 38543, 32485, 39635, 30862, 23681, 31319, 36930, 38567, 31071, 23385, 25439, 31499, 34001, 26797, 21766, 32553, 29712, 32034, 38145, 25152, 22604, 20182, 23427, 22905, 22612, 34297, 34298, 34300, 34301, 34302, 34304, 34305, 34306, 34307, 34308, 34310, 34311, 34312, 34313, 34314, 34315, 34316, 34317, 34318, 34319, 34320, 34322, 34323, 34324, 34325, 34327, 34328, 34329, 34330, 34331, 34332, 34333, 34334, 34335, 34336, 34337, 34338, 34339, 34340, 34341, 34342, 34344, 34346, 34347, 34348, 34349, 34350, 34351, 34352, 34353, 34354, 34355, 34356, 34357, 34358, 34359, 34361, 34362, 34363, 34365, 34366, 34367, 34368, 34369, 34370, 34371, 34372, 34373, 34374, 34375, 34376, 34377, 34378, 34379, 34380, 34386, 34387, 34389, 34390, 34391, 34392, 34393, 34395, 34396, 34397, 34399, 34400, 34401, 34403, 34404, 34405, 34406, 34407, 34408, 34409, 34410, 29549, 25374, 36427, 36367, 32974, 33492, 25260, 21488, 27888, 37214, 22826, 24577, 27760, 22349, 25674, 36138, 30251, 28393, 22363, 27264, 30192, 28525, 35885, 35848, 22374, 27631, 34962, 30899, 25506, 21497, 28845, 27748, 22616, 25642, 22530, 26848, 33179, 21776, 31958, 20504, 36538, 28108, 36255, 28907, 25487, 28059, 28372, 32486, 33796, 26691, 36867, 28120, 38518, 35752, 22871, 29305, 34276, 33150, 30140, 35466, 26799, 21076, 36386, 38161, 25552, 39064, 36420, 21884, 20307, 26367, 22159, 24789, 28053, 21059, 23625, 22825, 28155, 22635, 3e4, 29980, 24684, 33300, 33094, 25361, 26465, 36834, 30522, 36339, 36148, 38081, 24086, 21381, 21548, 28867, 34413, 34415, 34416, 34418, 34419, 34420, 34421, 34422, 34423, 34424, 34435, 34436, 34437, 34438, 34439, 34440, 34441, 34446, 34447, 34448, 34449, 34450, 34452, 34454, 34455, 34456, 34457, 34458, 34459, 34462, 34463, 34464, 34465, 34466, 34469, 34470, 34475, 34477, 34478, 34482, 34483, 34487, 34488, 34489, 34491, 34492, 34493, 34494, 34495, 34497, 34498, 34499, 34501, 34504, 34508, 34509, 34514, 34515, 34517, 34518, 34519, 34522, 34524, 34525, 34528, 34529, 34530, 34531, 34533, 34534, 34535, 34536, 34538, 34539, 34540, 34543, 34549, 34550, 34551, 34554, 34555, 34556, 34557, 34559, 34561, 34564, 34565, 34566, 34571, 34572, 34574, 34575, 34576, 34577, 34580, 34582, 27712, 24311, 20572, 20141, 24237, 25402, 33351, 36890, 26704, 37230, 30643, 21516, 38108, 24420, 31461, 26742, 25413, 31570, 32479, 30171, 20599, 25237, 22836, 36879, 20984, 31171, 31361, 22270, 24466, 36884, 28034, 23648, 22303, 21520, 20820, 28237, 22242, 25512, 39059, 33151, 34581, 35114, 36864, 21534, 23663, 33216, 25302, 25176, 33073, 40501, 38464, 39534, 39548, 26925, 22949, 25299, 21822, 25366, 21703, 34521, 27964, 23043, 29926, 34972, 27498, 22806, 35916, 24367, 28286, 29609, 39037, 20024, 28919, 23436, 30871, 25405, 26202, 30358, 24779, 23451, 23113, 19975, 33109, 27754, 29579, 20129, 26505, 32593, 24448, 26106, 26395, 24536, 22916, 23041, 34585, 34587, 34589, 34591, 34592, 34596, 34598, 34599, 34600, 34602, 34603, 34604, 34605, 34607, 34608, 34610, 34611, 34613, 34614, 34616, 34617, 34618, 34620, 34621, 34624, 34625, 34626, 34627, 34628, 34629, 34630, 34634, 34635, 34637, 34639, 34640, 34641, 34642, 34644, 34645, 34646, 34648, 34650, 34651, 34652, 34653, 34654, 34655, 34657, 34658, 34662, 34663, 34664, 34665, 34666, 34667, 34668, 34669, 34671, 34673, 34674, 34675, 34677, 34679, 34680, 34681, 34682, 34687, 34688, 34689, 34692, 34694, 34695, 34697, 34698, 34700, 34702, 34703, 34704, 34705, 34706, 34708, 34709, 34710, 34712, 34713, 34714, 34715, 34716, 34717, 34718, 34720, 34721, 34722, 34723, 34724, 24013, 24494, 21361, 38886, 36829, 26693, 22260, 21807, 24799, 20026, 28493, 32500, 33479, 33806, 22996, 20255, 20266, 23614, 32428, 26410, 34074, 21619, 30031, 32963, 21890, 39759, 20301, 28205, 35859, 23561, 24944, 21355, 30239, 28201, 34442, 25991, 38395, 32441, 21563, 31283, 32010, 38382, 21985, 32705, 29934, 25373, 34583, 28065, 31389, 25105, 26017, 21351, 25569, 27779, 24043, 21596, 38056, 20044, 27745, 35820, 23627, 26080, 33436, 26791, 21566, 21556, 27595, 27494, 20116, 25410, 21320, 33310, 20237, 20398, 22366, 25098, 38654, 26212, 29289, 21247, 21153, 24735, 35823, 26132, 29081, 26512, 35199, 30802, 30717, 26224, 22075, 21560, 38177, 29306, 34725, 34726, 34727, 34729, 34730, 34734, 34736, 34737, 34738, 34740, 34742, 34743, 34744, 34745, 34747, 34748, 34750, 34751, 34753, 34754, 34755, 34756, 34757, 34759, 34760, 34761, 34764, 34765, 34766, 34767, 34768, 34772, 34773, 34774, 34775, 34776, 34777, 34778, 34780, 34781, 34782, 34783, 34785, 34786, 34787, 34788, 34790, 34791, 34792, 34793, 34795, 34796, 34797, 34799, 34800, 34801, 34802, 34803, 34804, 34805, 34806, 34807, 34808, 34810, 34811, 34812, 34813, 34815, 34816, 34817, 34818, 34820, 34821, 34822, 34823, 34824, 34825, 34827, 34828, 34829, 34830, 34831, 34832, 34833, 34834, 34836, 34839, 34840, 34841, 34842, 34844, 34845, 34846, 34847, 34848, 34851, 31232, 24687, 24076, 24713, 33181, 22805, 24796, 29060, 28911, 28330, 27728, 29312, 27268, 34989, 24109, 20064, 23219, 21916, 38115, 27927, 31995, 38553, 25103, 32454, 30606, 34430, 21283, 38686, 36758, 26247, 23777, 20384, 29421, 19979, 21414, 22799, 21523, 25472, 38184, 20808, 20185, 40092, 32420, 21688, 36132, 34900, 33335, 38386, 28046, 24358, 23244, 26174, 38505, 29616, 29486, 21439, 33146, 39301, 32673, 23466, 38519, 38480, 32447, 30456, 21410, 38262, 39321, 31665, 35140, 28248, 20065, 32724, 31077, 35814, 24819, 21709, 20139, 39033, 24055, 27233, 20687, 21521, 35937, 33831, 30813, 38660, 21066, 21742, 22179, 38144, 28040, 23477, 28102, 26195, 34852, 34853, 34854, 34855, 34856, 34857, 34858, 34859, 34860, 34861, 34862, 34863, 34864, 34865, 34867, 34868, 34869, 34870, 34871, 34872, 34874, 34875, 34877, 34878, 34879, 34881, 34882, 34883, 34886, 34887, 34888, 34889, 34890, 34891, 34894, 34895, 34896, 34897, 34898, 34899, 34901, 34902, 34904, 34906, 34907, 34908, 34909, 34910, 34911, 34912, 34918, 34919, 34922, 34925, 34927, 34929, 34931, 34932, 34933, 34934, 34936, 34937, 34938, 34939, 34940, 34944, 34947, 34950, 34951, 34953, 34954, 34956, 34958, 34959, 34960, 34961, 34963, 34964, 34965, 34967, 34968, 34969, 34970, 34971, 34973, 34974, 34975, 34976, 34977, 34979, 34981, 34982, 34983, 34984, 34985, 34986, 23567, 23389, 26657, 32918, 21880, 31505, 25928, 26964, 20123, 27463, 34638, 38795, 21327, 25375, 25658, 37034, 26012, 32961, 35856, 20889, 26800, 21368, 34809, 25032, 27844, 27899, 35874, 23633, 34218, 33455, 38156, 27427, 36763, 26032, 24571, 24515, 20449, 34885, 26143, 33125, 29481, 24826, 20852, 21009, 22411, 24418, 37026, 34892, 37266, 24184, 26447, 24615, 22995, 20804, 20982, 33016, 21256, 27769, 38596, 29066, 20241, 20462, 32670, 26429, 21957, 38152, 31168, 34966, 32483, 22687, 25100, 38656, 34394, 22040, 39035, 24464, 35768, 33988, 37207, 21465, 26093, 24207, 30044, 24676, 32110, 23167, 32490, 32493, 36713, 21927, 23459, 24748, 26059, 29572, 34988, 34990, 34991, 34992, 34994, 34995, 34996, 34997, 34998, 35e3, 35001, 35002, 35003, 35005, 35006, 35007, 35008, 35011, 35012, 35015, 35016, 35018, 35019, 35020, 35021, 35023, 35024, 35025, 35027, 35030, 35031, 35034, 35035, 35036, 35037, 35038, 35040, 35041, 35046, 35047, 35049, 35050, 35051, 35052, 35053, 35054, 35055, 35058, 35061, 35062, 35063, 35066, 35067, 35069, 35071, 35072, 35073, 35075, 35076, 35077, 35078, 35079, 35080, 35081, 35083, 35084, 35085, 35086, 35087, 35089, 35092, 35093, 35094, 35095, 35096, 35100, 35101, 35102, 35103, 35104, 35106, 35107, 35108, 35110, 35111, 35112, 35113, 35116, 35117, 35118, 35119, 35121, 35122, 35123, 35125, 35127, 36873, 30307, 30505, 32474, 38772, 34203, 23398, 31348, 38634, 34880, 21195, 29071, 24490, 26092, 35810, 23547, 39535, 24033, 27529, 27739, 35757, 35759, 36874, 36805, 21387, 25276, 40486, 40493, 21568, 20011, 33469, 29273, 34460, 23830, 34905, 28079, 38597, 21713, 20122, 35766, 28937, 21693, 38409, 28895, 28153, 30416, 20005, 30740, 34578, 23721, 24310, 35328, 39068, 38414, 28814, 27839, 22852, 25513, 30524, 34893, 28436, 33395, 22576, 29141, 21388, 30746, 38593, 21761, 24422, 28976, 23476, 35866, 39564, 27523, 22830, 40495, 31207, 26472, 25196, 20335, 30113, 32650, 27915, 38451, 27687, 20208, 30162, 20859, 26679, 28478, 36992, 33136, 22934, 29814, 35128, 35129, 35130, 35131, 35132, 35133, 35134, 35135, 35136, 35138, 35139, 35141, 35142, 35143, 35144, 35145, 35146, 35147, 35148, 35149, 35150, 35151, 35152, 35153, 35154, 35155, 35156, 35157, 35158, 35159, 35160, 35161, 35162, 35163, 35164, 35165, 35168, 35169, 35170, 35171, 35172, 35173, 35175, 35176, 35177, 35178, 35179, 35180, 35181, 35182, 35183, 35184, 35185, 35186, 35187, 35188, 35189, 35190, 35191, 35192, 35193, 35194, 35196, 35197, 35198, 35200, 35202, 35204, 35205, 35207, 35208, 35209, 35210, 35211, 35212, 35213, 35214, 35215, 35216, 35217, 35218, 35219, 35220, 35221, 35222, 35223, 35224, 35225, 35226, 35227, 35228, 35229, 35230, 35231, 35232, 35233, 25671, 23591, 36965, 31377, 35875, 23002, 21676, 33280, 33647, 35201, 32768, 26928, 22094, 32822, 29239, 37326, 20918, 20063, 39029, 25494, 19994, 21494, 26355, 33099, 22812, 28082, 19968, 22777, 21307, 25558, 38129, 20381, 20234, 34915, 39056, 22839, 36951, 31227, 20202, 33008, 30097, 27778, 23452, 23016, 24413, 26885, 34433, 20506, 24050, 20057, 30691, 20197, 33402, 25233, 26131, 37009, 23673, 20159, 24441, 33222, 36920, 32900, 30123, 20134, 35028, 24847, 27589, 24518, 20041, 30410, 28322, 35811, 35758, 35850, 35793, 24322, 32764, 32716, 32462, 33589, 33643, 22240, 27575, 38899, 38452, 23035, 21535, 38134, 28139, 23493, 39278, 23609, 24341, 38544, 35234, 35235, 35236, 35237, 35238, 35239, 35240, 35241, 35242, 35243, 35244, 35245, 35246, 35247, 35248, 35249, 35250, 35251, 35252, 35253, 35254, 35255, 35256, 35257, 35258, 35259, 35260, 35261, 35262, 35263, 35264, 35267, 35277, 35283, 35284, 35285, 35287, 35288, 35289, 35291, 35293, 35295, 35296, 35297, 35298, 35300, 35303, 35304, 35305, 35306, 35308, 35309, 35310, 35312, 35313, 35314, 35316, 35317, 35318, 35319, 35320, 35321, 35322, 35323, 35324, 35325, 35326, 35327, 35329, 35330, 35331, 35332, 35333, 35334, 35336, 35337, 35338, 35339, 35340, 35341, 35342, 35343, 35344, 35345, 35346, 35347, 35348, 35349, 35350, 35351, 35352, 35353, 35354, 35355, 35356, 35357, 21360, 33521, 27185, 23156, 40560, 24212, 32552, 33721, 33828, 33829, 33639, 34631, 36814, 36194, 30408, 24433, 39062, 30828, 26144, 21727, 25317, 20323, 33219, 30152, 24248, 38605, 36362, 34553, 21647, 27891, 28044, 27704, 24703, 21191, 29992, 24189, 20248, 24736, 24551, 23588, 30001, 37038, 38080, 29369, 27833, 28216, 37193, 26377, 21451, 21491, 20305, 37321, 35825, 21448, 24188, 36802, 28132, 20110, 30402, 27014, 34398, 24858, 33286, 20313, 20446, 36926, 40060, 24841, 28189, 28180, 38533, 20104, 23089, 38632, 19982, 23679, 31161, 23431, 35821, 32701, 29577, 22495, 33419, 37057, 21505, 36935, 21947, 23786, 24481, 24840, 27442, 29425, 32946, 35465, 35358, 35359, 35360, 35361, 35362, 35363, 35364, 35365, 35366, 35367, 35368, 35369, 35370, 35371, 35372, 35373, 35374, 35375, 35376, 35377, 35378, 35379, 35380, 35381, 35382, 35383, 35384, 35385, 35386, 35387, 35388, 35389, 35391, 35392, 35393, 35394, 35395, 35396, 35397, 35398, 35399, 35401, 35402, 35403, 35404, 35405, 35406, 35407, 35408, 35409, 35410, 35411, 35412, 35413, 35414, 35415, 35416, 35417, 35418, 35419, 35420, 35421, 35422, 35423, 35424, 35425, 35426, 35427, 35428, 35429, 35430, 35431, 35432, 35433, 35434, 35435, 35436, 35437, 35438, 35439, 35440, 35441, 35442, 35443, 35444, 35445, 35446, 35447, 35448, 35450, 35451, 35452, 35453, 35454, 35455, 35456, 28020, 23507, 35029, 39044, 35947, 39533, 40499, 28170, 20900, 20803, 22435, 34945, 21407, 25588, 36757, 22253, 21592, 22278, 29503, 28304, 32536, 36828, 33489, 24895, 24616, 38498, 26352, 32422, 36234, 36291, 38053, 23731, 31908, 26376, 24742, 38405, 32792, 20113, 37095, 21248, 38504, 20801, 36816, 34164, 37213, 26197, 38901, 23381, 21277, 30776, 26434, 26685, 21705, 28798, 23472, 36733, 20877, 22312, 21681, 25874, 26242, 36190, 36163, 33039, 33900, 36973, 31967, 20991, 34299, 26531, 26089, 28577, 34468, 36481, 22122, 36896, 30338, 28790, 29157, 36131, 25321, 21017, 27901, 36156, 24590, 22686, 24974, 26366, 36192, 25166, 21939, 28195, 26413, 36711, 35457, 35458, 35459, 35460, 35461, 35462, 35463, 35464, 35467, 35468, 35469, 35470, 35471, 35472, 35473, 35474, 35476, 35477, 35478, 35479, 35480, 35481, 35482, 35483, 35484, 35485, 35486, 35487, 35488, 35489, 35490, 35491, 35492, 35493, 35494, 35495, 35496, 35497, 35498, 35499, 35500, 35501, 35502, 35503, 35504, 35505, 35506, 35507, 35508, 35509, 35510, 35511, 35512, 35513, 35514, 35515, 35516, 35517, 35518, 35519, 35520, 35521, 35522, 35523, 35524, 35525, 35526, 35527, 35528, 35529, 35530, 35531, 35532, 35533, 35534, 35535, 35536, 35537, 35538, 35539, 35540, 35541, 35542, 35543, 35544, 35545, 35546, 35547, 35548, 35549, 35550, 35551, 35552, 35553, 35554, 35555, 38113, 38392, 30504, 26629, 27048, 21643, 20045, 28856, 35784, 25688, 25995, 23429, 31364, 20538, 23528, 30651, 27617, 35449, 31896, 27838, 30415, 26025, 36759, 23853, 23637, 34360, 26632, 21344, 25112, 31449, 28251, 32509, 27167, 31456, 24432, 28467, 24352, 25484, 28072, 26454, 19976, 24080, 36134, 20183, 32960, 30260, 38556, 25307, 26157, 25214, 27836, 36213, 29031, 32617, 20806, 32903, 21484, 36974, 25240, 21746, 34544, 36761, 32773, 38167, 34071, 36825, 27993, 29645, 26015, 30495, 29956, 30759, 33275, 36126, 38024, 20390, 26517, 30137, 35786, 38663, 25391, 38215, 38453, 33976, 25379, 30529, 24449, 29424, 20105, 24596, 25972, 25327, 27491, 25919, 35556, 35557, 35558, 35559, 35560, 35561, 35562, 35563, 35564, 35565, 35566, 35567, 35568, 35569, 35570, 35571, 35572, 35573, 35574, 35575, 35576, 35577, 35578, 35579, 35580, 35581, 35582, 35583, 35584, 35585, 35586, 35587, 35588, 35589, 35590, 35592, 35593, 35594, 35595, 35596, 35597, 35598, 35599, 35600, 35601, 35602, 35603, 35604, 35605, 35606, 35607, 35608, 35609, 35610, 35611, 35612, 35613, 35614, 35615, 35616, 35617, 35618, 35619, 35620, 35621, 35623, 35624, 35625, 35626, 35627, 35628, 35629, 35630, 35631, 35632, 35633, 35634, 35635, 35636, 35637, 35638, 35639, 35640, 35641, 35642, 35643, 35644, 35645, 35646, 35647, 35648, 35649, 35650, 35651, 35652, 35653, 24103, 30151, 37073, 35777, 33437, 26525, 25903, 21553, 34584, 30693, 32930, 33026, 27713, 20043, 32455, 32844, 30452, 26893, 27542, 25191, 20540, 20356, 22336, 25351, 27490, 36286, 21482, 26088, 32440, 24535, 25370, 25527, 33267, 33268, 32622, 24092, 23769, 21046, 26234, 31209, 31258, 36136, 28825, 30164, 28382, 27835, 31378, 20013, 30405, 24544, 38047, 34935, 32456, 31181, 32959, 37325, 20210, 20247, 33311, 21608, 24030, 27954, 35788, 31909, 36724, 32920, 24090, 21650, 30385, 23449, 26172, 39588, 29664, 26666, 34523, 26417, 29482, 35832, 35803, 36880, 31481, 28891, 29038, 25284, 30633, 22065, 20027, 33879, 26609, 21161, 34496, 36142, 38136, 31569, 35654, 35655, 35656, 35657, 35658, 35659, 35660, 35661, 35662, 35663, 35664, 35665, 35666, 35667, 35668, 35669, 35670, 35671, 35672, 35673, 35674, 35675, 35676, 35677, 35678, 35679, 35680, 35681, 35682, 35683, 35684, 35685, 35687, 35688, 35689, 35690, 35691, 35693, 35694, 35695, 35696, 35697, 35698, 35699, 35700, 35701, 35702, 35703, 35704, 35705, 35706, 35707, 35708, 35709, 35710, 35711, 35712, 35713, 35714, 35715, 35716, 35717, 35718, 35719, 35720, 35721, 35722, 35723, 35724, 35725, 35726, 35727, 35728, 35729, 35730, 35731, 35732, 35733, 35734, 35735, 35736, 35737, 35738, 35739, 35740, 35741, 35742, 35743, 35756, 35761, 35771, 35783, 35792, 35818, 35849, 35870, 20303, 27880, 31069, 39547, 25235, 29226, 25341, 19987, 30742, 36716, 25776, 36186, 31686, 26729, 24196, 35013, 22918, 25758, 22766, 29366, 26894, 38181, 36861, 36184, 22368, 32512, 35846, 20934, 25417, 25305, 21331, 26700, 29730, 33537, 37196, 21828, 30528, 28796, 27978, 20857, 21672, 36164, 23039, 28363, 28100, 23388, 32043, 20180, 31869, 28371, 23376, 33258, 28173, 23383, 39683, 26837, 36394, 23447, 32508, 24635, 32437, 37049, 36208, 22863, 25549, 31199, 36275, 21330, 26063, 31062, 35781, 38459, 32452, 38075, 32386, 22068, 37257, 26368, 32618, 23562, 36981, 26152, 24038, 20304, 26590, 20570, 20316, 22352, 24231, 59408, 59409, 59410, 59411, 59412, 35896, 35897, 35898, 35899, 35900, 35901, 35902, 35903, 35904, 35906, 35907, 35908, 35909, 35912, 35914, 35915, 35917, 35918, 35919, 35920, 35921, 35922, 35923, 35924, 35926, 35927, 35928, 35929, 35931, 35932, 35933, 35934, 35935, 35936, 35939, 35940, 35941, 35942, 35943, 35944, 35945, 35948, 35949, 35950, 35951, 35952, 35953, 35954, 35956, 35957, 35958, 35959, 35963, 35964, 35965, 35966, 35967, 35968, 35969, 35971, 35972, 35974, 35975, 35976, 35979, 35981, 35982, 35983, 35984, 35985, 35986, 35987, 35989, 35990, 35991, 35993, 35994, 35995, 35996, 35997, 35998, 35999, 36e3, 36001, 36002, 36003, 36004, 36005, 36006, 36007, 36008, 36009, 36010, 36011, 36012, 36013, 20109, 19980, 20800, 19984, 24319, 21317, 19989, 20120, 19998, 39730, 23404, 22121, 20008, 31162, 20031, 21269, 20039, 22829, 29243, 21358, 27664, 22239, 32996, 39319, 27603, 30590, 40727, 20022, 20127, 40720, 20060, 20073, 20115, 33416, 23387, 21868, 22031, 20164, 21389, 21405, 21411, 21413, 21422, 38757, 36189, 21274, 21493, 21286, 21294, 21310, 36188, 21350, 21347, 20994, 21e3, 21006, 21037, 21043, 21055, 21056, 21068, 21086, 21089, 21084, 33967, 21117, 21122, 21121, 21136, 21139, 20866, 32596, 20155, 20163, 20169, 20162, 20200, 20193, 20203, 20190, 20251, 20211, 20258, 20324, 20213, 20261, 20263, 20233, 20267, 20318, 20327, 25912, 20314, 20317, 36014, 36015, 36016, 36017, 36018, 36019, 36020, 36021, 36022, 36023, 36024, 36025, 36026, 36027, 36028, 36029, 36030, 36031, 36032, 36033, 36034, 36035, 36036, 36037, 36038, 36039, 36040, 36041, 36042, 36043, 36044, 36045, 36046, 36047, 36048, 36049, 36050, 36051, 36052, 36053, 36054, 36055, 36056, 36057, 36058, 36059, 36060, 36061, 36062, 36063, 36064, 36065, 36066, 36067, 36068, 36069, 36070, 36071, 36072, 36073, 36074, 36075, 36076, 36077, 36078, 36079, 36080, 36081, 36082, 36083, 36084, 36085, 36086, 36087, 36088, 36089, 36090, 36091, 36092, 36093, 36094, 36095, 36096, 36097, 36098, 36099, 36100, 36101, 36102, 36103, 36104, 36105, 36106, 36107, 36108, 36109, 20319, 20311, 20274, 20285, 20342, 20340, 20369, 20361, 20355, 20367, 20350, 20347, 20394, 20348, 20396, 20372, 20454, 20456, 20458, 20421, 20442, 20451, 20444, 20433, 20447, 20472, 20521, 20556, 20467, 20524, 20495, 20526, 20525, 20478, 20508, 20492, 20517, 20520, 20606, 20547, 20565, 20552, 20558, 20588, 20603, 20645, 20647, 20649, 20666, 20694, 20742, 20717, 20716, 20710, 20718, 20743, 20747, 20189, 27709, 20312, 20325, 20430, 40864, 27718, 31860, 20846, 24061, 40649, 39320, 20865, 22804, 21241, 21261, 35335, 21264, 20971, 22809, 20821, 20128, 20822, 20147, 34926, 34980, 20149, 33044, 35026, 31104, 23348, 34819, 32696, 20907, 20913, 20925, 20924, 36110, 36111, 36112, 36113, 36114, 36115, 36116, 36117, 36118, 36119, 36120, 36121, 36122, 36123, 36124, 36128, 36177, 36178, 36183, 36191, 36197, 36200, 36201, 36202, 36204, 36206, 36207, 36209, 36210, 36216, 36217, 36218, 36219, 36220, 36221, 36222, 36223, 36224, 36226, 36227, 36230, 36231, 36232, 36233, 36236, 36237, 36238, 36239, 36240, 36242, 36243, 36245, 36246, 36247, 36248, 36249, 36250, 36251, 36252, 36253, 36254, 36256, 36257, 36258, 36260, 36261, 36262, 36263, 36264, 36265, 36266, 36267, 36268, 36269, 36270, 36271, 36272, 36274, 36278, 36279, 36281, 36283, 36285, 36288, 36289, 36290, 36293, 36295, 36296, 36297, 36298, 36301, 36304, 36306, 36307, 36308, 20935, 20886, 20898, 20901, 35744, 35750, 35751, 35754, 35764, 35765, 35767, 35778, 35779, 35787, 35791, 35790, 35794, 35795, 35796, 35798, 35800, 35801, 35804, 35807, 35808, 35812, 35816, 35817, 35822, 35824, 35827, 35830, 35833, 35836, 35839, 35840, 35842, 35844, 35847, 35852, 35855, 35857, 35858, 35860, 35861, 35862, 35865, 35867, 35864, 35869, 35871, 35872, 35873, 35877, 35879, 35882, 35883, 35886, 35887, 35890, 35891, 35893, 35894, 21353, 21370, 38429, 38434, 38433, 38449, 38442, 38461, 38460, 38466, 38473, 38484, 38495, 38503, 38508, 38514, 38516, 38536, 38541, 38551, 38576, 37015, 37019, 37021, 37017, 37036, 37025, 37044, 37043, 37046, 37050, 36309, 36312, 36313, 36316, 36320, 36321, 36322, 36325, 36326, 36327, 36329, 36333, 36334, 36336, 36337, 36338, 36340, 36342, 36348, 36350, 36351, 36352, 36353, 36354, 36355, 36356, 36358, 36359, 36360, 36363, 36365, 36366, 36368, 36369, 36370, 36371, 36373, 36374, 36375, 36376, 36377, 36378, 36379, 36380, 36384, 36385, 36388, 36389, 36390, 36391, 36392, 36395, 36397, 36400, 36402, 36403, 36404, 36406, 36407, 36408, 36411, 36412, 36414, 36415, 36419, 36421, 36422, 36428, 36429, 36430, 36431, 36432, 36435, 36436, 36437, 36438, 36439, 36440, 36442, 36443, 36444, 36445, 36446, 36447, 36448, 36449, 36450, 36451, 36452, 36453, 36455, 36456, 36458, 36459, 36462, 36465, 37048, 37040, 37071, 37061, 37054, 37072, 37060, 37063, 37075, 37094, 37090, 37084, 37079, 37083, 37099, 37103, 37118, 37124, 37154, 37150, 37155, 37169, 37167, 37177, 37187, 37190, 21005, 22850, 21154, 21164, 21165, 21182, 21759, 21200, 21206, 21232, 21471, 29166, 30669, 24308, 20981, 20988, 39727, 21430, 24321, 30042, 24047, 22348, 22441, 22433, 22654, 22716, 22725, 22737, 22313, 22316, 22314, 22323, 22329, 22318, 22319, 22364, 22331, 22338, 22377, 22405, 22379, 22406, 22396, 22395, 22376, 22381, 22390, 22387, 22445, 22436, 22412, 22450, 22479, 22439, 22452, 22419, 22432, 22485, 22488, 22490, 22489, 22482, 22456, 22516, 22511, 22520, 22500, 22493, 36467, 36469, 36471, 36472, 36473, 36474, 36475, 36477, 36478, 36480, 36482, 36483, 36484, 36486, 36488, 36489, 36490, 36491, 36492, 36493, 36494, 36497, 36498, 36499, 36501, 36502, 36503, 36504, 36505, 36506, 36507, 36509, 36511, 36512, 36513, 36514, 36515, 36516, 36517, 36518, 36519, 36520, 36521, 36522, 36525, 36526, 36528, 36529, 36531, 36532, 36533, 36534, 36535, 36536, 36537, 36539, 36540, 36541, 36542, 36543, 36544, 36545, 36546, 36547, 36548, 36549, 36550, 36551, 36552, 36553, 36554, 36555, 36556, 36557, 36559, 36560, 36561, 36562, 36563, 36564, 36565, 36566, 36567, 36568, 36569, 36570, 36571, 36572, 36573, 36574, 36575, 36576, 36577, 36578, 36579, 36580, 22539, 22541, 22525, 22509, 22528, 22558, 22553, 22596, 22560, 22629, 22636, 22657, 22665, 22682, 22656, 39336, 40729, 25087, 33401, 33405, 33407, 33423, 33418, 33448, 33412, 33422, 33425, 33431, 33433, 33451, 33464, 33470, 33456, 33480, 33482, 33507, 33432, 33463, 33454, 33483, 33484, 33473, 33449, 33460, 33441, 33450, 33439, 33476, 33486, 33444, 33505, 33545, 33527, 33508, 33551, 33543, 33500, 33524, 33490, 33496, 33548, 33531, 33491, 33553, 33562, 33542, 33556, 33557, 33504, 33493, 33564, 33617, 33627, 33628, 33544, 33682, 33596, 33588, 33585, 33691, 33630, 33583, 33615, 33607, 33603, 33631, 33600, 33559, 33632, 33581, 33594, 33587, 33638, 33637, 36581, 36582, 36583, 36584, 36585, 36586, 36587, 36588, 36589, 36590, 36591, 36592, 36593, 36594, 36595, 36596, 36597, 36598, 36599, 36600, 36601, 36602, 36603, 36604, 36605, 36606, 36607, 36608, 36609, 36610, 36611, 36612, 36613, 36614, 36615, 36616, 36617, 36618, 36619, 36620, 36621, 36622, 36623, 36624, 36625, 36626, 36627, 36628, 36629, 36630, 36631, 36632, 36633, 36634, 36635, 36636, 36637, 36638, 36639, 36640, 36641, 36642, 36643, 36644, 36645, 36646, 36647, 36648, 36649, 36650, 36651, 36652, 36653, 36654, 36655, 36656, 36657, 36658, 36659, 36660, 36661, 36662, 36663, 36664, 36665, 36666, 36667, 36668, 36669, 36670, 36671, 36672, 36673, 36674, 36675, 36676, 33640, 33563, 33641, 33644, 33642, 33645, 33646, 33712, 33656, 33715, 33716, 33696, 33706, 33683, 33692, 33669, 33660, 33718, 33705, 33661, 33720, 33659, 33688, 33694, 33704, 33722, 33724, 33729, 33793, 33765, 33752, 22535, 33816, 33803, 33757, 33789, 33750, 33820, 33848, 33809, 33798, 33748, 33759, 33807, 33795, 33784, 33785, 33770, 33733, 33728, 33830, 33776, 33761, 33884, 33873, 33882, 33881, 33907, 33927, 33928, 33914, 33929, 33912, 33852, 33862, 33897, 33910, 33932, 33934, 33841, 33901, 33985, 33997, 34e3, 34022, 33981, 34003, 33994, 33983, 33978, 34016, 33953, 33977, 33972, 33943, 34021, 34019, 34060, 29965, 34104, 34032, 34105, 34079, 34106, 36677, 36678, 36679, 36680, 36681, 36682, 36683, 36684, 36685, 36686, 36687, 36688, 36689, 36690, 36691, 36692, 36693, 36694, 36695, 36696, 36697, 36698, 36699, 36700, 36701, 36702, 36703, 36704, 36705, 36706, 36707, 36708, 36709, 36714, 36736, 36748, 36754, 36765, 36768, 36769, 36770, 36772, 36773, 36774, 36775, 36778, 36780, 36781, 36782, 36783, 36786, 36787, 36788, 36789, 36791, 36792, 36794, 36795, 36796, 36799, 36800, 36803, 36806, 36809, 36810, 36811, 36812, 36813, 36815, 36818, 36822, 36823, 36826, 36832, 36833, 36835, 36839, 36844, 36847, 36849, 36850, 36852, 36853, 36854, 36858, 36859, 36860, 36862, 36863, 36871, 36872, 36876, 36878, 36883, 36885, 36888, 34134, 34107, 34047, 34044, 34137, 34120, 34152, 34148, 34142, 34170, 30626, 34115, 34162, 34171, 34212, 34216, 34183, 34191, 34169, 34222, 34204, 34181, 34233, 34231, 34224, 34259, 34241, 34268, 34303, 34343, 34309, 34345, 34326, 34364, 24318, 24328, 22844, 22849, 32823, 22869, 22874, 22872, 21263, 23586, 23589, 23596, 23604, 25164, 25194, 25247, 25275, 25290, 25306, 25303, 25326, 25378, 25334, 25401, 25419, 25411, 25517, 25590, 25457, 25466, 25486, 25524, 25453, 25516, 25482, 25449, 25518, 25532, 25586, 25592, 25568, 25599, 25540, 25566, 25550, 25682, 25542, 25534, 25669, 25665, 25611, 25627, 25632, 25612, 25638, 25633, 25694, 25732, 25709, 25750, 36889, 36892, 36899, 36900, 36901, 36903, 36904, 36905, 36906, 36907, 36908, 36912, 36913, 36914, 36915, 36916, 36919, 36921, 36922, 36925, 36927, 36928, 36931, 36933, 36934, 36936, 36937, 36938, 36939, 36940, 36942, 36948, 36949, 36950, 36953, 36954, 36956, 36957, 36958, 36959, 36960, 36961, 36964, 36966, 36967, 36969, 36970, 36971, 36972, 36975, 36976, 36977, 36978, 36979, 36982, 36983, 36984, 36985, 36986, 36987, 36988, 36990, 36993, 36996, 36997, 36998, 36999, 37001, 37002, 37004, 37005, 37006, 37007, 37008, 37010, 37012, 37014, 37016, 37018, 37020, 37022, 37023, 37024, 37028, 37029, 37031, 37032, 37033, 37035, 37037, 37042, 37047, 37052, 37053, 37055, 37056, 25722, 25783, 25784, 25753, 25786, 25792, 25808, 25815, 25828, 25826, 25865, 25893, 25902, 24331, 24530, 29977, 24337, 21343, 21489, 21501, 21481, 21480, 21499, 21522, 21526, 21510, 21579, 21586, 21587, 21588, 21590, 21571, 21537, 21591, 21593, 21539, 21554, 21634, 21652, 21623, 21617, 21604, 21658, 21659, 21636, 21622, 21606, 21661, 21712, 21677, 21698, 21684, 21714, 21671, 21670, 21715, 21716, 21618, 21667, 21717, 21691, 21695, 21708, 21721, 21722, 21724, 21673, 21674, 21668, 21725, 21711, 21726, 21787, 21735, 21792, 21757, 21780, 21747, 21794, 21795, 21775, 21777, 21799, 21802, 21863, 21903, 21941, 21833, 21869, 21825, 21845, 21823, 21840, 21820, 37058, 37059, 37062, 37064, 37065, 37067, 37068, 37069, 37074, 37076, 37077, 37078, 37080, 37081, 37082, 37086, 37087, 37088, 37091, 37092, 37093, 37097, 37098, 37100, 37102, 37104, 37105, 37106, 37107, 37109, 37110, 37111, 37113, 37114, 37115, 37116, 37119, 37120, 37121, 37123, 37125, 37126, 37127, 37128, 37129, 37130, 37131, 37132, 37133, 37134, 37135, 37136, 37137, 37138, 37139, 37140, 37141, 37142, 37143, 37144, 37146, 37147, 37148, 37149, 37151, 37152, 37153, 37156, 37157, 37158, 37159, 37160, 37161, 37162, 37163, 37164, 37165, 37166, 37168, 37170, 37171, 37172, 37173, 37174, 37175, 37176, 37178, 37179, 37180, 37181, 37182, 37183, 37184, 37185, 37186, 37188, 21815, 21846, 21877, 21878, 21879, 21811, 21808, 21852, 21899, 21970, 21891, 21937, 21945, 21896, 21889, 21919, 21886, 21974, 21905, 21883, 21983, 21949, 21950, 21908, 21913, 21994, 22007, 21961, 22047, 21969, 21995, 21996, 21972, 21990, 21981, 21956, 21999, 21989, 22002, 22003, 21964, 21965, 21992, 22005, 21988, 36756, 22046, 22024, 22028, 22017, 22052, 22051, 22014, 22016, 22055, 22061, 22104, 22073, 22103, 22060, 22093, 22114, 22105, 22108, 22092, 22100, 22150, 22116, 22129, 22123, 22139, 22140, 22149, 22163, 22191, 22228, 22231, 22237, 22241, 22261, 22251, 22265, 22271, 22276, 22282, 22281, 22300, 24079, 24089, 24084, 24081, 24113, 24123, 24124, 37189, 37191, 37192, 37201, 37203, 37204, 37205, 37206, 37208, 37209, 37211, 37212, 37215, 37216, 37222, 37223, 37224, 37227, 37229, 37235, 37242, 37243, 37244, 37248, 37249, 37250, 37251, 37252, 37254, 37256, 37258, 37262, 37263, 37267, 37268, 37269, 37270, 37271, 37272, 37273, 37276, 37277, 37278, 37279, 37280, 37281, 37284, 37285, 37286, 37287, 37288, 37289, 37291, 37292, 37296, 37297, 37298, 37299, 37302, 37303, 37304, 37305, 37307, 37308, 37309, 37310, 37311, 37312, 37313, 37314, 37315, 37316, 37317, 37318, 37320, 37323, 37328, 37330, 37331, 37332, 37333, 37334, 37335, 37336, 37337, 37338, 37339, 37341, 37342, 37343, 37344, 37345, 37346, 37347, 37348, 37349, 24119, 24132, 24148, 24155, 24158, 24161, 23692, 23674, 23693, 23696, 23702, 23688, 23704, 23705, 23697, 23706, 23708, 23733, 23714, 23741, 23724, 23723, 23729, 23715, 23745, 23735, 23748, 23762, 23780, 23755, 23781, 23810, 23811, 23847, 23846, 23854, 23844, 23838, 23814, 23835, 23896, 23870, 23860, 23869, 23916, 23899, 23919, 23901, 23915, 23883, 23882, 23913, 23924, 23938, 23961, 23965, 35955, 23991, 24005, 24435, 24439, 24450, 24455, 24457, 24460, 24469, 24473, 24476, 24488, 24493, 24501, 24508, 34914, 24417, 29357, 29360, 29364, 29367, 29368, 29379, 29377, 29390, 29389, 29394, 29416, 29423, 29417, 29426, 29428, 29431, 29441, 29427, 29443, 29434, 37350, 37351, 37352, 37353, 37354, 37355, 37356, 37357, 37358, 37359, 37360, 37361, 37362, 37363, 37364, 37365, 37366, 37367, 37368, 37369, 37370, 37371, 37372, 37373, 37374, 37375, 37376, 37377, 37378, 37379, 37380, 37381, 37382, 37383, 37384, 37385, 37386, 37387, 37388, 37389, 37390, 37391, 37392, 37393, 37394, 37395, 37396, 37397, 37398, 37399, 37400, 37401, 37402, 37403, 37404, 37405, 37406, 37407, 37408, 37409, 37410, 37411, 37412, 37413, 37414, 37415, 37416, 37417, 37418, 37419, 37420, 37421, 37422, 37423, 37424, 37425, 37426, 37427, 37428, 37429, 37430, 37431, 37432, 37433, 37434, 37435, 37436, 37437, 37438, 37439, 37440, 37441, 37442, 37443, 37444, 37445, 29435, 29463, 29459, 29473, 29450, 29470, 29469, 29461, 29474, 29497, 29477, 29484, 29496, 29489, 29520, 29517, 29527, 29536, 29548, 29551, 29566, 33307, 22821, 39143, 22820, 22786, 39267, 39271, 39272, 39273, 39274, 39275, 39276, 39284, 39287, 39293, 39296, 39300, 39303, 39306, 39309, 39312, 39313, 39315, 39316, 39317, 24192, 24209, 24203, 24214, 24229, 24224, 24249, 24245, 24254, 24243, 36179, 24274, 24273, 24283, 24296, 24298, 33210, 24516, 24521, 24534, 24527, 24579, 24558, 24580, 24545, 24548, 24574, 24581, 24582, 24554, 24557, 24568, 24601, 24629, 24614, 24603, 24591, 24589, 24617, 24619, 24586, 24639, 24609, 24696, 24697, 24699, 24698, 24642, 37446, 37447, 37448, 37449, 37450, 37451, 37452, 37453, 37454, 37455, 37456, 37457, 37458, 37459, 37460, 37461, 37462, 37463, 37464, 37465, 37466, 37467, 37468, 37469, 37470, 37471, 37472, 37473, 37474, 37475, 37476, 37477, 37478, 37479, 37480, 37481, 37482, 37483, 37484, 37485, 37486, 37487, 37488, 37489, 37490, 37491, 37493, 37494, 37495, 37496, 37497, 37498, 37499, 37500, 37501, 37502, 37503, 37504, 37505, 37506, 37507, 37508, 37509, 37510, 37511, 37512, 37513, 37514, 37515, 37516, 37517, 37519, 37520, 37521, 37522, 37523, 37524, 37525, 37526, 37527, 37528, 37529, 37530, 37531, 37532, 37533, 37534, 37535, 37536, 37537, 37538, 37539, 37540, 37541, 37542, 37543, 24682, 24701, 24726, 24730, 24749, 24733, 24707, 24722, 24716, 24731, 24812, 24763, 24753, 24797, 24792, 24774, 24794, 24756, 24864, 24870, 24853, 24867, 24820, 24832, 24846, 24875, 24906, 24949, 25004, 24980, 24999, 25015, 25044, 25077, 24541, 38579, 38377, 38379, 38385, 38387, 38389, 38390, 38396, 38398, 38403, 38404, 38406, 38408, 38410, 38411, 38412, 38413, 38415, 38418, 38421, 38422, 38423, 38425, 38426, 20012, 29247, 25109, 27701, 27732, 27740, 27722, 27811, 27781, 27792, 27796, 27788, 27752, 27753, 27764, 27766, 27782, 27817, 27856, 27860, 27821, 27895, 27896, 27889, 27863, 27826, 27872, 27862, 27898, 27883, 27886, 27825, 27859, 27887, 27902, 37544, 37545, 37546, 37547, 37548, 37549, 37551, 37552, 37553, 37554, 37555, 37556, 37557, 37558, 37559, 37560, 37561, 37562, 37563, 37564, 37565, 37566, 37567, 37568, 37569, 37570, 37571, 37572, 37573, 37574, 37575, 37577, 37578, 37579, 37580, 37581, 37582, 37583, 37584, 37585, 37586, 37587, 37588, 37589, 37590, 37591, 37592, 37593, 37594, 37595, 37596, 37597, 37598, 37599, 37600, 37601, 37602, 37603, 37604, 37605, 37606, 37607, 37608, 37609, 37610, 37611, 37612, 37613, 37614, 37615, 37616, 37617, 37618, 37619, 37620, 37621, 37622, 37623, 37624, 37625, 37626, 37627, 37628, 37629, 37630, 37631, 37632, 37633, 37634, 37635, 37636, 37637, 37638, 37639, 37640, 37641, 27961, 27943, 27916, 27971, 27976, 27911, 27908, 27929, 27918, 27947, 27981, 27950, 27957, 27930, 27983, 27986, 27988, 27955, 28049, 28015, 28062, 28064, 27998, 28051, 28052, 27996, 28e3, 28028, 28003, 28186, 28103, 28101, 28126, 28174, 28095, 28128, 28177, 28134, 28125, 28121, 28182, 28075, 28172, 28078, 28203, 28270, 28238, 28267, 28338, 28255, 28294, 28243, 28244, 28210, 28197, 28228, 28383, 28337, 28312, 28384, 28461, 28386, 28325, 28327, 28349, 28347, 28343, 28375, 28340, 28367, 28303, 28354, 28319, 28514, 28486, 28487, 28452, 28437, 28409, 28463, 28470, 28491, 28532, 28458, 28425, 28457, 28553, 28557, 28556, 28536, 28530, 28540, 28538, 28625, 37642, 37643, 37644, 37645, 37646, 37647, 37648, 37649, 37650, 37651, 37652, 37653, 37654, 37655, 37656, 37657, 37658, 37659, 37660, 37661, 37662, 37663, 37664, 37665, 37666, 37667, 37668, 37669, 37670, 37671, 37672, 37673, 37674, 37675, 37676, 37677, 37678, 37679, 37680, 37681, 37682, 37683, 37684, 37685, 37686, 37687, 37688, 37689, 37690, 37691, 37692, 37693, 37695, 37696, 37697, 37698, 37699, 37700, 37701, 37702, 37703, 37704, 37705, 37706, 37707, 37708, 37709, 37710, 37711, 37712, 37713, 37714, 37715, 37716, 37717, 37718, 37719, 37720, 37721, 37722, 37723, 37724, 37725, 37726, 37727, 37728, 37729, 37730, 37731, 37732, 37733, 37734, 37735, 37736, 37737, 37739, 28617, 28583, 28601, 28598, 28610, 28641, 28654, 28638, 28640, 28655, 28698, 28707, 28699, 28729, 28725, 28751, 28766, 23424, 23428, 23445, 23443, 23461, 23480, 29999, 39582, 25652, 23524, 23534, 35120, 23536, 36423, 35591, 36790, 36819, 36821, 36837, 36846, 36836, 36841, 36838, 36851, 36840, 36869, 36868, 36875, 36902, 36881, 36877, 36886, 36897, 36917, 36918, 36909, 36911, 36932, 36945, 36946, 36944, 36968, 36952, 36962, 36955, 26297, 36980, 36989, 36994, 37e3, 36995, 37003, 24400, 24407, 24406, 24408, 23611, 21675, 23632, 23641, 23409, 23651, 23654, 32700, 24362, 24361, 24365, 33396, 24380, 39739, 23662, 22913, 22915, 22925, 22953, 22954, 22947, 37740, 37741, 37742, 37743, 37744, 37745, 37746, 37747, 37748, 37749, 37750, 37751, 37752, 37753, 37754, 37755, 37756, 37757, 37758, 37759, 37760, 37761, 37762, 37763, 37764, 37765, 37766, 37767, 37768, 37769, 37770, 37771, 37772, 37773, 37774, 37776, 37777, 37778, 37779, 37780, 37781, 37782, 37783, 37784, 37785, 37786, 37787, 37788, 37789, 37790, 37791, 37792, 37793, 37794, 37795, 37796, 37797, 37798, 37799, 37800, 37801, 37802, 37803, 37804, 37805, 37806, 37807, 37808, 37809, 37810, 37811, 37812, 37813, 37814, 37815, 37816, 37817, 37818, 37819, 37820, 37821, 37822, 37823, 37824, 37825, 37826, 37827, 37828, 37829, 37830, 37831, 37832, 37833, 37835, 37836, 37837, 22935, 22986, 22955, 22942, 22948, 22994, 22962, 22959, 22999, 22974, 23045, 23046, 23005, 23048, 23011, 23e3, 23033, 23052, 23049, 23090, 23092, 23057, 23075, 23059, 23104, 23143, 23114, 23125, 23100, 23138, 23157, 33004, 23210, 23195, 23159, 23162, 23230, 23275, 23218, 23250, 23252, 23224, 23264, 23267, 23281, 23254, 23270, 23256, 23260, 23305, 23319, 23318, 23346, 23351, 23360, 23573, 23580, 23386, 23397, 23411, 23377, 23379, 23394, 39541, 39543, 39544, 39546, 39551, 39549, 39552, 39553, 39557, 39560, 39562, 39568, 39570, 39571, 39574, 39576, 39579, 39580, 39581, 39583, 39584, 39586, 39587, 39589, 39591, 32415, 32417, 32419, 32421, 32424, 32425, 37838, 37839, 37840, 37841, 37842, 37843, 37844, 37845, 37847, 37848, 37849, 37850, 37851, 37852, 37853, 37854, 37855, 37856, 37857, 37858, 37859, 37860, 37861, 37862, 37863, 37864, 37865, 37866, 37867, 37868, 37869, 37870, 37871, 37872, 37873, 37874, 37875, 37876, 37877, 37878, 37879, 37880, 37881, 37882, 37883, 37884, 37885, 37886, 37887, 37888, 37889, 37890, 37891, 37892, 37893, 37894, 37895, 37896, 37897, 37898, 37899, 37900, 37901, 37902, 37903, 37904, 37905, 37906, 37907, 37908, 37909, 37910, 37911, 37912, 37913, 37914, 37915, 37916, 37917, 37918, 37919, 37920, 37921, 37922, 37923, 37924, 37925, 37926, 37927, 37928, 37929, 37930, 37931, 37932, 37933, 37934, 32429, 32432, 32446, 32448, 32449, 32450, 32457, 32459, 32460, 32464, 32468, 32471, 32475, 32480, 32481, 32488, 32491, 32494, 32495, 32497, 32498, 32525, 32502, 32506, 32507, 32510, 32513, 32514, 32515, 32519, 32520, 32523, 32524, 32527, 32529, 32530, 32535, 32537, 32540, 32539, 32543, 32545, 32546, 32547, 32548, 32549, 32550, 32551, 32554, 32555, 32556, 32557, 32559, 32560, 32561, 32562, 32563, 32565, 24186, 30079, 24027, 30014, 37013, 29582, 29585, 29614, 29602, 29599, 29647, 29634, 29649, 29623, 29619, 29632, 29641, 29640, 29669, 29657, 39036, 29706, 29673, 29671, 29662, 29626, 29682, 29711, 29738, 29787, 29734, 29733, 29736, 29744, 29742, 29740, 37935, 37936, 37937, 37938, 37939, 37940, 37941, 37942, 37943, 37944, 37945, 37946, 37947, 37948, 37949, 37951, 37952, 37953, 37954, 37955, 37956, 37957, 37958, 37959, 37960, 37961, 37962, 37963, 37964, 37965, 37966, 37967, 37968, 37969, 37970, 37971, 37972, 37973, 37974, 37975, 37976, 37977, 37978, 37979, 37980, 37981, 37982, 37983, 37984, 37985, 37986, 37987, 37988, 37989, 37990, 37991, 37992, 37993, 37994, 37996, 37997, 37998, 37999, 38e3, 38001, 38002, 38003, 38004, 38005, 38006, 38007, 38008, 38009, 38010, 38011, 38012, 38013, 38014, 38015, 38016, 38017, 38018, 38019, 38020, 38033, 38038, 38040, 38087, 38095, 38099, 38100, 38106, 38118, 38139, 38172, 38176, 29723, 29722, 29761, 29788, 29783, 29781, 29785, 29815, 29805, 29822, 29852, 29838, 29824, 29825, 29831, 29835, 29854, 29864, 29865, 29840, 29863, 29906, 29882, 38890, 38891, 38892, 26444, 26451, 26462, 26440, 26473, 26533, 26503, 26474, 26483, 26520, 26535, 26485, 26536, 26526, 26541, 26507, 26487, 26492, 26608, 26633, 26584, 26634, 26601, 26544, 26636, 26585, 26549, 26586, 26547, 26589, 26624, 26563, 26552, 26594, 26638, 26561, 26621, 26674, 26675, 26720, 26721, 26702, 26722, 26692, 26724, 26755, 26653, 26709, 26726, 26689, 26727, 26688, 26686, 26698, 26697, 26665, 26805, 26767, 26740, 26743, 26771, 26731, 26818, 26990, 26876, 26911, 26912, 26873, 38183, 38195, 38205, 38211, 38216, 38219, 38229, 38234, 38240, 38254, 38260, 38261, 38263, 38264, 38265, 38266, 38267, 38268, 38269, 38270, 38272, 38273, 38274, 38275, 38276, 38277, 38278, 38279, 38280, 38281, 38282, 38283, 38284, 38285, 38286, 38287, 38288, 38289, 38290, 38291, 38292, 38293, 38294, 38295, 38296, 38297, 38298, 38299, 38300, 38301, 38302, 38303, 38304, 38305, 38306, 38307, 38308, 38309, 38310, 38311, 38312, 38313, 38314, 38315, 38316, 38317, 38318, 38319, 38320, 38321, 38322, 38323, 38324, 38325, 38326, 38327, 38328, 38329, 38330, 38331, 38332, 38333, 38334, 38335, 38336, 38337, 38338, 38339, 38340, 38341, 38342, 38343, 38344, 38345, 38346, 38347, 26916, 26864, 26891, 26881, 26967, 26851, 26896, 26993, 26937, 26976, 26946, 26973, 27012, 26987, 27008, 27032, 27e3, 26932, 27084, 27015, 27016, 27086, 27017, 26982, 26979, 27001, 27035, 27047, 27067, 27051, 27053, 27092, 27057, 27073, 27082, 27103, 27029, 27104, 27021, 27135, 27183, 27117, 27159, 27160, 27237, 27122, 27204, 27198, 27296, 27216, 27227, 27189, 27278, 27257, 27197, 27176, 27224, 27260, 27281, 27280, 27305, 27287, 27307, 29495, 29522, 27521, 27522, 27527, 27524, 27538, 27539, 27533, 27546, 27547, 27553, 27562, 36715, 36717, 36721, 36722, 36723, 36725, 36726, 36728, 36727, 36729, 36730, 36732, 36734, 36737, 36738, 36740, 36743, 36747, 38348, 38349, 38350, 38351, 38352, 38353, 38354, 38355, 38356, 38357, 38358, 38359, 38360, 38361, 38362, 38363, 38364, 38365, 38366, 38367, 38368, 38369, 38370, 38371, 38372, 38373, 38374, 38375, 38380, 38399, 38407, 38419, 38424, 38427, 38430, 38432, 38435, 38436, 38437, 38438, 38439, 38440, 38441, 38443, 38444, 38445, 38447, 38448, 38455, 38456, 38457, 38458, 38462, 38465, 38467, 38474, 38478, 38479, 38481, 38482, 38483, 38486, 38487, 38488, 38489, 38490, 38492, 38493, 38494, 38496, 38499, 38501, 38502, 38507, 38509, 38510, 38511, 38512, 38513, 38515, 38520, 38521, 38522, 38523, 38524, 38525, 38526, 38527, 38528, 38529, 38530, 38531, 38532, 38535, 38537, 38538, 36749, 36750, 36751, 36760, 36762, 36558, 25099, 25111, 25115, 25119, 25122, 25121, 25125, 25124, 25132, 33255, 29935, 29940, 29951, 29967, 29969, 29971, 25908, 26094, 26095, 26096, 26122, 26137, 26482, 26115, 26133, 26112, 28805, 26359, 26141, 26164, 26161, 26166, 26165, 32774, 26207, 26196, 26177, 26191, 26198, 26209, 26199, 26231, 26244, 26252, 26279, 26269, 26302, 26331, 26332, 26342, 26345, 36146, 36147, 36150, 36155, 36157, 36160, 36165, 36166, 36168, 36169, 36167, 36173, 36181, 36185, 35271, 35274, 35275, 35276, 35278, 35279, 35280, 35281, 29294, 29343, 29277, 29286, 29295, 29310, 29311, 29316, 29323, 29325, 29327, 29330, 25352, 25394, 25520, 38540, 38542, 38545, 38546, 38547, 38549, 38550, 38554, 38555, 38557, 38558, 38559, 38560, 38561, 38562, 38563, 38564, 38565, 38566, 38568, 38569, 38570, 38571, 38572, 38573, 38574, 38575, 38577, 38578, 38580, 38581, 38583, 38584, 38586, 38587, 38591, 38594, 38595, 38600, 38602, 38603, 38608, 38609, 38611, 38612, 38614, 38615, 38616, 38617, 38618, 38619, 38620, 38621, 38622, 38623, 38625, 38626, 38627, 38628, 38629, 38630, 38631, 38635, 38636, 38637, 38638, 38640, 38641, 38642, 38644, 38645, 38648, 38650, 38651, 38652, 38653, 38655, 38658, 38659, 38661, 38666, 38667, 38668, 38672, 38673, 38674, 38676, 38677, 38679, 38680, 38681, 38682, 38683, 38685, 38687, 38688, 25663, 25816, 32772, 27626, 27635, 27645, 27637, 27641, 27653, 27655, 27654, 27661, 27669, 27672, 27673, 27674, 27681, 27689, 27684, 27690, 27698, 25909, 25941, 25963, 29261, 29266, 29270, 29232, 34402, 21014, 32927, 32924, 32915, 32956, 26378, 32957, 32945, 32939, 32941, 32948, 32951, 32999, 33e3, 33001, 33002, 32987, 32962, 32964, 32985, 32973, 32983, 26384, 32989, 33003, 33009, 33012, 33005, 33037, 33038, 33010, 33020, 26389, 33042, 35930, 33078, 33054, 33068, 33048, 33074, 33096, 33100, 33107, 33140, 33113, 33114, 33137, 33120, 33129, 33148, 33149, 33133, 33127, 22605, 23221, 33160, 33154, 33169, 28373, 33187, 33194, 33228, 26406, 33226, 33211, 38689, 38690, 38691, 38692, 38693, 38694, 38695, 38696, 38697, 38699, 38700, 38702, 38703, 38705, 38707, 38708, 38709, 38710, 38711, 38714, 38715, 38716, 38717, 38719, 38720, 38721, 38722, 38723, 38724, 38725, 38726, 38727, 38728, 38729, 38730, 38731, 38732, 38733, 38734, 38735, 38736, 38737, 38740, 38741, 38743, 38744, 38746, 38748, 38749, 38751, 38755, 38756, 38758, 38759, 38760, 38762, 38763, 38764, 38765, 38766, 38767, 38768, 38769, 38770, 38773, 38775, 38776, 38777, 38778, 38779, 38781, 38782, 38783, 38784, 38785, 38786, 38787, 38788, 38790, 38791, 38792, 38793, 38794, 38796, 38798, 38799, 38800, 38803, 38805, 38806, 38807, 38809, 38810, 38811, 38812, 38813, 33217, 33190, 27428, 27447, 27449, 27459, 27462, 27481, 39121, 39122, 39123, 39125, 39129, 39130, 27571, 24384, 27586, 35315, 26e3, 40785, 26003, 26044, 26054, 26052, 26051, 26060, 26062, 26066, 26070, 28800, 28828, 28822, 28829, 28859, 28864, 28855, 28843, 28849, 28904, 28874, 28944, 28947, 28950, 28975, 28977, 29043, 29020, 29032, 28997, 29042, 29002, 29048, 29050, 29080, 29107, 29109, 29096, 29088, 29152, 29140, 29159, 29177, 29213, 29224, 28780, 28952, 29030, 29113, 25150, 25149, 25155, 25160, 25161, 31035, 31040, 31046, 31049, 31067, 31068, 31059, 31066, 31074, 31063, 31072, 31087, 31079, 31098, 31109, 31114, 31130, 31143, 31155, 24529, 24528, 38814, 38815, 38817, 38818, 38820, 38821, 38822, 38823, 38824, 38825, 38826, 38828, 38830, 38832, 38833, 38835, 38837, 38838, 38839, 38840, 38841, 38842, 38843, 38844, 38845, 38846, 38847, 38848, 38849, 38850, 38851, 38852, 38853, 38854, 38855, 38856, 38857, 38858, 38859, 38860, 38861, 38862, 38863, 38864, 38865, 38866, 38867, 38868, 38869, 38870, 38871, 38872, 38873, 38874, 38875, 38876, 38877, 38878, 38879, 38880, 38881, 38882, 38883, 38884, 38885, 38888, 38894, 38895, 38896, 38897, 38898, 38900, 38903, 38904, 38905, 38906, 38907, 38908, 38909, 38910, 38911, 38912, 38913, 38914, 38915, 38916, 38917, 38918, 38919, 38920, 38921, 38922, 38923, 38924, 38925, 38926, 24636, 24669, 24666, 24679, 24641, 24665, 24675, 24747, 24838, 24845, 24925, 25001, 24989, 25035, 25041, 25094, 32896, 32895, 27795, 27894, 28156, 30710, 30712, 30720, 30729, 30743, 30744, 30737, 26027, 30765, 30748, 30749, 30777, 30778, 30779, 30751, 30780, 30757, 30764, 30755, 30761, 30798, 30829, 30806, 30807, 30758, 30800, 30791, 30796, 30826, 30875, 30867, 30874, 30855, 30876, 30881, 30883, 30898, 30905, 30885, 30932, 30937, 30921, 30956, 30962, 30981, 30964, 30995, 31012, 31006, 31028, 40859, 40697, 40699, 40700, 30449, 30468, 30477, 30457, 30471, 30472, 30490, 30498, 30489, 30509, 30502, 30517, 30520, 30544, 30545, 30535, 30531, 30554, 30568, 38927, 38928, 38929, 38930, 38931, 38932, 38933, 38934, 38935, 38936, 38937, 38938, 38939, 38940, 38941, 38942, 38943, 38944, 38945, 38946, 38947, 38948, 38949, 38950, 38951, 38952, 38953, 38954, 38955, 38956, 38957, 38958, 38959, 38960, 38961, 38962, 38963, 38964, 38965, 38966, 38967, 38968, 38969, 38970, 38971, 38972, 38973, 38974, 38975, 38976, 38977, 38978, 38979, 38980, 38981, 38982, 38983, 38984, 38985, 38986, 38987, 38988, 38989, 38990, 38991, 38992, 38993, 38994, 38995, 38996, 38997, 38998, 38999, 39e3, 39001, 39002, 39003, 39004, 39005, 39006, 39007, 39008, 39009, 39010, 39011, 39012, 39013, 39014, 39015, 39016, 39017, 39018, 39019, 39020, 39021, 39022, 30562, 30565, 30591, 30605, 30589, 30592, 30604, 30609, 30623, 30624, 30640, 30645, 30653, 30010, 30016, 30030, 30027, 30024, 30043, 30066, 30073, 30083, 32600, 32609, 32607, 35400, 32616, 32628, 32625, 32633, 32641, 32638, 30413, 30437, 34866, 38021, 38022, 38023, 38027, 38026, 38028, 38029, 38031, 38032, 38036, 38039, 38037, 38042, 38043, 38044, 38051, 38052, 38059, 38058, 38061, 38060, 38063, 38064, 38066, 38068, 38070, 38071, 38072, 38073, 38074, 38076, 38077, 38079, 38084, 38088, 38089, 38090, 38091, 38092, 38093, 38094, 38096, 38097, 38098, 38101, 38102, 38103, 38105, 38104, 38107, 38110, 38111, 38112, 38114, 38116, 38117, 38119, 38120, 38122, 39023, 39024, 39025, 39026, 39027, 39028, 39051, 39054, 39058, 39061, 39065, 39075, 39080, 39081, 39082, 39083, 39084, 39085, 39086, 39087, 39088, 39089, 39090, 39091, 39092, 39093, 39094, 39095, 39096, 39097, 39098, 39099, 39100, 39101, 39102, 39103, 39104, 39105, 39106, 39107, 39108, 39109, 39110, 39111, 39112, 39113, 39114, 39115, 39116, 39117, 39119, 39120, 39124, 39126, 39127, 39131, 39132, 39133, 39136, 39137, 39138, 39139, 39140, 39141, 39142, 39145, 39146, 39147, 39148, 39149, 39150, 39151, 39152, 39153, 39154, 39155, 39156, 39157, 39158, 39159, 39160, 39161, 39162, 39163, 39164, 39165, 39166, 39167, 39168, 39169, 39170, 39171, 39172, 39173, 39174, 39175, 38121, 38123, 38126, 38127, 38131, 38132, 38133, 38135, 38137, 38140, 38141, 38143, 38147, 38146, 38150, 38151, 38153, 38154, 38157, 38158, 38159, 38162, 38163, 38164, 38165, 38166, 38168, 38171, 38173, 38174, 38175, 38178, 38186, 38187, 38185, 38188, 38193, 38194, 38196, 38198, 38199, 38200, 38204, 38206, 38207, 38210, 38197, 38212, 38213, 38214, 38217, 38220, 38222, 38223, 38226, 38227, 38228, 38230, 38231, 38232, 38233, 38235, 38238, 38239, 38237, 38241, 38242, 38244, 38245, 38246, 38247, 38248, 38249, 38250, 38251, 38252, 38255, 38257, 38258, 38259, 38202, 30695, 30700, 38601, 31189, 31213, 31203, 31211, 31238, 23879, 31235, 31234, 31262, 31252, 39176, 39177, 39178, 39179, 39180, 39182, 39183, 39185, 39186, 39187, 39188, 39189, 39190, 39191, 39192, 39193, 39194, 39195, 39196, 39197, 39198, 39199, 39200, 39201, 39202, 39203, 39204, 39205, 39206, 39207, 39208, 39209, 39210, 39211, 39212, 39213, 39215, 39216, 39217, 39218, 39219, 39220, 39221, 39222, 39223, 39224, 39225, 39226, 39227, 39228, 39229, 39230, 39231, 39232, 39233, 39234, 39235, 39236, 39237, 39238, 39239, 39240, 39241, 39242, 39243, 39244, 39245, 39246, 39247, 39248, 39249, 39250, 39251, 39254, 39255, 39256, 39257, 39258, 39259, 39260, 39261, 39262, 39263, 39264, 39265, 39266, 39268, 39270, 39283, 39288, 39289, 39291, 39294, 39298, 39299, 39305, 31289, 31287, 31313, 40655, 39333, 31344, 30344, 30350, 30355, 30361, 30372, 29918, 29920, 29996, 40480, 40482, 40488, 40489, 40490, 40491, 40492, 40498, 40497, 40502, 40504, 40503, 40505, 40506, 40510, 40513, 40514, 40516, 40518, 40519, 40520, 40521, 40523, 40524, 40526, 40529, 40533, 40535, 40538, 40539, 40540, 40542, 40547, 40550, 40551, 40552, 40553, 40554, 40555, 40556, 40561, 40557, 40563, 30098, 30100, 30102, 30112, 30109, 30124, 30115, 30131, 30132, 30136, 30148, 30129, 30128, 30147, 30146, 30166, 30157, 30179, 30184, 30182, 30180, 30187, 30183, 30211, 30193, 30204, 30207, 30224, 30208, 30213, 30220, 30231, 30218, 30245, 30232, 30229, 30233, 39308, 39310, 39322, 39323, 39324, 39325, 39326, 39327, 39328, 39329, 39330, 39331, 39332, 39334, 39335, 39337, 39338, 39339, 39340, 39341, 39342, 39343, 39344, 39345, 39346, 39347, 39348, 39349, 39350, 39351, 39352, 39353, 39354, 39355, 39356, 39357, 39358, 39359, 39360, 39361, 39362, 39363, 39364, 39365, 39366, 39367, 39368, 39369, 39370, 39371, 39372, 39373, 39374, 39375, 39376, 39377, 39378, 39379, 39380, 39381, 39382, 39383, 39384, 39385, 39386, 39387, 39388, 39389, 39390, 39391, 39392, 39393, 39394, 39395, 39396, 39397, 39398, 39399, 39400, 39401, 39402, 39403, 39404, 39405, 39406, 39407, 39408, 39409, 39410, 39411, 39412, 39413, 39414, 39415, 39416, 39417, 30235, 30268, 30242, 30240, 30272, 30253, 30256, 30271, 30261, 30275, 30270, 30259, 30285, 30302, 30292, 30300, 30294, 30315, 30319, 32714, 31462, 31352, 31353, 31360, 31366, 31368, 31381, 31398, 31392, 31404, 31400, 31405, 31411, 34916, 34921, 34930, 34941, 34943, 34946, 34978, 35014, 34999, 35004, 35017, 35042, 35022, 35043, 35045, 35057, 35098, 35068, 35048, 35070, 35056, 35105, 35097, 35091, 35099, 35082, 35124, 35115, 35126, 35137, 35174, 35195, 30091, 32997, 30386, 30388, 30684, 32786, 32788, 32790, 32796, 32800, 32802, 32805, 32806, 32807, 32809, 32808, 32817, 32779, 32821, 32835, 32838, 32845, 32850, 32873, 32881, 35203, 39032, 39040, 39043, 39418, 39419, 39420, 39421, 39422, 39423, 39424, 39425, 39426, 39427, 39428, 39429, 39430, 39431, 39432, 39433, 39434, 39435, 39436, 39437, 39438, 39439, 39440, 39441, 39442, 39443, 39444, 39445, 39446, 39447, 39448, 39449, 39450, 39451, 39452, 39453, 39454, 39455, 39456, 39457, 39458, 39459, 39460, 39461, 39462, 39463, 39464, 39465, 39466, 39467, 39468, 39469, 39470, 39471, 39472, 39473, 39474, 39475, 39476, 39477, 39478, 39479, 39480, 39481, 39482, 39483, 39484, 39485, 39486, 39487, 39488, 39489, 39490, 39491, 39492, 39493, 39494, 39495, 39496, 39497, 39498, 39499, 39500, 39501, 39502, 39503, 39504, 39505, 39506, 39507, 39508, 39509, 39510, 39511, 39512, 39513, 39049, 39052, 39053, 39055, 39060, 39066, 39067, 39070, 39071, 39073, 39074, 39077, 39078, 34381, 34388, 34412, 34414, 34431, 34426, 34428, 34427, 34472, 34445, 34443, 34476, 34461, 34471, 34467, 34474, 34451, 34473, 34486, 34500, 34485, 34510, 34480, 34490, 34481, 34479, 34505, 34511, 34484, 34537, 34545, 34546, 34541, 34547, 34512, 34579, 34526, 34548, 34527, 34520, 34513, 34563, 34567, 34552, 34568, 34570, 34573, 34569, 34595, 34619, 34590, 34597, 34606, 34586, 34622, 34632, 34612, 34609, 34601, 34615, 34623, 34690, 34594, 34685, 34686, 34683, 34656, 34672, 34636, 34670, 34699, 34643, 34659, 34684, 34660, 34649, 34661, 34707, 34735, 34728, 34770, 39514, 39515, 39516, 39517, 39518, 39519, 39520, 39521, 39522, 39523, 39524, 39525, 39526, 39527, 39528, 39529, 39530, 39531, 39538, 39555, 39561, 39565, 39566, 39572, 39573, 39577, 39590, 39593, 39594, 39595, 39596, 39597, 39598, 39599, 39602, 39603, 39604, 39605, 39609, 39611, 39613, 39614, 39615, 39619, 39620, 39622, 39623, 39624, 39625, 39626, 39629, 39630, 39631, 39632, 39634, 39636, 39637, 39638, 39639, 39641, 39642, 39643, 39644, 39645, 39646, 39648, 39650, 39651, 39652, 39653, 39655, 39656, 39657, 39658, 39660, 39662, 39664, 39665, 39666, 39667, 39668, 39669, 39670, 39671, 39672, 39674, 39676, 39677, 39678, 39679, 39680, 39681, 39682, 39684, 39685, 39686, 34758, 34696, 34693, 34733, 34711, 34691, 34731, 34789, 34732, 34741, 34739, 34763, 34771, 34749, 34769, 34752, 34762, 34779, 34794, 34784, 34798, 34838, 34835, 34814, 34826, 34843, 34849, 34873, 34876, 32566, 32578, 32580, 32581, 33296, 31482, 31485, 31496, 31491, 31492, 31509, 31498, 31531, 31503, 31559, 31544, 31530, 31513, 31534, 31537, 31520, 31525, 31524, 31539, 31550, 31518, 31576, 31578, 31557, 31605, 31564, 31581, 31584, 31598, 31611, 31586, 31602, 31601, 31632, 31654, 31655, 31672, 31660, 31645, 31656, 31621, 31658, 31644, 31650, 31659, 31668, 31697, 31681, 31692, 31709, 31706, 31717, 31718, 31722, 31756, 31742, 31740, 31759, 31766, 31755, 39687, 39689, 39690, 39691, 39692, 39693, 39694, 39696, 39697, 39698, 39700, 39701, 39702, 39703, 39704, 39705, 39706, 39707, 39708, 39709, 39710, 39712, 39713, 39714, 39716, 39717, 39718, 39719, 39720, 39721, 39722, 39723, 39724, 39725, 39726, 39728, 39729, 39731, 39732, 39733, 39734, 39735, 39736, 39737, 39738, 39741, 39742, 39743, 39744, 39750, 39754, 39755, 39756, 39758, 39760, 39762, 39763, 39765, 39766, 39767, 39768, 39769, 39770, 39771, 39772, 39773, 39774, 39775, 39776, 39777, 39778, 39779, 39780, 39781, 39782, 39783, 39784, 39785, 39786, 39787, 39788, 39789, 39790, 39791, 39792, 39793, 39794, 39795, 39796, 39797, 39798, 39799, 39800, 39801, 39802, 39803, 31775, 31786, 31782, 31800, 31809, 31808, 33278, 33281, 33282, 33284, 33260, 34884, 33313, 33314, 33315, 33325, 33327, 33320, 33323, 33336, 33339, 33331, 33332, 33342, 33348, 33353, 33355, 33359, 33370, 33375, 33384, 34942, 34949, 34952, 35032, 35039, 35166, 32669, 32671, 32679, 32687, 32688, 32690, 31868, 25929, 31889, 31901, 31900, 31902, 31906, 31922, 31932, 31933, 31937, 31943, 31948, 31949, 31944, 31941, 31959, 31976, 33390, 26280, 32703, 32718, 32725, 32741, 32737, 32742, 32745, 32750, 32755, 31992, 32119, 32166, 32174, 32327, 32411, 40632, 40628, 36211, 36228, 36244, 36241, 36273, 36199, 36205, 35911, 35913, 37194, 37200, 37198, 37199, 37220, 39804, 39805, 39806, 39807, 39808, 39809, 39810, 39811, 39812, 39813, 39814, 39815, 39816, 39817, 39818, 39819, 39820, 39821, 39822, 39823, 39824, 39825, 39826, 39827, 39828, 39829, 39830, 39831, 39832, 39833, 39834, 39835, 39836, 39837, 39838, 39839, 39840, 39841, 39842, 39843, 39844, 39845, 39846, 39847, 39848, 39849, 39850, 39851, 39852, 39853, 39854, 39855, 39856, 39857, 39858, 39859, 39860, 39861, 39862, 39863, 39864, 39865, 39866, 39867, 39868, 39869, 39870, 39871, 39872, 39873, 39874, 39875, 39876, 39877, 39878, 39879, 39880, 39881, 39882, 39883, 39884, 39885, 39886, 39887, 39888, 39889, 39890, 39891, 39892, 39893, 39894, 39895, 39896, 39897, 39898, 39899, 37218, 37217, 37232, 37225, 37231, 37245, 37246, 37234, 37236, 37241, 37260, 37253, 37264, 37261, 37265, 37282, 37283, 37290, 37293, 37294, 37295, 37301, 37300, 37306, 35925, 40574, 36280, 36331, 36357, 36441, 36457, 36277, 36287, 36284, 36282, 36292, 36310, 36311, 36314, 36318, 36302, 36303, 36315, 36294, 36332, 36343, 36344, 36323, 36345, 36347, 36324, 36361, 36349, 36372, 36381, 36383, 36396, 36398, 36387, 36399, 36410, 36416, 36409, 36405, 36413, 36401, 36425, 36417, 36418, 36433, 36434, 36426, 36464, 36470, 36476, 36463, 36468, 36485, 36495, 36500, 36496, 36508, 36510, 35960, 35970, 35978, 35973, 35992, 35988, 26011, 35286, 35294, 35290, 35292, 39900, 39901, 39902, 39903, 39904, 39905, 39906, 39907, 39908, 39909, 39910, 39911, 39912, 39913, 39914, 39915, 39916, 39917, 39918, 39919, 39920, 39921, 39922, 39923, 39924, 39925, 39926, 39927, 39928, 39929, 39930, 39931, 39932, 39933, 39934, 39935, 39936, 39937, 39938, 39939, 39940, 39941, 39942, 39943, 39944, 39945, 39946, 39947, 39948, 39949, 39950, 39951, 39952, 39953, 39954, 39955, 39956, 39957, 39958, 39959, 39960, 39961, 39962, 39963, 39964, 39965, 39966, 39967, 39968, 39969, 39970, 39971, 39972, 39973, 39974, 39975, 39976, 39977, 39978, 39979, 39980, 39981, 39982, 39983, 39984, 39985, 39986, 39987, 39988, 39989, 39990, 39991, 39992, 39993, 39994, 39995, 35301, 35307, 35311, 35390, 35622, 38739, 38633, 38643, 38639, 38662, 38657, 38664, 38671, 38670, 38698, 38701, 38704, 38718, 40832, 40835, 40837, 40838, 40839, 40840, 40841, 40842, 40844, 40702, 40715, 40717, 38585, 38588, 38589, 38606, 38610, 30655, 38624, 37518, 37550, 37576, 37694, 37738, 37834, 37775, 37950, 37995, 40063, 40066, 40069, 40070, 40071, 40072, 31267, 40075, 40078, 40080, 40081, 40082, 40084, 40085, 40090, 40091, 40094, 40095, 40096, 40097, 40098, 40099, 40101, 40102, 40103, 40104, 40105, 40107, 40109, 40110, 40112, 40113, 40114, 40115, 40116, 40117, 40118, 40119, 40122, 40123, 40124, 40125, 40132, 40133, 40134, 40135, 40138, 40139, 39996, 39997, 39998, 39999, 4e4, 40001, 40002, 40003, 40004, 40005, 40006, 40007, 40008, 40009, 40010, 40011, 40012, 40013, 40014, 40015, 40016, 40017, 40018, 40019, 40020, 40021, 40022, 40023, 40024, 40025, 40026, 40027, 40028, 40029, 40030, 40031, 40032, 40033, 40034, 40035, 40036, 40037, 40038, 40039, 40040, 40041, 40042, 40043, 40044, 40045, 40046, 40047, 40048, 40049, 40050, 40051, 40052, 40053, 40054, 40055, 40056, 40057, 40058, 40059, 40061, 40062, 40064, 40067, 40068, 40073, 40074, 40076, 40079, 40083, 40086, 40087, 40088, 40089, 40093, 40106, 40108, 40111, 40121, 40126, 40127, 40128, 40129, 40130, 40136, 40137, 40145, 40146, 40154, 40155, 40160, 40161, 40140, 40141, 40142, 40143, 40144, 40147, 40148, 40149, 40151, 40152, 40153, 40156, 40157, 40159, 40162, 38780, 38789, 38801, 38802, 38804, 38831, 38827, 38819, 38834, 38836, 39601, 39600, 39607, 40536, 39606, 39610, 39612, 39617, 39616, 39621, 39618, 39627, 39628, 39633, 39749, 39747, 39751, 39753, 39752, 39757, 39761, 39144, 39181, 39214, 39253, 39252, 39647, 39649, 39654, 39663, 39659, 39675, 39661, 39673, 39688, 39695, 39699, 39711, 39715, 40637, 40638, 32315, 40578, 40583, 40584, 40587, 40594, 37846, 40605, 40607, 40667, 40668, 40669, 40672, 40671, 40674, 40681, 40679, 40677, 40682, 40687, 40738, 40748, 40751, 40761, 40759, 40765, 40766, 40772, 40163, 40164, 40165, 40166, 40167, 40168, 40169, 40170, 40171, 40172, 40173, 40174, 40175, 40176, 40177, 40178, 40179, 40180, 40181, 40182, 40183, 40184, 40185, 40186, 40187, 40188, 40189, 40190, 40191, 40192, 40193, 40194, 40195, 40196, 40197, 40198, 40199, 40200, 40201, 40202, 40203, 40204, 40205, 40206, 40207, 40208, 40209, 40210, 40211, 40212, 40213, 40214, 40215, 40216, 40217, 40218, 40219, 40220, 40221, 40222, 40223, 40224, 40225, 40226, 40227, 40228, 40229, 40230, 40231, 40232, 40233, 40234, 40235, 40236, 40237, 40238, 40239, 40240, 40241, 40242, 40243, 40244, 40245, 40246, 40247, 40248, 40249, 40250, 40251, 40252, 40253, 40254, 40255, 40256, 40257, 40258, 57908, 57909, 57910, 57911, 57912, 57913, 57914, 57915, 57916, 57917, 57918, 57919, 57920, 57921, 57922, 57923, 57924, 57925, 57926, 57927, 57928, 57929, 57930, 57931, 57932, 57933, 57934, 57935, 57936, 57937, 57938, 57939, 57940, 57941, 57942, 57943, 57944, 57945, 57946, 57947, 57948, 57949, 57950, 57951, 57952, 57953, 57954, 57955, 57956, 57957, 57958, 57959, 57960, 57961, 57962, 57963, 57964, 57965, 57966, 57967, 57968, 57969, 57970, 57971, 57972, 57973, 57974, 57975, 57976, 57977, 57978, 57979, 57980, 57981, 57982, 57983, 57984, 57985, 57986, 57987, 57988, 57989, 57990, 57991, 57992, 57993, 57994, 57995, 57996, 57997, 57998, 57999, 58e3, 58001, 40259, 40260, 40261, 40262, 40263, 40264, 40265, 40266, 40267, 40268, 40269, 40270, 40271, 40272, 40273, 40274, 40275, 40276, 40277, 40278, 40279, 40280, 40281, 40282, 40283, 40284, 40285, 40286, 40287, 40288, 40289, 40290, 40291, 40292, 40293, 40294, 40295, 40296, 40297, 40298, 40299, 40300, 40301, 40302, 40303, 40304, 40305, 40306, 40307, 40308, 40309, 40310, 40311, 40312, 40313, 40314, 40315, 40316, 40317, 40318, 40319, 40320, 40321, 40322, 40323, 40324, 40325, 40326, 40327, 40328, 40329, 40330, 40331, 40332, 40333, 40334, 40335, 40336, 40337, 40338, 40339, 40340, 40341, 40342, 40343, 40344, 40345, 40346, 40347, 40348, 40349, 40350, 40351, 40352, 40353, 40354, 58002, 58003, 58004, 58005, 58006, 58007, 58008, 58009, 58010, 58011, 58012, 58013, 58014, 58015, 58016, 58017, 58018, 58019, 58020, 58021, 58022, 58023, 58024, 58025, 58026, 58027, 58028, 58029, 58030, 58031, 58032, 58033, 58034, 58035, 58036, 58037, 58038, 58039, 58040, 58041, 58042, 58043, 58044, 58045, 58046, 58047, 58048, 58049, 58050, 58051, 58052, 58053, 58054, 58055, 58056, 58057, 58058, 58059, 58060, 58061, 58062, 58063, 58064, 58065, 58066, 58067, 58068, 58069, 58070, 58071, 58072, 58073, 58074, 58075, 58076, 58077, 58078, 58079, 58080, 58081, 58082, 58083, 58084, 58085, 58086, 58087, 58088, 58089, 58090, 58091, 58092, 58093, 58094, 58095, 40355, 40356, 40357, 40358, 40359, 40360, 40361, 40362, 40363, 40364, 40365, 40366, 40367, 40368, 40369, 40370, 40371, 40372, 40373, 40374, 40375, 40376, 40377, 40378, 40379, 40380, 40381, 40382, 40383, 40384, 40385, 40386, 40387, 40388, 40389, 40390, 40391, 40392, 40393, 40394, 40395, 40396, 40397, 40398, 40399, 40400, 40401, 40402, 40403, 40404, 40405, 40406, 40407, 40408, 40409, 40410, 40411, 40412, 40413, 40414, 40415, 40416, 40417, 40418, 40419, 40420, 40421, 40422, 40423, 40424, 40425, 40426, 40427, 40428, 40429, 40430, 40431, 40432, 40433, 40434, 40435, 40436, 40437, 40438, 40439, 40440, 40441, 40442, 40443, 40444, 40445, 40446, 40447, 40448, 40449, 40450, 58096, 58097, 58098, 58099, 58100, 58101, 58102, 58103, 58104, 58105, 58106, 58107, 58108, 58109, 58110, 58111, 58112, 58113, 58114, 58115, 58116, 58117, 58118, 58119, 58120, 58121, 58122, 58123, 58124, 58125, 58126, 58127, 58128, 58129, 58130, 58131, 58132, 58133, 58134, 58135, 58136, 58137, 58138, 58139, 58140, 58141, 58142, 58143, 58144, 58145, 58146, 58147, 58148, 58149, 58150, 58151, 58152, 58153, 58154, 58155, 58156, 58157, 58158, 58159, 58160, 58161, 58162, 58163, 58164, 58165, 58166, 58167, 58168, 58169, 58170, 58171, 58172, 58173, 58174, 58175, 58176, 58177, 58178, 58179, 58180, 58181, 58182, 58183, 58184, 58185, 58186, 58187, 58188, 58189, 40451, 40452, 40453, 40454, 40455, 40456, 40457, 40458, 40459, 40460, 40461, 40462, 40463, 40464, 40465, 40466, 40467, 40468, 40469, 40470, 40471, 40472, 40473, 40474, 40475, 40476, 40477, 40478, 40484, 40487, 40494, 40496, 40500, 40507, 40508, 40512, 40525, 40528, 40530, 40531, 40532, 40534, 40537, 40541, 40543, 40544, 40545, 40546, 40549, 40558, 40559, 40562, 40564, 40565, 40566, 40567, 40568, 40569, 40570, 40571, 40572, 40573, 40576, 40577, 40579, 40580, 40581, 40582, 40585, 40586, 40588, 40589, 40590, 40591, 40592, 40593, 40596, 40597, 40598, 40599, 40600, 40601, 40602, 40603, 40604, 40606, 40608, 40609, 40610, 40611, 40612, 40613, 40615, 40616, 40617, 40618, 58190, 58191, 58192, 58193, 58194, 58195, 58196, 58197, 58198, 58199, 58200, 58201, 58202, 58203, 58204, 58205, 58206, 58207, 58208, 58209, 58210, 58211, 58212, 58213, 58214, 58215, 58216, 58217, 58218, 58219, 58220, 58221, 58222, 58223, 58224, 58225, 58226, 58227, 58228, 58229, 58230, 58231, 58232, 58233, 58234, 58235, 58236, 58237, 58238, 58239, 58240, 58241, 58242, 58243, 58244, 58245, 58246, 58247, 58248, 58249, 58250, 58251, 58252, 58253, 58254, 58255, 58256, 58257, 58258, 58259, 58260, 58261, 58262, 58263, 58264, 58265, 58266, 58267, 58268, 58269, 58270, 58271, 58272, 58273, 58274, 58275, 58276, 58277, 58278, 58279, 58280, 58281, 58282, 58283, 40619, 40620, 40621, 40622, 40623, 40624, 40625, 40626, 40627, 40629, 40630, 40631, 40633, 40634, 40636, 40639, 40640, 40641, 40642, 40643, 40645, 40646, 40647, 40648, 40650, 40651, 40652, 40656, 40658, 40659, 40661, 40662, 40663, 40665, 40666, 40670, 40673, 40675, 40676, 40678, 40680, 40683, 40684, 40685, 40686, 40688, 40689, 40690, 40691, 40692, 40693, 40694, 40695, 40696, 40698, 40701, 40703, 40704, 40705, 40706, 40707, 40708, 40709, 40710, 40711, 40712, 40713, 40714, 40716, 40719, 40721, 40722, 40724, 40725, 40726, 40728, 40730, 40731, 40732, 40733, 40734, 40735, 40737, 40739, 40740, 40741, 40742, 40743, 40744, 40745, 40746, 40747, 40749, 40750, 40752, 40753, 58284, 58285, 58286, 58287, 58288, 58289, 58290, 58291, 58292, 58293, 58294, 58295, 58296, 58297, 58298, 58299, 58300, 58301, 58302, 58303, 58304, 58305, 58306, 58307, 58308, 58309, 58310, 58311, 58312, 58313, 58314, 58315, 58316, 58317, 58318, 58319, 58320, 58321, 58322, 58323, 58324, 58325, 58326, 58327, 58328, 58329, 58330, 58331, 58332, 58333, 58334, 58335, 58336, 58337, 58338, 58339, 58340, 58341, 58342, 58343, 58344, 58345, 58346, 58347, 58348, 58349, 58350, 58351, 58352, 58353, 58354, 58355, 58356, 58357, 58358, 58359, 58360, 58361, 58362, 58363, 58364, 58365, 58366, 58367, 58368, 58369, 58370, 58371, 58372, 58373, 58374, 58375, 58376, 58377, 40754, 40755, 40756, 40757, 40758, 40760, 40762, 40764, 40767, 40768, 40769, 40770, 40771, 40773, 40774, 40775, 40776, 40777, 40778, 40779, 40780, 40781, 40782, 40783, 40786, 40787, 40788, 40789, 40790, 40791, 40792, 40793, 40794, 40795, 40796, 40797, 40798, 40799, 40800, 40801, 40802, 40803, 40804, 40805, 40806, 40807, 40808, 40809, 40810, 40811, 40812, 40813, 40814, 40815, 40816, 40817, 40818, 40819, 40820, 40821, 40822, 40823, 40824, 40825, 40826, 40827, 40828, 40829, 40830, 40833, 40834, 40845, 40846, 40847, 40848, 40849, 40850, 40851, 40852, 40853, 40854, 40855, 40856, 40860, 40861, 40862, 40865, 40866, 40867, 40868, 40869, 63788, 63865, 63893, 63975, 63985, 58378, 58379, 58380, 58381, 58382, 58383, 58384, 58385, 58386, 58387, 58388, 58389, 58390, 58391, 58392, 58393, 58394, 58395, 58396, 58397, 58398, 58399, 58400, 58401, 58402, 58403, 58404, 58405, 58406, 58407, 58408, 58409, 58410, 58411, 58412, 58413, 58414, 58415, 58416, 58417, 58418, 58419, 58420, 58421, 58422, 58423, 58424, 58425, 58426, 58427, 58428, 58429, 58430, 58431, 58432, 58433, 58434, 58435, 58436, 58437, 58438, 58439, 58440, 58441, 58442, 58443, 58444, 58445, 58446, 58447, 58448, 58449, 58450, 58451, 58452, 58453, 58454, 58455, 58456, 58457, 58458, 58459, 58460, 58461, 58462, 58463, 58464, 58465, 58466, 58467, 58468, 58469, 58470, 58471, 64012, 64013, 64014, 64015, 64017, 64019, 64020, 64024, 64031, 64032, 64033, 64035, 64036, 64039, 64040, 64041, 11905, 59414, 59415, 59416, 11908, 13427, 13383, 11912, 11915, 59422, 13726, 13850, 13838, 11916, 11927, 14702, 14616, 59430, 14799, 14815, 14963, 14800, 59435, 59436, 15182, 15470, 15584, 11943, 59441, 59442, 11946, 16470, 16735, 11950, 17207, 11955, 11958, 11959, 59451, 17329, 17324, 11963, 17373, 17622, 18017, 17996, 59459, 18211, 18217, 18300, 18317, 11978, 18759, 18810, 18813, 18818, 18819, 18821, 18822, 18847, 18843, 18871, 18870, 59476, 59477, 19619, 19615, 19616, 19617, 19575, 19618, 19731, 19732, 19733, 19734, 19735, 19736, 19737, 19886, 59492, 58472, 58473, 58474, 58475, 58476, 58477, 58478, 58479, 58480, 58481, 58482, 58483, 58484, 58485, 58486, 58487, 58488, 58489, 58490, 58491, 58492, 58493, 58494, 58495, 58496, 58497, 58498, 58499, 58500, 58501, 58502, 58503, 58504, 58505, 58506, 58507, 58508, 58509, 58510, 58511, 58512, 58513, 58514, 58515, 58516, 58517, 58518, 58519, 58520, 58521, 58522, 58523, 58524, 58525, 58526, 58527, 58528, 58529, 58530, 58531, 58532, 58533, 58534, 58535, 58536, 58537, 58538, 58539, 58540, 58541, 58542, 58543, 58544, 58545, 58546, 58547, 58548, 58549, 58550, 58551, 58552, 58553, 58554, 58555, 58556, 58557, 58558, 58559, 58560, 58561, 58562, 58563, 58564, 58565],
|
||
"gb18030-ranges": [[0, 128], [36, 165], [38, 169], [45, 178], [50, 184], [81, 216], [89, 226], [95, 235], [96, 238], [100, 244], [103, 248], [104, 251], [105, 253], [109, 258], [126, 276], [133, 284], [148, 300], [172, 325], [175, 329], [179, 334], [208, 364], [306, 463], [307, 465], [308, 467], [309, 469], [310, 471], [311, 473], [312, 475], [313, 477], [341, 506], [428, 594], [443, 610], [544, 712], [545, 716], [558, 730], [741, 930], [742, 938], [749, 962], [750, 970], [805, 1026], [819, 1104], [820, 1106], [7922, 8209], [7924, 8215], [7925, 8218], [7927, 8222], [7934, 8231], [7943, 8241], [7944, 8244], [7945, 8246], [7950, 8252], [8062, 8365], [8148, 8452], [8149, 8454], [8152, 8458], [8164, 8471], [8174, 8482], [8236, 8556], [8240, 8570], [8262, 8596], [8264, 8602], [8374, 8713], [8380, 8720], [8381, 8722], [8384, 8726], [8388, 8731], [8390, 8737], [8392, 8740], [8393, 8742], [8394, 8748], [8396, 8751], [8401, 8760], [8406, 8766], [8416, 8777], [8419, 8781], [8424, 8787], [8437, 8802], [8439, 8808], [8445, 8816], [8482, 8854], [8485, 8858], [8496, 8870], [8521, 8896], [8603, 8979], [8936, 9322], [8946, 9372], [9046, 9548], [9050, 9588], [9063, 9616], [9066, 9622], [9076, 9634], [9092, 9652], [9100, 9662], [9108, 9672], [9111, 9676], [9113, 9680], [9131, 9702], [9162, 9735], [9164, 9738], [9218, 9793], [9219, 9795], [11329, 11906], [11331, 11909], [11334, 11913], [11336, 11917], [11346, 11928], [11361, 11944], [11363, 11947], [11366, 11951], [11370, 11956], [11372, 11960], [11375, 11964], [11389, 11979], [11682, 12284], [11686, 12292], [11687, 12312], [11692, 12319], [11694, 12330], [11714, 12351], [11716, 12436], [11723, 12447], [11725, 12535], [11730, 12543], [11736, 12586], [11982, 12842], [11989, 12850], [12102, 12964], [12336, 13200], [12348, 13215], [12350, 13218], [12384, 13253], [12393, 13263], [12395, 13267], [12397, 13270], [12510, 13384], [12553, 13428], [12851, 13727], [12962, 13839], [12973, 13851], [13738, 14617], [13823, 14703], [13919, 14801], [13933, 14816], [14080, 14964], [14298, 15183], [14585, 15471], [14698, 15585], [15583, 16471], [15847, 16736], [16318, 17208], [16434, 17325], [16438, 17330], [16481, 17374], [16729, 17623], [17102, 17997], [17122, 18018], [17315, 18212], [17320, 18218], [17402, 18301], [17418, 18318], [17859, 18760], [17909, 18811], [17911, 18814], [17915, 18820], [17916, 18823], [17936, 18844], [17939, 18848], [17961, 18872], [18664, 19576], [18703, 19620], [18814, 19738], [18962, 19887], [19043, 40870], [33469, 59244], [33470, 59336], [33471, 59367], [33484, 59413], [33485, 59417], [33490, 59423], [33497, 59431], [33501, 59437], [33505, 59443], [33513, 59452], [33520, 59460], [33536, 59478], [33550, 59493], [37845, 63789], [37921, 63866], [37948, 63894], [38029, 63976], [38038, 63986], [38064, 64016], [38065, 64018], [38066, 64021], [38069, 64025], [38075, 64034], [38076, 64037], [38078, 64042], [39108, 65074], [39109, 65093], [39113, 65107], [39114, 65112], [39115, 65127], [39116, 65132], [39265, 65375], [39394, 65510], [189e3, 65536]],
|
||
"jis0208": [12288, 12289, 12290, 65292, 65294, 12539, 65306, 65307, 65311, 65281, 12443, 12444, 180, 65344, 168, 65342, 65507, 65343, 12541, 12542, 12445, 12446, 12291, 20189, 12293, 12294, 12295, 12540, 8213, 8208, 65295, 65340, 65374, 8741, 65372, 8230, 8229, 8216, 8217, 8220, 8221, 65288, 65289, 12308, 12309, 65339, 65341, 65371, 65373, 12296, 12297, 12298, 12299, 12300, 12301, 12302, 12303, 12304, 12305, 65291, 65293, 177, 215, 247, 65309, 8800, 65308, 65310, 8806, 8807, 8734, 8756, 9794, 9792, 176, 8242, 8243, 8451, 65509, 65284, 65504, 65505, 65285, 65283, 65286, 65290, 65312, 167, 9734, 9733, 9675, 9679, 9678, 9671, 9670, 9633, 9632, 9651, 9650, 9661, 9660, 8251, 12306, 8594, 8592, 8593, 8595, 12307, null, null, null, null, null, null, null, null, null, null, null, 8712, 8715, 8838, 8839, 8834, 8835, 8746, 8745, null, null, null, null, null, null, null, null, 8743, 8744, 65506, 8658, 8660, 8704, 8707, null, null, null, null, null, null, null, null, null, null, null, 8736, 8869, 8978, 8706, 8711, 8801, 8786, 8810, 8811, 8730, 8765, 8733, 8757, 8747, 8748, null, null, null, null, null, null, null, 8491, 8240, 9839, 9837, 9834, 8224, 8225, 182, null, null, null, null, 9711, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 65296, 65297, 65298, 65299, 65300, 65301, 65302, 65303, 65304, 65305, null, null, null, null, null, null, null, 65313, 65314, 65315, 65316, 65317, 65318, 65319, 65320, 65321, 65322, 65323, 65324, 65325, 65326, 65327, 65328, 65329, 65330, 65331, 65332, 65333, 65334, 65335, 65336, 65337, 65338, null, null, null, null, null, null, 65345, 65346, 65347, 65348, 65349, 65350, 65351, 65352, 65353, 65354, 65355, 65356, 65357, 65358, 65359, 65360, 65361, 65362, 65363, 65364, 65365, 65366, 65367, 65368, 65369, 65370, null, null, null, null, 12353, 12354, 12355, 12356, 12357, 12358, 12359, 12360, 12361, 12362, 12363, 12364, 12365, 12366, 12367, 12368, 12369, 12370, 12371, 12372, 12373, 12374, 12375, 12376, 12377, 12378, 12379, 12380, 12381, 12382, 12383, 12384, 12385, 12386, 12387, 12388, 12389, 12390, 12391, 12392, 12393, 12394, 12395, 12396, 12397, 12398, 12399, 12400, 12401, 12402, 12403, 12404, 12405, 12406, 12407, 12408, 12409, 12410, 12411, 12412, 12413, 12414, 12415, 12416, 12417, 12418, 12419, 12420, 12421, 12422, 12423, 12424, 12425, 12426, 12427, 12428, 12429, 12430, 12431, 12432, 12433, 12434, 12435, null, null, null, null, null, null, null, null, null, null, null, 12449, 12450, 12451, 12452, 12453, 12454, 12455, 12456, 12457, 12458, 12459, 12460, 12461, 12462, 12463, 12464, 12465, 12466, 12467, 12468, 12469, 12470, 12471, 12472, 12473, 12474, 12475, 12476, 12477, 12478, 12479, 12480, 12481, 12482, 12483, 12484, 12485, 12486, 12487, 12488, 12489, 12490, 12491, 12492, 12493, 12494, 12495, 12496, 12497, 12498, 12499, 12500, 12501, 12502, 12503, 12504, 12505, 12506, 12507, 12508, 12509, 12510, 12511, 12512, 12513, 12514, 12515, 12516, 12517, 12518, 12519, 12520, 12521, 12522, 12523, 12524, 12525, 12526, 12527, 12528, 12529, 12530, 12531, 12532, 12533, 12534, null, null, null, null, null, null, null, null, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, 931, 932, 933, 934, 935, 936, 937, null, null, null, null, null, null, null, null, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 963, 964, 965, 966, 967, 968, 969, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1040, 1041, 1042, 1043, 1044, 1045, 1025, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1072, 1073, 1074, 1075, 1076, 1077, 1105, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, null, null, null, null, null, null, null, null, null, null, null, null, null, 9472, 9474, 9484, 9488, 9496, 9492, 9500, 9516, 9508, 9524, 9532, 9473, 9475, 9487, 9491, 9499, 9495, 9507, 9523, 9515, 9531, 9547, 9504, 9519, 9512, 9527, 9535, 9501, 9520, 9509, 9528, 9538, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321, 9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, null, 13129, 13076, 13090, 13133, 13080, 13095, 13059, 13110, 13137, 13143, 13069, 13094, 13091, 13099, 13130, 13115, 13212, 13213, 13214, 13198, 13199, 13252, 13217, null, null, null, null, null, null, null, null, 13179, 12317, 12319, 8470, 13261, 8481, 12964, 12965, 12966, 12967, 12968, 12849, 12850, 12857, 13182, 13181, 13180, 8786, 8801, 8747, 8750, 8721, 8730, 8869, 8736, 8735, 8895, 8757, 8745, 8746, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 20124, 21782, 23043, 38463, 21696, 24859, 25384, 23030, 36898, 33909, 33564, 31312, 24746, 25569, 28197, 26093, 33894, 33446, 39925, 26771, 22311, 26017, 25201, 23451, 22992, 34427, 39156, 32098, 32190, 39822, 25110, 31903, 34999, 23433, 24245, 25353, 26263, 26696, 38343, 38797, 26447, 20197, 20234, 20301, 20381, 20553, 22258, 22839, 22996, 23041, 23561, 24799, 24847, 24944, 26131, 26885, 28858, 30031, 30064, 31227, 32173, 32239, 32963, 33806, 34915, 35586, 36949, 36986, 21307, 20117, 20133, 22495, 32946, 37057, 30959, 19968, 22769, 28322, 36920, 31282, 33576, 33419, 39983, 20801, 21360, 21693, 21729, 22240, 23035, 24341, 39154, 28139, 32996, 34093, 38498, 38512, 38560, 38907, 21515, 21491, 23431, 28879, 32701, 36802, 38632, 21359, 40284, 31418, 19985, 30867, 33276, 28198, 22040, 21764, 27421, 34074, 39995, 23013, 21417, 28006, 29916, 38287, 22082, 20113, 36939, 38642, 33615, 39180, 21473, 21942, 23344, 24433, 26144, 26355, 26628, 27704, 27891, 27945, 29787, 30408, 31310, 38964, 33521, 34907, 35424, 37613, 28082, 30123, 30410, 39365, 24742, 35585, 36234, 38322, 27022, 21421, 20870, 22290, 22576, 22852, 23476, 24310, 24616, 25513, 25588, 27839, 28436, 28814, 28948, 29017, 29141, 29503, 32257, 33398, 33489, 34199, 36960, 37467, 40219, 22633, 26044, 27738, 29989, 20985, 22830, 22885, 24448, 24540, 25276, 26106, 27178, 27431, 27572, 29579, 32705, 35158, 40236, 40206, 40644, 23713, 27798, 33659, 20740, 23627, 25014, 33222, 26742, 29281, 20057, 20474, 21368, 24681, 28201, 31311, 38899, 19979, 21270, 20206, 20309, 20285, 20385, 20339, 21152, 21487, 22025, 22799, 23233, 23478, 23521, 31185, 26247, 26524, 26550, 27468, 27827, 28779, 29634, 31117, 31166, 31292, 31623, 33457, 33499, 33540, 33655, 33775, 33747, 34662, 35506, 22057, 36008, 36838, 36942, 38686, 34442, 20420, 23784, 25105, 29273, 30011, 33253, 33469, 34558, 36032, 38597, 39187, 39381, 20171, 20250, 35299, 22238, 22602, 22730, 24315, 24555, 24618, 24724, 24674, 25040, 25106, 25296, 25913, 39745, 26214, 26800, 28023, 28784, 30028, 30342, 32117, 33445, 34809, 38283, 38542, 35997, 20977, 21182, 22806, 21683, 23475, 23830, 24936, 27010, 28079, 30861, 33995, 34903, 35442, 37799, 39608, 28012, 39336, 34521, 22435, 26623, 34510, 37390, 21123, 22151, 21508, 24275, 25313, 25785, 26684, 26680, 27579, 29554, 30906, 31339, 35226, 35282, 36203, 36611, 37101, 38307, 38548, 38761, 23398, 23731, 27005, 38989, 38990, 25499, 31520, 27179, 27263, 26806, 39949, 28511, 21106, 21917, 24688, 25324, 27963, 28167, 28369, 33883, 35088, 36676, 19988, 39993, 21494, 26907, 27194, 38788, 26666, 20828, 31427, 33970, 37340, 37772, 22107, 40232, 26658, 33541, 33841, 31909, 21e3, 33477, 29926, 20094, 20355, 20896, 23506, 21002, 21208, 21223, 24059, 21914, 22570, 23014, 23436, 23448, 23515, 24178, 24185, 24739, 24863, 24931, 25022, 25563, 25954, 26577, 26707, 26874, 27454, 27475, 27735, 28450, 28567, 28485, 29872, 29976, 30435, 30475, 31487, 31649, 31777, 32233, 32566, 32752, 32925, 33382, 33694, 35251, 35532, 36011, 36996, 37969, 38291, 38289, 38306, 38501, 38867, 39208, 33304, 20024, 21547, 23736, 24012, 29609, 30284, 30524, 23721, 32747, 36107, 38593, 38929, 38996, 39e3, 20225, 20238, 21361, 21916, 22120, 22522, 22855, 23305, 23492, 23696, 24076, 24190, 24524, 25582, 26426, 26071, 26082, 26399, 26827, 26820, 27231, 24112, 27589, 27671, 27773, 30079, 31048, 23395, 31232, 32e3, 24509, 35215, 35352, 36020, 36215, 36556, 36637, 39138, 39438, 39740, 20096, 20605, 20736, 22931, 23452, 25135, 25216, 25836, 27450, 29344, 30097, 31047, 32681, 34811, 35516, 35696, 25516, 33738, 38816, 21513, 21507, 21931, 26708, 27224, 35440, 30759, 26485, 40653, 21364, 23458, 33050, 34384, 36870, 19992, 20037, 20167, 20241, 21450, 21560, 23470, 24339, 24613, 25937, 26429, 27714, 27762, 27875, 28792, 29699, 31350, 31406, 31496, 32026, 31998, 32102, 26087, 29275, 21435, 23621, 24040, 25298, 25312, 25369, 28192, 34394, 35377, 36317, 37624, 28417, 31142, 39770, 20136, 20139, 20140, 20379, 20384, 20689, 20807, 31478, 20849, 20982, 21332, 21281, 21375, 21483, 21932, 22659, 23777, 24375, 24394, 24623, 24656, 24685, 25375, 25945, 27211, 27841, 29378, 29421, 30703, 33016, 33029, 33288, 34126, 37111, 37857, 38911, 39255, 39514, 20208, 20957, 23597, 26241, 26989, 23616, 26354, 26997, 29577, 26704, 31873, 20677, 21220, 22343, 24062, 37670, 26020, 27427, 27453, 29748, 31105, 31165, 31563, 32202, 33465, 33740, 34943, 35167, 35641, 36817, 37329, 21535, 37504, 20061, 20534, 21477, 21306, 29399, 29590, 30697, 33510, 36527, 39366, 39368, 39378, 20855, 24858, 34398, 21936, 31354, 20598, 23507, 36935, 38533, 20018, 27355, 37351, 23633, 23624, 25496, 31391, 27795, 38772, 36705, 31402, 29066, 38536, 31874, 26647, 32368, 26705, 37740, 21234, 21531, 34219, 35347, 32676, 36557, 37089, 21350, 34952, 31041, 20418, 20670, 21009, 20804, 21843, 22317, 29674, 22411, 22865, 24418, 24452, 24693, 24950, 24935, 25001, 25522, 25658, 25964, 26223, 26690, 28179, 30054, 31293, 31995, 32076, 32153, 32331, 32619, 33550, 33610, 34509, 35336, 35427, 35686, 36605, 38938, 40335, 33464, 36814, 39912, 21127, 25119, 25731, 28608, 38553, 26689, 20625, 27424, 27770, 28500, 31348, 32080, 34880, 35363, 26376, 20214, 20537, 20518, 20581, 20860, 21048, 21091, 21927, 22287, 22533, 23244, 24314, 25010, 25080, 25331, 25458, 26908, 27177, 29309, 29356, 29486, 30740, 30831, 32121, 30476, 32937, 35211, 35609, 36066, 36562, 36963, 37749, 38522, 38997, 39443, 40568, 20803, 21407, 21427, 24187, 24358, 28187, 28304, 29572, 29694, 32067, 33335, 35328, 35578, 38480, 20046, 20491, 21476, 21628, 22266, 22993, 23396, 24049, 24235, 24359, 25144, 25925, 26543, 28246, 29392, 31946, 34996, 32929, 32993, 33776, 34382, 35463, 36328, 37431, 38599, 39015, 40723, 20116, 20114, 20237, 21320, 21577, 21566, 23087, 24460, 24481, 24735, 26791, 27278, 29786, 30849, 35486, 35492, 35703, 37264, 20062, 39881, 20132, 20348, 20399, 20505, 20502, 20809, 20844, 21151, 21177, 21246, 21402, 21475, 21521, 21518, 21897, 22353, 22434, 22909, 23380, 23389, 23439, 24037, 24039, 24055, 24184, 24195, 24218, 24247, 24344, 24658, 24908, 25239, 25304, 25511, 25915, 26114, 26179, 26356, 26477, 26657, 26775, 27083, 27743, 27946, 28009, 28207, 28317, 30002, 30343, 30828, 31295, 31968, 32005, 32024, 32094, 32177, 32789, 32771, 32943, 32945, 33108, 33167, 33322, 33618, 34892, 34913, 35611, 36002, 36092, 37066, 37237, 37489, 30783, 37628, 38308, 38477, 38917, 39321, 39640, 40251, 21083, 21163, 21495, 21512, 22741, 25335, 28640, 35946, 36703, 40633, 20811, 21051, 21578, 22269, 31296, 37239, 40288, 40658, 29508, 28425, 33136, 29969, 24573, 24794, 39592, 29403, 36796, 27492, 38915, 20170, 22256, 22372, 22718, 23130, 24680, 25031, 26127, 26118, 26681, 26801, 28151, 30165, 32058, 33390, 39746, 20123, 20304, 21449, 21766, 23919, 24038, 24046, 26619, 27801, 29811, 30722, 35408, 37782, 35039, 22352, 24231, 25387, 20661, 20652, 20877, 26368, 21705, 22622, 22971, 23472, 24425, 25165, 25505, 26685, 27507, 28168, 28797, 37319, 29312, 30741, 30758, 31085, 25998, 32048, 33756, 35009, 36617, 38555, 21092, 22312, 26448, 32618, 36001, 20916, 22338, 38442, 22586, 27018, 32948, 21682, 23822, 22524, 30869, 40442, 20316, 21066, 21643, 25662, 26152, 26388, 26613, 31364, 31574, 32034, 37679, 26716, 39853, 31545, 21273, 20874, 21047, 23519, 25334, 25774, 25830, 26413, 27578, 34217, 38609, 30352, 39894, 25420, 37638, 39851, 30399, 26194, 19977, 20632, 21442, 23665, 24808, 25746, 25955, 26719, 29158, 29642, 29987, 31639, 32386, 34453, 35715, 36059, 37240, 39184, 26028, 26283, 27531, 20181, 20180, 20282, 20351, 21050, 21496, 21490, 21987, 22235, 22763, 22987, 22985, 23039, 23376, 23629, 24066, 24107, 24535, 24605, 25351, 25903, 23388, 26031, 26045, 26088, 26525, 27490, 27515, 27663, 29509, 31049, 31169, 31992, 32025, 32043, 32930, 33026, 33267, 35222, 35422, 35433, 35430, 35468, 35566, 36039, 36060, 38604, 39164, 27503, 20107, 20284, 20365, 20816, 23383, 23546, 24904, 25345, 26178, 27425, 28363, 27835, 29246, 29885, 30164, 30913, 31034, 32780, 32819, 33258, 33940, 36766, 27728, 40575, 24335, 35672, 40235, 31482, 36600, 23437, 38635, 19971, 21489, 22519, 22833, 23241, 23460, 24713, 28287, 28422, 30142, 36074, 23455, 34048, 31712, 20594, 26612, 33437, 23649, 34122, 32286, 33294, 20889, 23556, 25448, 36198, 26012, 29038, 31038, 32023, 32773, 35613, 36554, 36974, 34503, 37034, 20511, 21242, 23610, 26451, 28796, 29237, 37196, 37320, 37675, 33509, 23490, 24369, 24825, 20027, 21462, 23432, 25163, 26417, 27530, 29417, 29664, 31278, 33131, 36259, 37202, 39318, 20754, 21463, 21610, 23551, 25480, 27193, 32172, 38656, 22234, 21454, 21608, 23447, 23601, 24030, 20462, 24833, 25342, 27954, 31168, 31179, 32066, 32333, 32722, 33261, 33311, 33936, 34886, 35186, 35728, 36468, 36655, 36913, 37195, 37228, 38598, 37276, 20160, 20303, 20805, 21313, 24467, 25102, 26580, 27713, 28171, 29539, 32294, 37325, 37507, 21460, 22809, 23487, 28113, 31069, 32302, 31899, 22654, 29087, 20986, 34899, 36848, 20426, 23803, 26149, 30636, 31459, 33308, 39423, 20934, 24490, 26092, 26991, 27529, 28147, 28310, 28516, 30462, 32020, 24033, 36981, 37255, 38918, 20966, 21021, 25152, 26257, 26329, 28186, 24246, 32210, 32626, 26360, 34223, 34295, 35576, 21161, 21465, 22899, 24207, 24464, 24661, 37604, 38500, 20663, 20767, 21213, 21280, 21319, 21484, 21736, 21830, 21809, 22039, 22888, 22974, 23100, 23477, 23558, 23567, 23569, 23578, 24196, 24202, 24288, 24432, 25215, 25220, 25307, 25484, 25463, 26119, 26124, 26157, 26230, 26494, 26786, 27167, 27189, 27836, 28040, 28169, 28248, 28988, 28966, 29031, 30151, 30465, 30813, 30977, 31077, 31216, 31456, 31505, 31911, 32057, 32918, 33750, 33931, 34121, 34909, 35059, 35359, 35388, 35412, 35443, 35937, 36062, 37284, 37478, 37758, 37912, 38556, 38808, 19978, 19976, 19998, 20055, 20887, 21104, 22478, 22580, 22732, 23330, 24120, 24773, 25854, 26465, 26454, 27972, 29366, 30067, 31331, 33976, 35698, 37304, 37664, 22065, 22516, 39166, 25325, 26893, 27542, 29165, 32340, 32887, 33394, 35302, 39135, 34645, 36785, 23611, 20280, 20449, 20405, 21767, 23072, 23517, 23529, 24515, 24910, 25391, 26032, 26187, 26862, 27035, 28024, 28145, 30003, 30137, 30495, 31070, 31206, 32051, 33251, 33455, 34218, 35242, 35386, 36523, 36763, 36914, 37341, 38663, 20154, 20161, 20995, 22645, 22764, 23563, 29978, 23613, 33102, 35338, 36805, 38499, 38765, 31525, 35535, 38920, 37218, 22259, 21416, 36887, 21561, 22402, 24101, 25512, 27700, 28810, 30561, 31883, 32736, 34928, 36930, 37204, 37648, 37656, 38543, 29790, 39620, 23815, 23913, 25968, 26530, 36264, 38619, 25454, 26441, 26905, 33733, 38935, 38592, 35070, 28548, 25722, 23544, 19990, 28716, 30045, 26159, 20932, 21046, 21218, 22995, 24449, 24615, 25104, 25919, 25972, 26143, 26228, 26866, 26646, 27491, 28165, 29298, 29983, 30427, 31934, 32854, 22768, 35069, 35199, 35488, 35475, 35531, 36893, 37266, 38738, 38745, 25993, 31246, 33030, 38587, 24109, 24796, 25114, 26021, 26132, 26512, 30707, 31309, 31821, 32318, 33034, 36012, 36196, 36321, 36447, 30889, 20999, 25305, 25509, 25666, 25240, 35373, 31363, 31680, 35500, 38634, 32118, 33292, 34633, 20185, 20808, 21315, 21344, 23459, 23554, 23574, 24029, 25126, 25159, 25776, 26643, 26676, 27849, 27973, 27927, 26579, 28508, 29006, 29053, 26059, 31359, 31661, 32218, 32330, 32680, 33146, 33307, 33337, 34214, 35438, 36046, 36341, 36984, 36983, 37549, 37521, 38275, 39854, 21069, 21892, 28472, 28982, 20840, 31109, 32341, 33203, 31950, 22092, 22609, 23720, 25514, 26366, 26365, 26970, 29401, 30095, 30094, 30990, 31062, 31199, 31895, 32032, 32068, 34311, 35380, 38459, 36961, 40736, 20711, 21109, 21452, 21474, 20489, 21930, 22766, 22863, 29245, 23435, 23652, 21277, 24803, 24819, 25436, 25475, 25407, 25531, 25805, 26089, 26361, 24035, 27085, 27133, 28437, 29157, 20105, 30185, 30456, 31379, 31967, 32207, 32156, 32865, 33609, 33624, 33900, 33980, 34299, 35013, 36208, 36865, 36973, 37783, 38684, 39442, 20687, 22679, 24974, 33235, 34101, 36104, 36896, 20419, 20596, 21063, 21363, 24687, 25417, 26463, 28204, 36275, 36895, 20439, 23646, 36042, 26063, 32154, 21330, 34966, 20854, 25539, 23384, 23403, 23562, 25613, 26449, 36956, 20182, 22810, 22826, 27760, 35409, 21822, 22549, 22949, 24816, 25171, 26561, 33333, 26965, 38464, 39364, 39464, 20307, 22534, 23550, 32784, 23729, 24111, 24453, 24608, 24907, 25140, 26367, 27888, 28382, 32974, 33151, 33492, 34955, 36024, 36864, 36910, 38538, 40667, 39899, 20195, 21488, 22823, 31532, 37261, 38988, 40441, 28381, 28711, 21331, 21828, 23429, 25176, 25246, 25299, 27810, 28655, 29730, 35351, 37944, 28609, 35582, 33592, 20967, 34552, 21482, 21481, 20294, 36948, 36784, 22890, 33073, 24061, 31466, 36799, 26842, 35895, 29432, 40008, 27197, 35504, 20025, 21336, 22022, 22374, 25285, 25506, 26086, 27470, 28129, 28251, 28845, 30701, 31471, 31658, 32187, 32829, 32966, 34507, 35477, 37723, 22243, 22727, 24382, 26029, 26262, 27264, 27573, 30007, 35527, 20516, 30693, 22320, 24347, 24677, 26234, 27744, 30196, 31258, 32622, 33268, 34584, 36933, 39347, 31689, 30044, 31481, 31569, 33988, 36880, 31209, 31378, 33590, 23265, 30528, 20013, 20210, 23449, 24544, 25277, 26172, 26609, 27880, 34411, 34935, 35387, 37198, 37619, 39376, 27159, 28710, 29482, 33511, 33879, 36015, 19969, 20806, 20939, 21899, 23541, 24086, 24115, 24193, 24340, 24373, 24427, 24500, 25074, 25361, 26274, 26397, 28526, 29266, 30010, 30522, 32884, 33081, 33144, 34678, 35519, 35548, 36229, 36339, 37530, 38263, 38914, 40165, 21189, 25431, 30452, 26389, 27784, 29645, 36035, 37806, 38515, 27941, 22684, 26894, 27084, 36861, 37786, 30171, 36890, 22618, 26626, 25524, 27131, 20291, 28460, 26584, 36795, 34086, 32180, 37716, 26943, 28528, 22378, 22775, 23340, 32044, 29226, 21514, 37347, 40372, 20141, 20302, 20572, 20597, 21059, 35998, 21576, 22564, 23450, 24093, 24213, 24237, 24311, 24351, 24716, 25269, 25402, 25552, 26799, 27712, 30855, 31118, 31243, 32224, 33351, 35330, 35558, 36420, 36883, 37048, 37165, 37336, 40718, 27877, 25688, 25826, 25973, 28404, 30340, 31515, 36969, 37841, 28346, 21746, 24505, 25764, 36685, 36845, 37444, 20856, 22635, 22825, 23637, 24215, 28155, 32399, 29980, 36028, 36578, 39003, 28857, 20253, 27583, 28593, 3e4, 38651, 20814, 21520, 22581, 22615, 22956, 23648, 24466, 26007, 26460, 28193, 30331, 33759, 36077, 36884, 37117, 37709, 30757, 30778, 21162, 24230, 22303, 22900, 24594, 20498, 20826, 20908, 20941, 20992, 21776, 22612, 22616, 22871, 23445, 23798, 23947, 24764, 25237, 25645, 26481, 26691, 26812, 26847, 30423, 28120, 28271, 28059, 28783, 29128, 24403, 30168, 31095, 31561, 31572, 31570, 31958, 32113, 21040, 33891, 34153, 34276, 35342, 35588, 35910, 36367, 36867, 36879, 37913, 38518, 38957, 39472, 38360, 20685, 21205, 21516, 22530, 23566, 24999, 25758, 27934, 30643, 31461, 33012, 33796, 36947, 37509, 23776, 40199, 21311, 24471, 24499, 28060, 29305, 30563, 31167, 31716, 27602, 29420, 35501, 26627, 27233, 20984, 31361, 26932, 23626, 40182, 33515, 23493, 37193, 28702, 22136, 23663, 24775, 25958, 27788, 35930, 36929, 38931, 21585, 26311, 37389, 22856, 37027, 20869, 20045, 20970, 34201, 35598, 28760, 25466, 37707, 26978, 39348, 32260, 30071, 21335, 26976, 36575, 38627, 27741, 20108, 23612, 24336, 36841, 21250, 36049, 32905, 34425, 24319, 26085, 20083, 20837, 22914, 23615, 38894, 20219, 22922, 24525, 35469, 28641, 31152, 31074, 23527, 33905, 29483, 29105, 24180, 24565, 25467, 25754, 29123, 31896, 20035, 24316, 20043, 22492, 22178, 24745, 28611, 32013, 33021, 33075, 33215, 36786, 35223, 34468, 24052, 25226, 25773, 35207, 26487, 27874, 27966, 29750, 30772, 23110, 32629, 33453, 39340, 20467, 24259, 25309, 25490, 25943, 26479, 30403, 29260, 32972, 32954, 36649, 37197, 20493, 22521, 23186, 26757, 26995, 29028, 29437, 36023, 22770, 36064, 38506, 36889, 34687, 31204, 30695, 33833, 20271, 21093, 21338, 25293, 26575, 27850, 30333, 31636, 31893, 33334, 34180, 36843, 26333, 28448, 29190, 32283, 33707, 39361, 40614, 20989, 31665, 30834, 31672, 32903, 31560, 27368, 24161, 32908, 30033, 30048, 20843, 37474, 28300, 30330, 37271, 39658, 20240, 32624, 25244, 31567, 38309, 40169, 22138, 22617, 34532, 38588, 20276, 21028, 21322, 21453, 21467, 24070, 25644, 26001, 26495, 27710, 27726, 29256, 29359, 29677, 30036, 32321, 33324, 34281, 36009, 31684, 37318, 29033, 38930, 39151, 25405, 26217, 30058, 30436, 30928, 34115, 34542, 21290, 21329, 21542, 22915, 24199, 24444, 24754, 25161, 25209, 25259, 26e3, 27604, 27852, 30130, 30382, 30865, 31192, 32203, 32631, 32933, 34987, 35513, 36027, 36991, 38750, 39131, 27147, 31800, 20633, 23614, 24494, 26503, 27608, 29749, 30473, 32654, 40763, 26570, 31255, 21305, 30091, 39661, 24422, 33181, 33777, 32920, 24380, 24517, 30050, 31558, 36924, 26727, 23019, 23195, 32016, 30334, 35628, 20469, 24426, 27161, 27703, 28418, 29922, 31080, 34920, 35413, 35961, 24287, 25551, 30149, 31186, 33495, 37672, 37618, 33948, 34541, 39981, 21697, 24428, 25996, 27996, 28693, 36007, 36051, 38971, 25935, 29942, 19981, 20184, 22496, 22827, 23142, 23500, 20904, 24067, 24220, 24598, 25206, 25975, 26023, 26222, 28014, 29238, 31526, 33104, 33178, 33433, 35676, 36e3, 36070, 36212, 38428, 38468, 20398, 25771, 27494, 33310, 33889, 34154, 37096, 23553, 26963, 39080, 33914, 34135, 20239, 21103, 24489, 24133, 26381, 31119, 33145, 35079, 35206, 28149, 24343, 25173, 27832, 20175, 29289, 39826, 20998, 21563, 22132, 22707, 24996, 25198, 28954, 22894, 31881, 31966, 32027, 38640, 25991, 32862, 19993, 20341, 20853, 22592, 24163, 24179, 24330, 26564, 20006, 34109, 38281, 38491, 31859, 38913, 20731, 22721, 30294, 30887, 21029, 30629, 34065, 31622, 20559, 22793, 29255, 31687, 32232, 36794, 36820, 36941, 20415, 21193, 23081, 24321, 38829, 20445, 33303, 37610, 22275, 25429, 27497, 29995, 35036, 36628, 31298, 21215, 22675, 24917, 25098, 26286, 27597, 31807, 33769, 20515, 20472, 21253, 21574, 22577, 22857, 23453, 23792, 23791, 23849, 24214, 25265, 25447, 25918, 26041, 26379, 27861, 27873, 28921, 30770, 32299, 32990, 33459, 33804, 34028, 34562, 35090, 35370, 35914, 37030, 37586, 39165, 40179, 40300, 20047, 20129, 20621, 21078, 22346, 22952, 24125, 24536, 24537, 25151, 26292, 26395, 26576, 26834, 20882, 32033, 32938, 33192, 35584, 35980, 36031, 37502, 38450, 21536, 38956, 21271, 20693, 21340, 22696, 25778, 26420, 29287, 30566, 31302, 37350, 21187, 27809, 27526, 22528, 24140, 22868, 26412, 32763, 20961, 30406, 25705, 30952, 39764, 40635, 22475, 22969, 26151, 26522, 27598, 21737, 27097, 24149, 33180, 26517, 39850, 26622, 40018, 26717, 20134, 20451, 21448, 25273, 26411, 27819, 36804, 20397, 32365, 40639, 19975, 24930, 28288, 28459, 34067, 21619, 26410, 39749, 24051, 31637, 23724, 23494, 34588, 28234, 34001, 31252, 33032, 22937, 31885, 27665, 30496, 21209, 22818, 28961, 29279, 30683, 38695, 40289, 26891, 23167, 23064, 20901, 21517, 21629, 26126, 30431, 36855, 37528, 40180, 23018, 29277, 28357, 20813, 26825, 32191, 32236, 38754, 40634, 25720, 27169, 33538, 22916, 23391, 27611, 29467, 30450, 32178, 32791, 33945, 20786, 26408, 40665, 30446, 26466, 21247, 39173, 23588, 25147, 31870, 36016, 21839, 24758, 32011, 38272, 21249, 20063, 20918, 22812, 29242, 32822, 37326, 24357, 30690, 21380, 24441, 32004, 34220, 35379, 36493, 38742, 26611, 34222, 37971, 24841, 24840, 27833, 30290, 35565, 36664, 21807, 20305, 20778, 21191, 21451, 23461, 24189, 24736, 24962, 25558, 26377, 26586, 28263, 28044, 29494, 29495, 30001, 31056, 35029, 35480, 36938, 37009, 37109, 38596, 34701, 22805, 20104, 20313, 19982, 35465, 36671, 38928, 20653, 24188, 22934, 23481, 24248, 25562, 25594, 25793, 26332, 26954, 27096, 27915, 28342, 29076, 29992, 31407, 32650, 32768, 33865, 33993, 35201, 35617, 36362, 36965, 38525, 39178, 24958, 25233, 27442, 27779, 28020, 32716, 32764, 28096, 32645, 34746, 35064, 26469, 33713, 38972, 38647, 27931, 32097, 33853, 37226, 20081, 21365, 23888, 27396, 28651, 34253, 34349, 35239, 21033, 21519, 23653, 26446, 26792, 29702, 29827, 30178, 35023, 35041, 37324, 38626, 38520, 24459, 29575, 31435, 33870, 25504, 30053, 21129, 27969, 28316, 29705, 30041, 30827, 31890, 38534, 31452, 40845, 20406, 24942, 26053, 34396, 20102, 20142, 20698, 20001, 20940, 23534, 26009, 26753, 28092, 29471, 30274, 30637, 31260, 31975, 33391, 35538, 36988, 37327, 38517, 38936, 21147, 32209, 20523, 21400, 26519, 28107, 29136, 29747, 33256, 36650, 38563, 40023, 40607, 29792, 22593, 28057, 32047, 39006, 20196, 20278, 20363, 20919, 21169, 23994, 24604, 29618, 31036, 33491, 37428, 38583, 38646, 38666, 40599, 40802, 26278, 27508, 21015, 21155, 28872, 35010, 24265, 24651, 24976, 28451, 29001, 31806, 32244, 32879, 34030, 36899, 37676, 21570, 39791, 27347, 28809, 36034, 36335, 38706, 21172, 23105, 24266, 24324, 26391, 27004, 27028, 28010, 28431, 29282, 29436, 31725, 32769, 32894, 34635, 37070, 20845, 40595, 31108, 32907, 37682, 35542, 20525, 21644, 35441, 27498, 36036, 33031, 24785, 26528, 40434, 20121, 20120, 39952, 35435, 34241, 34152, 26880, 28286, 30871, 33109, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 24332, 19984, 19989, 20010, 20017, 20022, 20028, 20031, 20034, 20054, 20056, 20098, 20101, 35947, 20106, 33298, 24333, 20110, 20126, 20127, 20128, 20130, 20144, 20147, 20150, 20174, 20173, 20164, 20166, 20162, 20183, 20190, 20205, 20191, 20215, 20233, 20314, 20272, 20315, 20317, 20311, 20295, 20342, 20360, 20367, 20376, 20347, 20329, 20336, 20369, 20335, 20358, 20374, 20760, 20436, 20447, 20430, 20440, 20443, 20433, 20442, 20432, 20452, 20453, 20506, 20520, 20500, 20522, 20517, 20485, 20252, 20470, 20513, 20521, 20524, 20478, 20463, 20497, 20486, 20547, 20551, 26371, 20565, 20560, 20552, 20570, 20566, 20588, 20600, 20608, 20634, 20613, 20660, 20658, 20681, 20682, 20659, 20674, 20694, 20702, 20709, 20717, 20707, 20718, 20729, 20725, 20745, 20737, 20738, 20758, 20757, 20756, 20762, 20769, 20794, 20791, 20796, 20795, 20799, 20800, 20818, 20812, 20820, 20834, 31480, 20841, 20842, 20846, 20864, 20866, 22232, 20876, 20873, 20879, 20881, 20883, 20885, 20886, 20900, 20902, 20898, 20905, 20906, 20907, 20915, 20913, 20914, 20912, 20917, 20925, 20933, 20937, 20955, 20960, 34389, 20969, 20973, 20976, 20981, 20990, 20996, 21003, 21012, 21006, 21031, 21034, 21038, 21043, 21049, 21071, 21060, 21067, 21068, 21086, 21076, 21098, 21108, 21097, 21107, 21119, 21117, 21133, 21140, 21138, 21105, 21128, 21137, 36776, 36775, 21164, 21165, 21180, 21173, 21185, 21197, 21207, 21214, 21219, 21222, 39149, 21216, 21235, 21237, 21240, 21241, 21254, 21256, 30008, 21261, 21264, 21263, 21269, 21274, 21283, 21295, 21297, 21299, 21304, 21312, 21318, 21317, 19991, 21321, 21325, 20950, 21342, 21353, 21358, 22808, 21371, 21367, 21378, 21398, 21408, 21414, 21413, 21422, 21424, 21430, 21443, 31762, 38617, 21471, 26364, 29166, 21486, 21480, 21485, 21498, 21505, 21565, 21568, 21548, 21549, 21564, 21550, 21558, 21545, 21533, 21582, 21647, 21621, 21646, 21599, 21617, 21623, 21616, 21650, 21627, 21632, 21622, 21636, 21648, 21638, 21703, 21666, 21688, 21669, 21676, 21700, 21704, 21672, 21675, 21698, 21668, 21694, 21692, 21720, 21733, 21734, 21775, 21780, 21757, 21742, 21741, 21754, 21730, 21817, 21824, 21859, 21836, 21806, 21852, 21829, 21846, 21847, 21816, 21811, 21853, 21913, 21888, 21679, 21898, 21919, 21883, 21886, 21912, 21918, 21934, 21884, 21891, 21929, 21895, 21928, 21978, 21957, 21983, 21956, 21980, 21988, 21972, 22036, 22007, 22038, 22014, 22013, 22043, 22009, 22094, 22096, 29151, 22068, 22070, 22066, 22072, 22123, 22116, 22063, 22124, 22122, 22150, 22144, 22154, 22176, 22164, 22159, 22181, 22190, 22198, 22196, 22210, 22204, 22209, 22211, 22208, 22216, 22222, 22225, 22227, 22231, 22254, 22265, 22272, 22271, 22276, 22281, 22280, 22283, 22285, 22291, 22296, 22294, 21959, 22300, 22310, 22327, 22328, 22350, 22331, 22336, 22351, 22377, 22464, 22408, 22369, 22399, 22409, 22419, 22432, 22451, 22436, 22442, 22448, 22467, 22470, 22484, 22482, 22483, 22538, 22486, 22499, 22539, 22553, 22557, 22642, 22561, 22626, 22603, 22640, 27584, 22610, 22589, 22649, 22661, 22713, 22687, 22699, 22714, 22750, 22715, 22712, 22702, 22725, 22739, 22737, 22743, 22745, 22744, 22757, 22748, 22756, 22751, 22767, 22778, 22777, 22779, 22780, 22781, 22786, 22794, 22800, 22811, 26790, 22821, 22828, 22829, 22834, 22840, 22846, 31442, 22869, 22864, 22862, 22874, 22872, 22882, 22880, 22887, 22892, 22889, 22904, 22913, 22941, 20318, 20395, 22947, 22962, 22982, 23016, 23004, 22925, 23001, 23002, 23077, 23071, 23057, 23068, 23049, 23066, 23104, 23148, 23113, 23093, 23094, 23138, 23146, 23194, 23228, 23230, 23243, 23234, 23229, 23267, 23255, 23270, 23273, 23254, 23290, 23291, 23308, 23307, 23318, 23346, 23248, 23338, 23350, 23358, 23363, 23365, 23360, 23377, 23381, 23386, 23387, 23397, 23401, 23408, 23411, 23413, 23416, 25992, 23418, 23424, 23427, 23462, 23480, 23491, 23495, 23497, 23508, 23504, 23524, 23526, 23522, 23518, 23525, 23531, 23536, 23542, 23539, 23557, 23559, 23560, 23565, 23571, 23584, 23586, 23592, 23608, 23609, 23617, 23622, 23630, 23635, 23632, 23631, 23409, 23660, 23662, 20066, 23670, 23673, 23692, 23697, 23700, 22939, 23723, 23739, 23734, 23740, 23735, 23749, 23742, 23751, 23769, 23785, 23805, 23802, 23789, 23948, 23786, 23819, 23829, 23831, 23900, 23839, 23835, 23825, 23828, 23842, 23834, 23833, 23832, 23884, 23890, 23886, 23883, 23916, 23923, 23926, 23943, 23940, 23938, 23970, 23965, 23980, 23982, 23997, 23952, 23991, 23996, 24009, 24013, 24019, 24018, 24022, 24027, 24043, 24050, 24053, 24075, 24090, 24089, 24081, 24091, 24118, 24119, 24132, 24131, 24128, 24142, 24151, 24148, 24159, 24162, 24164, 24135, 24181, 24182, 24186, 40636, 24191, 24224, 24257, 24258, 24264, 24272, 24271, 24278, 24291, 24285, 24282, 24283, 24290, 24289, 24296, 24297, 24300, 24305, 24307, 24304, 24308, 24312, 24318, 24323, 24329, 24413, 24412, 24331, 24337, 24342, 24361, 24365, 24376, 24385, 24392, 24396, 24398, 24367, 24401, 24406, 24407, 24409, 24417, 24429, 24435, 24439, 24451, 24450, 24447, 24458, 24456, 24465, 24455, 24478, 24473, 24472, 24480, 24488, 24493, 24508, 24534, 24571, 24548, 24568, 24561, 24541, 24755, 24575, 24609, 24672, 24601, 24592, 24617, 24590, 24625, 24603, 24597, 24619, 24614, 24591, 24634, 24666, 24641, 24682, 24695, 24671, 24650, 24646, 24653, 24675, 24643, 24676, 24642, 24684, 24683, 24665, 24705, 24717, 24807, 24707, 24730, 24708, 24731, 24726, 24727, 24722, 24743, 24715, 24801, 24760, 24800, 24787, 24756, 24560, 24765, 24774, 24757, 24792, 24909, 24853, 24838, 24822, 24823, 24832, 24820, 24826, 24835, 24865, 24827, 24817, 24845, 24846, 24903, 24894, 24872, 24871, 24906, 24895, 24892, 24876, 24884, 24893, 24898, 24900, 24947, 24951, 24920, 24921, 24922, 24939, 24948, 24943, 24933, 24945, 24927, 24925, 24915, 24949, 24985, 24982, 24967, 25004, 24980, 24986, 24970, 24977, 25003, 25006, 25036, 25034, 25033, 25079, 25032, 25027, 25030, 25018, 25035, 32633, 25037, 25062, 25059, 25078, 25082, 25076, 25087, 25085, 25084, 25086, 25088, 25096, 25097, 25101, 25100, 25108, 25115, 25118, 25121, 25130, 25134, 25136, 25138, 25139, 25153, 25166, 25182, 25187, 25179, 25184, 25192, 25212, 25218, 25225, 25214, 25234, 25235, 25238, 25300, 25219, 25236, 25303, 25297, 25275, 25295, 25343, 25286, 25812, 25288, 25308, 25292, 25290, 25282, 25287, 25243, 25289, 25356, 25326, 25329, 25383, 25346, 25352, 25327, 25333, 25424, 25406, 25421, 25628, 25423, 25494, 25486, 25472, 25515, 25462, 25507, 25487, 25481, 25503, 25525, 25451, 25449, 25534, 25577, 25536, 25542, 25571, 25545, 25554, 25590, 25540, 25622, 25652, 25606, 25619, 25638, 25654, 25885, 25623, 25640, 25615, 25703, 25711, 25718, 25678, 25898, 25749, 25747, 25765, 25769, 25736, 25788, 25818, 25810, 25797, 25799, 25787, 25816, 25794, 25841, 25831, 33289, 25824, 25825, 25260, 25827, 25839, 25900, 25846, 25844, 25842, 25850, 25856, 25853, 25880, 25884, 25861, 25892, 25891, 25899, 25908, 25909, 25911, 25910, 25912, 30027, 25928, 25942, 25941, 25933, 25944, 25950, 25949, 25970, 25976, 25986, 25987, 35722, 26011, 26015, 26027, 26039, 26051, 26054, 26049, 26052, 26060, 26066, 26075, 26073, 26080, 26081, 26097, 26482, 26122, 26115, 26107, 26483, 26165, 26166, 26164, 26140, 26191, 26180, 26185, 26177, 26206, 26205, 26212, 26215, 26216, 26207, 26210, 26224, 26243, 26248, 26254, 26249, 26244, 26264, 26269, 26305, 26297, 26313, 26302, 26300, 26308, 26296, 26326, 26330, 26336, 26175, 26342, 26345, 26352, 26357, 26359, 26383, 26390, 26398, 26406, 26407, 38712, 26414, 26431, 26422, 26433, 26424, 26423, 26438, 26462, 26464, 26457, 26467, 26468, 26505, 26480, 26537, 26492, 26474, 26508, 26507, 26534, 26529, 26501, 26551, 26607, 26548, 26604, 26547, 26601, 26552, 26596, 26590, 26589, 26594, 26606, 26553, 26574, 26566, 26599, 27292, 26654, 26694, 26665, 26688, 26701, 26674, 26702, 26803, 26667, 26713, 26723, 26743, 26751, 26783, 26767, 26797, 26772, 26781, 26779, 26755, 27310, 26809, 26740, 26805, 26784, 26810, 26895, 26765, 26750, 26881, 26826, 26888, 26840, 26914, 26918, 26849, 26892, 26829, 26836, 26855, 26837, 26934, 26898, 26884, 26839, 26851, 26917, 26873, 26848, 26863, 26920, 26922, 26906, 26915, 26913, 26822, 27001, 26999, 26972, 27e3, 26987, 26964, 27006, 26990, 26937, 26996, 26941, 26969, 26928, 26977, 26974, 26973, 27009, 26986, 27058, 27054, 27088, 27071, 27073, 27091, 27070, 27086, 23528, 27082, 27101, 27067, 27075, 27047, 27182, 27025, 27040, 27036, 27029, 27060, 27102, 27112, 27138, 27163, 27135, 27402, 27129, 27122, 27111, 27141, 27057, 27166, 27117, 27156, 27115, 27146, 27154, 27329, 27171, 27155, 27204, 27148, 27250, 27190, 27256, 27207, 27234, 27225, 27238, 27208, 27192, 27170, 27280, 27277, 27296, 27268, 27298, 27299, 27287, 34327, 27323, 27331, 27330, 27320, 27315, 27308, 27358, 27345, 27359, 27306, 27354, 27370, 27387, 27397, 34326, 27386, 27410, 27414, 39729, 27423, 27448, 27447, 30428, 27449, 39150, 27463, 27459, 27465, 27472, 27481, 27476, 27483, 27487, 27489, 27512, 27513, 27519, 27520, 27524, 27523, 27533, 27544, 27541, 27550, 27556, 27562, 27563, 27567, 27570, 27569, 27571, 27575, 27580, 27590, 27595, 27603, 27615, 27628, 27627, 27635, 27631, 40638, 27656, 27667, 27668, 27675, 27684, 27683, 27742, 27733, 27746, 27754, 27778, 27789, 27802, 27777, 27803, 27774, 27752, 27763, 27794, 27792, 27844, 27889, 27859, 27837, 27863, 27845, 27869, 27822, 27825, 27838, 27834, 27867, 27887, 27865, 27882, 27935, 34893, 27958, 27947, 27965, 27960, 27929, 27957, 27955, 27922, 27916, 28003, 28051, 28004, 27994, 28025, 27993, 28046, 28053, 28644, 28037, 28153, 28181, 28170, 28085, 28103, 28134, 28088, 28102, 28140, 28126, 28108, 28136, 28114, 28101, 28154, 28121, 28132, 28117, 28138, 28142, 28205, 28270, 28206, 28185, 28274, 28255, 28222, 28195, 28267, 28203, 28278, 28237, 28191, 28227, 28218, 28238, 28196, 28415, 28189, 28216, 28290, 28330, 28312, 28361, 28343, 28371, 28349, 28335, 28356, 28338, 28372, 28373, 28303, 28325, 28354, 28319, 28481, 28433, 28748, 28396, 28408, 28414, 28479, 28402, 28465, 28399, 28466, 28364, 28478, 28435, 28407, 28550, 28538, 28536, 28545, 28544, 28527, 28507, 28659, 28525, 28546, 28540, 28504, 28558, 28561, 28610, 28518, 28595, 28579, 28577, 28580, 28601, 28614, 28586, 28639, 28629, 28652, 28628, 28632, 28657, 28654, 28635, 28681, 28683, 28666, 28689, 28673, 28687, 28670, 28699, 28698, 28532, 28701, 28696, 28703, 28720, 28734, 28722, 28753, 28771, 28825, 28818, 28847, 28913, 28844, 28856, 28851, 28846, 28895, 28875, 28893, 28889, 28937, 28925, 28956, 28953, 29029, 29013, 29064, 29030, 29026, 29004, 29014, 29036, 29071, 29179, 29060, 29077, 29096, 29100, 29143, 29113, 29118, 29138, 29129, 29140, 29134, 29152, 29164, 29159, 29173, 29180, 29177, 29183, 29197, 29200, 29211, 29224, 29229, 29228, 29232, 29234, 29243, 29244, 29247, 29248, 29254, 29259, 29272, 29300, 29310, 29314, 29313, 29319, 29330, 29334, 29346, 29351, 29369, 29362, 29379, 29382, 29380, 29390, 29394, 29410, 29408, 29409, 29433, 29431, 20495, 29463, 29450, 29468, 29462, 29469, 29492, 29487, 29481, 29477, 29502, 29518, 29519, 40664, 29527, 29546, 29544, 29552, 29560, 29557, 29563, 29562, 29640, 29619, 29646, 29627, 29632, 29669, 29678, 29662, 29858, 29701, 29807, 29733, 29688, 29746, 29754, 29781, 29759, 29791, 29785, 29761, 29788, 29801, 29808, 29795, 29802, 29814, 29822, 29835, 29854, 29863, 29898, 29903, 29908, 29681, 29920, 29923, 29927, 29929, 29934, 29938, 29936, 29937, 29944, 29943, 29956, 29955, 29957, 29964, 29966, 29965, 29973, 29971, 29982, 29990, 29996, 30012, 30020, 30029, 30026, 30025, 30043, 30022, 30042, 30057, 30052, 30055, 30059, 30061, 30072, 30070, 30086, 30087, 30068, 30090, 30089, 30082, 30100, 30106, 30109, 30117, 30115, 30146, 30131, 30147, 30133, 30141, 30136, 30140, 30129, 30157, 30154, 30162, 30169, 30179, 30174, 30206, 30207, 30204, 30209, 30192, 30202, 30194, 30195, 30219, 30221, 30217, 30239, 30247, 30240, 30241, 30242, 30244, 30260, 30256, 30267, 30279, 30280, 30278, 30300, 30296, 30305, 30306, 30312, 30313, 30314, 30311, 30316, 30320, 30322, 30326, 30328, 30332, 30336, 30339, 30344, 30347, 30350, 30358, 30355, 30361, 30362, 30384, 30388, 30392, 30393, 30394, 30402, 30413, 30422, 30418, 30430, 30433, 30437, 30439, 30442, 34351, 30459, 30472, 30471, 30468, 30505, 30500, 30494, 30501, 30502, 30491, 30519, 30520, 30535, 30554, 30568, 30571, 30555, 30565, 30591, 30590, 30585, 30606, 30603, 30609, 30624, 30622, 30640, 30646, 30649, 30655, 30652, 30653, 30651, 30663, 30669, 30679, 30682, 30684, 30691, 30702, 30716, 30732, 30738, 31014, 30752, 31018, 30789, 30862, 30836, 30854, 30844, 30874, 30860, 30883, 30901, 30890, 30895, 30929, 30918, 30923, 30932, 30910, 30908, 30917, 30922, 30956, 30951, 30938, 30973, 30964, 30983, 30994, 30993, 31001, 31020, 31019, 31040, 31072, 31063, 31071, 31066, 31061, 31059, 31098, 31103, 31114, 31133, 31143, 40779, 31146, 31150, 31155, 31161, 31162, 31177, 31189, 31207, 31212, 31201, 31203, 31240, 31245, 31256, 31257, 31264, 31263, 31104, 31281, 31291, 31294, 31287, 31299, 31319, 31305, 31329, 31330, 31337, 40861, 31344, 31353, 31357, 31368, 31383, 31381, 31384, 31382, 31401, 31432, 31408, 31414, 31429, 31428, 31423, 36995, 31431, 31434, 31437, 31439, 31445, 31443, 31449, 31450, 31453, 31457, 31458, 31462, 31469, 31472, 31490, 31503, 31498, 31494, 31539, 31512, 31513, 31518, 31541, 31528, 31542, 31568, 31610, 31492, 31565, 31499, 31564, 31557, 31605, 31589, 31604, 31591, 31600, 31601, 31596, 31598, 31645, 31640, 31647, 31629, 31644, 31642, 31627, 31634, 31631, 31581, 31641, 31691, 31681, 31692, 31695, 31668, 31686, 31709, 31721, 31761, 31764, 31718, 31717, 31840, 31744, 31751, 31763, 31731, 31735, 31767, 31757, 31734, 31779, 31783, 31786, 31775, 31799, 31787, 31805, 31820, 31811, 31828, 31823, 31808, 31824, 31832, 31839, 31844, 31830, 31845, 31852, 31861, 31875, 31888, 31908, 31917, 31906, 31915, 31905, 31912, 31923, 31922, 31921, 31918, 31929, 31933, 31936, 31941, 31938, 31960, 31954, 31964, 31970, 39739, 31983, 31986, 31988, 31990, 31994, 32006, 32002, 32028, 32021, 32010, 32069, 32075, 32046, 32050, 32063, 32053, 32070, 32115, 32086, 32078, 32114, 32104, 32110, 32079, 32099, 32147, 32137, 32091, 32143, 32125, 32155, 32186, 32174, 32163, 32181, 32199, 32189, 32171, 32317, 32162, 32175, 32220, 32184, 32159, 32176, 32216, 32221, 32228, 32222, 32251, 32242, 32225, 32261, 32266, 32291, 32289, 32274, 32305, 32287, 32265, 32267, 32290, 32326, 32358, 32315, 32309, 32313, 32323, 32311, 32306, 32314, 32359, 32349, 32342, 32350, 32345, 32346, 32377, 32362, 32361, 32380, 32379, 32387, 32213, 32381, 36782, 32383, 32392, 32393, 32396, 32402, 32400, 32403, 32404, 32406, 32398, 32411, 32412, 32568, 32570, 32581, 32588, 32589, 32590, 32592, 32593, 32597, 32596, 32600, 32607, 32608, 32616, 32617, 32615, 32632, 32642, 32646, 32643, 32648, 32647, 32652, 32660, 32670, 32669, 32666, 32675, 32687, 32690, 32697, 32686, 32694, 32696, 35697, 32709, 32710, 32714, 32725, 32724, 32737, 32742, 32745, 32755, 32761, 39132, 32774, 32772, 32779, 32786, 32792, 32793, 32796, 32801, 32808, 32831, 32827, 32842, 32838, 32850, 32856, 32858, 32863, 32866, 32872, 32883, 32882, 32880, 32886, 32889, 32893, 32895, 32900, 32902, 32901, 32923, 32915, 32922, 32941, 20880, 32940, 32987, 32997, 32985, 32989, 32964, 32986, 32982, 33033, 33007, 33009, 33051, 33065, 33059, 33071, 33099, 38539, 33094, 33086, 33107, 33105, 33020, 33137, 33134, 33125, 33126, 33140, 33155, 33160, 33162, 33152, 33154, 33184, 33173, 33188, 33187, 33119, 33171, 33193, 33200, 33205, 33214, 33208, 33213, 33216, 33218, 33210, 33225, 33229, 33233, 33241, 33240, 33224, 33242, 33247, 33248, 33255, 33274, 33275, 33278, 33281, 33282, 33285, 33287, 33290, 33293, 33296, 33302, 33321, 33323, 33336, 33331, 33344, 33369, 33368, 33373, 33370, 33375, 33380, 33378, 33384, 33386, 33387, 33326, 33393, 33399, 33400, 33406, 33421, 33426, 33451, 33439, 33467, 33452, 33505, 33507, 33503, 33490, 33524, 33523, 33530, 33683, 33539, 33531, 33529, 33502, 33542, 33500, 33545, 33497, 33589, 33588, 33558, 33586, 33585, 33600, 33593, 33616, 33605, 33583, 33579, 33559, 33560, 33669, 33690, 33706, 33695, 33698, 33686, 33571, 33678, 33671, 33674, 33660, 33717, 33651, 33653, 33696, 33673, 33704, 33780, 33811, 33771, 33742, 33789, 33795, 33752, 33803, 33729, 33783, 33799, 33760, 33778, 33805, 33826, 33824, 33725, 33848, 34054, 33787, 33901, 33834, 33852, 34138, 33924, 33911, 33899, 33965, 33902, 33922, 33897, 33862, 33836, 33903, 33913, 33845, 33994, 33890, 33977, 33983, 33951, 34009, 33997, 33979, 34010, 34e3, 33985, 33990, 34006, 33953, 34081, 34047, 34036, 34071, 34072, 34092, 34079, 34069, 34068, 34044, 34112, 34147, 34136, 34120, 34113, 34306, 34123, 34133, 34176, 34212, 34184, 34193, 34186, 34216, 34157, 34196, 34203, 34282, 34183, 34204, 34167, 34174, 34192, 34249, 34234, 34255, 34233, 34256, 34261, 34269, 34277, 34268, 34297, 34314, 34323, 34315, 34302, 34298, 34310, 34338, 34330, 34352, 34367, 34381, 20053, 34388, 34399, 34407, 34417, 34451, 34467, 34473, 34474, 34443, 34444, 34486, 34479, 34500, 34502, 34480, 34505, 34851, 34475, 34516, 34526, 34537, 34540, 34527, 34523, 34543, 34578, 34566, 34568, 34560, 34563, 34555, 34577, 34569, 34573, 34553, 34570, 34612, 34623, 34615, 34619, 34597, 34601, 34586, 34656, 34655, 34680, 34636, 34638, 34676, 34647, 34664, 34670, 34649, 34643, 34659, 34666, 34821, 34722, 34719, 34690, 34735, 34763, 34749, 34752, 34768, 38614, 34731, 34756, 34739, 34759, 34758, 34747, 34799, 34802, 34784, 34831, 34829, 34814, 34806, 34807, 34830, 34770, 34833, 34838, 34837, 34850, 34849, 34865, 34870, 34873, 34855, 34875, 34884, 34882, 34898, 34905, 34910, 34914, 34923, 34945, 34942, 34974, 34933, 34941, 34997, 34930, 34946, 34967, 34962, 34990, 34969, 34978, 34957, 34980, 34992, 35007, 34993, 35011, 35012, 35028, 35032, 35033, 35037, 35065, 35074, 35068, 35060, 35048, 35058, 35076, 35084, 35082, 35091, 35139, 35102, 35109, 35114, 35115, 35137, 35140, 35131, 35126, 35128, 35148, 35101, 35168, 35166, 35174, 35172, 35181, 35178, 35183, 35188, 35191, 35198, 35203, 35208, 35210, 35219, 35224, 35233, 35241, 35238, 35244, 35247, 35250, 35258, 35261, 35263, 35264, 35290, 35292, 35293, 35303, 35316, 35320, 35331, 35350, 35344, 35340, 35355, 35357, 35365, 35382, 35393, 35419, 35410, 35398, 35400, 35452, 35437, 35436, 35426, 35461, 35458, 35460, 35496, 35489, 35473, 35493, 35494, 35482, 35491, 35524, 35533, 35522, 35546, 35563, 35571, 35559, 35556, 35569, 35604, 35552, 35554, 35575, 35550, 35547, 35596, 35591, 35610, 35553, 35606, 35600, 35607, 35616, 35635, 38827, 35622, 35627, 35646, 35624, 35649, 35660, 35663, 35662, 35657, 35670, 35675, 35674, 35691, 35679, 35692, 35695, 35700, 35709, 35712, 35724, 35726, 35730, 35731, 35734, 35737, 35738, 35898, 35905, 35903, 35912, 35916, 35918, 35920, 35925, 35938, 35948, 35960, 35962, 35970, 35977, 35973, 35978, 35981, 35982, 35988, 35964, 35992, 25117, 36013, 36010, 36029, 36018, 36019, 36014, 36022, 36040, 36033, 36068, 36067, 36058, 36093, 36090, 36091, 36100, 36101, 36106, 36103, 36111, 36109, 36112, 40782, 36115, 36045, 36116, 36118, 36199, 36205, 36209, 36211, 36225, 36249, 36290, 36286, 36282, 36303, 36314, 36310, 36300, 36315, 36299, 36330, 36331, 36319, 36323, 36348, 36360, 36361, 36351, 36381, 36382, 36368, 36383, 36418, 36405, 36400, 36404, 36426, 36423, 36425, 36428, 36432, 36424, 36441, 36452, 36448, 36394, 36451, 36437, 36470, 36466, 36476, 36481, 36487, 36485, 36484, 36491, 36490, 36499, 36497, 36500, 36505, 36522, 36513, 36524, 36528, 36550, 36529, 36542, 36549, 36552, 36555, 36571, 36579, 36604, 36603, 36587, 36606, 36618, 36613, 36629, 36626, 36633, 36627, 36636, 36639, 36635, 36620, 36646, 36659, 36667, 36665, 36677, 36674, 36670, 36684, 36681, 36678, 36686, 36695, 36700, 36706, 36707, 36708, 36764, 36767, 36771, 36781, 36783, 36791, 36826, 36837, 36834, 36842, 36847, 36999, 36852, 36869, 36857, 36858, 36881, 36885, 36897, 36877, 36894, 36886, 36875, 36903, 36918, 36917, 36921, 36856, 36943, 36944, 36945, 36946, 36878, 36937, 36926, 36950, 36952, 36958, 36968, 36975, 36982, 38568, 36978, 36994, 36989, 36993, 36992, 37002, 37001, 37007, 37032, 37039, 37041, 37045, 37090, 37092, 25160, 37083, 37122, 37138, 37145, 37170, 37168, 37194, 37206, 37208, 37219, 37221, 37225, 37235, 37234, 37259, 37257, 37250, 37282, 37291, 37295, 37290, 37301, 37300, 37306, 37312, 37313, 37321, 37323, 37328, 37334, 37343, 37345, 37339, 37372, 37365, 37366, 37406, 37375, 37396, 37420, 37397, 37393, 37470, 37463, 37445, 37449, 37476, 37448, 37525, 37439, 37451, 37456, 37532, 37526, 37523, 37531, 37466, 37583, 37561, 37559, 37609, 37647, 37626, 37700, 37678, 37657, 37666, 37658, 37667, 37690, 37685, 37691, 37724, 37728, 37756, 37742, 37718, 37808, 37804, 37805, 37780, 37817, 37846, 37847, 37864, 37861, 37848, 37827, 37853, 37840, 37832, 37860, 37914, 37908, 37907, 37891, 37895, 37904, 37942, 37931, 37941, 37921, 37946, 37953, 37970, 37956, 37979, 37984, 37986, 37982, 37994, 37417, 38e3, 38005, 38007, 38013, 37978, 38012, 38014, 38017, 38015, 38274, 38279, 38282, 38292, 38294, 38296, 38297, 38304, 38312, 38311, 38317, 38332, 38331, 38329, 38334, 38346, 28662, 38339, 38349, 38348, 38357, 38356, 38358, 38364, 38369, 38373, 38370, 38433, 38440, 38446, 38447, 38466, 38476, 38479, 38475, 38519, 38492, 38494, 38493, 38495, 38502, 38514, 38508, 38541, 38552, 38549, 38551, 38570, 38567, 38577, 38578, 38576, 38580, 38582, 38584, 38585, 38606, 38603, 38601, 38605, 35149, 38620, 38669, 38613, 38649, 38660, 38662, 38664, 38675, 38670, 38673, 38671, 38678, 38681, 38692, 38698, 38704, 38713, 38717, 38718, 38724, 38726, 38728, 38722, 38729, 38748, 38752, 38756, 38758, 38760, 21202, 38763, 38769, 38777, 38789, 38780, 38785, 38778, 38790, 38795, 38799, 38800, 38812, 38824, 38822, 38819, 38835, 38836, 38851, 38854, 38856, 38859, 38876, 38893, 40783, 38898, 31455, 38902, 38901, 38927, 38924, 38968, 38948, 38945, 38967, 38973, 38982, 38991, 38987, 39019, 39023, 39024, 39025, 39028, 39027, 39082, 39087, 39089, 39094, 39108, 39107, 39110, 39145, 39147, 39171, 39177, 39186, 39188, 39192, 39201, 39197, 39198, 39204, 39200, 39212, 39214, 39229, 39230, 39234, 39241, 39237, 39248, 39243, 39249, 39250, 39244, 39253, 39319, 39320, 39333, 39341, 39342, 39356, 39391, 39387, 39389, 39384, 39377, 39405, 39406, 39409, 39410, 39419, 39416, 39425, 39439, 39429, 39394, 39449, 39467, 39479, 39493, 39490, 39488, 39491, 39486, 39509, 39501, 39515, 39511, 39519, 39522, 39525, 39524, 39529, 39531, 39530, 39597, 39600, 39612, 39616, 39631, 39633, 39635, 39636, 39646, 39647, 39650, 39651, 39654, 39663, 39659, 39662, 39668, 39665, 39671, 39675, 39686, 39704, 39706, 39711, 39714, 39715, 39717, 39719, 39720, 39721, 39722, 39726, 39727, 39730, 39748, 39747, 39759, 39757, 39758, 39761, 39768, 39796, 39827, 39811, 39825, 39830, 39831, 39839, 39840, 39848, 39860, 39872, 39882, 39865, 39878, 39887, 39889, 39890, 39907, 39906, 39908, 39892, 39905, 39994, 39922, 39921, 39920, 39957, 39956, 39945, 39955, 39948, 39942, 39944, 39954, 39946, 39940, 39982, 39963, 39973, 39972, 39969, 39984, 40007, 39986, 40006, 39998, 40026, 40032, 40039, 40054, 40056, 40167, 40172, 40176, 40201, 40200, 40171, 40195, 40198, 40234, 40230, 40367, 40227, 40223, 40260, 40213, 40210, 40257, 40255, 40254, 40262, 40264, 40285, 40286, 40292, 40273, 40272, 40281, 40306, 40329, 40327, 40363, 40303, 40314, 40346, 40356, 40361, 40370, 40388, 40385, 40379, 40376, 40378, 40390, 40399, 40386, 40409, 40403, 40440, 40422, 40429, 40431, 40445, 40474, 40475, 40478, 40565, 40569, 40573, 40577, 40584, 40587, 40588, 40594, 40597, 40593, 40605, 40613, 40617, 40632, 40618, 40621, 38753, 40652, 40654, 40655, 40656, 40660, 40668, 40670, 40669, 40672, 40677, 40680, 40687, 40692, 40694, 40695, 40697, 40699, 40700, 40701, 40711, 40712, 30391, 40725, 40737, 40748, 40766, 40778, 40786, 40788, 40803, 40799, 40800, 40801, 40806, 40807, 40812, 40810, 40823, 40818, 40822, 40853, 40860, 40864, 22575, 27079, 36953, 29796, 20956, 29081, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, 23532, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, 26121, 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, 26362, 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, 29020, 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, 30063, 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, 31024, 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, 35383, 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, 64035, 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, 37937, 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, 38737, 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, null, null, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 65506, 65508, 65287, 65282, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 8560, 8561, 8562, 8563, 8564, 8565, 8566, 8567, 8568, 8569, 8544, 8545, 8546, 8547, 8548, 8549, 8550, 8551, 8552, 8553, 65506, 65508, 65287, 65282, 12849, 8470, 8481, 8757, 32394, 35100, 37704, 37512, 34012, 20425, 28859, 26161, 26824, 37625, 26363, 24389, 20008, 20193, 20220, 20224, 20227, 20281, 20310, 20370, 20362, 20378, 20372, 20429, 20544, 20514, 20479, 20510, 20550, 20592, 20546, 20628, 20724, 20696, 20810, 20836, 20893, 20926, 20972, 21013, 21148, 21158, 21184, 21211, 21248, 21255, 21284, 21362, 21395, 21426, 21469, 64014, 21660, 21642, 21673, 21759, 21894, 22361, 22373, 22444, 22472, 22471, 64015, 64016, 22686, 22706, 22795, 22867, 22875, 22877, 22883, 22948, 22970, 23382, 23488, 29999, 23512, 23532, 23582, 23718, 23738, 23797, 23847, 23891, 64017, 23874, 23917, 23992, 23993, 24016, 24353, 24372, 24423, 24503, 24542, 24669, 24709, 24714, 24798, 24789, 24864, 24818, 24849, 24887, 24880, 24984, 25107, 25254, 25589, 25696, 25757, 25806, 25934, 26112, 26133, 26171, 26121, 26158, 26142, 26148, 26213, 26199, 26201, 64018, 26227, 26265, 26272, 26290, 26303, 26362, 26382, 63785, 26470, 26555, 26706, 26560, 26625, 26692, 26831, 64019, 26984, 64020, 27032, 27106, 27184, 27243, 27206, 27251, 27262, 27362, 27364, 27606, 27711, 27740, 27782, 27759, 27866, 27908, 28039, 28015, 28054, 28076, 28111, 28152, 28146, 28156, 28217, 28252, 28199, 28220, 28351, 28552, 28597, 28661, 28677, 28679, 28712, 28805, 28843, 28943, 28932, 29020, 28998, 28999, 64021, 29121, 29182, 29361, 29374, 29476, 64022, 29559, 29629, 29641, 29654, 29667, 29650, 29703, 29685, 29734, 29738, 29737, 29742, 29794, 29833, 29855, 29953, 30063, 30338, 30364, 30366, 30363, 30374, 64023, 30534, 21167, 30753, 30798, 30820, 30842, 31024, 64024, 64025, 64026, 31124, 64027, 31131, 31441, 31463, 64028, 31467, 31646, 64029, 32072, 32092, 32183, 32160, 32214, 32338, 32583, 32673, 64030, 33537, 33634, 33663, 33735, 33782, 33864, 33972, 34131, 34137, 34155, 64031, 34224, 64032, 64033, 34823, 35061, 35346, 35383, 35449, 35495, 35518, 35551, 64034, 35574, 35667, 35711, 36080, 36084, 36114, 36214, 64035, 36559, 64036, 64037, 36967, 37086, 64038, 37141, 37159, 37338, 37335, 37342, 37357, 37358, 37348, 37349, 37382, 37392, 37386, 37434, 37440, 37436, 37454, 37465, 37457, 37433, 37479, 37543, 37495, 37496, 37607, 37591, 37593, 37584, 64039, 37589, 37600, 37587, 37669, 37665, 37627, 64040, 37662, 37631, 37661, 37634, 37744, 37719, 37796, 37830, 37854, 37880, 37937, 37957, 37960, 38290, 63964, 64041, 38557, 38575, 38707, 38715, 38723, 38733, 38735, 38737, 38741, 38999, 39013, 64042, 64043, 39207, 64044, 39326, 39502, 39641, 39644, 39797, 39794, 39823, 39857, 39867, 39936, 40304, 40299, 64045, 40473, 40657, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
||
"jis0212": [null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 728, 711, 184, 729, 733, 175, 731, 730, 65374, 900, 901, null, null, null, null, null, null, null, null, 161, 166, 191, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 186, 170, 169, 174, 8482, 164, 8470, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 902, 904, 905, 906, 938, null, 908, null, 910, 939, null, 911, null, null, null, null, 940, 941, 942, 943, 970, 912, 972, 962, 973, 971, 944, 974, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1038, 1039, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 1118, 1119, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 198, 272, null, 294, null, 306, null, 321, 319, null, 330, 216, 338, null, 358, 222, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 230, 273, 240, 295, 305, 307, 312, 322, 320, 329, 331, 248, 339, 223, 359, 254, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 193, 192, 196, 194, 258, 461, 256, 260, 197, 195, 262, 264, 268, 199, 266, 270, 201, 200, 203, 202, 282, 278, 274, 280, null, 284, 286, 290, 288, 292, 205, 204, 207, 206, 463, 304, 298, 302, 296, 308, 310, 313, 317, 315, 323, 327, 325, 209, 211, 210, 214, 212, 465, 336, 332, 213, 340, 344, 342, 346, 348, 352, 350, 356, 354, 218, 217, 220, 219, 364, 467, 368, 362, 370, 366, 360, 471, 475, 473, 469, 372, 221, 376, 374, 377, 381, 379, null, null, null, null, null, null, null, 225, 224, 228, 226, 259, 462, 257, 261, 229, 227, 263, 265, 269, 231, 267, 271, 233, 232, 235, 234, 283, 279, 275, 281, 501, 285, 287, null, 289, 293, 237, 236, 239, 238, 464, null, 299, 303, 297, 309, 311, 314, 318, 316, 324, 328, 326, 241, 243, 242, 246, 244, 466, 337, 333, 245, 341, 345, 343, 347, 349, 353, 351, 357, 355, 250, 249, 252, 251, 365, 468, 369, 363, 371, 367, 361, 472, 476, 474, 470, 373, 253, 255, 375, 378, 382, 380, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 19970, 19972, 19973, 19980, 19986, 19999, 20003, 20004, 20008, 20011, 20014, 20015, 20016, 20021, 20032, 20033, 20036, 20039, 20049, 20058, 20060, 20067, 20072, 20073, 20084, 20085, 20089, 20095, 20109, 20118, 20119, 20125, 20143, 20153, 20163, 20176, 20186, 20187, 20192, 20193, 20194, 20200, 20207, 20209, 20211, 20213, 20221, 20222, 20223, 20224, 20226, 20227, 20232, 20235, 20236, 20242, 20245, 20246, 20247, 20249, 20270, 20273, 20320, 20275, 20277, 20279, 20281, 20283, 20286, 20288, 20290, 20296, 20297, 20299, 20300, 20306, 20308, 20310, 20312, 20319, 20323, 20330, 20332, 20334, 20337, 20343, 20344, 20345, 20346, 20349, 20350, 20353, 20354, 20356, 20357, 20361, 20362, 20364, 20366, 20368, 20370, 20371, 20372, 20375, 20377, 20378, 20382, 20383, 20402, 20407, 20409, 20411, 20412, 20413, 20414, 20416, 20417, 20421, 20422, 20424, 20425, 20427, 20428, 20429, 20431, 20434, 20444, 20448, 20450, 20464, 20466, 20476, 20477, 20479, 20480, 20481, 20484, 20487, 20490, 20492, 20494, 20496, 20499, 20503, 20504, 20507, 20508, 20509, 20510, 20514, 20519, 20526, 20528, 20530, 20531, 20533, 20544, 20545, 20546, 20549, 20550, 20554, 20556, 20558, 20561, 20562, 20563, 20567, 20569, 20575, 20576, 20578, 20579, 20582, 20583, 20586, 20589, 20592, 20593, 20539, 20609, 20611, 20612, 20614, 20618, 20622, 20623, 20624, 20626, 20627, 20628, 20630, 20635, 20636, 20638, 20639, 20640, 20641, 20642, 20650, 20655, 20656, 20665, 20666, 20669, 20672, 20675, 20676, 20679, 20684, 20686, 20688, 20691, 20692, 20696, 20700, 20701, 20703, 20706, 20708, 20710, 20712, 20713, 20719, 20721, 20726, 20730, 20734, 20739, 20742, 20743, 20744, 20747, 20748, 20749, 20750, 20722, 20752, 20759, 20761, 20763, 20764, 20765, 20766, 20771, 20775, 20776, 20780, 20781, 20783, 20785, 20787, 20788, 20789, 20792, 20793, 20802, 20810, 20815, 20819, 20821, 20823, 20824, 20831, 20836, 20838, 20862, 20867, 20868, 20875, 20878, 20888, 20893, 20897, 20899, 20909, 20920, 20922, 20924, 20926, 20927, 20930, 20936, 20943, 20945, 20946, 20947, 20949, 20952, 20958, 20962, 20965, 20974, 20978, 20979, 20980, 20983, 20993, 20994, 20997, 21010, 21011, 21013, 21014, 21016, 21026, 21032, 21041, 21042, 21045, 21052, 21061, 21065, 21077, 21079, 21080, 21082, 21084, 21087, 21088, 21089, 21094, 21102, 21111, 21112, 21113, 21120, 21122, 21125, 21130, 21132, 21139, 21141, 21142, 21143, 21144, 21146, 21148, 21156, 21157, 21158, 21159, 21167, 21168, 21174, 21175, 21176, 21178, 21179, 21181, 21184, 21188, 21190, 21192, 21196, 21199, 21201, 21204, 21206, 21211, 21212, 21217, 21221, 21224, 21225, 21226, 21228, 21232, 21233, 21236, 21238, 21239, 21248, 21251, 21258, 21259, 21260, 21265, 21267, 21272, 21275, 21276, 21278, 21279, 21285, 21287, 21288, 21289, 21291, 21292, 21293, 21296, 21298, 21301, 21308, 21309, 21310, 21314, 21324, 21323, 21337, 21339, 21345, 21347, 21349, 21356, 21357, 21362, 21369, 21374, 21379, 21383, 21384, 21390, 21395, 21396, 21401, 21405, 21409, 21412, 21418, 21419, 21423, 21426, 21428, 21429, 21431, 21432, 21434, 21437, 21440, 21445, 21455, 21458, 21459, 21461, 21466, 21469, 21470, 21472, 21478, 21479, 21493, 21506, 21523, 21530, 21537, 21543, 21544, 21546, 21551, 21553, 21556, 21557, 21571, 21572, 21575, 21581, 21583, 21598, 21602, 21604, 21606, 21607, 21609, 21611, 21613, 21614, 21620, 21631, 21633, 21635, 21637, 21640, 21641, 21645, 21649, 21653, 21654, 21660, 21663, 21665, 21670, 21671, 21673, 21674, 21677, 21678, 21681, 21687, 21689, 21690, 21691, 21695, 21702, 21706, 21709, 21710, 21728, 21738, 21740, 21743, 21750, 21756, 21758, 21759, 21760, 21761, 21765, 21768, 21769, 21772, 21773, 21774, 21781, 21802, 21803, 21810, 21813, 21814, 21819, 21820, 21821, 21825, 21831, 21833, 21834, 21837, 21840, 21841, 21848, 21850, 21851, 21854, 21856, 21857, 21860, 21862, 21887, 21889, 21890, 21894, 21896, 21902, 21903, 21905, 21906, 21907, 21908, 21911, 21923, 21924, 21933, 21938, 21951, 21953, 21955, 21958, 21961, 21963, 21964, 21966, 21969, 21970, 21971, 21975, 21976, 21979, 21982, 21986, 21993, 22006, 22015, 22021, 22024, 22026, 22029, 22030, 22031, 22032, 22033, 22034, 22041, 22060, 22064, 22067, 22069, 22071, 22073, 22075, 22076, 22077, 22079, 22080, 22081, 22083, 22084, 22086, 22089, 22091, 22093, 22095, 22100, 22110, 22112, 22113, 22114, 22115, 22118, 22121, 22125, 22127, 22129, 22130, 22133, 22148, 22149, 22152, 22155, 22156, 22165, 22169, 22170, 22173, 22174, 22175, 22182, 22183, 22184, 22185, 22187, 22188, 22189, 22193, 22195, 22199, 22206, 22213, 22217, 22218, 22219, 22223, 22224, 22220, 22221, 22233, 22236, 22237, 22239, 22241, 22244, 22245, 22246, 22247, 22248, 22257, 22251, 22253, 22262, 22263, 22273, 22274, 22279, 22282, 22284, 22289, 22293, 22298, 22299, 22301, 22304, 22306, 22307, 22308, 22309, 22313, 22314, 22316, 22318, 22319, 22323, 22324, 22333, 22334, 22335, 22341, 22342, 22348, 22349, 22354, 22370, 22373, 22375, 22376, 22379, 22381, 22382, 22383, 22384, 22385, 22387, 22388, 22389, 22391, 22393, 22394, 22395, 22396, 22398, 22401, 22403, 22412, 22420, 22423, 22425, 22426, 22428, 22429, 22430, 22431, 22433, 22421, 22439, 22440, 22441, 22444, 22456, 22461, 22471, 22472, 22476, 22479, 22485, 22493, 22494, 22500, 22502, 22503, 22505, 22509, 22512, 22517, 22518, 22520, 22525, 22526, 22527, 22531, 22532, 22536, 22537, 22497, 22540, 22541, 22555, 22558, 22559, 22560, 22566, 22567, 22573, 22578, 22585, 22591, 22601, 22604, 22605, 22607, 22608, 22613, 22623, 22625, 22628, 22631, 22632, 22648, 22652, 22655, 22656, 22657, 22663, 22664, 22665, 22666, 22668, 22669, 22671, 22672, 22676, 22678, 22685, 22688, 22689, 22690, 22694, 22697, 22705, 22706, 22724, 22716, 22722, 22728, 22733, 22734, 22736, 22738, 22740, 22742, 22746, 22749, 22753, 22754, 22761, 22771, 22789, 22790, 22795, 22796, 22802, 22803, 22804, 34369, 22813, 22817, 22819, 22820, 22824, 22831, 22832, 22835, 22837, 22838, 22847, 22851, 22854, 22866, 22867, 22873, 22875, 22877, 22878, 22879, 22881, 22883, 22891, 22893, 22895, 22898, 22901, 22902, 22905, 22907, 22908, 22923, 22924, 22926, 22930, 22933, 22935, 22943, 22948, 22951, 22957, 22958, 22959, 22960, 22963, 22967, 22970, 22972, 22977, 22979, 22980, 22984, 22986, 22989, 22994, 23005, 23006, 23007, 23011, 23012, 23015, 23022, 23023, 23025, 23026, 23028, 23031, 23040, 23044, 23052, 23053, 23054, 23058, 23059, 23070, 23075, 23076, 23079, 23080, 23082, 23085, 23088, 23108, 23109, 23111, 23112, 23116, 23120, 23125, 23134, 23139, 23141, 23143, 23149, 23159, 23162, 23163, 23166, 23179, 23184, 23187, 23190, 23193, 23196, 23198, 23199, 23200, 23202, 23207, 23212, 23217, 23218, 23219, 23221, 23224, 23226, 23227, 23231, 23236, 23238, 23240, 23247, 23258, 23260, 23264, 23269, 23274, 23278, 23285, 23286, 23293, 23296, 23297, 23304, 23319, 23348, 23321, 23323, 23325, 23329, 23333, 23341, 23352, 23361, 23371, 23372, 23378, 23382, 23390, 23400, 23406, 23407, 23420, 23421, 23422, 23423, 23425, 23428, 23430, 23434, 23438, 23440, 23441, 23443, 23444, 23446, 23464, 23465, 23468, 23469, 23471, 23473, 23474, 23479, 23482, 23484, 23488, 23489, 23501, 23503, 23510, 23511, 23512, 23513, 23514, 23520, 23535, 23537, 23540, 23549, 23564, 23575, 23582, 23583, 23587, 23590, 23593, 23595, 23596, 23598, 23600, 23602, 23605, 23606, 23641, 23642, 23644, 23650, 23651, 23655, 23656, 23657, 23661, 23664, 23668, 23669, 23674, 23675, 23676, 23677, 23687, 23688, 23690, 23695, 23698, 23709, 23711, 23712, 23714, 23715, 23718, 23722, 23730, 23732, 23733, 23738, 23753, 23755, 23762, 23773, 23767, 23790, 23793, 23794, 23796, 23809, 23814, 23821, 23826, 23851, 23843, 23844, 23846, 23847, 23857, 23860, 23865, 23869, 23871, 23874, 23875, 23878, 23880, 23893, 23889, 23897, 23882, 23903, 23904, 23905, 23906, 23908, 23914, 23917, 23920, 23929, 23930, 23934, 23935, 23937, 23939, 23944, 23946, 23954, 23955, 23956, 23957, 23961, 23963, 23967, 23968, 23975, 23979, 23984, 23988, 23992, 23993, 24003, 24007, 24011, 24016, 24014, 24024, 24025, 24032, 24036, 24041, 24056, 24057, 24064, 24071, 24077, 24082, 24084, 24085, 24088, 24095, 24096, 24110, 24104, 24114, 24117, 24126, 24139, 24144, 24137, 24145, 24150, 24152, 24155, 24156, 24158, 24168, 24170, 24171, 24172, 24173, 24174, 24176, 24192, 24203, 24206, 24226, 24228, 24229, 24232, 24234, 24236, 24241, 24243, 24253, 24254, 24255, 24262, 24268, 24267, 24270, 24273, 24274, 24276, 24277, 24284, 24286, 24293, 24299, 24322, 24326, 24327, 24328, 24334, 24345, 24348, 24349, 24353, 24354, 24355, 24356, 24360, 24363, 24364, 24366, 24368, 24372, 24374, 24379, 24381, 24383, 24384, 24388, 24389, 24391, 24397, 24400, 24404, 24408, 24411, 24416, 24419, 24420, 24423, 24431, 24434, 24436, 24437, 24440, 24442, 24445, 24446, 24457, 24461, 24463, 24470, 24476, 24477, 24482, 24487, 24491, 24484, 24492, 24495, 24496, 24497, 24504, 24516, 24519, 24520, 24521, 24523, 24528, 24529, 24530, 24531, 24532, 24542, 24545, 24546, 24552, 24553, 24554, 24556, 24557, 24558, 24559, 24562, 24563, 24566, 24570, 24572, 24583, 24586, 24589, 24595, 24596, 24599, 24600, 24602, 24607, 24612, 24621, 24627, 24629, 24640, 24647, 24648, 24649, 24652, 24657, 24660, 24662, 24663, 24669, 24673, 24679, 24689, 24702, 24703, 24706, 24710, 24712, 24714, 24718, 24721, 24723, 24725, 24728, 24733, 24734, 24738, 24740, 24741, 24744, 24752, 24753, 24759, 24763, 24766, 24770, 24772, 24776, 24777, 24778, 24779, 24782, 24783, 24788, 24789, 24793, 24795, 24797, 24798, 24802, 24805, 24818, 24821, 24824, 24828, 24829, 24834, 24839, 24842, 24844, 24848, 24849, 24850, 24851, 24852, 24854, 24855, 24857, 24860, 24862, 24866, 24874, 24875, 24880, 24881, 24885, 24886, 24887, 24889, 24897, 24901, 24902, 24905, 24926, 24928, 24940, 24946, 24952, 24955, 24956, 24959, 24960, 24961, 24963, 24964, 24971, 24973, 24978, 24979, 24983, 24984, 24988, 24989, 24991, 24992, 24997, 25e3, 25002, 25005, 25016, 25017, 25020, 25024, 25025, 25026, 25038, 25039, 25045, 25052, 25053, 25054, 25055, 25057, 25058, 25063, 25065, 25061, 25068, 25069, 25071, 25089, 25091, 25092, 25095, 25107, 25109, 25116, 25120, 25122, 25123, 25127, 25129, 25131, 25145, 25149, 25154, 25155, 25156, 25158, 25164, 25168, 25169, 25170, 25172, 25174, 25178, 25180, 25188, 25197, 25199, 25203, 25210, 25213, 25229, 25230, 25231, 25232, 25254, 25256, 25267, 25270, 25271, 25274, 25278, 25279, 25284, 25294, 25301, 25302, 25306, 25322, 25330, 25332, 25340, 25341, 25347, 25348, 25354, 25355, 25357, 25360, 25363, 25366, 25368, 25385, 25386, 25389, 25397, 25398, 25401, 25404, 25409, 25410, 25411, 25412, 25414, 25418, 25419, 25422, 25426, 25427, 25428, 25432, 25435, 25445, 25446, 25452, 25453, 25457, 25460, 25461, 25464, 25468, 25469, 25471, 25474, 25476, 25479, 25482, 25488, 25492, 25493, 25497, 25498, 25502, 25508, 25510, 25517, 25518, 25519, 25533, 25537, 25541, 25544, 25550, 25553, 25555, 25556, 25557, 25564, 25568, 25573, 25578, 25580, 25586, 25587, 25589, 25592, 25593, 25609, 25610, 25616, 25618, 25620, 25624, 25630, 25632, 25634, 25636, 25637, 25641, 25642, 25647, 25648, 25653, 25661, 25663, 25675, 25679, 25681, 25682, 25683, 25684, 25690, 25691, 25692, 25693, 25695, 25696, 25697, 25699, 25709, 25715, 25716, 25723, 25725, 25733, 25735, 25743, 25744, 25745, 25752, 25753, 25755, 25757, 25759, 25761, 25763, 25766, 25768, 25772, 25779, 25789, 25790, 25791, 25796, 25801, 25802, 25803, 25804, 25806, 25808, 25809, 25813, 25815, 25828, 25829, 25833, 25834, 25837, 25840, 25845, 25847, 25851, 25855, 25857, 25860, 25864, 25865, 25866, 25871, 25875, 25876, 25878, 25881, 25883, 25886, 25887, 25890, 25894, 25897, 25902, 25905, 25914, 25916, 25917, 25923, 25927, 25929, 25936, 25938, 25940, 25951, 25952, 25959, 25963, 25978, 25981, 25985, 25989, 25994, 26002, 26005, 26008, 26013, 26016, 26019, 26022, 26030, 26034, 26035, 26036, 26047, 26050, 26056, 26057, 26062, 26064, 26068, 26070, 26072, 26079, 26096, 26098, 26100, 26101, 26105, 26110, 26111, 26112, 26116, 26120, 26121, 26125, 26129, 26130, 26133, 26134, 26141, 26142, 26145, 26146, 26147, 26148, 26150, 26153, 26154, 26155, 26156, 26158, 26160, 26161, 26163, 26169, 26167, 26176, 26181, 26182, 26186, 26188, 26193, 26190, 26199, 26200, 26201, 26203, 26204, 26208, 26209, 26363, 26218, 26219, 26220, 26238, 26227, 26229, 26239, 26231, 26232, 26233, 26235, 26240, 26236, 26251, 26252, 26253, 26256, 26258, 26265, 26266, 26267, 26268, 26271, 26272, 26276, 26285, 26289, 26290, 26293, 26299, 26303, 26304, 26306, 26307, 26312, 26316, 26318, 26319, 26324, 26331, 26335, 26344, 26347, 26348, 26350, 26362, 26373, 26375, 26382, 26387, 26393, 26396, 26400, 26402, 26419, 26430, 26437, 26439, 26440, 26444, 26452, 26453, 26461, 26470, 26476, 26478, 26484, 26486, 26491, 26497, 26500, 26510, 26511, 26513, 26515, 26518, 26520, 26521, 26523, 26544, 26545, 26546, 26549, 26555, 26556, 26557, 26617, 26560, 26562, 26563, 26565, 26568, 26569, 26578, 26583, 26585, 26588, 26593, 26598, 26608, 26610, 26614, 26615, 26706, 26644, 26649, 26653, 26655, 26664, 26663, 26668, 26669, 26671, 26672, 26673, 26675, 26683, 26687, 26692, 26693, 26698, 26700, 26709, 26711, 26712, 26715, 26731, 26734, 26735, 26736, 26737, 26738, 26741, 26745, 26746, 26747, 26748, 26754, 26756, 26758, 26760, 26774, 26776, 26778, 26780, 26785, 26787, 26789, 26793, 26794, 26798, 26802, 26811, 26821, 26824, 26828, 26831, 26832, 26833, 26835, 26838, 26841, 26844, 26845, 26853, 26856, 26858, 26859, 26860, 26861, 26864, 26865, 26869, 26870, 26875, 26876, 26877, 26886, 26889, 26890, 26896, 26897, 26899, 26902, 26903, 26929, 26931, 26933, 26936, 26939, 26946, 26949, 26953, 26958, 26967, 26971, 26979, 26980, 26981, 26982, 26984, 26985, 26988, 26992, 26993, 26994, 27002, 27003, 27007, 27008, 27021, 27026, 27030, 27032, 27041, 27045, 27046, 27048, 27051, 27053, 27055, 27063, 27064, 27066, 27068, 27077, 27080, 27089, 27094, 27095, 27106, 27109, 27118, 27119, 27121, 27123, 27125, 27134, 27136, 27137, 27139, 27151, 27153, 27157, 27162, 27165, 27168, 27172, 27176, 27184, 27186, 27188, 27191, 27195, 27198, 27199, 27205, 27206, 27209, 27210, 27214, 27216, 27217, 27218, 27221, 27222, 27227, 27236, 27239, 27242, 27249, 27251, 27262, 27265, 27267, 27270, 27271, 27273, 27275, 27281, 27291, 27293, 27294, 27295, 27301, 27307, 27311, 27312, 27313, 27316, 27325, 27326, 27327, 27334, 27337, 27336, 27340, 27344, 27348, 27349, 27350, 27356, 27357, 27364, 27367, 27372, 27376, 27377, 27378, 27388, 27389, 27394, 27395, 27398, 27399, 27401, 27407, 27408, 27409, 27415, 27419, 27422, 27428, 27432, 27435, 27436, 27439, 27445, 27446, 27451, 27455, 27462, 27466, 27469, 27474, 27478, 27480, 27485, 27488, 27495, 27499, 27502, 27504, 27509, 27517, 27518, 27522, 27525, 27543, 27547, 27551, 27552, 27554, 27555, 27560, 27561, 27564, 27565, 27566, 27568, 27576, 27577, 27581, 27582, 27587, 27588, 27593, 27596, 27606, 27610, 27617, 27619, 27622, 27623, 27630, 27633, 27639, 27641, 27647, 27650, 27652, 27653, 27657, 27661, 27662, 27664, 27666, 27673, 27679, 27686, 27687, 27688, 27692, 27694, 27699, 27701, 27702, 27706, 27707, 27711, 27722, 27723, 27725, 27727, 27730, 27732, 27737, 27739, 27740, 27755, 27757, 27759, 27764, 27766, 27768, 27769, 27771, 27781, 27782, 27783, 27785, 27796, 27797, 27799, 27800, 27804, 27807, 27824, 27826, 27828, 27842, 27846, 27853, 27855, 27856, 27857, 27858, 27860, 27862, 27866, 27868, 27872, 27879, 27881, 27883, 27884, 27886, 27890, 27892, 27908, 27911, 27914, 27918, 27919, 27921, 27923, 27930, 27942, 27943, 27944, 27751, 27950, 27951, 27953, 27961, 27964, 27967, 27991, 27998, 27999, 28001, 28005, 28007, 28015, 28016, 28028, 28034, 28039, 28049, 28050, 28052, 28054, 28055, 28056, 28074, 28076, 28084, 28087, 28089, 28093, 28095, 28100, 28104, 28106, 28110, 28111, 28118, 28123, 28125, 28127, 28128, 28130, 28133, 28137, 28143, 28144, 28148, 28150, 28156, 28160, 28164, 28190, 28194, 28199, 28210, 28214, 28217, 28219, 28220, 28228, 28229, 28232, 28233, 28235, 28239, 28241, 28242, 28243, 28244, 28247, 28252, 28253, 28254, 28258, 28259, 28264, 28275, 28283, 28285, 28301, 28307, 28313, 28320, 28327, 28333, 28334, 28337, 28339, 28347, 28351, 28352, 28353, 28355, 28359, 28360, 28362, 28365, 28366, 28367, 28395, 28397, 28398, 28409, 28411, 28413, 28420, 28424, 28426, 28428, 28429, 28438, 28440, 28442, 28443, 28454, 28457, 28458, 28463, 28464, 28467, 28470, 28475, 28476, 28461, 28495, 28497, 28498, 28499, 28503, 28505, 28506, 28509, 28510, 28513, 28514, 28520, 28524, 28541, 28542, 28547, 28551, 28552, 28555, 28556, 28557, 28560, 28562, 28563, 28564, 28566, 28570, 28575, 28576, 28581, 28582, 28583, 28584, 28590, 28591, 28592, 28597, 28598, 28604, 28613, 28615, 28616, 28618, 28634, 28638, 28648, 28649, 28656, 28661, 28665, 28668, 28669, 28672, 28677, 28678, 28679, 28685, 28695, 28704, 28707, 28719, 28724, 28727, 28729, 28732, 28739, 28740, 28744, 28745, 28746, 28747, 28756, 28757, 28765, 28766, 28750, 28772, 28773, 28780, 28782, 28789, 28790, 28798, 28801, 28805, 28806, 28820, 28821, 28822, 28823, 28824, 28827, 28836, 28843, 28848, 28849, 28852, 28855, 28874, 28881, 28883, 28884, 28885, 28886, 28888, 28892, 28900, 28922, 28931, 28932, 28933, 28934, 28935, 28939, 28940, 28943, 28958, 28960, 28971, 28973, 28975, 28976, 28977, 28984, 28993, 28997, 28998, 28999, 29002, 29003, 29008, 29010, 29015, 29018, 29020, 29022, 29024, 29032, 29049, 29056, 29061, 29063, 29068, 29074, 29082, 29083, 29088, 29090, 29103, 29104, 29106, 29107, 29114, 29119, 29120, 29121, 29124, 29131, 29132, 29139, 29142, 29145, 29146, 29148, 29176, 29182, 29184, 29191, 29192, 29193, 29203, 29207, 29210, 29213, 29215, 29220, 29227, 29231, 29236, 29240, 29241, 29249, 29250, 29251, 29253, 29262, 29263, 29264, 29267, 29269, 29270, 29274, 29276, 29278, 29280, 29283, 29288, 29291, 29294, 29295, 29297, 29303, 29304, 29307, 29308, 29311, 29316, 29321, 29325, 29326, 29331, 29339, 29352, 29357, 29358, 29361, 29364, 29374, 29377, 29383, 29385, 29388, 29397, 29398, 29400, 29407, 29413, 29427, 29428, 29434, 29435, 29438, 29442, 29444, 29445, 29447, 29451, 29453, 29458, 29459, 29464, 29465, 29470, 29474, 29476, 29479, 29480, 29484, 29489, 29490, 29493, 29498, 29499, 29501, 29507, 29517, 29520, 29522, 29526, 29528, 29533, 29534, 29535, 29536, 29542, 29543, 29545, 29547, 29548, 29550, 29551, 29553, 29559, 29561, 29564, 29568, 29569, 29571, 29573, 29574, 29582, 29584, 29587, 29589, 29591, 29592, 29596, 29598, 29599, 29600, 29602, 29605, 29606, 29610, 29611, 29613, 29621, 29623, 29625, 29628, 29629, 29631, 29637, 29638, 29641, 29643, 29644, 29647, 29650, 29651, 29654, 29657, 29661, 29665, 29667, 29670, 29671, 29673, 29684, 29685, 29687, 29689, 29690, 29691, 29693, 29695, 29696, 29697, 29700, 29703, 29706, 29713, 29722, 29723, 29732, 29734, 29736, 29737, 29738, 29739, 29740, 29741, 29742, 29743, 29744, 29745, 29753, 29760, 29763, 29764, 29766, 29767, 29771, 29773, 29777, 29778, 29783, 29789, 29794, 29798, 29799, 29800, 29803, 29805, 29806, 29809, 29810, 29824, 29825, 29829, 29830, 29831, 29833, 29839, 29840, 29841, 29842, 29848, 29849, 29850, 29852, 29855, 29856, 29857, 29859, 29862, 29864, 29865, 29866, 29867, 29870, 29871, 29873, 29874, 29877, 29881, 29883, 29887, 29896, 29897, 29900, 29904, 29907, 29912, 29914, 29915, 29918, 29919, 29924, 29928, 29930, 29931, 29935, 29940, 29946, 29947, 29948, 29951, 29958, 29970, 29974, 29975, 29984, 29985, 29988, 29991, 29993, 29994, 29999, 30006, 30009, 30013, 30014, 30015, 30016, 30019, 30023, 30024, 30030, 30032, 30034, 30039, 30046, 30047, 30049, 30063, 30065, 30073, 30074, 30075, 30076, 30077, 30078, 30081, 30085, 30096, 30098, 30099, 30101, 30105, 30108, 30114, 30116, 30132, 30138, 30143, 30144, 30145, 30148, 30150, 30156, 30158, 30159, 30167, 30172, 30175, 30176, 30177, 30180, 30183, 30188, 30190, 30191, 30193, 30201, 30208, 30210, 30211, 30212, 30215, 30216, 30218, 30220, 30223, 30226, 30227, 30229, 30230, 30233, 30235, 30236, 30237, 30238, 30243, 30245, 30246, 30249, 30253, 30258, 30259, 30261, 30264, 30265, 30266, 30268, 30282, 30272, 30273, 30275, 30276, 30277, 30281, 30283, 30293, 30297, 30303, 30308, 30309, 30317, 30318, 30319, 30321, 30324, 30337, 30341, 30348, 30349, 30357, 30363, 30364, 30365, 30367, 30368, 30370, 30371, 30372, 30373, 30374, 30375, 30376, 30378, 30381, 30397, 30401, 30405, 30409, 30411, 30412, 30414, 30420, 30425, 30432, 30438, 30440, 30444, 30448, 30449, 30454, 30457, 30460, 30464, 30470, 30474, 30478, 30482, 30484, 30485, 30487, 30489, 30490, 30492, 30498, 30504, 30509, 30510, 30511, 30516, 30517, 30518, 30521, 30525, 30526, 30530, 30533, 30534, 30538, 30541, 30542, 30543, 30546, 30550, 30551, 30556, 30558, 30559, 30560, 30562, 30564, 30567, 30570, 30572, 30576, 30578, 30579, 30580, 30586, 30589, 30592, 30596, 30604, 30605, 30612, 30613, 30614, 30618, 30623, 30626, 30631, 30634, 30638, 30639, 30641, 30645, 30654, 30659, 30665, 30673, 30674, 30677, 30681, 30686, 30687, 30688, 30692, 30694, 30698, 30700, 30704, 30705, 30708, 30712, 30715, 30725, 30726, 30729, 30733, 30734, 30737, 30749, 30753, 30754, 30755, 30765, 30766, 30768, 30773, 30775, 30787, 30788, 30791, 30792, 30796, 30798, 30802, 30812, 30814, 30816, 30817, 30819, 30820, 30824, 30826, 30830, 30842, 30846, 30858, 30863, 30868, 30872, 30881, 30877, 30878, 30879, 30884, 30888, 30892, 30893, 30896, 30897, 30898, 30899, 30907, 30909, 30911, 30919, 30920, 30921, 30924, 30926, 30930, 30931, 30933, 30934, 30948, 30939, 30943, 30944, 30945, 30950, 30954, 30962, 30963, 30976, 30966, 30967, 30970, 30971, 30975, 30982, 30988, 30992, 31002, 31004, 31006, 31007, 31008, 31013, 31015, 31017, 31021, 31025, 31028, 31029, 31035, 31037, 31039, 31044, 31045, 31046, 31050, 31051, 31055, 31057, 31060, 31064, 31067, 31068, 31079, 31081, 31083, 31090, 31097, 31099, 31100, 31102, 31115, 31116, 31121, 31123, 31124, 31125, 31126, 31128, 31131, 31132, 31137, 31144, 31145, 31147, 31151, 31153, 31156, 31160, 31163, 31170, 31172, 31175, 31176, 31178, 31183, 31188, 31190, 31194, 31197, 31198, 31200, 31202, 31205, 31210, 31211, 31213, 31217, 31224, 31228, 31234, 31235, 31239, 31241, 31242, 31244, 31249, 31253, 31259, 31262, 31265, 31271, 31275, 31277, 31279, 31280, 31284, 31285, 31288, 31289, 31290, 31300, 31301, 31303, 31304, 31308, 31317, 31318, 31321, 31324, 31325, 31327, 31328, 31333, 31335, 31338, 31341, 31349, 31352, 31358, 31360, 31362, 31365, 31366, 31370, 31371, 31376, 31377, 31380, 31390, 31392, 31395, 31404, 31411, 31413, 31417, 31419, 31420, 31430, 31433, 31436, 31438, 31441, 31451, 31464, 31465, 31467, 31468, 31473, 31476, 31483, 31485, 31486, 31495, 31508, 31519, 31523, 31527, 31529, 31530, 31531, 31533, 31534, 31535, 31536, 31537, 31540, 31549, 31551, 31552, 31553, 31559, 31566, 31573, 31584, 31588, 31590, 31593, 31594, 31597, 31599, 31602, 31603, 31607, 31620, 31625, 31630, 31632, 31633, 31638, 31643, 31646, 31648, 31653, 31660, 31663, 31664, 31666, 31669, 31670, 31674, 31675, 31676, 31677, 31682, 31685, 31688, 31690, 31700, 31702, 31703, 31705, 31706, 31707, 31720, 31722, 31730, 31732, 31733, 31736, 31737, 31738, 31740, 31742, 31745, 31746, 31747, 31748, 31750, 31753, 31755, 31756, 31758, 31759, 31769, 31771, 31776, 31781, 31782, 31784, 31788, 31793, 31795, 31796, 31798, 31801, 31802, 31814, 31818, 31829, 31825, 31826, 31827, 31833, 31834, 31835, 31836, 31837, 31838, 31841, 31843, 31847, 31849, 31853, 31854, 31856, 31858, 31865, 31868, 31869, 31878, 31879, 31887, 31892, 31902, 31904, 31910, 31920, 31926, 31927, 31930, 31931, 31932, 31935, 31940, 31943, 31944, 31945, 31949, 31951, 31955, 31956, 31957, 31959, 31961, 31962, 31965, 31974, 31977, 31979, 31989, 32003, 32007, 32008, 32009, 32015, 32017, 32018, 32019, 32022, 32029, 32030, 32035, 32038, 32042, 32045, 32049, 32060, 32061, 32062, 32064, 32065, 32071, 32072, 32077, 32081, 32083, 32087, 32089, 32090, 32092, 32093, 32101, 32103, 32106, 32112, 32120, 32122, 32123, 32127, 32129, 32130, 32131, 32133, 32134, 32136, 32139, 32140, 32141, 32145, 32150, 32151, 32157, 32158, 32166, 32167, 32170, 32179, 32182, 32183, 32185, 32194, 32195, 32196, 32197, 32198, 32204, 32205, 32206, 32215, 32217, 32256, 32226, 32229, 32230, 32234, 32235, 32237, 32241, 32245, 32246, 32249, 32250, 32264, 32272, 32273, 32277, 32279, 32284, 32285, 32288, 32295, 32296, 32300, 32301, 32303, 32307, 32310, 32319, 32324, 32325, 32327, 32334, 32336, 32338, 32344, 32351, 32353, 32354, 32357, 32363, 32366, 32367, 32371, 32376, 32382, 32385, 32390, 32391, 32394, 32397, 32401, 32405, 32408, 32410, 32413, 32414, 32572, 32571, 32573, 32574, 32575, 32579, 32580, 32583, 32591, 32594, 32595, 32603, 32604, 32605, 32609, 32611, 32612, 32613, 32614, 32621, 32625, 32637, 32638, 32639, 32640, 32651, 32653, 32655, 32656, 32657, 32662, 32663, 32668, 32673, 32674, 32678, 32682, 32685, 32692, 32700, 32703, 32704, 32707, 32712, 32718, 32719, 32731, 32735, 32739, 32741, 32744, 32748, 32750, 32751, 32754, 32762, 32765, 32766, 32767, 32775, 32776, 32778, 32781, 32782, 32783, 32785, 32787, 32788, 32790, 32797, 32798, 32799, 32800, 32804, 32806, 32812, 32814, 32816, 32820, 32821, 32823, 32825, 32826, 32828, 32830, 32832, 32836, 32864, 32868, 32870, 32877, 32881, 32885, 32897, 32904, 32910, 32924, 32926, 32934, 32935, 32939, 32952, 32953, 32968, 32973, 32975, 32978, 32980, 32981, 32983, 32984, 32992, 33005, 33006, 33008, 33010, 33011, 33014, 33017, 33018, 33022, 33027, 33035, 33046, 33047, 33048, 33052, 33054, 33056, 33060, 33063, 33068, 33072, 33077, 33082, 33084, 33093, 33095, 33098, 33100, 33106, 33111, 33120, 33121, 33127, 33128, 33129, 33133, 33135, 33143, 33153, 33168, 33156, 33157, 33158, 33163, 33166, 33174, 33176, 33179, 33182, 33186, 33198, 33202, 33204, 33211, 33227, 33219, 33221, 33226, 33230, 33231, 33237, 33239, 33243, 33245, 33246, 33249, 33252, 33259, 33260, 33264, 33265, 33266, 33269, 33270, 33272, 33273, 33277, 33279, 33280, 33283, 33295, 33299, 33300, 33305, 33306, 33309, 33313, 33314, 33320, 33330, 33332, 33338, 33347, 33348, 33349, 33350, 33355, 33358, 33359, 33361, 33366, 33372, 33376, 33379, 33383, 33389, 33396, 33403, 33405, 33407, 33408, 33409, 33411, 33412, 33415, 33417, 33418, 33422, 33425, 33428, 33430, 33432, 33434, 33435, 33440, 33441, 33443, 33444, 33447, 33448, 33449, 33450, 33454, 33456, 33458, 33460, 33463, 33466, 33468, 33470, 33471, 33478, 33488, 33493, 33498, 33504, 33506, 33508, 33512, 33514, 33517, 33519, 33526, 33527, 33533, 33534, 33536, 33537, 33543, 33544, 33546, 33547, 33620, 33563, 33565, 33566, 33567, 33569, 33570, 33580, 33581, 33582, 33584, 33587, 33591, 33594, 33596, 33597, 33602, 33603, 33604, 33607, 33613, 33614, 33617, 33621, 33622, 33623, 33648, 33656, 33661, 33663, 33664, 33666, 33668, 33670, 33677, 33682, 33684, 33685, 33688, 33689, 33691, 33692, 33693, 33702, 33703, 33705, 33708, 33726, 33727, 33728, 33735, 33737, 33743, 33744, 33745, 33748, 33757, 33619, 33768, 33770, 33782, 33784, 33785, 33788, 33793, 33798, 33802, 33807, 33809, 33813, 33817, 33709, 33839, 33849, 33861, 33863, 33864, 33866, 33869, 33871, 33873, 33874, 33878, 33880, 33881, 33882, 33884, 33888, 33892, 33893, 33895, 33898, 33904, 33907, 33908, 33910, 33912, 33916, 33917, 33921, 33925, 33938, 33939, 33941, 33950, 33958, 33960, 33961, 33962, 33967, 33969, 33972, 33978, 33981, 33982, 33984, 33986, 33991, 33992, 33996, 33999, 34003, 34012, 34023, 34026, 34031, 34032, 34033, 34034, 34039, 34098, 34042, 34043, 34045, 34050, 34051, 34055, 34060, 34062, 34064, 34076, 34078, 34082, 34083, 34084, 34085, 34087, 34090, 34091, 34095, 34099, 34100, 34102, 34111, 34118, 34127, 34128, 34129, 34130, 34131, 34134, 34137, 34140, 34141, 34142, 34143, 34144, 34145, 34146, 34148, 34155, 34159, 34169, 34170, 34171, 34173, 34175, 34177, 34181, 34182, 34185, 34187, 34188, 34191, 34195, 34200, 34205, 34207, 34208, 34210, 34213, 34215, 34228, 34230, 34231, 34232, 34236, 34237, 34238, 34239, 34242, 34247, 34250, 34251, 34254, 34221, 34264, 34266, 34271, 34272, 34278, 34280, 34285, 34291, 34294, 34300, 34303, 34304, 34308, 34309, 34317, 34318, 34320, 34321, 34322, 34328, 34329, 34331, 34334, 34337, 34343, 34345, 34358, 34360, 34362, 34364, 34365, 34368, 34370, 34374, 34386, 34387, 34390, 34391, 34392, 34393, 34397, 34400, 34401, 34402, 34403, 34404, 34409, 34412, 34415, 34421, 34422, 34423, 34426, 34445, 34449, 34454, 34456, 34458, 34460, 34465, 34470, 34471, 34472, 34477, 34481, 34483, 34484, 34485, 34487, 34488, 34489, 34495, 34496, 34497, 34499, 34501, 34513, 34514, 34517, 34519, 34522, 34524, 34528, 34531, 34533, 34535, 34440, 34554, 34556, 34557, 34564, 34565, 34567, 34571, 34574, 34575, 34576, 34579, 34580, 34585, 34590, 34591, 34593, 34595, 34600, 34606, 34607, 34609, 34610, 34617, 34618, 34620, 34621, 34622, 34624, 34627, 34629, 34637, 34648, 34653, 34657, 34660, 34661, 34671, 34673, 34674, 34683, 34691, 34692, 34693, 34694, 34695, 34696, 34697, 34699, 34700, 34704, 34707, 34709, 34711, 34712, 34713, 34718, 34720, 34723, 34727, 34732, 34733, 34734, 34737, 34741, 34750, 34751, 34753, 34760, 34761, 34762, 34766, 34773, 34774, 34777, 34778, 34780, 34783, 34786, 34787, 34788, 34794, 34795, 34797, 34801, 34803, 34808, 34810, 34815, 34817, 34819, 34822, 34825, 34826, 34827, 34832, 34841, 34834, 34835, 34836, 34840, 34842, 34843, 34844, 34846, 34847, 34856, 34861, 34862, 34864, 34866, 34869, 34874, 34876, 34881, 34883, 34885, 34888, 34889, 34890, 34891, 34894, 34897, 34901, 34902, 34904, 34906, 34908, 34911, 34912, 34916, 34921, 34929, 34937, 34939, 34944, 34968, 34970, 34971, 34972, 34975, 34976, 34984, 34986, 35002, 35005, 35006, 35008, 35018, 35019, 35020, 35021, 35022, 35025, 35026, 35027, 35035, 35038, 35047, 35055, 35056, 35057, 35061, 35063, 35073, 35078, 35085, 35086, 35087, 35093, 35094, 35096, 35097, 35098, 35100, 35104, 35110, 35111, 35112, 35120, 35121, 35122, 35125, 35129, 35130, 35134, 35136, 35138, 35141, 35142, 35145, 35151, 35154, 35159, 35162, 35163, 35164, 35169, 35170, 35171, 35179, 35182, 35184, 35187, 35189, 35194, 35195, 35196, 35197, 35209, 35213, 35216, 35220, 35221, 35227, 35228, 35231, 35232, 35237, 35248, 35252, 35253, 35254, 35255, 35260, 35284, 35285, 35286, 35287, 35288, 35301, 35305, 35307, 35309, 35313, 35315, 35318, 35321, 35325, 35327, 35332, 35333, 35335, 35343, 35345, 35346, 35348, 35349, 35358, 35360, 35362, 35364, 35366, 35371, 35372, 35375, 35381, 35383, 35389, 35390, 35392, 35395, 35397, 35399, 35401, 35405, 35406, 35411, 35414, 35415, 35416, 35420, 35421, 35425, 35429, 35431, 35445, 35446, 35447, 35449, 35450, 35451, 35454, 35455, 35456, 35459, 35462, 35467, 35471, 35472, 35474, 35478, 35479, 35481, 35487, 35495, 35497, 35502, 35503, 35507, 35510, 35511, 35515, 35518, 35523, 35526, 35528, 35529, 35530, 35537, 35539, 35540, 35541, 35543, 35549, 35551, 35564, 35568, 35572, 35573, 35574, 35580, 35583, 35589, 35590, 35595, 35601, 35612, 35614, 35615, 35594, 35629, 35632, 35639, 35644, 35650, 35651, 35652, 35653, 35654, 35656, 35666, 35667, 35668, 35673, 35661, 35678, 35683, 35693, 35702, 35704, 35705, 35708, 35710, 35713, 35716, 35717, 35723, 35725, 35727, 35732, 35733, 35740, 35742, 35743, 35896, 35897, 35901, 35902, 35909, 35911, 35913, 35915, 35919, 35921, 35923, 35924, 35927, 35928, 35931, 35933, 35929, 35939, 35940, 35942, 35944, 35945, 35949, 35955, 35957, 35958, 35963, 35966, 35974, 35975, 35979, 35984, 35986, 35987, 35993, 35995, 35996, 36004, 36025, 36026, 36037, 36038, 36041, 36043, 36047, 36054, 36053, 36057, 36061, 36065, 36072, 36076, 36079, 36080, 36082, 36085, 36087, 36088, 36094, 36095, 36097, 36099, 36105, 36114, 36119, 36123, 36197, 36201, 36204, 36206, 36223, 36226, 36228, 36232, 36237, 36240, 36241, 36245, 36254, 36255, 36256, 36262, 36267, 36268, 36271, 36274, 36277, 36279, 36281, 36283, 36288, 36293, 36294, 36295, 36296, 36298, 36302, 36305, 36308, 36309, 36311, 36313, 36324, 36325, 36327, 36332, 36336, 36284, 36337, 36338, 36340, 36349, 36353, 36356, 36357, 36358, 36363, 36369, 36372, 36374, 36384, 36385, 36386, 36387, 36390, 36391, 36401, 36403, 36406, 36407, 36408, 36409, 36413, 36416, 36417, 36427, 36429, 36430, 36431, 36436, 36443, 36444, 36445, 36446, 36449, 36450, 36457, 36460, 36461, 36463, 36464, 36465, 36473, 36474, 36475, 36482, 36483, 36489, 36496, 36498, 36501, 36506, 36507, 36509, 36510, 36514, 36519, 36521, 36525, 36526, 36531, 36533, 36538, 36539, 36544, 36545, 36547, 36548, 36551, 36559, 36561, 36564, 36572, 36584, 36590, 36592, 36593, 36599, 36601, 36602, 36589, 36608, 36610, 36615, 36616, 36623, 36624, 36630, 36631, 36632, 36638, 36640, 36641, 36643, 36645, 36647, 36648, 36652, 36653, 36654, 36660, 36661, 36662, 36663, 36666, 36672, 36673, 36675, 36679, 36687, 36689, 36690, 36691, 36692, 36693, 36696, 36701, 36702, 36709, 36765, 36768, 36769, 36772, 36773, 36774, 36789, 36790, 36792, 36798, 36800, 36801, 36806, 36810, 36811, 36813, 36816, 36818, 36819, 36821, 36832, 36835, 36836, 36840, 36846, 36849, 36853, 36854, 36859, 36862, 36866, 36868, 36872, 36876, 36888, 36891, 36904, 36905, 36911, 36906, 36908, 36909, 36915, 36916, 36919, 36927, 36931, 36932, 36940, 36955, 36957, 36962, 36966, 36967, 36972, 36976, 36980, 36985, 36997, 37e3, 37003, 37004, 37006, 37008, 37013, 37015, 37016, 37017, 37019, 37024, 37025, 37026, 37029, 37040, 37042, 37043, 37044, 37046, 37053, 37068, 37054, 37059, 37060, 37061, 37063, 37064, 37077, 37079, 37080, 37081, 37084, 37085, 37087, 37093, 37074, 37110, 37099, 37103, 37104, 37108, 37118, 37119, 37120, 37124, 37125, 37126, 37128, 37133, 37136, 37140, 37142, 37143, 37144, 37146, 37148, 37150, 37152, 37157, 37154, 37155, 37159, 37161, 37166, 37167, 37169, 37172, 37174, 37175, 37177, 37178, 37180, 37181, 37187, 37191, 37192, 37199, 37203, 37207, 37209, 37210, 37211, 37217, 37220, 37223, 37229, 37236, 37241, 37242, 37243, 37249, 37251, 37253, 37254, 37258, 37262, 37265, 37267, 37268, 37269, 37272, 37278, 37281, 37286, 37288, 37292, 37293, 37294, 37296, 37297, 37298, 37299, 37302, 37307, 37308, 37309, 37311, 37314, 37315, 37317, 37331, 37332, 37335, 37337, 37338, 37342, 37348, 37349, 37353, 37354, 37356, 37357, 37358, 37359, 37360, 37361, 37367, 37369, 37371, 37373, 37376, 37377, 37380, 37381, 37382, 37383, 37385, 37386, 37388, 37392, 37394, 37395, 37398, 37400, 37404, 37405, 37411, 37412, 37413, 37414, 37416, 37422, 37423, 37424, 37427, 37429, 37430, 37432, 37433, 37434, 37436, 37438, 37440, 37442, 37443, 37446, 37447, 37450, 37453, 37454, 37455, 37457, 37464, 37465, 37468, 37469, 37472, 37473, 37477, 37479, 37480, 37481, 37486, 37487, 37488, 37493, 37494, 37495, 37496, 37497, 37499, 37500, 37501, 37503, 37512, 37513, 37514, 37517, 37518, 37522, 37527, 37529, 37535, 37536, 37540, 37541, 37543, 37544, 37547, 37551, 37554, 37558, 37560, 37562, 37563, 37564, 37565, 37567, 37568, 37569, 37570, 37571, 37573, 37574, 37575, 37576, 37579, 37580, 37581, 37582, 37584, 37587, 37589, 37591, 37592, 37593, 37596, 37597, 37599, 37600, 37601, 37603, 37605, 37607, 37608, 37612, 37614, 37616, 37625, 37627, 37631, 37632, 37634, 37640, 37645, 37649, 37652, 37653, 37660, 37661, 37662, 37663, 37665, 37668, 37669, 37671, 37673, 37674, 37683, 37684, 37686, 37687, 37703, 37704, 37705, 37712, 37713, 37714, 37717, 37719, 37720, 37722, 37726, 37732, 37733, 37735, 37737, 37738, 37741, 37743, 37744, 37745, 37747, 37748, 37750, 37754, 37757, 37759, 37760, 37761, 37762, 37768, 37770, 37771, 37773, 37775, 37778, 37781, 37784, 37787, 37790, 37793, 37795, 37796, 37798, 37800, 37803, 37812, 37813, 37814, 37818, 37801, 37825, 37828, 37829, 37830, 37831, 37833, 37834, 37835, 37836, 37837, 37843, 37849, 37852, 37854, 37855, 37858, 37862, 37863, 37881, 37879, 37880, 37882, 37883, 37885, 37889, 37890, 37892, 37896, 37897, 37901, 37902, 37903, 37909, 37910, 37911, 37919, 37934, 37935, 37937, 37938, 37939, 37940, 37947, 37951, 37949, 37955, 37957, 37960, 37962, 37964, 37973, 37977, 37980, 37983, 37985, 37987, 37992, 37995, 37997, 37998, 37999, 38001, 38002, 38020, 38019, 38264, 38265, 38270, 38276, 38280, 38284, 38285, 38286, 38301, 38302, 38303, 38305, 38310, 38313, 38315, 38316, 38324, 38326, 38330, 38333, 38335, 38342, 38344, 38345, 38347, 38352, 38353, 38354, 38355, 38361, 38362, 38365, 38366, 38367, 38368, 38372, 38374, 38429, 38430, 38434, 38436, 38437, 38438, 38444, 38449, 38451, 38455, 38456, 38457, 38458, 38460, 38461, 38465, 38482, 38484, 38486, 38487, 38488, 38497, 38510, 38516, 38523, 38524, 38526, 38527, 38529, 38530, 38531, 38532, 38537, 38545, 38550, 38554, 38557, 38559, 38564, 38565, 38566, 38569, 38574, 38575, 38579, 38586, 38602, 38610, 23986, 38616, 38618, 38621, 38622, 38623, 38633, 38639, 38641, 38650, 38658, 38659, 38661, 38665, 38682, 38683, 38685, 38689, 38690, 38691, 38696, 38705, 38707, 38721, 38723, 38730, 38734, 38735, 38741, 38743, 38744, 38746, 38747, 38755, 38759, 38762, 38766, 38771, 38774, 38775, 38776, 38779, 38781, 38783, 38784, 38793, 38805, 38806, 38807, 38809, 38810, 38814, 38815, 38818, 38828, 38830, 38833, 38834, 38837, 38838, 38840, 38841, 38842, 38844, 38846, 38847, 38849, 38852, 38853, 38855, 38857, 38858, 38860, 38861, 38862, 38864, 38865, 38868, 38871, 38872, 38873, 38877, 38878, 38880, 38875, 38881, 38884, 38895, 38897, 38900, 38903, 38904, 38906, 38919, 38922, 38937, 38925, 38926, 38932, 38934, 38940, 38942, 38944, 38947, 38950, 38955, 38958, 38959, 38960, 38962, 38963, 38965, 38949, 38974, 38980, 38983, 38986, 38993, 38994, 38995, 38998, 38999, 39001, 39002, 39010, 39011, 39013, 39014, 39018, 39020, 39083, 39085, 39086, 39088, 39092, 39095, 39096, 39098, 39099, 39103, 39106, 39109, 39112, 39116, 39137, 39139, 39141, 39142, 39143, 39146, 39155, 39158, 39170, 39175, 39176, 39185, 39189, 39190, 39191, 39194, 39195, 39196, 39199, 39202, 39206, 39207, 39211, 39217, 39218, 39219, 39220, 39221, 39225, 39226, 39227, 39228, 39232, 39233, 39238, 39239, 39240, 39245, 39246, 39252, 39256, 39257, 39259, 39260, 39262, 39263, 39264, 39323, 39325, 39327, 39334, 39344, 39345, 39346, 39349, 39353, 39354, 39357, 39359, 39363, 39369, 39379, 39380, 39385, 39386, 39388, 39390, 39399, 39402, 39403, 39404, 39408, 39412, 39413, 39417, 39421, 39422, 39426, 39427, 39428, 39435, 39436, 39440, 39441, 39446, 39454, 39456, 39458, 39459, 39460, 39463, 39469, 39470, 39475, 39477, 39478, 39480, 39495, 39489, 39492, 39498, 39499, 39500, 39502, 39505, 39508, 39510, 39517, 39594, 39596, 39598, 39599, 39602, 39604, 39605, 39606, 39609, 39611, 39614, 39615, 39617, 39619, 39622, 39624, 39630, 39632, 39634, 39637, 39638, 39639, 39643, 39644, 39648, 39652, 39653, 39655, 39657, 39660, 39666, 39667, 39669, 39673, 39674, 39677, 39679, 39680, 39681, 39682, 39683, 39684, 39685, 39688, 39689, 39691, 39692, 39693, 39694, 39696, 39698, 39702, 39705, 39707, 39708, 39712, 39718, 39723, 39725, 39731, 39732, 39733, 39735, 39737, 39738, 39741, 39752, 39755, 39756, 39765, 39766, 39767, 39771, 39774, 39777, 39779, 39781, 39782, 39784, 39786, 39787, 39788, 39789, 39790, 39795, 39797, 39799, 39800, 39801, 39807, 39808, 39812, 39813, 39814, 39815, 39817, 39818, 39819, 39821, 39823, 39824, 39828, 39834, 39837, 39838, 39846, 39847, 39849, 39852, 39856, 39857, 39858, 39863, 39864, 39867, 39868, 39870, 39871, 39873, 39879, 39880, 39886, 39888, 39895, 39896, 39901, 39903, 39909, 39911, 39914, 39915, 39919, 39923, 39927, 39928, 39929, 39930, 39933, 39935, 39936, 39938, 39947, 39951, 39953, 39958, 39960, 39961, 39962, 39964, 39966, 39970, 39971, 39974, 39975, 39976, 39977, 39978, 39985, 39989, 39990, 39991, 39997, 40001, 40003, 40004, 40005, 40009, 40010, 40014, 40015, 40016, 40019, 40020, 40022, 40024, 40027, 40029, 40030, 40031, 40035, 40041, 40042, 40028, 40043, 40040, 40046, 40048, 40050, 40053, 40055, 40059, 40166, 40178, 40183, 40185, 40203, 40194, 40209, 40215, 40216, 40220, 40221, 40222, 40239, 40240, 40242, 40243, 40244, 40250, 40252, 40261, 40253, 40258, 40259, 40263, 40266, 40275, 40276, 40287, 40291, 40290, 40293, 40297, 40298, 40299, 40304, 40310, 40311, 40315, 40316, 40318, 40323, 40324, 40326, 40330, 40333, 40334, 40338, 40339, 40341, 40342, 40343, 40344, 40353, 40362, 40364, 40366, 40369, 40373, 40377, 40380, 40383, 40387, 40391, 40393, 40394, 40404, 40405, 40406, 40407, 40410, 40414, 40415, 40416, 40421, 40423, 40425, 40427, 40430, 40432, 40435, 40436, 40446, 40458, 40450, 40455, 40462, 40464, 40465, 40466, 40469, 40470, 40473, 40476, 40477, 40570, 40571, 40572, 40576, 40578, 40579, 40580, 40581, 40583, 40590, 40591, 40598, 40600, 40603, 40606, 40612, 40616, 40620, 40622, 40623, 40624, 40627, 40628, 40629, 40646, 40648, 40651, 40661, 40671, 40676, 40679, 40684, 40685, 40686, 40688, 40689, 40690, 40693, 40696, 40703, 40706, 40707, 40713, 40719, 40720, 40721, 40722, 40724, 40726, 40727, 40729, 40730, 40731, 40735, 40738, 40742, 40746, 40747, 40751, 40753, 40754, 40756, 40759, 40761, 40762, 40764, 40765, 40767, 40769, 40771, 40772, 40773, 40774, 40775, 40787, 40789, 40790, 40791, 40792, 40794, 40797, 40798, 40808, 40809, 40813, 40814, 40815, 40816, 40817, 40819, 40821, 40826, 40829, 40847, 40848, 40849, 40850, 40852, 40854, 40855, 40862, 40865, 40866, 40867, 40869, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
||
"ibm866": [1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 9617, 9618, 9619, 9474, 9508, 9569, 9570, 9558, 9557, 9571, 9553, 9559, 9565, 9564, 9563, 9488, 9492, 9524, 9516, 9500, 9472, 9532, 9566, 9567, 9562, 9556, 9577, 9574, 9568, 9552, 9580, 9575, 9576, 9572, 9573, 9561, 9560, 9554, 9555, 9579, 9578, 9496, 9484, 9608, 9604, 9612, 9616, 9600, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 1025, 1105, 1028, 1108, 1031, 1111, 1038, 1118, 176, 8729, 183, 8730, 8470, 164, 9632, 160],
|
||
"iso-8859-2": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 728, 321, 164, 317, 346, 167, 168, 352, 350, 356, 377, 173, 381, 379, 176, 261, 731, 322, 180, 318, 347, 711, 184, 353, 351, 357, 378, 733, 382, 380, 340, 193, 194, 258, 196, 313, 262, 199, 268, 201, 280, 203, 282, 205, 206, 270, 272, 323, 327, 211, 212, 336, 214, 215, 344, 366, 218, 368, 220, 221, 354, 223, 341, 225, 226, 259, 228, 314, 263, 231, 269, 233, 281, 235, 283, 237, 238, 271, 273, 324, 328, 243, 244, 337, 246, 247, 345, 367, 250, 369, 252, 253, 355, 729],
|
||
"iso-8859-3": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 294, 728, 163, 164, null, 292, 167, 168, 304, 350, 286, 308, 173, null, 379, 176, 295, 178, 179, 180, 181, 293, 183, 184, 305, 351, 287, 309, 189, null, 380, 192, 193, 194, null, 196, 266, 264, 199, 200, 201, 202, 203, 204, 205, 206, 207, null, 209, 210, 211, 212, 288, 214, 215, 284, 217, 218, 219, 220, 364, 348, 223, 224, 225, 226, null, 228, 267, 265, 231, 232, 233, 234, 235, 236, 237, 238, 239, null, 241, 242, 243, 244, 289, 246, 247, 285, 249, 250, 251, 252, 365, 349, 729],
|
||
"iso-8859-4": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 312, 342, 164, 296, 315, 167, 168, 352, 274, 290, 358, 173, 381, 175, 176, 261, 731, 343, 180, 297, 316, 711, 184, 353, 275, 291, 359, 330, 382, 331, 256, 193, 194, 195, 196, 197, 198, 302, 268, 201, 280, 203, 278, 205, 206, 298, 272, 325, 332, 310, 212, 213, 214, 215, 216, 370, 218, 219, 220, 360, 362, 223, 257, 225, 226, 227, 228, 229, 230, 303, 269, 233, 281, 235, 279, 237, 238, 299, 273, 326, 333, 311, 244, 245, 246, 247, 248, 371, 250, 251, 252, 361, 363, 729],
|
||
"iso-8859-5": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 173, 1038, 1039, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103, 8470, 1105, 1106, 1107, 1108, 1109, 1110, 1111, 1112, 1113, 1114, 1115, 1116, 167, 1118, 1119],
|
||
"iso-8859-6": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, null, null, null, 164, null, null, null, null, null, null, null, 1548, 173, null, null, null, null, null, null, null, null, null, null, null, null, null, 1563, null, null, null, 1567, null, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, null, null, null, null, null, 1600, 1601, 1602, 1603, 1604, 1605, 1606, 1607, 1608, 1609, 1610, 1611, 1612, 1613, 1614, 1615, 1616, 1617, 1618, null, null, null, null, null, null, null, null, null, null, null, null, null],
|
||
"iso-8859-7": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 8216, 8217, 163, 8364, 8367, 166, 167, 168, 169, 890, 171, 172, 173, null, 8213, 176, 177, 178, 179, 900, 901, 902, 183, 904, 905, 906, 187, 908, 189, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, null, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, null],
|
||
"iso-8859-8": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, null, 162, 163, 164, 165, 166, 167, 168, 169, 215, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 247, 187, 188, 189, 190, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, 8215, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, null, null, 8206, 8207, null],
|
||
"iso-8859-10": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 274, 290, 298, 296, 310, 167, 315, 272, 352, 358, 381, 173, 362, 330, 176, 261, 275, 291, 299, 297, 311, 183, 316, 273, 353, 359, 382, 8213, 363, 331, 256, 193, 194, 195, 196, 197, 198, 302, 268, 201, 280, 203, 278, 205, 206, 207, 208, 325, 332, 211, 212, 213, 214, 360, 216, 370, 218, 219, 220, 221, 222, 223, 257, 225, 226, 227, 228, 229, 230, 303, 269, 233, 281, 235, 279, 237, 238, 239, 240, 326, 333, 243, 244, 245, 246, 361, 248, 371, 250, 251, 252, 253, 254, 312],
|
||
"iso-8859-13": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 8221, 162, 163, 164, 8222, 166, 167, 216, 169, 342, 171, 172, 173, 174, 198, 176, 177, 178, 179, 8220, 181, 182, 183, 248, 185, 343, 187, 188, 189, 190, 230, 260, 302, 256, 262, 196, 197, 280, 274, 268, 201, 377, 278, 290, 310, 298, 315, 352, 323, 325, 211, 332, 213, 214, 215, 370, 321, 346, 362, 220, 379, 381, 223, 261, 303, 257, 263, 228, 229, 281, 275, 269, 233, 378, 279, 291, 311, 299, 316, 353, 324, 326, 243, 333, 245, 246, 247, 371, 322, 347, 363, 252, 380, 382, 8217],
|
||
"iso-8859-14": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 7682, 7683, 163, 266, 267, 7690, 167, 7808, 169, 7810, 7691, 7922, 173, 174, 376, 7710, 7711, 288, 289, 7744, 7745, 182, 7766, 7809, 7767, 7811, 7776, 7923, 7812, 7813, 7777, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 372, 209, 210, 211, 212, 213, 214, 7786, 216, 217, 218, 219, 220, 221, 374, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 373, 241, 242, 243, 244, 245, 246, 7787, 248, 249, 250, 251, 252, 253, 375, 255],
|
||
"iso-8859-15": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 8364, 165, 352, 167, 353, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 381, 181, 182, 183, 382, 185, 186, 187, 338, 339, 376, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255],
|
||
"iso-8859-16": [128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 260, 261, 321, 8364, 8222, 352, 167, 353, 169, 536, 171, 377, 173, 378, 379, 176, 177, 268, 322, 381, 8221, 182, 183, 382, 269, 537, 187, 338, 339, 376, 380, 192, 193, 194, 258, 196, 262, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 272, 323, 210, 211, 212, 336, 214, 346, 368, 217, 218, 219, 220, 280, 538, 223, 224, 225, 226, 259, 228, 263, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 273, 324, 242, 243, 244, 337, 246, 347, 369, 249, 250, 251, 252, 281, 539, 255],
|
||
"koi8-r": [9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 8992, 9632, 8729, 8730, 8776, 8804, 8805, 160, 8993, 176, 178, 183, 247, 9552, 9553, 9554, 1105, 9555, 9556, 9557, 9558, 9559, 9560, 9561, 9562, 9563, 9564, 9565, 9566, 9567, 9568, 9569, 1025, 9570, 9571, 9572, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, 169, 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, 1100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066],
|
||
"koi8-u": [9472, 9474, 9484, 9488, 9492, 9496, 9500, 9508, 9516, 9524, 9532, 9600, 9604, 9608, 9612, 9616, 9617, 9618, 9619, 8992, 9632, 8729, 8730, 8776, 8804, 8805, 160, 8993, 176, 178, 183, 247, 9552, 9553, 9554, 1105, 1108, 9556, 1110, 1111, 9559, 9560, 9561, 9562, 9563, 1169, 1118, 9566, 9567, 9568, 9569, 1025, 1028, 9571, 1030, 1031, 9574, 9575, 9576, 9577, 9578, 1168, 1038, 169, 1102, 1072, 1073, 1094, 1076, 1077, 1092, 1075, 1093, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1103, 1088, 1089, 1090, 1091, 1078, 1074, 1100, 1099, 1079, 1096, 1101, 1097, 1095, 1098, 1070, 1040, 1041, 1062, 1044, 1045, 1060, 1043, 1061, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1071, 1056, 1057, 1058, 1059, 1046, 1042, 1068, 1067, 1047, 1064, 1069, 1065, 1063, 1066],
|
||
"macintosh": [196, 197, 199, 201, 209, 214, 220, 225, 224, 226, 228, 227, 229, 231, 233, 232, 234, 235, 237, 236, 238, 239, 241, 243, 242, 244, 246, 245, 250, 249, 251, 252, 8224, 176, 162, 163, 167, 8226, 182, 223, 174, 169, 8482, 180, 168, 8800, 198, 216, 8734, 177, 8804, 8805, 165, 181, 8706, 8721, 8719, 960, 8747, 170, 186, 937, 230, 248, 191, 161, 172, 8730, 402, 8776, 8710, 171, 187, 8230, 160, 192, 195, 213, 338, 339, 8211, 8212, 8220, 8221, 8216, 8217, 247, 9674, 255, 376, 8260, 8364, 8249, 8250, 64257, 64258, 8225, 183, 8218, 8222, 8240, 194, 202, 193, 203, 200, 205, 206, 207, 204, 211, 212, 63743, 210, 218, 219, 217, 305, 710, 732, 175, 728, 729, 730, 184, 733, 731, 711],
|
||
"windows-874": [8364, 129, 130, 131, 132, 8230, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 153, 154, 155, 156, 157, 158, 159, 160, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3592, 3593, 3594, 3595, 3596, 3597, 3598, 3599, 3600, 3601, 3602, 3603, 3604, 3605, 3606, 3607, 3608, 3609, 3610, 3611, 3612, 3613, 3614, 3615, 3616, 3617, 3618, 3619, 3620, 3621, 3622, 3623, 3624, 3625, 3626, 3627, 3628, 3629, 3630, 3631, 3632, 3633, 3634, 3635, 3636, 3637, 3638, 3639, 3640, 3641, 3642, null, null, null, null, 3647, 3648, 3649, 3650, 3651, 3652, 3653, 3654, 3655, 3656, 3657, 3658, 3659, 3660, 3661, 3662, 3663, 3664, 3665, 3666, 3667, 3668, 3669, 3670, 3671, 3672, 3673, 3674, 3675, null, null, null, null],
|
||
"windows-1250": [8364, 129, 8218, 131, 8222, 8230, 8224, 8225, 136, 8240, 352, 8249, 346, 356, 381, 377, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 353, 8250, 347, 357, 382, 378, 160, 711, 728, 321, 164, 260, 166, 167, 168, 169, 350, 171, 172, 173, 174, 379, 176, 177, 731, 322, 180, 181, 182, 183, 184, 261, 351, 187, 317, 733, 318, 380, 340, 193, 194, 258, 196, 313, 262, 199, 268, 201, 280, 203, 282, 205, 206, 270, 272, 323, 327, 211, 212, 336, 214, 215, 344, 366, 218, 368, 220, 221, 354, 223, 341, 225, 226, 259, 228, 314, 263, 231, 269, 233, 281, 235, 283, 237, 238, 271, 273, 324, 328, 243, 244, 337, 246, 247, 345, 367, 250, 369, 252, 253, 355, 729],
|
||
"windows-1251": [1026, 1027, 8218, 1107, 8222, 8230, 8224, 8225, 8364, 8240, 1033, 8249, 1034, 1036, 1035, 1039, 1106, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 1113, 8250, 1114, 1116, 1115, 1119, 160, 1038, 1118, 1032, 164, 1168, 166, 167, 1025, 169, 1028, 171, 172, 173, 174, 1031, 176, 177, 1030, 1110, 1169, 181, 182, 183, 1105, 8470, 1108, 187, 1112, 1029, 1109, 1111, 1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 1103],
|
||
"windows-1252": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 381, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 382, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255],
|
||
"windows-1253": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 136, 8240, 138, 8249, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 154, 8250, 156, 157, 158, 159, 160, 901, 902, 163, 164, 165, 166, 167, 168, 169, null, 171, 172, 173, 174, 8213, 176, 177, 178, 179, 900, 181, 182, 183, 904, 905, 906, 187, 908, 189, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920, 921, 922, 923, 924, 925, 926, 927, 928, 929, null, 931, 932, 933, 934, 935, 936, 937, 938, 939, 940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958, 959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, null],
|
||
"windows-1254": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 352, 8249, 338, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 353, 8250, 339, 157, 158, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 286, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 304, 350, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 287, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 305, 351, 255],
|
||
"windows-1255": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 138, 8249, 140, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 154, 8250, 156, 157, 158, 159, 160, 161, 162, 163, 8362, 165, 166, 167, 168, 169, 215, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 247, 187, 188, 189, 190, 191, 1456, 1457, 1458, 1459, 1460, 1461, 1462, 1463, 1464, 1465, 1466, 1467, 1468, 1469, 1470, 1471, 1472, 1473, 1474, 1475, 1520, 1521, 1522, 1523, 1524, null, null, null, null, null, null, null, 1488, 1489, 1490, 1491, 1492, 1493, 1494, 1495, 1496, 1497, 1498, 1499, 1500, 1501, 1502, 1503, 1504, 1505, 1506, 1507, 1508, 1509, 1510, 1511, 1512, 1513, 1514, null, null, 8206, 8207, null],
|
||
"windows-1256": [8364, 1662, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 1657, 8249, 338, 1670, 1688, 1672, 1711, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 1705, 8482, 1681, 8250, 339, 8204, 8205, 1722, 160, 1548, 162, 163, 164, 165, 166, 167, 168, 169, 1726, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 1563, 187, 188, 189, 190, 1567, 1729, 1569, 1570, 1571, 1572, 1573, 1574, 1575, 1576, 1577, 1578, 1579, 1580, 1581, 1582, 1583, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 215, 1591, 1592, 1593, 1594, 1600, 1601, 1602, 1603, 224, 1604, 226, 1605, 1606, 1607, 1608, 231, 232, 233, 234, 235, 1609, 1610, 238, 239, 1611, 1612, 1613, 1614, 244, 1615, 1616, 247, 1617, 249, 1618, 251, 252, 8206, 8207, 1746],
|
||
"windows-1257": [8364, 129, 8218, 131, 8222, 8230, 8224, 8225, 136, 8240, 138, 8249, 140, 168, 711, 184, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 152, 8482, 154, 8250, 156, 175, 731, 159, 160, null, 162, 163, 164, null, 166, 167, 216, 169, 342, 171, 172, 173, 174, 198, 176, 177, 178, 179, 180, 181, 182, 183, 248, 185, 343, 187, 188, 189, 190, 230, 260, 302, 256, 262, 196, 197, 280, 274, 268, 201, 377, 278, 290, 310, 298, 315, 352, 323, 325, 211, 332, 213, 214, 215, 370, 321, 346, 362, 220, 379, 381, 223, 261, 303, 257, 263, 228, 229, 281, 275, 269, 233, 378, 279, 291, 311, 299, 316, 353, 324, 326, 243, 333, 245, 246, 247, 371, 322, 347, 363, 252, 380, 382, 729],
|
||
"windows-1258": [8364, 129, 8218, 402, 8222, 8230, 8224, 8225, 710, 8240, 138, 8249, 338, 141, 142, 143, 144, 8216, 8217, 8220, 8221, 8226, 8211, 8212, 732, 8482, 154, 8250, 339, 157, 158, 376, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 258, 196, 197, 198, 199, 200, 201, 202, 203, 768, 205, 206, 207, 272, 209, 777, 211, 212, 416, 214, 215, 216, 217, 218, 219, 220, 431, 771, 223, 224, 225, 226, 259, 228, 229, 230, 231, 232, 233, 234, 235, 769, 237, 238, 239, 273, 241, 803, 243, 244, 417, 246, 247, 248, 249, 250, 251, 252, 432, 8363, 255],
|
||
"x-mac-cyrillic": [1040, 1041, 1042, 1043, 1044, 1045, 1046, 1047, 1048, 1049, 1050, 1051, 1052, 1053, 1054, 1055, 1056, 1057, 1058, 1059, 1060, 1061, 1062, 1063, 1064, 1065, 1066, 1067, 1068, 1069, 1070, 1071, 8224, 176, 1168, 163, 167, 8226, 182, 1030, 174, 169, 8482, 1026, 1106, 8800, 1027, 1107, 8734, 177, 8804, 8805, 1110, 181, 1169, 1032, 1028, 1108, 1031, 1111, 1033, 1113, 1034, 1114, 1112, 1029, 172, 8730, 402, 8776, 8710, 171, 187, 8230, 160, 1035, 1115, 1036, 1116, 1109, 8211, 8212, 8220, 8221, 8216, 8217, 247, 8222, 1038, 1118, 1039, 1119, 8470, 1025, 1105, 1103, 1072, 1073, 1074, 1075, 1076, 1077, 1078, 1079, 1080, 1081, 1082, 1083, 1084, 1085, 1086, 1087, 1088, 1089, 1090, 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, 1101, 1102, 8364]
|
||
};
|
||
function indexCodePointFor(pointer, i) {
|
||
if (!i)
|
||
return null;
|
||
return i[pointer] || null;
|
||
}
|
||
function indexPointerFor(code_point, i) {
|
||
var pointer = i.indexOf(code_point);
|
||
return pointer === -1 ? null : pointer;
|
||
}
|
||
function index(name) {
|
||
return Indexes[name];
|
||
}
|
||
function indexGB18030RangesCodePointFor(pointer) {
|
||
if (pointer > 39419 && pointer < 189e3 || pointer > 1237575)
|
||
return null;
|
||
if (pointer === 7457)
|
||
return 59335;
|
||
var offset = 0;
|
||
var code_point_offset = 0;
|
||
var idx = index("gb18030-ranges");
|
||
var i;
|
||
for (i = 0; i < idx.length; ++i) {
|
||
var entry = idx[i];
|
||
if (entry[0] <= pointer) {
|
||
offset = entry[0];
|
||
code_point_offset = entry[1];
|
||
} else {
|
||
break;
|
||
}
|
||
}
|
||
return code_point_offset + pointer - offset;
|
||
}
|
||
function indexGB18030RangesPointerFor(code_point) {
|
||
if (code_point === 59335)
|
||
return 7457;
|
||
var offset = 0;
|
||
var pointer_offset = 0;
|
||
var idx = index("gb18030-ranges");
|
||
var i;
|
||
for (i = 0; i < idx.length; ++i) {
|
||
var entry = idx[i];
|
||
if (entry[1] <= code_point) {
|
||
offset = entry[1];
|
||
pointer_offset = entry[0];
|
||
} else {
|
||
break;
|
||
}
|
||
}
|
||
return pointer_offset + code_point - offset;
|
||
}
|
||
function indexShiftJISPointerFor(code_point) {
|
||
shift_jis_index = shift_jis_index || index("jis0208").map((cp, pointer) => {
|
||
return inRange(pointer, 8272, 8835) ? null : cp;
|
||
});
|
||
const index_ = shift_jis_index;
|
||
return index_.indexOf(code_point);
|
||
}
|
||
var shift_jis_index;
|
||
function indexBig5PointerFor(code_point) {
|
||
big5_index_no_hkscs = big5_index_no_hkscs || index("big5").map((cp, pointer) => {
|
||
return pointer < (161 - 129) * 157 ? null : cp;
|
||
});
|
||
var index_ = big5_index_no_hkscs;
|
||
if (code_point === 9552 || code_point === 9566 || code_point === 9569 || code_point === 9578 || code_point === 21313 || code_point === 21317) {
|
||
return index_.lastIndexOf(code_point);
|
||
}
|
||
return indexPointerFor(code_point, index_);
|
||
}
|
||
var big5_index_no_hkscs;
|
||
class GB18030Decoder {
|
||
constructor(options) {
|
||
const { fatal } = options;
|
||
this.fatal = fatal;
|
||
this.gb18030_first = 0;
|
||
this.gb18030_second = 0, this.gb18030_third = 0;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
* @return The next code point(s) decoded, or null if not enough data exists in the input stream to decode a complete code point.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream && this.gb18030_first === 0 && this.gb18030_second === 0 && this.gb18030_third === 0) {
|
||
return finished;
|
||
}
|
||
if (bite === end_of_stream && (this.gb18030_first !== 0 || this.gb18030_second !== 0 || this.gb18030_third !== 0)) {
|
||
this.gb18030_first = 0;
|
||
this.gb18030_second = 0;
|
||
this.gb18030_third = 0;
|
||
decoderError(this.fatal);
|
||
}
|
||
var code_point;
|
||
if (this.gb18030_third !== 0) {
|
||
code_point = null;
|
||
if (inRange(bite, 48, 57)) {
|
||
code_point = indexGB18030RangesCodePointFor(
|
||
(((this.gb18030_first - 129) * 10 + this.gb18030_second - 48) * 126 + this.gb18030_third - 129) * 10 + bite - 48
|
||
);
|
||
}
|
||
var buffer2 = [this.gb18030_second, this.gb18030_third, bite];
|
||
this.gb18030_first = 0;
|
||
this.gb18030_second = 0;
|
||
this.gb18030_third = 0;
|
||
if (code_point === null) {
|
||
stream.prepend(buffer2);
|
||
return decoderError(this.fatal);
|
||
}
|
||
return code_point;
|
||
}
|
||
if (this.gb18030_second !== 0) {
|
||
if (inRange(bite, 129, 254)) {
|
||
this.gb18030_third = bite;
|
||
return null;
|
||
}
|
||
stream.prepend([this.gb18030_second, bite]);
|
||
this.gb18030_first = 0;
|
||
this.gb18030_second = 0;
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (this.gb18030_first !== 0) {
|
||
if (inRange(bite, 48, 57)) {
|
||
this.gb18030_second = bite;
|
||
return null;
|
||
}
|
||
var lead = this.gb18030_first;
|
||
var pointer = null;
|
||
this.gb18030_first = 0;
|
||
var offset = bite < 127 ? 64 : 65;
|
||
if (inRange(bite, 64, 126) || inRange(bite, 128, 254))
|
||
pointer = (lead - 129) * 190 + (bite - offset);
|
||
code_point = pointer === null ? null : indexCodePointFor(pointer, index("gb18030"));
|
||
if (code_point === null && isASCIIByte(bite))
|
||
stream.prepend(bite);
|
||
if (code_point === null)
|
||
return decoderError(this.fatal);
|
||
return code_point;
|
||
}
|
||
if (isASCIIByte(bite))
|
||
return bite;
|
||
if (bite === 128)
|
||
return 8364;
|
||
if (inRange(bite, 129, 254)) {
|
||
this.gb18030_first = bite;
|
||
return null;
|
||
}
|
||
return decoderError(this.fatal);
|
||
}
|
||
}
|
||
class GB18030Encoder {
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
* @return Byte(s) to emit.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
if (code_point === 58853)
|
||
return encoderError(code_point);
|
||
if (this.gbk_flag && code_point === 8364)
|
||
return 128;
|
||
var pointer = indexPointerFor(code_point, index("gb18030"));
|
||
if (pointer !== null) {
|
||
var lead = floor(pointer / 190) + 129;
|
||
var trail = pointer % 190;
|
||
var offset = trail < 63 ? 64 : 65;
|
||
return [lead, trail + offset];
|
||
}
|
||
if (this.gbk_flag)
|
||
return encoderError(code_point);
|
||
pointer = indexGB18030RangesPointerFor(code_point);
|
||
var byte1 = floor(pointer / 10 / 126 / 10);
|
||
pointer = pointer - byte1 * 10 * 126 * 10;
|
||
var byte2 = floor(pointer / 10 / 126);
|
||
pointer = pointer - byte2 * 10 * 126;
|
||
var byte3 = floor(pointer / 10);
|
||
var byte4 = pointer - byte3 * 10;
|
||
return [
|
||
byte1 + 129,
|
||
byte2 + 48,
|
||
byte3 + 129,
|
||
byte4 + 48
|
||
];
|
||
}
|
||
constructor(options = {}, gbk_flag = false) {
|
||
this.gbk_flag = gbk_flag;
|
||
}
|
||
}
|
||
class Big5Decoder {
|
||
constructor(options) {
|
||
const { fatal } = options;
|
||
this.fatal = fatal;
|
||
this.Big5_lead = 0;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream && this.Big5_lead !== 0) {
|
||
this.Big5_lead = 0;
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (bite === end_of_stream && this.Big5_lead === 0)
|
||
return finished;
|
||
if (this.Big5_lead !== 0) {
|
||
const lead = this.Big5_lead;
|
||
let pointer = null;
|
||
this.Big5_lead = 0;
|
||
const offset = bite < 127 ? 64 : 98;
|
||
if (inRange(bite, 64, 126) || inRange(bite, 161, 254))
|
||
pointer = (lead - 129) * 157 + (bite - offset);
|
||
switch (pointer) {
|
||
case 1133:
|
||
return [202, 772];
|
||
case 1135:
|
||
return [202, 780];
|
||
case 1164:
|
||
return [234, 772];
|
||
case 1166:
|
||
return [234, 780];
|
||
}
|
||
const code_point = pointer === null ? null : indexCodePointFor(pointer, index("big5"));
|
||
if (code_point === null && isASCIIByte(bite))
|
||
stream.prepend(bite);
|
||
if (code_point === null)
|
||
return decoderError(this.fatal);
|
||
return code_point;
|
||
}
|
||
if (isASCIIByte(bite))
|
||
return bite;
|
||
if (inRange(bite, 129, 254)) {
|
||
this.Big5_lead = bite;
|
||
return null;
|
||
}
|
||
return decoderError(this.fatal);
|
||
}
|
||
}
|
||
class Big5Encoder {
|
||
constructor() {
|
||
this.handler = function(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
const pointer = indexBig5PointerFor(code_point);
|
||
if (pointer === null)
|
||
return encoderError(code_point);
|
||
const lead = floor(pointer / 157) + 129;
|
||
if (lead < 161)
|
||
return encoderError(code_point);
|
||
const trail = pointer % 157;
|
||
const offset = trail < 63 ? 64 : 98;
|
||
return [lead, trail + offset];
|
||
};
|
||
}
|
||
}
|
||
class EUCJPDecoder {
|
||
constructor(options) {
|
||
const { fatal } = options;
|
||
this.fatal = fatal;
|
||
this.eucjp_jis0212_flag = false;
|
||
this.eucjp_lead = 0;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream && this.eucjp_lead !== 0) {
|
||
this.eucjp_lead = 0;
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (bite === end_of_stream && this.eucjp_lead === 0)
|
||
return finished;
|
||
if (this.eucjp_lead === 142 && inRange(bite, 161, 223)) {
|
||
this.eucjp_lead = 0;
|
||
return 65377 - 161 + bite;
|
||
}
|
||
if (this.eucjp_lead === 143 && inRange(bite, 161, 254)) {
|
||
this.eucjp_jis0212_flag = true;
|
||
this.eucjp_lead = bite;
|
||
return null;
|
||
}
|
||
if (this.eucjp_lead !== 0) {
|
||
const lead = this.eucjp_lead;
|
||
this.eucjp_lead = 0;
|
||
let code_point = null;
|
||
if (inRange(lead, 161, 254) && inRange(bite, 161, 254)) {
|
||
code_point = indexCodePointFor(
|
||
(lead - 161) * 94 + (bite - 161),
|
||
index(!this.eucjp_jis0212_flag ? "jis0208" : "jis0212")
|
||
);
|
||
}
|
||
this.eucjp_jis0212_flag = false;
|
||
if (!inRange(bite, 161, 254))
|
||
stream.prepend(bite);
|
||
if (code_point === null)
|
||
return decoderError(this.fatal);
|
||
return code_point;
|
||
}
|
||
if (isASCIIByte(bite))
|
||
return bite;
|
||
if (bite === 142 || bite === 143 || inRange(bite, 161, 254)) {
|
||
this.eucjp_lead = bite;
|
||
return null;
|
||
}
|
||
return decoderError(this.fatal);
|
||
}
|
||
}
|
||
class EUCJPEncoder {
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
if (code_point === 165)
|
||
return 92;
|
||
if (code_point === 8254)
|
||
return 126;
|
||
if (inRange(code_point, 65377, 65439))
|
||
return [142, code_point - 65377 + 161];
|
||
if (code_point === 8722)
|
||
code_point = 65293;
|
||
const pointer = indexPointerFor(code_point, index("jis0208"));
|
||
if (pointer === null)
|
||
return encoderError(code_point);
|
||
const lead = floor(pointer / 94) + 161;
|
||
const trail = pointer % 94 + 161;
|
||
return [lead, trail];
|
||
}
|
||
}
|
||
class EUCKRDecoder {
|
||
constructor(options) {
|
||
const { fatal } = options;
|
||
this.fatal = fatal;
|
||
this.euckr_lead = 0;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream && this.euckr_lead !== 0) {
|
||
this.euckr_lead = 0;
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (bite === end_of_stream && this.euckr_lead === 0)
|
||
return finished;
|
||
if (this.euckr_lead !== 0) {
|
||
const lead = this.euckr_lead;
|
||
let pointer = null;
|
||
this.euckr_lead = 0;
|
||
if (inRange(bite, 65, 254))
|
||
pointer = (lead - 129) * 190 + (bite - 65);
|
||
const code_point = pointer === null ? null : indexCodePointFor(pointer, index("euc-kr"));
|
||
if (pointer === null && isASCIIByte(bite))
|
||
stream.prepend(bite);
|
||
if (code_point === null)
|
||
return decoderError(this.fatal);
|
||
return code_point;
|
||
}
|
||
if (isASCIIByte(bite))
|
||
return bite;
|
||
if (inRange(bite, 129, 254)) {
|
||
this.euckr_lead = bite;
|
||
return null;
|
||
}
|
||
return decoderError(this.fatal);
|
||
}
|
||
}
|
||
class EUCKREncoder {
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
* @return {(number|!Array.<number>)} Byte(s) to emit.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
const pointer = indexPointerFor(code_point, index("euc-kr"));
|
||
if (pointer === null)
|
||
return encoderError(code_point);
|
||
const lead = floor(pointer / 190) + 129;
|
||
const trail = pointer % 190 + 65;
|
||
return [lead, trail];
|
||
}
|
||
}
|
||
class ISO2022JPDecoder {
|
||
constructor(options) {
|
||
const { fatal } = options;
|
||
this.fatal = fatal;
|
||
this.states = {
|
||
ASCII: 0,
|
||
Roman: 1,
|
||
Katakana: 2,
|
||
LeadByte: 3,
|
||
TrailByte: 4,
|
||
EscapeStart: 5,
|
||
Escape: 6
|
||
};
|
||
this.iso2022jp_decoder_state = this.states.ASCII;
|
||
this.iso2022jp_decoder_output_state = this.states.ASCII, this.iso2022jp_lead = 0;
|
||
this.iso2022jp_output_flag = false;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
switch (this.iso2022jp_decoder_state) {
|
||
default:
|
||
case this.states.ASCII:
|
||
if (bite === 27) {
|
||
this.iso2022jp_decoder_state = this.states.EscapeStart;
|
||
return null;
|
||
}
|
||
if (inRange(bite, 0, 127) && bite !== 14 && bite !== 15 && bite !== 27) {
|
||
this.iso2022jp_output_flag = false;
|
||
return bite;
|
||
}
|
||
if (bite === end_of_stream) {
|
||
return finished;
|
||
}
|
||
this.iso2022jp_output_flag = false;
|
||
return decoderError(this.fatal);
|
||
case this.states.Roman:
|
||
if (bite === 27) {
|
||
this.iso2022jp_decoder_state = this.states.EscapeStart;
|
||
return null;
|
||
}
|
||
if (bite === 92) {
|
||
this.iso2022jp_output_flag = false;
|
||
return 165;
|
||
}
|
||
if (bite === 126) {
|
||
this.iso2022jp_output_flag = false;
|
||
return 8254;
|
||
}
|
||
if (inRange(bite, 0, 127) && bite !== 14 && bite !== 15 && bite !== 27 && bite !== 92 && bite !== 126) {
|
||
this.iso2022jp_output_flag = false;
|
||
return bite;
|
||
}
|
||
if (bite === end_of_stream) {
|
||
return finished;
|
||
}
|
||
this.iso2022jp_output_flag = false;
|
||
return decoderError(this.fatal);
|
||
case this.states.Katakana:
|
||
if (bite === 27) {
|
||
this.iso2022jp_decoder_state = this.states.EscapeStart;
|
||
return null;
|
||
}
|
||
if (inRange(bite, 33, 95)) {
|
||
this.iso2022jp_output_flag = false;
|
||
return 65377 - 33 + bite;
|
||
}
|
||
if (bite === end_of_stream) {
|
||
return finished;
|
||
}
|
||
this.iso2022jp_output_flag = false;
|
||
return decoderError(this.fatal);
|
||
case this.states.LeadByte:
|
||
if (bite === 27) {
|
||
this.iso2022jp_decoder_state = this.states.EscapeStart;
|
||
return null;
|
||
}
|
||
if (inRange(bite, 33, 126)) {
|
||
this.iso2022jp_output_flag = false;
|
||
this.iso2022jp_lead = bite;
|
||
this.iso2022jp_decoder_state = this.states.TrailByte;
|
||
return null;
|
||
}
|
||
if (bite === end_of_stream) {
|
||
return finished;
|
||
}
|
||
this.iso2022jp_output_flag = false;
|
||
return decoderError(this.fatal);
|
||
case this.states.TrailByte:
|
||
if (bite === 27) {
|
||
this.iso2022jp_decoder_state = this.states.EscapeStart;
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (inRange(bite, 33, 126)) {
|
||
this.iso2022jp_decoder_state = this.states.LeadByte;
|
||
const pointer = (this.iso2022jp_lead - 33) * 94 + bite - 33;
|
||
const code_point = indexCodePointFor(pointer, index("jis0208"));
|
||
if (code_point === null)
|
||
return decoderError(this.fatal);
|
||
return code_point;
|
||
}
|
||
if (bite === end_of_stream) {
|
||
this.iso2022jp_decoder_state = this.states.LeadByte;
|
||
stream.prepend(bite);
|
||
return decoderError(this.fatal);
|
||
}
|
||
this.iso2022jp_decoder_state = this.states.LeadByte;
|
||
return decoderError(this.fatal);
|
||
case this.states.EscapeStart:
|
||
if (bite === 36 || bite === 40) {
|
||
this.iso2022jp_lead = bite;
|
||
this.iso2022jp_decoder_state = this.states.Escape;
|
||
return null;
|
||
}
|
||
stream.prepend(bite);
|
||
this.iso2022jp_output_flag = false;
|
||
this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state;
|
||
return decoderError(this.fatal);
|
||
case this.states.Escape: {
|
||
const lead = this.iso2022jp_lead;
|
||
this.iso2022jp_lead = 0;
|
||
let state = null;
|
||
if (lead === 40 && bite === 66)
|
||
state = this.states.ASCII;
|
||
if (lead === 40 && bite === 74)
|
||
state = this.states.Roman;
|
||
if (lead === 40 && bite === 73)
|
||
state = this.states.Katakana;
|
||
if (lead === 36 && (bite === 64 || bite === 66))
|
||
state = this.states.LeadByte;
|
||
if (state !== null) {
|
||
this.iso2022jp_decoder_state = this.iso2022jp_decoder_state = state;
|
||
const output_flag = this.iso2022jp_output_flag;
|
||
this.iso2022jp_output_flag = true;
|
||
return !output_flag ? null : decoderError(this.fatal);
|
||
}
|
||
stream.prepend([lead, bite]);
|
||
this.iso2022jp_output_flag = false;
|
||
this.iso2022jp_decoder_state = this.iso2022jp_decoder_output_state;
|
||
return decoderError(this.fatal);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
class ISO2022JPEncoder {
|
||
constructor() {
|
||
this.states = {
|
||
ASCII: 0,
|
||
Roman: 1,
|
||
jis0208: 2
|
||
};
|
||
this.iso2022jp_state = this.states.ASCII;
|
||
}
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream && this.iso2022jp_state !== this.states.ASCII) {
|
||
stream.prepend(code_point);
|
||
this.iso2022jp_state = this.states.ASCII;
|
||
return [27, 40, 66];
|
||
}
|
||
if (code_point === end_of_stream && this.iso2022jp_state === this.states.ASCII)
|
||
return finished;
|
||
if ((this.iso2022jp_state === this.states.ASCII || this.iso2022jp_state === this.states.Roman) && (code_point === 14 || code_point === 15 || code_point === 27)) {
|
||
return encoderError(65533);
|
||
}
|
||
if (this.iso2022jp_state === this.states.ASCII && isASCIICodePoint(code_point))
|
||
return code_point;
|
||
if (this.iso2022jp_state === this.states.Roman && (isASCIICodePoint(code_point) && code_point !== 92 && code_point !== 126 || (code_point == 165 || code_point == 8254))) {
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
if (code_point === 165)
|
||
return 92;
|
||
if (code_point === 8254)
|
||
return 126;
|
||
}
|
||
if (isASCIICodePoint(code_point) && this.iso2022jp_state !== this.states.ASCII) {
|
||
stream.prepend(code_point);
|
||
this.iso2022jp_state = this.states.ASCII;
|
||
return [27, 40, 66];
|
||
}
|
||
if ((code_point === 165 || code_point === 8254) && this.iso2022jp_state !== this.states.Roman) {
|
||
stream.prepend(code_point);
|
||
this.iso2022jp_state = this.states.Roman;
|
||
return [27, 40, 74];
|
||
}
|
||
if (code_point === 8722)
|
||
code_point = 65293;
|
||
const pointer = indexPointerFor(code_point, index("jis0208"));
|
||
if (pointer === null)
|
||
return encoderError(code_point);
|
||
if (this.iso2022jp_state !== this.states.jis0208) {
|
||
stream.prepend(code_point);
|
||
this.iso2022jp_state = this.states.jis0208;
|
||
return [27, 36, 66];
|
||
}
|
||
const lead = floor(pointer / 94) + 33;
|
||
const trail = pointer % 94 + 33;
|
||
return [lead, trail];
|
||
}
|
||
}
|
||
class XUserDefinedDecoder {
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream)
|
||
return finished;
|
||
if (isASCIIByte(bite))
|
||
return bite;
|
||
return 63360 + bite - 128;
|
||
}
|
||
}
|
||
class XUserDefinedEncoder {
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
if (inRange(code_point, 63360, 63487))
|
||
return code_point - 63360 + 128;
|
||
return encoderError(code_point);
|
||
}
|
||
}
|
||
class ShiftJISDecoder {
|
||
constructor(options) {
|
||
const { fatal } = options;
|
||
this.fatal = fatal;
|
||
this.Shift_JIS_lead = 0;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream && this.Shift_JIS_lead !== 0) {
|
||
this.Shift_JIS_lead = 0;
|
||
return decoderError(this.fatal);
|
||
}
|
||
if (bite === end_of_stream && this.Shift_JIS_lead === 0)
|
||
return finished;
|
||
if (this.Shift_JIS_lead !== 0) {
|
||
var lead = this.Shift_JIS_lead;
|
||
var pointer = null;
|
||
this.Shift_JIS_lead = 0;
|
||
var offset = bite < 127 ? 64 : 65;
|
||
var lead_offset = lead < 160 ? 129 : 193;
|
||
if (inRange(bite, 64, 126) || inRange(bite, 128, 252))
|
||
pointer = (lead - lead_offset) * 188 + bite - offset;
|
||
if (inRange(pointer, 8836, 10715))
|
||
return 57344 - 8836 + pointer;
|
||
var code_point = pointer === null ? null : indexCodePointFor(pointer, index("jis0208"));
|
||
if (code_point === null && isASCIIByte(bite))
|
||
stream.prepend(bite);
|
||
if (code_point === null)
|
||
return decoderError(this.fatal);
|
||
return code_point;
|
||
}
|
||
if (isASCIIByte(bite) || bite === 128)
|
||
return bite;
|
||
if (inRange(bite, 161, 223))
|
||
return 65377 - 161 + bite;
|
||
if (inRange(bite, 129, 159) || inRange(bite, 224, 252)) {
|
||
this.Shift_JIS_lead = bite;
|
||
return null;
|
||
}
|
||
return decoderError(this.fatal);
|
||
}
|
||
}
|
||
class ShiftJISEncoder {
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point) || code_point === 128)
|
||
return code_point;
|
||
if (code_point === 165)
|
||
return 92;
|
||
if (code_point === 8254)
|
||
return 126;
|
||
if (inRange(code_point, 65377, 65439))
|
||
return code_point - 65377 + 161;
|
||
if (code_point === 8722)
|
||
code_point = 65293;
|
||
var pointer = indexShiftJISPointerFor(code_point);
|
||
if (pointer === null)
|
||
return encoderError(code_point);
|
||
var lead = floor(pointer / 188);
|
||
var lead_offset = lead < 31 ? 129 : 193;
|
||
var trail = pointer % 188;
|
||
var offset = trail < 63 ? 64 : 65;
|
||
return [lead + lead_offset, trail + offset];
|
||
}
|
||
}
|
||
class SingleByteDecoder {
|
||
/**
|
||
* @param {!Array.<number>} index The encoding index.
|
||
* @param {{fatal: boolean}} options
|
||
*/
|
||
constructor(index2, options) {
|
||
const { fatal } = options;
|
||
this.fatal = fatal;
|
||
this.index = index2;
|
||
}
|
||
/**
|
||
* @param {Stream} stream The stream of bytes being decoded.
|
||
* @param {number} bite The next byte read from the stream.
|
||
*/
|
||
handler(stream, bite) {
|
||
if (bite === end_of_stream)
|
||
return finished;
|
||
if (isASCIIByte(bite))
|
||
return bite;
|
||
var code_point = this.index[bite - 128];
|
||
if (code_point === null)
|
||
return decoderError(this.fatal);
|
||
return code_point;
|
||
}
|
||
}
|
||
class SingleByteEncoder {
|
||
/**
|
||
* @param {!Array.<?number>} index The encoding index.
|
||
*/
|
||
constructor(index2) {
|
||
this.index = index2;
|
||
}
|
||
/**
|
||
* @param {Stream} stream Input stream.
|
||
* @param {number} code_point Next code point read from the stream.
|
||
* @return {(number|!Array.<number>)} Byte(s) to emit.
|
||
*/
|
||
handler(stream, code_point) {
|
||
if (code_point === end_of_stream)
|
||
return finished;
|
||
if (isASCIICodePoint(code_point))
|
||
return code_point;
|
||
const pointer = indexPointerFor(code_point, this.index);
|
||
if (pointer === null)
|
||
encoderError(code_point);
|
||
return pointer + 128;
|
||
}
|
||
}
|
||
const label_to_encoding = {};
|
||
encodings.forEach(({ encodings: encodings2 }) => {
|
||
encodings2.forEach((encoding) => {
|
||
encoding.labels.forEach((label) => {
|
||
label_to_encoding[label] = encoding;
|
||
});
|
||
});
|
||
});
|
||
const encoders = {
|
||
"UTF-8"() {
|
||
return new UTF8Encoder();
|
||
},
|
||
"GBK"(options) {
|
||
return new GB18030Encoder(options, true);
|
||
},
|
||
"gb18030"() {
|
||
return new GB18030Encoder();
|
||
},
|
||
"Big5"() {
|
||
return new Big5Encoder();
|
||
},
|
||
"EUC-JP"() {
|
||
return new EUCJPEncoder();
|
||
},
|
||
"EUC-KR"() {
|
||
return new EUCKREncoder();
|
||
},
|
||
"ISO-2022-JP"() {
|
||
return new ISO2022JPEncoder();
|
||
},
|
||
"UTF-16BE"() {
|
||
return new UTF16Encoder(true);
|
||
},
|
||
"UTF-16LE"() {
|
||
return new UTF16Encoder();
|
||
},
|
||
"x-user-defined"() {
|
||
return new XUserDefinedEncoder();
|
||
},
|
||
"Shift_JIS"() {
|
||
return new ShiftJISEncoder();
|
||
}
|
||
};
|
||
const decoders = {
|
||
"UTF-8"(options) {
|
||
return new UTF8Decoder(options);
|
||
},
|
||
"GBK"(options) {
|
||
return new GB18030Decoder(options);
|
||
},
|
||
"gb18030"(options) {
|
||
return new GB18030Decoder(options);
|
||
},
|
||
"Big5"(options) {
|
||
return new Big5Decoder(options);
|
||
},
|
||
"EUC-JP"(options) {
|
||
return new EUCJPDecoder(options);
|
||
},
|
||
"EUC-KR"(options) {
|
||
return new EUCKRDecoder(options);
|
||
},
|
||
"ISO-2022-JP"(options) {
|
||
return new ISO2022JPDecoder(options);
|
||
},
|
||
"UTF-16BE"(options) {
|
||
return new UTF16Decoder(true, options);
|
||
},
|
||
"UTF-16LE"(options) {
|
||
return new UTF16Decoder(false, options);
|
||
},
|
||
"x-user-defined"() {
|
||
return new XUserDefinedDecoder();
|
||
},
|
||
"Shift_JIS"(options) {
|
||
return new ShiftJISDecoder(options);
|
||
}
|
||
};
|
||
encodings.forEach(({ heading, encodings: encodings2 }) => {
|
||
if (heading != "Legacy single-byte encodings")
|
||
return;
|
||
encodings2.forEach((encoding) => {
|
||
const name = encoding.name;
|
||
const idx = index(name.toLowerCase());
|
||
decoders[name] = (options) => {
|
||
return new SingleByteDecoder(idx, options);
|
||
};
|
||
encoders[name] = (options) => {
|
||
return new SingleByteEncoder(idx, options);
|
||
};
|
||
});
|
||
});
|
||
class Stream {
|
||
/**
|
||
* A stream represents an ordered sequence of tokens.
|
||
* @param {!(Array.<number>|Uint8Array)} tokens Array of tokens that provide
|
||
* the stream.
|
||
*/
|
||
constructor(tokens) {
|
||
this.tokens = [...tokens];
|
||
this.tokens.reverse();
|
||
}
|
||
/**
|
||
* @returns True if end-of-stream has been hit.
|
||
*/
|
||
endOfStream() {
|
||
return !this.tokens.length;
|
||
}
|
||
/**
|
||
* When a token is read from a stream, the first token in the
|
||
* stream must be returned and subsequently removed, and
|
||
* end-of-stream must be returned otherwise.
|
||
*
|
||
* @return Get the next token from the stream, or end_of_stream.
|
||
*/
|
||
read() {
|
||
if (!this.tokens.length)
|
||
return end_of_stream;
|
||
return this.tokens.pop();
|
||
}
|
||
/**
|
||
* When one or more tokens are prepended to a stream, those tokens
|
||
* must be inserted, in given order, before the first token in the
|
||
* stream.
|
||
*
|
||
* @param {(number|!Array.<number>)} token The token(s) to prepend to the
|
||
* stream.
|
||
*/
|
||
prepend(token) {
|
||
if (Array.isArray(token)) {
|
||
var tokens = (
|
||
/**@type {!Array.<number>}*/
|
||
token
|
||
);
|
||
while (tokens.length)
|
||
this.tokens.push(tokens.pop());
|
||
} else {
|
||
this.tokens.push(token);
|
||
}
|
||
}
|
||
/**
|
||
* When one or more tokens are pushed to a stream, those tokens
|
||
* must be inserted, in given order, after the last token in the
|
||
* stream.
|
||
*
|
||
* @param {(number|!Array.<number>)} token The tokens(s) to push to the
|
||
* stream.
|
||
*/
|
||
push(token) {
|
||
if (Array.isArray(token)) {
|
||
const tokens = (
|
||
/**@type {!Array.<number>}*/
|
||
token
|
||
);
|
||
while (tokens.length)
|
||
this.tokens.unshift(tokens.shift());
|
||
} else {
|
||
this.tokens.unshift(token);
|
||
}
|
||
}
|
||
}
|
||
const DEFAULT_ENCODING = "utf-8";
|
||
function getEncoding(label) {
|
||
label = String(label).trim().toLowerCase();
|
||
if (Object.prototype.hasOwnProperty.call(label_to_encoding, label)) {
|
||
return label_to_encoding[label];
|
||
}
|
||
return null;
|
||
}
|
||
class TextEncoder {
|
||
/**
|
||
* @param {string=} label The label of the encoding. NONSTANDARD.
|
||
* @param {Object=} [options] NONSTANDARD.
|
||
*/
|
||
constructor(label, options = {}) {
|
||
this._encoding = null;
|
||
this._encoder = null;
|
||
this._do_not_flush = false;
|
||
this._fatal = options["fatal"] ? "fatal" : "replacement";
|
||
if (options["NONSTANDARD_allowLegacyEncoding"]) {
|
||
label = label !== void 0 ? String(label) : DEFAULT_ENCODING;
|
||
var encoding = getEncoding(label);
|
||
if (encoding === null || encoding.name === "replacement")
|
||
throw RangeError("Unknown encoding: " + label);
|
||
if (!encoders[encoding.name]) {
|
||
throw Error("Encoder not present. Did you forget to include encoding-indexes.js first?");
|
||
}
|
||
this._encoding = encoding;
|
||
} else {
|
||
this._encoding = getEncoding("utf-8");
|
||
if (label !== void 0 && "console" in global) {
|
||
console.warn("TextEncoder constructor called with encoding label, which is ignored.");
|
||
}
|
||
}
|
||
}
|
||
get encoding() {
|
||
return this._encoding.name.toLowerCase();
|
||
}
|
||
/**
|
||
* @param {string=} opt_string The string to encode.
|
||
* @param {Object=} options
|
||
*/
|
||
encode(opt_string = "", options = {}) {
|
||
if (!this._do_not_flush)
|
||
this._encoder = encoders[this._encoding.name]({
|
||
fatal: this._fatal === "fatal"
|
||
});
|
||
this._do_not_flush = Boolean(options["stream"]);
|
||
const input = new Stream(stringToCodePoints(opt_string));
|
||
const output = [];
|
||
var result;
|
||
while (true) {
|
||
var token = input.read();
|
||
if (token === end_of_stream)
|
||
break;
|
||
result = this._encoder.handler(input, token);
|
||
if (result === finished)
|
||
break;
|
||
if (Array.isArray(result))
|
||
output.push.apply(
|
||
output,
|
||
/**@type {!Array.<number>}*/
|
||
result
|
||
);
|
||
else
|
||
output.push(result);
|
||
}
|
||
if (!this._do_not_flush) {
|
||
while (true) {
|
||
result = this._encoder.handler(input, input.read());
|
||
if (result === finished)
|
||
break;
|
||
if (Array.isArray(result))
|
||
output.push.apply(
|
||
output,
|
||
/**@type {!Array.<number>}*/
|
||
result
|
||
);
|
||
else
|
||
output.push(result);
|
||
}
|
||
this._encoder = null;
|
||
}
|
||
return new Uint8Array(output);
|
||
}
|
||
}
|
||
class TextDecoder {
|
||
/**
|
||
* @param {string=} label The label of the encoding; defaults to 'utf-8'.
|
||
* @param {Object=} options
|
||
*/
|
||
constructor(label = DEFAULT_ENCODING, options = {}) {
|
||
this._encoding = null;
|
||
this._decoder = null;
|
||
this._ignoreBOM = false;
|
||
this._BOMseen = false;
|
||
this._error_mode = "replacement";
|
||
this._do_not_flush = false;
|
||
const encoding = getEncoding(label);
|
||
if (encoding === null || encoding.name == "replacement")
|
||
throw RangeError("Unknown encoding: " + label);
|
||
if (!decoders[encoding.name]) {
|
||
throw Error("Decoder not present. Did you forget to include encoding-indexes.js first?");
|
||
}
|
||
this._encoding = encoding;
|
||
if (options["fatal"])
|
||
this._error_mode = "fatal";
|
||
if (options["ignoreBOM"])
|
||
this._ignoreBOM = true;
|
||
}
|
||
get encoding() {
|
||
return this._encoding.name.toLowerCase();
|
||
}
|
||
get fatal() {
|
||
return this._error_mode === "fatal";
|
||
}
|
||
get ignoreBOM() {
|
||
return this._ignoreBOM;
|
||
}
|
||
/**
|
||
* @param {BufferSource=} input The buffer of bytes to decode.
|
||
* @param {Object=} options
|
||
* @return The decoded string.
|
||
*/
|
||
decode(input, options = {}) {
|
||
let bytes;
|
||
if (typeof input === "object" && input instanceof ArrayBuffer) {
|
||
bytes = new Uint8Array(input);
|
||
} else if (typeof input === "object" && "buffer" in input && input.buffer instanceof ArrayBuffer) {
|
||
bytes = new Uint8Array(
|
||
input.buffer,
|
||
input.byteOffset,
|
||
input.byteLength
|
||
);
|
||
} else {
|
||
bytes = new Uint8Array(0);
|
||
}
|
||
if (!this._do_not_flush) {
|
||
this._decoder = decoders[this._encoding.name]({
|
||
fatal: this._error_mode === "fatal"
|
||
});
|
||
this._BOMseen = false;
|
||
}
|
||
this._do_not_flush = Boolean(options["stream"]);
|
||
const input_stream = new Stream(bytes);
|
||
const output = [];
|
||
let result;
|
||
while (true) {
|
||
const token = input_stream.read();
|
||
if (token === end_of_stream)
|
||
break;
|
||
result = this._decoder.handler(input_stream, token);
|
||
if (result === finished)
|
||
break;
|
||
if (result !== null) {
|
||
if (Array.isArray(result))
|
||
output.push.apply(
|
||
output,
|
||
/**@type {!Array.<number>}*/
|
||
result
|
||
);
|
||
else
|
||
output.push(result);
|
||
}
|
||
}
|
||
if (!this._do_not_flush) {
|
||
do {
|
||
result = this._decoder.handler(input_stream, input_stream.read());
|
||
if (result === finished)
|
||
break;
|
||
if (result === null)
|
||
continue;
|
||
if (Array.isArray(result))
|
||
output.push.apply(
|
||
output,
|
||
/**@type {!Array.<number>}*/
|
||
result
|
||
);
|
||
else
|
||
output.push(result);
|
||
} while (!input_stream.endOfStream());
|
||
this._decoder = null;
|
||
}
|
||
return this.serializeStream(output);
|
||
}
|
||
// A TextDecoder object also has an associated serialize stream
|
||
// algorithm...
|
||
/**
|
||
* @param {!Array.<number>} stream
|
||
*/
|
||
serializeStream(stream) {
|
||
if (["UTF-8", "UTF-16LE", "UTF-16BE"].includes(this._encoding.name) && !this._ignoreBOM && !this._BOMseen) {
|
||
if (stream.length > 0 && stream[0] === 65279) {
|
||
this._BOMseen = true;
|
||
stream.shift();
|
||
} else if (stream.length > 0) {
|
||
this._BOMseen = true;
|
||
} else
|
||
;
|
||
}
|
||
return codePointsToString(stream);
|
||
}
|
||
}
|
||
const props$j = defineMixin({
|
||
props: {
|
||
// 背景颜色(默认transparent)
|
||
bgColor: {
|
||
type: String,
|
||
default: () => defProps.gap.bgColor
|
||
},
|
||
// 分割槽高度,单位px(默认30)
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => defProps.gap.height
|
||
},
|
||
// 与上一个组件的距离
|
||
marginTop: {
|
||
type: [String, Number],
|
||
default: () => defProps.gap.marginTop
|
||
},
|
||
// 与下一个组件的距离
|
||
marginBottom: {
|
||
type: [String, Number],
|
||
default: () => defProps.gap.marginBottom
|
||
}
|
||
}
|
||
});
|
||
const props$i = defineMixin({
|
||
props: {
|
||
bgColor: {
|
||
type: String,
|
||
default: () => defProps.statusBar.bgColor
|
||
}
|
||
}
|
||
});
|
||
const props$h = defineMixin({
|
||
props: {
|
||
// 头像图片路径(不能为相对路径)
|
||
src: {
|
||
type: String,
|
||
default: () => defProps.avatar.src
|
||
},
|
||
// 头像形状,circle-圆形,square-方形
|
||
shape: {
|
||
type: String,
|
||
default: () => defProps.avatar.shape
|
||
},
|
||
// 头像尺寸
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => defProps.avatar.size
|
||
},
|
||
// 裁剪模式
|
||
mode: {
|
||
type: String,
|
||
default: () => defProps.avatar.mode
|
||
},
|
||
// 显示的文字
|
||
text: {
|
||
type: String,
|
||
default: () => defProps.avatar.text
|
||
},
|
||
// 背景色
|
||
bgColor: {
|
||
type: String,
|
||
default: () => defProps.avatar.bgColor
|
||
},
|
||
// 文字颜色
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.avatar.color
|
||
},
|
||
// 文字大小
|
||
fontSize: {
|
||
type: [String, Number],
|
||
default: () => defProps.avatar.fontSize
|
||
},
|
||
// 显示的图标
|
||
icon: {
|
||
type: String,
|
||
default: () => defProps.avatar.icon
|
||
},
|
||
// 显示小程序头像,只对百度,微信,QQ小程序有效
|
||
mpAvatar: {
|
||
type: Boolean,
|
||
default: () => defProps.avatar.mpAvatar
|
||
},
|
||
// 是否使用随机背景色
|
||
randomBgColor: {
|
||
type: Boolean,
|
||
default: () => defProps.avatar.randomBgColor
|
||
},
|
||
// 加载失败的默认头像(组件有内置默认图片)
|
||
defaultUrl: {
|
||
type: String,
|
||
default: () => defProps.avatar.defaultUrl
|
||
},
|
||
// 如果配置了randomBgColor为true,且配置了此值,则从默认的背景色数组中取出对应索引的颜色值,取值0-19之间
|
||
colorIndex: {
|
||
type: [String, Number],
|
||
// 校验参数规则,索引在0-19之间
|
||
validator(n2) {
|
||
return test.range(n2, [0, 19]) || n2 === "";
|
||
},
|
||
default: () => defProps.avatar.colorIndex
|
||
},
|
||
// 组件标识符
|
||
name: {
|
||
type: String,
|
||
default: () => defProps.avatar.name
|
||
}
|
||
}
|
||
});
|
||
const icons = {
|
||
"uicon-level": "",
|
||
"uicon-column-line": "",
|
||
"uicon-checkbox-mark": "",
|
||
"uicon-folder": "",
|
||
"uicon-movie": "",
|
||
"uicon-star-fill": "",
|
||
"uicon-star": "",
|
||
"uicon-phone-fill": "",
|
||
"uicon-phone": "",
|
||
"uicon-apple-fill": "",
|
||
"uicon-chrome-circle-fill": "",
|
||
"uicon-backspace": "",
|
||
"uicon-attach": "",
|
||
"uicon-cut": "",
|
||
"uicon-empty-car": "",
|
||
"uicon-empty-coupon": "",
|
||
"uicon-empty-address": "",
|
||
"uicon-empty-favor": "",
|
||
"uicon-empty-permission": "",
|
||
"uicon-empty-news": "",
|
||
"uicon-empty-search": "",
|
||
"uicon-github-circle-fill": "",
|
||
"uicon-rmb": "",
|
||
"uicon-person-delete-fill": "",
|
||
"uicon-reload": "",
|
||
"uicon-order": "",
|
||
"uicon-server-man": "",
|
||
"uicon-search": "",
|
||
"uicon-fingerprint": "",
|
||
"uicon-more-dot-fill": "",
|
||
"uicon-scan": "",
|
||
"uicon-share-square": "",
|
||
"uicon-map": "",
|
||
"uicon-map-fill": "",
|
||
"uicon-tags": "",
|
||
"uicon-tags-fill": "",
|
||
"uicon-bookmark-fill": "",
|
||
"uicon-bookmark": "",
|
||
"uicon-eye": "",
|
||
"uicon-eye-fill": "",
|
||
"uicon-mic": "",
|
||
"uicon-mic-off": "",
|
||
"uicon-calendar": "",
|
||
"uicon-calendar-fill": "",
|
||
"uicon-trash": "",
|
||
"uicon-trash-fill": "",
|
||
"uicon-play-left": "",
|
||
"uicon-play-right": "",
|
||
"uicon-minus": "",
|
||
"uicon-plus": "",
|
||
"uicon-info": "",
|
||
"uicon-info-circle": "",
|
||
"uicon-info-circle-fill": "",
|
||
"uicon-question": "",
|
||
"uicon-error": "",
|
||
"uicon-close": "",
|
||
"uicon-checkmark": "",
|
||
"uicon-android-circle-fill": "",
|
||
"uicon-android-fill": "",
|
||
"uicon-ie": "",
|
||
"uicon-IE-circle-fill": "",
|
||
"uicon-google": "",
|
||
"uicon-google-circle-fill": "",
|
||
"uicon-setting-fill": "",
|
||
"uicon-setting": "",
|
||
"uicon-minus-square-fill": "",
|
||
"uicon-plus-square-fill": "",
|
||
"uicon-heart": "",
|
||
"uicon-heart-fill": "",
|
||
"uicon-camera": "",
|
||
"uicon-camera-fill": "",
|
||
"uicon-more-circle": "",
|
||
"uicon-more-circle-fill": "",
|
||
"uicon-chat": "",
|
||
"uicon-chat-fill": "",
|
||
"uicon-bag-fill": "",
|
||
"uicon-bag": "",
|
||
"uicon-error-circle-fill": "",
|
||
"uicon-error-circle": "",
|
||
"uicon-close-circle": "",
|
||
"uicon-close-circle-fill": "",
|
||
"uicon-checkmark-circle": "",
|
||
"uicon-checkmark-circle-fill": "",
|
||
"uicon-question-circle-fill": "",
|
||
"uicon-question-circle": "",
|
||
"uicon-share": "",
|
||
"uicon-share-fill": "",
|
||
"uicon-shopping-cart": "",
|
||
"uicon-shopping-cart-fill": "",
|
||
"uicon-bell": "",
|
||
"uicon-bell-fill": "",
|
||
"uicon-list": "",
|
||
"uicon-list-dot": "",
|
||
"uicon-zhihu": "",
|
||
"uicon-zhihu-circle-fill": "",
|
||
"uicon-zhifubao": "",
|
||
"uicon-zhifubao-circle-fill": "",
|
||
"uicon-weixin-circle-fill": "",
|
||
"uicon-weixin-fill": "",
|
||
"uicon-twitter-circle-fill": "",
|
||
"uicon-twitter": "",
|
||
"uicon-taobao-circle-fill": "",
|
||
"uicon-taobao": "",
|
||
"uicon-weibo-circle-fill": "",
|
||
"uicon-weibo": "",
|
||
"uicon-qq-fill": "",
|
||
"uicon-qq-circle-fill": "",
|
||
"uicon-moments-circel-fill": "",
|
||
"uicon-moments": "",
|
||
"uicon-qzone": "",
|
||
"uicon-qzone-circle-fill": "",
|
||
"uicon-baidu-circle-fill": "",
|
||
"uicon-baidu": "",
|
||
"uicon-facebook-circle-fill": "",
|
||
"uicon-facebook": "",
|
||
"uicon-car": "",
|
||
"uicon-car-fill": "",
|
||
"uicon-warning-fill": "",
|
||
"uicon-warning": "",
|
||
"uicon-clock-fill": "",
|
||
"uicon-clock": "",
|
||
"uicon-edit-pen": "",
|
||
"uicon-edit-pen-fill": "",
|
||
"uicon-email": "",
|
||
"uicon-email-fill": "",
|
||
"uicon-minus-circle": "",
|
||
"uicon-minus-circle-fill": "",
|
||
"uicon-plus-circle": "",
|
||
"uicon-plus-circle-fill": "",
|
||
"uicon-file-text": "",
|
||
"uicon-file-text-fill": "",
|
||
"uicon-pushpin": "",
|
||
"uicon-pushpin-fill": "",
|
||
"uicon-grid": "",
|
||
"uicon-grid-fill": "",
|
||
"uicon-play-circle": "",
|
||
"uicon-play-circle-fill": "",
|
||
"uicon-pause-circle-fill": "",
|
||
"uicon-pause": "",
|
||
"uicon-pause-circle": "",
|
||
"uicon-eye-off": "",
|
||
"uicon-eye-off-outline": "",
|
||
"uicon-gift-fill": "",
|
||
"uicon-gift": "",
|
||
"uicon-rmb-circle-fill": "",
|
||
"uicon-rmb-circle": "",
|
||
"uicon-kefu-ermai": "",
|
||
"uicon-server-fill": "",
|
||
"uicon-coupon-fill": "",
|
||
"uicon-coupon": "",
|
||
"uicon-integral": "",
|
||
"uicon-integral-fill": "",
|
||
"uicon-home-fill": "",
|
||
"uicon-home": "",
|
||
"uicon-hourglass-half-fill": "",
|
||
"uicon-hourglass": "",
|
||
"uicon-account": "",
|
||
"uicon-plus-people-fill": "",
|
||
"uicon-minus-people-fill": "",
|
||
"uicon-account-fill": "",
|
||
"uicon-thumb-down-fill": "",
|
||
"uicon-thumb-down": "",
|
||
"uicon-thumb-up": "",
|
||
"uicon-thumb-up-fill": "",
|
||
"uicon-lock-fill": "",
|
||
"uicon-lock-open": "",
|
||
"uicon-lock-opened-fill": "",
|
||
"uicon-lock": "",
|
||
"uicon-red-packet-fill": "",
|
||
"uicon-photo-fill": "",
|
||
"uicon-photo": "",
|
||
"uicon-volume-off-fill": "",
|
||
"uicon-volume-off": "",
|
||
"uicon-volume-fill": "",
|
||
"uicon-volume": "",
|
||
"uicon-red-packet": "",
|
||
"uicon-download": "",
|
||
"uicon-arrow-up-fill": "",
|
||
"uicon-arrow-down-fill": "",
|
||
"uicon-play-left-fill": "",
|
||
"uicon-play-right-fill": "",
|
||
"uicon-rewind-left-fill": "",
|
||
"uicon-rewind-right-fill": "",
|
||
"uicon-arrow-downward": "",
|
||
"uicon-arrow-leftward": "",
|
||
"uicon-arrow-rightward": "",
|
||
"uicon-arrow-upward": "",
|
||
"uicon-arrow-down": "",
|
||
"uicon-arrow-right": "",
|
||
"uicon-arrow-left": "",
|
||
"uicon-arrow-up": "",
|
||
"uicon-skip-back-left": "",
|
||
"uicon-skip-forward-right": "",
|
||
"uicon-rewind-right": "",
|
||
"uicon-rewind-left": "",
|
||
"uicon-arrow-right-double": "",
|
||
"uicon-arrow-left-double": "",
|
||
"uicon-wifi-off": "",
|
||
"uicon-wifi": "",
|
||
"uicon-empty-data": "",
|
||
"uicon-empty-history": "",
|
||
"uicon-empty-list": "",
|
||
"uicon-empty-page": "",
|
||
"uicon-empty-order": "",
|
||
"uicon-man": "",
|
||
"uicon-woman": "",
|
||
"uicon-man-add": "",
|
||
"uicon-man-add-fill": "",
|
||
"uicon-man-delete": "",
|
||
"uicon-man-delete-fill": "",
|
||
"uicon-zh": "",
|
||
"uicon-en": ""
|
||
};
|
||
const props$g = defineMixin({
|
||
props: {
|
||
// 图标类名
|
||
name: {
|
||
type: String,
|
||
default: () => defProps.icon.name
|
||
},
|
||
// 图标颜色,可接受主题色
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.icon.color
|
||
},
|
||
// 字体大小,单位px
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.size
|
||
},
|
||
// 是否显示粗体
|
||
bold: {
|
||
type: Boolean,
|
||
default: () => defProps.icon.bold
|
||
},
|
||
// 点击图标的时候传递事件出去的index(用于区分点击了哪一个)
|
||
index: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.index
|
||
},
|
||
// 触摸图标时的类名
|
||
hoverClass: {
|
||
type: String,
|
||
default: () => defProps.icon.hoverClass
|
||
},
|
||
// 自定义扩展前缀,方便用户扩展自己的图标库
|
||
customPrefix: {
|
||
type: String,
|
||
default: () => defProps.icon.customPrefix
|
||
},
|
||
// 图标右边或者下面的文字
|
||
label: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.label
|
||
},
|
||
// label的位置,只能右边或者下边
|
||
labelPos: {
|
||
type: String,
|
||
default: () => defProps.icon.labelPos
|
||
},
|
||
// label的大小
|
||
labelSize: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.labelSize
|
||
},
|
||
// label的颜色
|
||
labelColor: {
|
||
type: String,
|
||
default: () => defProps.icon.labelColor
|
||
},
|
||
// label与图标的距离
|
||
space: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.space
|
||
},
|
||
// 图片的mode
|
||
imgMode: {
|
||
type: String,
|
||
default: () => defProps.icon.imgMode
|
||
},
|
||
// 用于显示图片小图标时,图片的宽度
|
||
width: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.width
|
||
},
|
||
// 用于显示图片小图标时,图片的高度
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.height
|
||
},
|
||
// 用于解决某些情况下,让图标垂直居中的用途
|
||
top: {
|
||
type: [String, Number],
|
||
default: () => defProps.icon.top
|
||
},
|
||
// 是否阻止事件传播
|
||
stop: {
|
||
type: Boolean,
|
||
default: () => defProps.icon.stop
|
||
}
|
||
}
|
||
});
|
||
const props$f = defineMixin({
|
||
props: {
|
||
// 标题
|
||
title: {
|
||
type: [String, Number],
|
||
default: () => defProps.cell.title
|
||
},
|
||
// 标题下方的描述信息
|
||
label: {
|
||
type: [String, Number],
|
||
default: () => defProps.cell.label
|
||
},
|
||
// 右侧的内容
|
||
value: {
|
||
type: [String, Number],
|
||
default: () => defProps.cell.value
|
||
},
|
||
// 左侧图标名称,或者图片链接(本地文件建议使用绝对地址)
|
||
icon: {
|
||
type: String,
|
||
default: () => defProps.cell.icon
|
||
},
|
||
// 是否禁用cell
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => defProps.cell.disabled
|
||
},
|
||
// 是否显示下边框
|
||
border: {
|
||
type: Boolean,
|
||
default: () => defProps.cell.border
|
||
},
|
||
// 内容是否垂直居中(主要是针对右侧的value部分)
|
||
center: {
|
||
type: Boolean,
|
||
default: () => defProps.cell.center
|
||
},
|
||
// 点击后跳转的URL地址
|
||
url: {
|
||
type: String,
|
||
default: () => defProps.cell.url
|
||
},
|
||
// 链接跳转的方式,内部使用的是uView封装的route方法,可能会进行拦截操作
|
||
linkType: {
|
||
type: String,
|
||
default: () => defProps.cell.linkType
|
||
},
|
||
// 是否开启点击反馈(表现为点击时加上灰色背景)
|
||
clickable: {
|
||
type: Boolean,
|
||
default: () => defProps.cell.clickable
|
||
},
|
||
// 是否展示右侧箭头并开启点击反馈
|
||
isLink: {
|
||
type: Boolean,
|
||
default: () => defProps.cell.isLink
|
||
},
|
||
// 是否显示表单状态下的必填星号(此组件可能会内嵌入input组件)
|
||
required: {
|
||
type: Boolean,
|
||
default: () => defProps.cell.required
|
||
},
|
||
// 右侧的图标箭头
|
||
rightIcon: {
|
||
type: String,
|
||
default: () => defProps.cell.rightIcon
|
||
},
|
||
// 右侧箭头的方向,可选值为:left,up,down
|
||
arrowDirection: {
|
||
type: String,
|
||
default: () => defProps.cell.arrowDirection
|
||
},
|
||
// 左侧图标样式
|
||
iconStyle: {
|
||
type: [Object, String],
|
||
default: () => {
|
||
return defProps.cell.iconStyle;
|
||
}
|
||
},
|
||
// 右侧箭头图标的样式
|
||
rightIconStyle: {
|
||
type: [Object, String],
|
||
default: () => {
|
||
return defProps.cell.rightIconStyle;
|
||
}
|
||
},
|
||
// 标题的样式
|
||
titleStyle: {
|
||
type: [Object, String],
|
||
default: () => {
|
||
return defProps.cell.titleStyle;
|
||
}
|
||
},
|
||
// 单位元的大小,可选值为large
|
||
size: {
|
||
type: String,
|
||
default: () => defProps.cell.size
|
||
},
|
||
// 点击cell是否阻止事件传播
|
||
stop: {
|
||
type: Boolean,
|
||
default: () => defProps.cell.stop
|
||
},
|
||
// 标识符,cell被点击时返回
|
||
name: {
|
||
type: [Number, String],
|
||
default: () => defProps.cell.name
|
||
}
|
||
}
|
||
});
|
||
const props$e = defineMixin({
|
||
props: {
|
||
// 分组标题
|
||
title: {
|
||
type: String,
|
||
default: () => defProps.cellGroup.title
|
||
},
|
||
// 是否显示外边框
|
||
border: {
|
||
type: Boolean,
|
||
default: () => defProps.cellGroup.border
|
||
}
|
||
}
|
||
});
|
||
const isEmptyVariableInDefault = (variable, defaultValue = void 0) => {
|
||
return variable === void 0 || variable === null ? defaultValue : variable;
|
||
};
|
||
const isEmptyDoubleVariableInDefault = (variable1, variable2, defaultValue = void 0) => {
|
||
return isEmptyVariableInDefault(
|
||
variable1,
|
||
isEmptyVariableInDefault(variable2, defaultValue)
|
||
);
|
||
};
|
||
const withInstall = (main, extra) => {
|
||
main.install = (app) => {
|
||
for (const comp of [
|
||
main,
|
||
...Object.values(isEmptyVariableInDefault(extra, {}))
|
||
]) {
|
||
app.component(comp.name, comp);
|
||
}
|
||
};
|
||
if (extra) {
|
||
for (const [key, comp] of Object.entries(extra)) {
|
||
main[key] = comp;
|
||
}
|
||
}
|
||
return main;
|
||
};
|
||
const withNoopInstall = (component) => {
|
||
component.install = () => {
|
||
};
|
||
return component;
|
||
};
|
||
function fromPairs(pairs) {
|
||
const result = {};
|
||
if (pairs == null) {
|
||
return result;
|
||
}
|
||
for (const pair of pairs) {
|
||
result[pair[0]] = pair[1];
|
||
}
|
||
return result;
|
||
}
|
||
function isObjectLike(value2) {
|
||
return value2 != null && typeof value2 == "object";
|
||
}
|
||
const objectProto$1 = Object.prototype;
|
||
const objectToString = objectProto$1.toString;
|
||
const boolTag = "[object Boolean]";
|
||
function isBoolean(value2) {
|
||
return value2 === true || value2 === false || isObjectLike(value2) && objectToString.call(value2) == boolTag;
|
||
}
|
||
const numberTag = "[object Number]";
|
||
function isNumber(value2) {
|
||
return typeof value2 == "number" || isObjectLike(value2) && objectToString.call(value2) == numberTag;
|
||
}
|
||
const reIsPlainProp = /^\w*$/;
|
||
const reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/;
|
||
const reLeadingDot = /^\./;
|
||
const rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
|
||
const reEscapeChar = /\\(\\)?/g;
|
||
const reIsUint = /^(?:0|[1-9]\d*)$/;
|
||
const INFINITY = 1 / 0;
|
||
const MAX_SAFE_INTEGER = 9007199254740991;
|
||
function isKey(value2, object2) {
|
||
if (Array.isArray(value2)) {
|
||
return false;
|
||
}
|
||
const type2 = typeof value2;
|
||
if (type2 == "number" || type2 == "symbol" || type2 == "boolean" || value2 == null || isSymbol(value2)) {
|
||
return true;
|
||
}
|
||
return reIsPlainProp.test(value2) || !reIsDeepProp.test(value2) || // eslint-disable-next-line unicorn/new-for-builtins
|
||
object2 != null && value2 in Object(object2);
|
||
}
|
||
const symbolProto = Symbol ? Symbol.prototype : void 0;
|
||
const symbolToString = symbolProto ? symbolProto.toString : void 0;
|
||
function baseToString(value2) {
|
||
if (typeof value2 == "string") {
|
||
return value2;
|
||
}
|
||
if (isSymbol(value2)) {
|
||
return symbolToString ? symbolToString.call(value2) : "";
|
||
}
|
||
const result = `${value2}`;
|
||
return result == "0" && 1 / value2 == -INFINITY ? "-0" : result;
|
||
}
|
||
function toString(value2) {
|
||
return value2 == null ? "" : baseToString(value2);
|
||
}
|
||
const stringToPath = function(string2) {
|
||
string2 = toString(string2);
|
||
const result = [];
|
||
if (reLeadingDot.test(string2)) {
|
||
result.push("");
|
||
}
|
||
string2.replace(
|
||
rePropName,
|
||
(match, number2, quote, string22) => {
|
||
result.push(quote ? string22.replace(reEscapeChar, "$1") : number2 || match);
|
||
return "";
|
||
}
|
||
);
|
||
return result;
|
||
};
|
||
function castPath(value2) {
|
||
return Array.isArray(value2) ? value2 : stringToPath(value2);
|
||
}
|
||
function toKey(value2) {
|
||
if (typeof value2 == "string" || isSymbol(value2)) {
|
||
return value2;
|
||
}
|
||
const result = `${value2}`;
|
||
return result == "0" && 1 / value2 == -INFINITY ? "-0" : result;
|
||
}
|
||
function baseGet(object2, path) {
|
||
path = isKey(path, object2) ? [path] : castPath(path);
|
||
let index2 = 0;
|
||
const length = path.length;
|
||
while (object2 != null && index2 < length) {
|
||
object2 = object2[toKey(path[index2++])];
|
||
}
|
||
return index2 && index2 == length ? object2 : void 0;
|
||
}
|
||
function get(object2, path, defaultValue) {
|
||
const result = object2 == null ? void 0 : baseGet(object2, path);
|
||
return result === void 0 ? defaultValue : result;
|
||
}
|
||
function isIndex(value2, length) {
|
||
length = length == null ? MAX_SAFE_INTEGER : length;
|
||
return !!length && (typeof value2 == "number" || reIsUint.test(value2)) && value2 > -1 && value2 % 1 == 0 && value2 < length;
|
||
}
|
||
function eq(value2, other) {
|
||
return value2 === other || value2 !== value2 && other !== other;
|
||
}
|
||
const objectProto = Object.prototype;
|
||
const hasOwnProperty = objectProto.hasOwnProperty;
|
||
function assignValue(object2, key, value2) {
|
||
const objValue = object2[key];
|
||
if (!(hasOwnProperty.call(object2, key) && eq(objValue, value2)) || value2 === void 0 && !(key in object2)) {
|
||
object2[key] = value2;
|
||
}
|
||
}
|
||
function baseSet(object2, path, value2, customizer) {
|
||
if (!isObject$1(object2)) {
|
||
return object2;
|
||
}
|
||
path = isKey(path, object2) ? [path] : castPath(path);
|
||
let index2 = -1;
|
||
const length = path.length;
|
||
const lastIndex = length - 1;
|
||
let nested = object2;
|
||
while (nested != null && ++index2 < length) {
|
||
const key = toKey(path[index2]);
|
||
let newValue = value2;
|
||
if (index2 != lastIndex) {
|
||
const objValue = nested[key];
|
||
newValue = void 0;
|
||
if (newValue === void 0) {
|
||
newValue = isObject$1(objValue) ? objValue : isIndex(path[index2 + 1]) ? [] : {};
|
||
}
|
||
}
|
||
assignValue(nested, key, newValue);
|
||
nested = nested[key];
|
||
}
|
||
return object2;
|
||
}
|
||
function set(object2, path, value2) {
|
||
return object2 == null ? object2 : baseSet(object2, path, value2);
|
||
}
|
||
const NAN = 0 / 0;
|
||
const reTrim = /^\s+|\s+$/g;
|
||
const reIsBinary = /^0b[01]+$/i;
|
||
const reIsOctal = /^0o[0-7]+$/i;
|
||
const reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
|
||
function toNumber(value2) {
|
||
if (typeof value2 == "number") {
|
||
return value2;
|
||
}
|
||
if (isSymbol(value2)) {
|
||
return NAN;
|
||
}
|
||
if (isObject$1(value2)) {
|
||
const other = typeof value2.valueOf == "function" ? value2.valueOf() : value2;
|
||
value2 = isObject$1(other) ? `${other}` : other;
|
||
}
|
||
if (typeof value2 != "string") {
|
||
return value2 === 0 ? value2 : +value2;
|
||
}
|
||
value2 = value2.replace(reTrim, "");
|
||
const isBinary = reIsBinary.test(value2);
|
||
return isBinary || reIsOctal.test(value2) ? Number.parseInt(value2.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value2) ? NAN : +value2;
|
||
}
|
||
const FUNC_ERROR_TEXT = "Expected a function";
|
||
function debounce(func2, wait, options) {
|
||
let lastArgs;
|
||
let lastThis;
|
||
let maxWait;
|
||
let result;
|
||
let timerId;
|
||
let lastCallTime;
|
||
let lastInvokeTime = 0;
|
||
let leading = false;
|
||
let maxing = false;
|
||
let trailing = true;
|
||
if (typeof func2 != "function") {
|
||
throw new TypeError(FUNC_ERROR_TEXT);
|
||
}
|
||
wait = toNumber(wait) || 0;
|
||
if (isObject$1(options)) {
|
||
leading = !!options.leading;
|
||
maxing = "maxWait" in options;
|
||
maxWait = maxing ? Math.max(toNumber(options.maxWait) || 0, wait) : maxWait;
|
||
trailing = "trailing" in options ? !!options.trailing : trailing;
|
||
}
|
||
function invokeFunc(time) {
|
||
const args = lastArgs, thisArg = lastThis;
|
||
lastArgs = lastThis = void 0;
|
||
lastInvokeTime = time;
|
||
result = func2.apply(thisArg, args);
|
||
return result;
|
||
}
|
||
function leadingEdge(time) {
|
||
lastInvokeTime = time;
|
||
timerId = setTimeout(timerExpired, wait);
|
||
return leading ? invokeFunc(time) : result;
|
||
}
|
||
function remainingWait(time) {
|
||
const timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, result2 = wait - timeSinceLastCall;
|
||
return maxing ? Math.max(result2, maxWait - timeSinceLastInvoke) : result2;
|
||
}
|
||
function shouldInvoke(time) {
|
||
const timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
|
||
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
|
||
}
|
||
function timerExpired() {
|
||
const time = Date.now();
|
||
if (shouldInvoke(time)) {
|
||
return trailingEdge(time);
|
||
}
|
||
timerId = setTimeout(timerExpired, remainingWait(time));
|
||
}
|
||
function trailingEdge(time) {
|
||
timerId = void 0;
|
||
if (trailing && lastArgs) {
|
||
return invokeFunc(time);
|
||
}
|
||
lastArgs = lastThis = void 0;
|
||
return result;
|
||
}
|
||
function cancel() {
|
||
if (timerId !== void 0) {
|
||
clearTimeout(timerId);
|
||
}
|
||
lastInvokeTime = 0;
|
||
lastArgs = lastCallTime = lastThis = timerId = void 0;
|
||
}
|
||
function flush() {
|
||
return timerId === void 0 ? result : trailingEdge(Date.now());
|
||
}
|
||
function debounced() {
|
||
const time = Date.now(), isInvoking = shouldInvoke(time);
|
||
lastArgs = arguments;
|
||
lastThis = this;
|
||
lastCallTime = time;
|
||
if (isInvoking) {
|
||
if (timerId === void 0) {
|
||
return leadingEdge(lastCallTime);
|
||
}
|
||
if (maxing) {
|
||
timerId = setTimeout(timerExpired, wait);
|
||
return invokeFunc(lastCallTime);
|
||
}
|
||
}
|
||
if (timerId === void 0) {
|
||
timerId = setTimeout(timerExpired, wait);
|
||
}
|
||
return result;
|
||
}
|
||
debounced.cancel = cancel;
|
||
debounced.flush = flush;
|
||
return debounced;
|
||
}
|
||
function castArray(value2) {
|
||
if (!value2 || Array.isArray(value2) && !value2.length) {
|
||
return [];
|
||
}
|
||
return Array.isArray(value2) ? value2 : [value2];
|
||
}
|
||
const reWhitespace = /\s/;
|
||
function trimmedEndIndex(string2) {
|
||
let index2 = string2.length;
|
||
while (index2-- && reWhitespace.test(string2.charAt(index2))) {
|
||
}
|
||
return index2;
|
||
}
|
||
const reTrimStart = /^\s+/;
|
||
function baseTrim(string2) {
|
||
return string2 ? string2.slice(0, trimmedEndIndex(string2) + 1).replace(reTrimStart, "") : string2;
|
||
}
|
||
function asciiToArray(string2) {
|
||
return string2.split("");
|
||
}
|
||
const rsAstralRange$1 = "\\ud800-\\udfff", rsComboMarksRange$1 = "\\u0300-\\u036f", reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f", rsComboSymbolsRange$1 = "\\u20d0-\\u20ff", rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1, rsVarRange$1 = "\\ufe0e\\ufe0f";
|
||
const rsZWJ$1 = "\\u200d";
|
||
const reHasUnicode = new RegExp(
|
||
`[${rsZWJ$1}${rsAstralRange$1}${rsComboRange$1}${rsVarRange$1}]`
|
||
);
|
||
function hasUnicode(string2) {
|
||
return reHasUnicode.test(string2);
|
||
}
|
||
const rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsVarRange = "\\ufe0e\\ufe0f";
|
||
const rsAstral = `[${rsAstralRange}]`, rsCombo = `[${rsComboRange}]`, rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = `(?:${rsCombo}|${rsFitz})`, rsNonAstral = `[^${rsAstralRange}]`, rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsZWJ = "\\u200d";
|
||
const reOptMod = `${rsModifier}?`, rsOptVar = `[${rsVarRange}]?`, rsOptJoin = `(?:${rsZWJ}(?:${[rsNonAstral, rsRegional, rsSurrPair].join(
|
||
"|"
|
||
)})${rsOptVar}${reOptMod})*`, rsSeq = rsOptVar + reOptMod + rsOptJoin, rsSymbol = `(?:${[
|
||
`${rsNonAstral + rsCombo}?`,
|
||
rsCombo,
|
||
rsRegional,
|
||
rsSurrPair,
|
||
rsAstral
|
||
].join("|")})`;
|
||
const reUnicode = new RegExp(`${rsFitz}(?=${rsFitz})|${rsSymbol}${rsSeq}`, "g");
|
||
function unicodeToArray(string2) {
|
||
return string2.match(reUnicode) || [];
|
||
}
|
||
function stringToArray(string2) {
|
||
return hasUnicode(string2) ? unicodeToArray(string2) : asciiToArray(string2);
|
||
}
|
||
function baseFindIndex(array2, predicate, fromIndex, fromRight = false) {
|
||
const length = array2.length;
|
||
let index2 = fromIndex + (fromRight ? 1 : -1);
|
||
while (fromRight ? index2-- : ++index2 < length) {
|
||
if (predicate(array2[index2], index2, array2)) {
|
||
return index2;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
function baseIsNaN(value2) {
|
||
return value2 !== value2;
|
||
}
|
||
function strictIndexOf(array2, value2, fromIndex) {
|
||
let index2 = fromIndex - 1;
|
||
const length = array2.length;
|
||
while (++index2 < length) {
|
||
if (array2[index2] === value2) {
|
||
return index2;
|
||
}
|
||
}
|
||
return -1;
|
||
}
|
||
function baseIndexOf(array2, value2, fromIndex) {
|
||
return value2 === value2 ? strictIndexOf(array2, value2, fromIndex) : baseFindIndex(array2, baseIsNaN, fromIndex);
|
||
}
|
||
function charsStartIndex(strSymbols, chrSymbols) {
|
||
let index2 = -1;
|
||
const length = strSymbols.length;
|
||
while (++index2 < length && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) {
|
||
}
|
||
return index2;
|
||
}
|
||
function charsEndIndex(strSymbols, chrSymbols) {
|
||
let index2 = strSymbols.length;
|
||
while (index2-- && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) {
|
||
}
|
||
return index2;
|
||
}
|
||
function baseSlice(array2, start, end) {
|
||
let index2 = -1;
|
||
let length = array2.length;
|
||
if (start < 0) {
|
||
start = -start > length ? 0 : length + start;
|
||
}
|
||
end = end > length ? length : end;
|
||
if (end < 0) {
|
||
end += length;
|
||
}
|
||
length = start > end ? 0 : end - start >>> 0;
|
||
start >>>= 0;
|
||
const result = Array.from({ length });
|
||
while (++index2 < length) {
|
||
result[index2] = array2[index2 + start];
|
||
}
|
||
return result;
|
||
}
|
||
function castSlice(array2, start, end) {
|
||
const length = array2.length;
|
||
end = end === void 0 ? length : end;
|
||
return !start && end >= length ? array2 : baseSlice(array2, start, end);
|
||
}
|
||
function trim(string2, chars) {
|
||
string2 = toString(string2);
|
||
if (string2 && chars === void 0) {
|
||
return baseTrim(string2);
|
||
}
|
||
if (!string2 || !(chars = baseToString(chars))) {
|
||
return string2;
|
||
}
|
||
const strSymbols = stringToArray(string2), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1;
|
||
return castSlice(strSymbols, start, end).join("");
|
||
}
|
||
const isEmpty = (val) => !val && val !== 0 || isArray$1(val) && val.length === 0 || isObject$1(val) && !Object.keys(val).length;
|
||
const getProp = (obj, path, defaultValue) => {
|
||
return {
|
||
get value() {
|
||
return get(obj, path, defaultValue);
|
||
},
|
||
set value(val) {
|
||
set(obj, path, val);
|
||
}
|
||
};
|
||
};
|
||
const tnPropKey = "__tnPropKey";
|
||
const definePropType = (val) => val;
|
||
const isTnProp = (val) => isObject$1(val) && !!val[tnPropKey];
|
||
const buildProp = (prop, key) => {
|
||
if (!isObject$1(prop) || isTnProp(prop))
|
||
return prop;
|
||
const { values, required: required2, default: defaultValue, type: type2, validator } = prop;
|
||
const _validator = values || validator ? (val) => {
|
||
let valid = false;
|
||
let allowedValues = [];
|
||
if (values) {
|
||
allowedValues = Array.from(values);
|
||
if (hasOwn(prop, "default")) {
|
||
allowedValues.push(defaultValue);
|
||
}
|
||
valid || (valid = allowedValues.includes(val));
|
||
}
|
||
if (validator)
|
||
valid || (valid = validator(val));
|
||
if (!valid && allowedValues.length > 0) {
|
||
const allowValuesText = [...new Set(allowedValues)].map((value2) => JSON.stringify(value2)).join(", ");
|
||
warn(
|
||
`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(
|
||
val
|
||
)}.`
|
||
);
|
||
}
|
||
return valid;
|
||
} : void 0;
|
||
const tnProp = {
|
||
type: type2,
|
||
required: !!required2,
|
||
validator: _validator,
|
||
[tnPropKey]: true
|
||
};
|
||
if (hasOwn(prop, "default"))
|
||
tnProp.default = defaultValue;
|
||
return tnProp;
|
||
};
|
||
const buildProps = (props2) => fromPairs(
|
||
Object.entries(props2).map(([key, option]) => [
|
||
key,
|
||
buildProp(option, key)
|
||
])
|
||
);
|
||
const iconPropType = definePropType([String]);
|
||
const FormValidateIconsMap = {
|
||
validating: "loading",
|
||
success: "success-circle",
|
||
error: "close-circle"
|
||
};
|
||
const formatDomSizeValue = (value2, unit = "rpx", empty2 = true) => {
|
||
if (!value2)
|
||
return empty2 ? "" : `0${unit}`;
|
||
if (isString(value2) && /(^calc)|(%|vw|vh|px|rpx|auto)$/.test(value2))
|
||
return value2;
|
||
return `${value2}${unit}`;
|
||
};
|
||
const generateId = () => Math.floor(Math.random() * 1e4);
|
||
class TuniaoUIError extends Error {
|
||
constructor(message) {
|
||
super(message);
|
||
this.name = "TuniaoUIError";
|
||
}
|
||
}
|
||
function throwError(scope, msg) {
|
||
throw new TuniaoUIError(`[${scope}] ${msg}`);
|
||
}
|
||
function debugWarn(scope, message) {
|
||
{
|
||
const error2 = isString(scope) ? new TuniaoUIError(`[${scope}] ${message}`) : scope;
|
||
console.warn(error2);
|
||
}
|
||
}
|
||
const cloneDeep = (value2, visited = /* @__PURE__ */ new WeakMap()) => {
|
||
if (value2 === null || typeof value2 !== "object") {
|
||
return value2;
|
||
}
|
||
if (visited.has(value2)) {
|
||
return visited.get(value2);
|
||
}
|
||
if (Array.isArray(value2)) {
|
||
const clonedArray = value2.map((item) => cloneDeep(item, visited));
|
||
visited.set(value2, clonedArray);
|
||
return clonedArray;
|
||
}
|
||
if (value2 instanceof Date) {
|
||
return new Date(value2.getTime());
|
||
}
|
||
if (value2 instanceof RegExp) {
|
||
const flags = value2.flags;
|
||
return new RegExp(value2.source, flags);
|
||
}
|
||
const clonedObject = {};
|
||
visited.set(value2, clonedObject);
|
||
for (const key in value2) {
|
||
if (Object.prototype.hasOwnProperty.call(value2, key)) {
|
||
clonedObject[key] = cloneDeep(value2[key], visited);
|
||
}
|
||
}
|
||
const prototype = Object.getPrototypeOf(value2);
|
||
Object.setPrototypeOf(clonedObject, cloneDeep(prototype, visited));
|
||
return clonedObject;
|
||
};
|
||
const componentSizes = ["", "sm", "lg", "xl"];
|
||
const formComponentSizes = ["", "sm", "lg"];
|
||
const componentShapes = ["", "circle", "round"];
|
||
const componentImgModes = [
|
||
"scaleToFill",
|
||
"aspectFit",
|
||
"aspectFill",
|
||
"widthFix",
|
||
"heightFix",
|
||
"top",
|
||
"bottom",
|
||
"center",
|
||
"left",
|
||
"right",
|
||
"top left",
|
||
"top right",
|
||
"bottom left",
|
||
"bottom right"
|
||
];
|
||
const componentTypes = [
|
||
"",
|
||
"primary",
|
||
"success",
|
||
"warning",
|
||
"danger",
|
||
"info"
|
||
];
|
||
const UPDATE_MODEL_EVENT = "update:modelValue";
|
||
const CHANGE_EVENT = "change";
|
||
const INPUT_EVENT = "input";
|
||
const ZIndex = {
|
||
/** navbar */
|
||
navbar: 20090,
|
||
/** tabbar */
|
||
tabbar: 20090,
|
||
/** modal弹框 */
|
||
modal: 20076,
|
||
/** popup 弹出层 */
|
||
popup: 20075,
|
||
/** notify */
|
||
notify: 20074,
|
||
/** 吸顶 */
|
||
sticky: 10030,
|
||
/** 气泡弹框 */
|
||
bubble: 10020,
|
||
/** mask 遮罩 */
|
||
mask: 9999
|
||
};
|
||
const useComponentBoolean = buildProp({
|
||
type: [Boolean, void 0],
|
||
default: void 0
|
||
});
|
||
const useComponentSizeProp = buildProp({
|
||
type: String,
|
||
values: componentSizes,
|
||
required: false
|
||
});
|
||
const useFormSizeProps = buildProp({
|
||
type: String,
|
||
values: formComponentSizes,
|
||
required: false
|
||
});
|
||
const useComponentCustomStyleProp = buildProp({
|
||
type: Object,
|
||
default: () => ({})
|
||
});
|
||
const useComponentIndexProp = buildProp({
|
||
type: definePropType([String, Number]),
|
||
default: () => generateId()
|
||
});
|
||
const useComponentSafeAreaInsetBottomProp = buildProp({
|
||
type: Boolean,
|
||
default: true
|
||
});
|
||
const iconProps = buildProps({
|
||
/**
|
||
* @description 图标名称,支持图鸟内置图标和图片地址(只支持绝对路径)
|
||
*/
|
||
name: {
|
||
type: iconPropType,
|
||
required: true
|
||
},
|
||
/**
|
||
* @description 图标颜色类型
|
||
*/
|
||
type: {
|
||
type: String,
|
||
values: componentTypes,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 图标颜色, 以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
color: String,
|
||
/**
|
||
* @description 图标大小
|
||
*/
|
||
size: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 图标加粗
|
||
*/
|
||
bold: Boolean,
|
||
/**
|
||
* @description 图标是否为透明
|
||
*/
|
||
transparent: Boolean,
|
||
/**
|
||
* @description 透明图标背景
|
||
*/
|
||
transparentBg: String,
|
||
/**
|
||
* @description 图片模式,当name为图片地址时生效
|
||
*/
|
||
imgMode: {
|
||
type: String,
|
||
values: componentImgModes,
|
||
default: "aspectFill"
|
||
},
|
||
/**
|
||
* @description 垂直方向上的偏移量
|
||
*/
|
||
offsetTop: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 自定义样式
|
||
*/
|
||
customStyle: useComponentCustomStyleProp,
|
||
/**
|
||
* @description 自定义类
|
||
*/
|
||
customClass: String
|
||
});
|
||
const iconEmits = {
|
||
/**
|
||
* @description 点击图标时触发
|
||
*/
|
||
click: () => true
|
||
};
|
||
const defaultNamespace = "tn";
|
||
const _bem = (namespace, block, blockSuffix, element, modifier) => {
|
||
let cls = `${namespace}-${block}`;
|
||
if (blockSuffix) {
|
||
cls += `-${blockSuffix}`;
|
||
}
|
||
if (element) {
|
||
cls += `__${element}`;
|
||
}
|
||
if (modifier) {
|
||
cls += `--${modifier}`;
|
||
}
|
||
return cls;
|
||
};
|
||
const namespaceContextKey = Symbol("localContextKey");
|
||
const useGetDerivedNamespace = () => {
|
||
const derivedNamespace = inject(namespaceContextKey, ref(defaultNamespace));
|
||
const namespace = computed(() => {
|
||
return unref(derivedNamespace) || defaultNamespace;
|
||
});
|
||
return namespace;
|
||
};
|
||
const useNamespace = (block) => {
|
||
const namespace = useGetDerivedNamespace();
|
||
const b = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", "");
|
||
const e2 = (element) => element ? _bem(namespace.value, block, "", element, "") : "";
|
||
const m2 = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : "";
|
||
const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : "";
|
||
const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : "";
|
||
const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : "";
|
||
const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : "";
|
||
const is = (name, ...args) => {
|
||
const state = args.length >= 1 ? args[0] : true;
|
||
return name && state ? `is-${name}` : "";
|
||
};
|
||
const cssVar = (object2) => {
|
||
const styles = {};
|
||
for (const key in object2) {
|
||
if (object2[key]) {
|
||
styles[`--${namespace.value}-${key}`] = object2[key];
|
||
}
|
||
}
|
||
return styles;
|
||
};
|
||
const cssVarBlock = (object2) => {
|
||
const styles = {};
|
||
for (const key in object2) {
|
||
if (object2[key]) {
|
||
styles[`--${namespace.value}-${block}-${key}`] = object2[key];
|
||
}
|
||
}
|
||
return styles;
|
||
};
|
||
const cssVarName = (name) => `--${namespace.value}-${name}`;
|
||
const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`;
|
||
return {
|
||
namespace,
|
||
b,
|
||
e: e2,
|
||
m: m2,
|
||
be,
|
||
em,
|
||
bm,
|
||
bem,
|
||
is,
|
||
// css
|
||
cssVar,
|
||
cssVarName,
|
||
cssVarBlock,
|
||
cssVarBlockName
|
||
};
|
||
};
|
||
const useComponentColor = (prop, type2 = "") => {
|
||
const classColor = ref("");
|
||
const styleColor = ref("");
|
||
const innerColorReg = /^(tn-|gradient)/;
|
||
const styleColorReg = /^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{8}|[A-Fa-f0-9]{3})$|^rgb\(\d{1,3}(,\s?\d{1,3}){2}\)$|^rgba\(\d{1,3}(,\s?\d{1,3}){2},\s?0?\.?\d{1,}\)|transparent/i;
|
||
const handleColorValue = (value2) => {
|
||
classColor.value = "";
|
||
styleColor.value = "";
|
||
if (value2 === void 0)
|
||
return;
|
||
if (innerColorReg.test(value2)) {
|
||
if (type2 === "bg" && /.*gradient.*/.test(value2)) {
|
||
const gradientValue = value2.split("__")[1];
|
||
classColor.value = `tn-gradient-bg__${gradientValue}`;
|
||
return;
|
||
}
|
||
classColor.value = `${value2}_${type2}`;
|
||
}
|
||
if (styleColorReg.test(value2)) {
|
||
styleColor.value = value2;
|
||
}
|
||
};
|
||
handleColorValue(prop.value);
|
||
watch(
|
||
() => prop.value,
|
||
(val) => {
|
||
handleColorValue(val);
|
||
}
|
||
);
|
||
const updateColor = (value2) => {
|
||
handleColorValue(value2);
|
||
};
|
||
return [classColor, styleColor, updateColor];
|
||
};
|
||
const useComponentSize = (size2) => {
|
||
const sizeType = computed(() => {
|
||
if (!size2)
|
||
return "none";
|
||
return componentSizes.includes(size2) ? "inner" : "custom";
|
||
});
|
||
return {
|
||
sizeType
|
||
};
|
||
};
|
||
const useIcon = (props2) => {
|
||
const ns = useNamespace("icon");
|
||
const [colorClass, colorStyle] = useComponentColor(
|
||
toRef(props2, "color"),
|
||
"text"
|
||
);
|
||
const [transparentBgClass] = useComponentColor(
|
||
toRef(props2, "transparentBg"),
|
||
"bg"
|
||
);
|
||
const { sizeType } = useComponentSize(props2.size);
|
||
const isImg = computed(
|
||
() => !!(props2 == null ? void 0 : props2.name) && props2.name.includes("/")
|
||
);
|
||
const iconClass = computed(() => {
|
||
const cls = [];
|
||
cls.push(ns.b());
|
||
if (isImg.value) {
|
||
cls.push(ns.m("image"));
|
||
} else {
|
||
if (props2.type)
|
||
cls.push(`tn-type-${props2.type}_text`);
|
||
if (props2.transparent) {
|
||
cls.push("tn-text-transparent", transparentBgClass.value);
|
||
} else {
|
||
if (colorClass.value)
|
||
cls.push(colorClass.value);
|
||
}
|
||
if (props2.bold)
|
||
cls.push("tn-text-bold");
|
||
}
|
||
if (sizeType.value === "inner")
|
||
cls.push(ns.m(props2.size));
|
||
if (props2.customClass)
|
||
cls.push(props2.customClass);
|
||
return cls.join(" ");
|
||
});
|
||
const iconStyle = computed(() => {
|
||
const style = {};
|
||
if (isImg.value) {
|
||
if (sizeType.value === "custom" && props2.size) {
|
||
style.width = style.height = formatDomSizeValue(props2.size);
|
||
}
|
||
} else {
|
||
if (colorStyle.value)
|
||
style.color = colorStyle.value;
|
||
if (sizeType.value === "custom" && props2.size)
|
||
style.fontSize = formatDomSizeValue(props2.size);
|
||
}
|
||
if (props2.offsetTop)
|
||
style.transform = `translateY(${formatDomSizeValue(props2.offsetTop)})`;
|
||
if (!isEmpty(props2.customStyle))
|
||
Object.assign(style, props2.customStyle);
|
||
return style;
|
||
});
|
||
return {
|
||
isImg,
|
||
iconClass,
|
||
iconStyle
|
||
};
|
||
};
|
||
const useProp = (name) => {
|
||
const vm = getCurrentInstance();
|
||
return computed(
|
||
() => {
|
||
var _a;
|
||
return isEmptyVariableInDefault((_a = vm == null ? void 0 : vm.proxy) == null ? void 0 : _a.$props)[name];
|
||
}
|
||
);
|
||
};
|
||
const useSelectorQuery = (instance) => {
|
||
let query = null;
|
||
if (!instance) {
|
||
instance = getCurrentInstance();
|
||
}
|
||
if (!instance) {
|
||
debugWarn("useSelectorQuery", "useSelectorQuery必须在setup函数中使用");
|
||
}
|
||
query = index$2.createSelectorQuery().in(instance);
|
||
const getSelectorNodeInfo = (selector) => {
|
||
return new Promise((resolve2, reject) => {
|
||
if (query) {
|
||
query.select(selector).boundingClientRect((res) => {
|
||
const selectRes = res;
|
||
if (selectRes) {
|
||
resolve2(selectRes);
|
||
} else {
|
||
reject(new Error(`未找到对应节点: ${selector}`));
|
||
}
|
||
}).exec();
|
||
} else {
|
||
reject(new Error("未找到对应的SelectorQuery实例"));
|
||
}
|
||
});
|
||
};
|
||
const getSelectorNodeInfos = (selector) => {
|
||
return new Promise((resolve2, reject) => {
|
||
if (query) {
|
||
query.selectAll(selector).boundingClientRect((res) => {
|
||
const selectRes = res;
|
||
if (selectRes && selectRes.length > 0) {
|
||
resolve2(selectRes);
|
||
} else {
|
||
reject(new Error(`未找到对应节点: ${selector}`));
|
||
}
|
||
}).exec();
|
||
} else {
|
||
reject(new Error("未找到对应的SelectorQuery实例"));
|
||
}
|
||
});
|
||
};
|
||
return {
|
||
query,
|
||
getSelectorNodeInfo,
|
||
getSelectorNodeInfos
|
||
};
|
||
};
|
||
const useToggle = (initState) => {
|
||
const state = ref(initState);
|
||
const toggle = () => {
|
||
state.value = !state.value;
|
||
};
|
||
return [state, toggle];
|
||
};
|
||
ref(0);
|
||
const useOrderedChildren = () => {
|
||
const children = {};
|
||
const orderedChildren = shallowRef([]);
|
||
const addChild = (child) => {
|
||
children[child.uid] = child;
|
||
orderedChildren.value.push(child);
|
||
};
|
||
const removeChild = (uid2) => {
|
||
delete children[uid2];
|
||
orderedChildren.value = orderedChildren.value.filter(
|
||
(child) => child.uid !== uid2
|
||
);
|
||
};
|
||
return {
|
||
children: orderedChildren,
|
||
addChild,
|
||
removeChild
|
||
};
|
||
};
|
||
const useObserver = (instance) => {
|
||
if (!instance) {
|
||
instance = getCurrentInstance();
|
||
}
|
||
if (!instance) {
|
||
debugWarn("useObserver", "请在 setup 中使用 useObserver");
|
||
}
|
||
let observerInstance = null;
|
||
const connectObserver = (selector, fn, fnOptions, options) => {
|
||
disconnectObserver();
|
||
observerInstance = index$2.createIntersectionObserver(instance, options);
|
||
if (fnOptions.type === "relativeTo")
|
||
observerInstance.relativeTo((fnOptions == null ? void 0 : fnOptions.selector) || "", fnOptions.margins);
|
||
else if (fnOptions.type === "relativeToViewport")
|
||
observerInstance.relativeToViewport(fnOptions.margins);
|
||
observerInstance.observe(selector, (res) => {
|
||
fn && fn(res);
|
||
});
|
||
};
|
||
const disconnectObserver = () => {
|
||
if (observerInstance) {
|
||
observerInstance.disconnect();
|
||
observerInstance = null;
|
||
}
|
||
};
|
||
return {
|
||
connectObserver,
|
||
disconnectObserver
|
||
};
|
||
};
|
||
const useLongPress = (event, enabled2, longPressIntervel = 250) => {
|
||
let longPressTimer = null;
|
||
const clearLongPressTimer = () => {
|
||
if (longPressTimer) {
|
||
clearInterval(longPressTimer);
|
||
longPressTimer = null;
|
||
}
|
||
};
|
||
const handleLongPressEvent = (...args) => {
|
||
if (enabled2.value) {
|
||
event(...args);
|
||
clearLongPressTimer();
|
||
longPressTimer = setInterval(() => {
|
||
event(...args);
|
||
}, longPressIntervel);
|
||
} else {
|
||
event(...args);
|
||
}
|
||
};
|
||
return {
|
||
handleLongPressEvent,
|
||
clearLongPressTimer
|
||
};
|
||
};
|
||
const waterFallModes = ["normal", "calc"];
|
||
const waterFallProps = buildProps({
|
||
/**
|
||
* @description 列表数据
|
||
*/
|
||
data: {
|
||
type: Array,
|
||
default: () => []
|
||
},
|
||
/**
|
||
* @description 瀑布流模式
|
||
*/
|
||
mode: {
|
||
type: String,
|
||
values: waterFallModes,
|
||
default: "normal"
|
||
}
|
||
});
|
||
const useWaterFall = (props2) => {
|
||
const instance = getCurrentInstance();
|
||
if (!instance) {
|
||
debugWarn("TnWaterFall", "请在 setup 中使用 useWaterFall");
|
||
}
|
||
const componentId = `twf-${generateId()}`;
|
||
const { getSelectorNodeInfo } = useSelectorQuery(instance);
|
||
const leftData = ref([]);
|
||
const rightData = ref([]);
|
||
let leftContainerHeight = 0;
|
||
let rightContainerHeight = 0;
|
||
const getContainerHeight = async () => {
|
||
try {
|
||
const leftContainerRectInfo = await getSelectorNodeInfo(
|
||
`#${componentId}-left`
|
||
);
|
||
const rightContainerRectInfo = await getSelectorNodeInfo(
|
||
`#${componentId}-right`
|
||
);
|
||
leftContainerHeight = leftContainerRectInfo.height || leftContainerHeight;
|
||
rightContainerHeight = rightContainerRectInfo.height || rightContainerHeight;
|
||
} catch (err) {
|
||
debugWarn("TnWaterFall", `获取容器高度信息失败:${err}`);
|
||
}
|
||
};
|
||
let oldUserData = [];
|
||
const splitData = async (data) => {
|
||
if (!data || !data.length)
|
||
return;
|
||
if (props2.mode === "calc") {
|
||
await getContainerHeight();
|
||
if (leftContainerHeight <= rightContainerHeight) {
|
||
leftData.value.push(data.shift());
|
||
} else {
|
||
rightData.value.push(data.shift());
|
||
}
|
||
nextTick$1(() => {
|
||
setTimeout(() => {
|
||
splitData(data);
|
||
}, 200);
|
||
});
|
||
} else if (props2.mode === "normal") {
|
||
let firstLeft = true;
|
||
await getContainerHeight();
|
||
if (leftData.value.length > rightData.value.length) {
|
||
firstLeft = false;
|
||
}
|
||
let leftSmall = false;
|
||
if (leftContainerHeight < rightContainerHeight) {
|
||
leftSmall = true;
|
||
}
|
||
data.forEach((item, index2) => {
|
||
if (index2 % 2 === 0 && firstLeft || leftSmall) {
|
||
leftData.value.push(item);
|
||
} else {
|
||
rightData.value.push(item);
|
||
}
|
||
if (!firstLeft) {
|
||
firstLeft = true;
|
||
}
|
||
if (leftSmall && index2 >= 2) {
|
||
leftSmall = false;
|
||
}
|
||
});
|
||
}
|
||
};
|
||
const resetWaterFall = () => {
|
||
if (!props2.data)
|
||
return;
|
||
leftData.value = [];
|
||
rightData.value = [];
|
||
leftContainerHeight = 0;
|
||
rightContainerHeight = 0;
|
||
nextTick$1(() => {
|
||
oldUserData = props2.data;
|
||
splitData(props2.data);
|
||
});
|
||
};
|
||
watch(
|
||
() => props2.data,
|
||
(val) => {
|
||
if (!val)
|
||
return;
|
||
if (oldUserData.length === val.length)
|
||
return;
|
||
const newData = cloneDeep(val.slice(oldUserData.length));
|
||
if (!newData.length) {
|
||
leftData.value = [];
|
||
rightData.value = [];
|
||
leftContainerHeight = 0;
|
||
rightContainerHeight = 0;
|
||
}
|
||
nextTick$1(() => {
|
||
oldUserData = val;
|
||
splitData(newData);
|
||
});
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
return {
|
||
componentId,
|
||
leftData,
|
||
rightData,
|
||
resetWaterFall
|
||
};
|
||
};
|
||
const timeLineKey = Symbol("timeLineKey");
|
||
const timeLineProps = buildProps({
|
||
/**
|
||
* @description 显示竖线
|
||
*/
|
||
showLine: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
});
|
||
const timeLineItemProps = buildProps({
|
||
/**
|
||
* @description 标题
|
||
*/
|
||
title: String,
|
||
/**
|
||
* @description 标题icon
|
||
*/
|
||
titleIcon: String,
|
||
/**
|
||
* @description 节点背景
|
||
*/
|
||
dotBgColor: String,
|
||
/**
|
||
* @description 节点字体颜色
|
||
*/
|
||
dotTextColor: String
|
||
});
|
||
const timeLineItemEmits = {
|
||
/**
|
||
* @description 点击事件
|
||
*/
|
||
click: () => true
|
||
};
|
||
const useTimeLineCustomStyle = (props2) => {
|
||
const ns = useNamespace("time-line-item");
|
||
const [dotBgColorClass, dotBgColorStyle] = useComponentColor(
|
||
toRef(props2, "dotBgColor"),
|
||
"bg"
|
||
);
|
||
const [dotTextColorClass, dotTextColorStyle] = useComponentColor(
|
||
toRef(props2, "dotTextColor"),
|
||
"text"
|
||
);
|
||
const dotClass = computed(() => {
|
||
const cls = [];
|
||
if (dotBgColorClass.value)
|
||
cls.push(dotBgColorClass.value);
|
||
if (dotTextColorClass.value)
|
||
cls.push(dotTextColorClass.value);
|
||
return cls.join(" ");
|
||
});
|
||
const dotStyle = computed(() => {
|
||
const style = {};
|
||
if (!dotBgColorClass.value) {
|
||
style.backgroundColor = dotBgColorStyle.value || "var(--tn-color-blue)";
|
||
}
|
||
if (dotTextColorStyle.value) {
|
||
style.color = dotTextColorStyle.value;
|
||
} else if (!dotBgColorClass.value && !dotTextColorClass.value) {
|
||
style.color = "#fff";
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
dotClass,
|
||
dotStyle
|
||
};
|
||
};
|
||
const useTimeLineDataCustomStyle = (props2) => {
|
||
const ns = useNamespace("time-line-data");
|
||
const [dotColorClass, dotColorStyle] = useComponentColor(
|
||
toRef(props2, "dotColor"),
|
||
"text"
|
||
);
|
||
const dotClass = computed(() => {
|
||
const cls = [];
|
||
if (dotColorClass.value)
|
||
cls.push(dotColorClass.value);
|
||
return cls.join(" ");
|
||
});
|
||
const dotStyle = computed(() => {
|
||
const style = {};
|
||
if (!dotColorClass.value) {
|
||
style.color = dotColorStyle.value || "var(--tn-color-red)";
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
dotClass,
|
||
dotStyle
|
||
};
|
||
};
|
||
const timeLineDataProps = buildProps({
|
||
/**
|
||
* @description 节点图标
|
||
*/
|
||
dotIcon: {
|
||
type: String,
|
||
default: "circle-fill"
|
||
},
|
||
/**
|
||
* @description 节点颜色
|
||
*/
|
||
dotColor: String
|
||
});
|
||
const timeLineDataEmits = {
|
||
/**
|
||
* @description 点击事件
|
||
*/
|
||
click: () => true
|
||
};
|
||
const photoAlbumProps = buildProps({
|
||
/**
|
||
* @description 图片地址列表
|
||
*/
|
||
data: {
|
||
type: definePropType(Array),
|
||
default: () => []
|
||
},
|
||
/**
|
||
* @description 最大允许显示图片的数量
|
||
*/
|
||
max: {
|
||
type: Number,
|
||
default: 9
|
||
},
|
||
/**
|
||
* @description 一行显示的图片数量
|
||
*/
|
||
column: {
|
||
type: Number,
|
||
default: 3
|
||
},
|
||
/**
|
||
* @description 图片模式
|
||
*/
|
||
imgMode: {
|
||
type: String,
|
||
values: componentImgModes,
|
||
default: "aspectFill"
|
||
},
|
||
/**
|
||
* @description 是否开启懒加载
|
||
*/
|
||
lazyLoad: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 点击图片进行预览
|
||
*/
|
||
preview: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
});
|
||
const photoAlbumEmits = {
|
||
/**
|
||
* @description 点击图片时触发
|
||
*/
|
||
click: (index2) => isNumber(index2)
|
||
};
|
||
const usePhotoAlbum = (props2, emits) => {
|
||
const imageData = computed(() => {
|
||
const maxLength = Math.min(props2.data.length, props2.max);
|
||
return props2.data.slice(0, maxLength);
|
||
});
|
||
const imageClickEvent = (index2) => {
|
||
emits("click", index2);
|
||
if (!props2.preview)
|
||
return;
|
||
index$2.previewImage({
|
||
urls: imageData.value,
|
||
current: index2
|
||
});
|
||
};
|
||
return {
|
||
imageData,
|
||
imageClickEvent
|
||
};
|
||
};
|
||
const switchTabProps = buildProps({
|
||
/**
|
||
* @description 当前激活的标签索引
|
||
*/
|
||
modelValue: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
/**
|
||
* @description 标签列表
|
||
*/
|
||
tabs: {
|
||
type: definePropType(Array),
|
||
default: () => []
|
||
},
|
||
/**
|
||
* @description 是否禁用
|
||
*/
|
||
disabled: Boolean,
|
||
/**
|
||
* @description 未选中时标签的背景颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
inactiveBgColor: String,
|
||
/**
|
||
* @description 选中时标签的背景颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
activeBgColor: String,
|
||
/**
|
||
* @description 未选中时标签的字体颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
inactiveTextColor: String,
|
||
/**
|
||
* @description 选中时标签的字体颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
activeTextColor: String
|
||
});
|
||
const switchTabEmits = {
|
||
[UPDATE_MODEL_EVENT]: (value2) => isNumber(value2),
|
||
[CHANGE_EVENT]: (value2) => isNumber(value2)
|
||
};
|
||
const useSwitchTabCustomStyle = (props2) => {
|
||
const ns = useNamespace("switch-tab");
|
||
const [inactiveBgColorClass, inactiveBgColorStyle] = useComponentColor(
|
||
toRef(props2, "inactiveBgColor"),
|
||
"bg"
|
||
);
|
||
const [activeBgColorClass, activeBgColorStyle] = useComponentColor(
|
||
toRef(props2, "activeBgColor"),
|
||
"bg"
|
||
);
|
||
const [inactiveTextColorClass, inactiveTextColorStyle] = useComponentColor(
|
||
toRef(props2, "inactiveTextColor"),
|
||
"text"
|
||
);
|
||
const [activeTextColorClass, activeTextColorStyle] = useComponentColor(
|
||
toRef(props2, "activeTextColor"),
|
||
"text"
|
||
);
|
||
const switchTabClass = computed(() => {
|
||
const cls = [ns.b()];
|
||
if (activeBgColorClass.value)
|
||
cls.push(activeBgColorClass.value);
|
||
return cls.join(" ");
|
||
});
|
||
const switchTabStyle = computed(() => {
|
||
const style = {};
|
||
if (!activeBgColorClass.value) {
|
||
style.backgroundColor = activeBgColorStyle.value || "var(--tn-color-white)";
|
||
}
|
||
return style;
|
||
});
|
||
const tabClass = computed(() => {
|
||
return (index2) => {
|
||
const cls = [
|
||
ns.e("tab"),
|
||
ns.is("active", index2 === props2.modelValue)
|
||
];
|
||
if (index2 === props2.modelValue) {
|
||
if (activeBgColorClass.value)
|
||
cls.push(activeBgColorClass.value);
|
||
if (activeTextColorClass.value)
|
||
cls.push(activeTextColorClass.value);
|
||
} else {
|
||
if (inactiveBgColorClass.value)
|
||
cls.push(inactiveBgColorClass.value);
|
||
if (inactiveTextColorClass.value)
|
||
cls.push(inactiveTextColorClass.value);
|
||
}
|
||
return cls.join(" ");
|
||
};
|
||
});
|
||
const tabStyle = computed(() => {
|
||
return (index2) => {
|
||
const style = {};
|
||
if (index2 === props2.modelValue) {
|
||
if (!activeBgColorClass.value) {
|
||
style.backgroundColor = activeBgColorStyle.value || "var(--tn-color-white)";
|
||
}
|
||
if (activeTextColorStyle.value) {
|
||
style.color = activeTextColorStyle.value;
|
||
} else if (!activeTextColorClass.value && !activeBgColorClass.value) {
|
||
style.color = "var(--tn-text-color-primary)";
|
||
}
|
||
} else {
|
||
if (!inactiveBgColorClass.value) {
|
||
style.backgroundColor = inactiveBgColorStyle.value || "var(--tn-color-primary-light-7)";
|
||
}
|
||
if (inactiveTextColorStyle.value) {
|
||
style.color = inactiveTextColorStyle.value;
|
||
} else if (!inactiveTextColorClass.value && !inactiveBgColorClass.value) {
|
||
style.color = "var(--tn-text-color-primary)";
|
||
}
|
||
if (index2 === props2.modelValue - 1) {
|
||
style.borderBottomRightRadius = "30rpx";
|
||
}
|
||
if (index2 === props2.modelValue + 1) {
|
||
style.borderBottomLeftRadius = "30rpx";
|
||
}
|
||
}
|
||
return style;
|
||
};
|
||
});
|
||
return {
|
||
ns,
|
||
tabClass,
|
||
tabStyle,
|
||
switchTabClass,
|
||
switchTabStyle
|
||
};
|
||
};
|
||
const useSwitchTab = (props2, emits) => {
|
||
const tabClickEvent = (index2) => {
|
||
if (props2.disabled)
|
||
return;
|
||
emits("update:modelValue", index2);
|
||
nextTick$1(() => {
|
||
emits("change", index2);
|
||
});
|
||
};
|
||
return {
|
||
tabClickEvent
|
||
};
|
||
};
|
||
const lazyLoadProps = buildProps({
|
||
/**
|
||
* @description 图片地址
|
||
*/
|
||
src: String,
|
||
/**
|
||
* @description 图片高度
|
||
*/
|
||
height: String,
|
||
/**
|
||
* @description 图片宽度
|
||
*/
|
||
width: String,
|
||
/**
|
||
* @description 图片裁剪模式
|
||
*/
|
||
mode: {
|
||
type: String,
|
||
values: componentImgModes,
|
||
default: "aspectFill"
|
||
},
|
||
/**
|
||
* @description 开始加载图片的位置,单位为 px,如果设置为负数表示距离底部还有多少个像素就开始加载
|
||
*/
|
||
threshold: {
|
||
type: Number,
|
||
default: 100
|
||
},
|
||
/**
|
||
* @description 是否开启过度效果
|
||
*/
|
||
transition: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
});
|
||
const lazyLoadEmits = {
|
||
/**
|
||
* @description 图片加载完成
|
||
*/
|
||
loaded: () => true,
|
||
/**
|
||
* @description 图片加载失败
|
||
*/
|
||
error: () => true
|
||
};
|
||
const useLazyLoadCustomStyle = (props2) => {
|
||
const ns = useNamespace("lazy-load");
|
||
const lazyLoadStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.width)
|
||
style.width = formatDomSizeValue(props2.width);
|
||
if (props2.height)
|
||
style.height = formatDomSizeValue(props2.height);
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
lazyLoadStyle
|
||
};
|
||
};
|
||
const useLazyLoad = (props2) => {
|
||
const instance = getCurrentInstance();
|
||
if (!instance) {
|
||
debugWarn("TnLazyLoad", "请在 setup 中使用 useLazyLoad");
|
||
}
|
||
const { emit: emit2 } = instance;
|
||
const { getSelectorNodeInfo } = useSelectorQuery(instance);
|
||
const { connectObserver, disconnectObserver } = useObserver(instance);
|
||
const componentId = `tll-${generateId()}`;
|
||
const threshold = computed(
|
||
() => isEmptyVariableInDefault(props2.threshold, 100)
|
||
);
|
||
const imageStatus = ref("waiting");
|
||
const showImage = ref(false);
|
||
let initCount = 0;
|
||
const initObserver = async () => {
|
||
disconnectObserver();
|
||
try {
|
||
await getSelectorNodeInfo(`#${componentId}`);
|
||
initCount = 0;
|
||
const bottomThreshold = threshold.value < 0 ? -Math.abs(threshold.value) : Math.abs(threshold.value);
|
||
connectObserver(
|
||
`#${componentId}`,
|
||
(res) => {
|
||
if (res.intersectionRatio > 0) {
|
||
showImage.value = true;
|
||
imageStatus.value = "loading";
|
||
disconnectObserver();
|
||
}
|
||
},
|
||
{
|
||
type: "relativeToViewport",
|
||
margins: {
|
||
bottom: bottomThreshold
|
||
}
|
||
}
|
||
);
|
||
} catch (err) {
|
||
if (initCount > 10) {
|
||
initCount = 0;
|
||
debugWarn("TnLazyLoad", `获取图片节点信息失败:${err}`);
|
||
return;
|
||
}
|
||
initCount++;
|
||
setTimeout(() => {
|
||
initObserver();
|
||
}, 150);
|
||
}
|
||
};
|
||
const handleImageLoadedSuccess = () => {
|
||
imageStatus.value = "loaded";
|
||
emit2("loaded");
|
||
};
|
||
const handleImageLoadedFailed = (err) => {
|
||
debugWarn("TnLazyLoad", `图片加载失败: ${err}`);
|
||
imageStatus.value = "error";
|
||
emit2("error");
|
||
};
|
||
onMounted(() => {
|
||
nextTick$1(() => {
|
||
initObserver();
|
||
});
|
||
});
|
||
onUnmounted(() => {
|
||
disconnectObserver();
|
||
});
|
||
return {
|
||
componentId,
|
||
imageStatus,
|
||
showImage,
|
||
handleImageLoadedSuccess,
|
||
handleImageLoadedFailed
|
||
};
|
||
};
|
||
const tagShape = [
|
||
...componentShapes,
|
||
"circleLeft",
|
||
"circleRight"
|
||
];
|
||
const tagProps = buildProps({
|
||
/**
|
||
* @description 按钮颜色类型
|
||
*/
|
||
type: {
|
||
type: String,
|
||
values: componentTypes,
|
||
default: "primary"
|
||
},
|
||
/**
|
||
* @description 背景颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
bgColor: String,
|
||
/**
|
||
* @description 标签字体颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
textColor: String,
|
||
/**
|
||
* @description 字体大小,默认单位 rpx
|
||
*/
|
||
fontSize: String,
|
||
/**
|
||
* @description 宽度,默认单位 rpx
|
||
*/
|
||
width: String,
|
||
/**
|
||
* @description 高度,默认单位 rpx
|
||
*/
|
||
height: String,
|
||
/**
|
||
* @description 标签尺寸,内置`sm`、`lg`、`xl`,同时也可以传递指定的尺寸的值
|
||
*/
|
||
size: useComponentSizeProp,
|
||
/**
|
||
* @description 标签形状
|
||
*/
|
||
shape: {
|
||
type: String,
|
||
values: tagShape,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 是否显示边框
|
||
*/
|
||
border: Boolean,
|
||
/**
|
||
* @description 边框颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
borderColor: String,
|
||
/**
|
||
* @description 边框加粗
|
||
*/
|
||
borderBold: Boolean,
|
||
/**
|
||
* @description 自定义样式
|
||
*/
|
||
customStyle: useComponentCustomStyleProp,
|
||
/**
|
||
* @description 自定义类
|
||
*/
|
||
customClass: String
|
||
});
|
||
const tagEmits = {
|
||
/**
|
||
* @description 标签点击事件
|
||
*/
|
||
click: () => true
|
||
};
|
||
const useTagCustomStyle = (props2) => {
|
||
const ns = useNamespace("tag");
|
||
const [bgColorClass, bgColorStyle] = useComponentColor(
|
||
toRef(props2, "bgColor"),
|
||
"bg"
|
||
);
|
||
const [textColorClass, textColorStyle] = useComponentColor(
|
||
toRef(props2, "textColor"),
|
||
"text"
|
||
);
|
||
const [borderColorClass, borderColorStyle] = useComponentColor(
|
||
toRef(props2, "borderColor"),
|
||
"border"
|
||
);
|
||
const tagClass = computed(() => {
|
||
const cls = [];
|
||
cls.push(ns.b());
|
||
if (props2.size)
|
||
cls.push(ns.m(props2.size));
|
||
if (props2.shape)
|
||
cls.push(ns.m(props2.shape));
|
||
if (props2.type)
|
||
cls.push(`tn-type-${props2.type}_bg`);
|
||
if (bgColorClass.value)
|
||
cls.push(bgColorClass.value);
|
||
if (textColorClass.value)
|
||
cls.push(textColorClass.value);
|
||
if (props2.border) {
|
||
cls.push("tn-border");
|
||
if (borderColorClass.value)
|
||
cls.push(borderColorClass.value);
|
||
}
|
||
if (props2.borderBold)
|
||
cls.push("tn-border-bold");
|
||
if (props2.customClass)
|
||
cls.push(props2.customClass);
|
||
return cls.join(" ");
|
||
});
|
||
const tagStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.fontSize)
|
||
style.fontSize = formatDomSizeValue(props2.fontSize);
|
||
if (props2.width)
|
||
style.width = formatDomSizeValue(props2.width);
|
||
if (props2.height)
|
||
style.height = formatDomSizeValue(props2.height);
|
||
if (bgColorStyle.value)
|
||
style.backgroundColor = bgColorStyle.value;
|
||
if (textColorStyle.value)
|
||
style.color = textColorStyle.value;
|
||
if (borderColorStyle.value)
|
||
style.borderColor = borderColorStyle.value;
|
||
if (!isEmpty(props2.customStyle)) {
|
||
Object.assign(style, props2.customStyle);
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
tagStyle,
|
||
tagClass
|
||
};
|
||
};
|
||
const useTag = (props2, emits) => {
|
||
const tagClickHandle = () => {
|
||
emits("click");
|
||
};
|
||
return {
|
||
tagClickHandle
|
||
};
|
||
};
|
||
const buttonMixin = defineMixin({
|
||
props: {
|
||
lang: String,
|
||
sessionFrom: String,
|
||
sendMessageTitle: String,
|
||
sendMessagePath: String,
|
||
sendMessageImg: String,
|
||
showMessageCard: Boolean,
|
||
appParameter: String,
|
||
formType: String,
|
||
openType: String
|
||
}
|
||
});
|
||
const openType = defineMixin({
|
||
props: {
|
||
openType: String
|
||
},
|
||
methods: {
|
||
onGetUserInfo(event) {
|
||
this.$emit("getuserinfo", event.detail);
|
||
},
|
||
onContact(event) {
|
||
this.$emit("contact", event.detail);
|
||
},
|
||
onGetPhoneNumber(event) {
|
||
this.$emit("getphonenumber", event.detail);
|
||
},
|
||
onError(event) {
|
||
this.$emit("error", event.detail);
|
||
},
|
||
onLaunchApp(event) {
|
||
this.$emit("launchapp", event.detail);
|
||
},
|
||
onOpenSetting(event) {
|
||
this.$emit("opensetting", event.detail);
|
||
}
|
||
}
|
||
});
|
||
const props$d = defineMixin({
|
||
props: {
|
||
// 是否细边框
|
||
hairline: {
|
||
type: Boolean,
|
||
default: () => defProps.button.hairline
|
||
},
|
||
// 按钮的预置样式,info,primary,error,warning,success
|
||
type: {
|
||
type: String,
|
||
default: () => defProps.button.type
|
||
},
|
||
// 按钮尺寸,large,normal,small,mini
|
||
size: {
|
||
type: String,
|
||
default: () => defProps.button.size
|
||
},
|
||
// 按钮形状,circle(两边为半圆),square(带圆角)
|
||
shape: {
|
||
type: String,
|
||
default: () => defProps.button.shape
|
||
},
|
||
// 按钮是否镂空
|
||
plain: {
|
||
type: Boolean,
|
||
default: () => defProps.button.plain
|
||
},
|
||
// 是否禁止状态
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => defProps.button.disabled
|
||
},
|
||
// 是否加载中
|
||
loading: {
|
||
type: Boolean,
|
||
default: () => defProps.button.loading
|
||
},
|
||
// 加载中提示文字
|
||
loadingText: {
|
||
type: [String, Number],
|
||
default: () => defProps.button.loadingText
|
||
},
|
||
// 加载状态图标类型
|
||
loadingMode: {
|
||
type: String,
|
||
default: () => defProps.button.loadingMode
|
||
},
|
||
// 加载图标大小
|
||
loadingSize: {
|
||
type: [String, Number],
|
||
default: () => defProps.button.loadingSize
|
||
},
|
||
// 开放能力,具体请看uniapp稳定关于button组件部分说明
|
||
// https://uniapp.dcloud.io/component/button
|
||
openType: {
|
||
type: String,
|
||
default: () => defProps.button.openType
|
||
},
|
||
// 用于 <form> 组件,点击分别会触发 <form> 组件的 submit/reset 事件
|
||
// 取值为submit(提交表单),reset(重置表单)
|
||
formType: {
|
||
type: String,
|
||
default: () => defProps.button.formType
|
||
},
|
||
// 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效
|
||
// 只微信小程序、QQ小程序有效
|
||
appParameter: {
|
||
type: String,
|
||
default: () => defProps.button.appParameter
|
||
},
|
||
// 指定是否阻止本节点的祖先节点出现点击态,微信小程序有效
|
||
hoverStopPropagation: {
|
||
type: Boolean,
|
||
default: () => defProps.button.hoverStopPropagation
|
||
},
|
||
// 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文。只微信小程序有效
|
||
lang: {
|
||
type: String,
|
||
default: () => defProps.button.lang
|
||
},
|
||
// 会话来源,open-type="contact"时有效。只微信小程序有效
|
||
sessionFrom: {
|
||
type: String,
|
||
default: () => defProps.button.sessionFrom
|
||
},
|
||
// 会话内消息卡片标题,open-type="contact"时有效
|
||
// 默认当前标题,只微信小程序有效
|
||
sendMessageTitle: {
|
||
type: String,
|
||
default: () => defProps.button.sendMessageTitle
|
||
},
|
||
// 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效
|
||
// 默认当前分享路径,只微信小程序有效
|
||
sendMessagePath: {
|
||
type: String,
|
||
default: () => defProps.button.sendMessagePath
|
||
},
|
||
// 会话内消息卡片图片,open-type="contact"时有效
|
||
// 默认当前页面截图,只微信小程序有效
|
||
sendMessageImg: {
|
||
type: String,
|
||
default: () => defProps.button.sendMessageImg
|
||
},
|
||
// 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,
|
||
// 用户点击后可以快速发送小程序消息,open-type="contact"时有效
|
||
showMessageCard: {
|
||
type: Boolean,
|
||
default: () => defProps.button.showMessageCard
|
||
},
|
||
// 额外传参参数,用于小程序的data-xxx属性,通过target.dataset.name获取
|
||
dataName: {
|
||
type: String,
|
||
default: () => defProps.button.dataName
|
||
},
|
||
// 节流,一定时间内只能触发一次
|
||
throttleTime: {
|
||
type: [String, Number],
|
||
default: () => defProps.button.throttleTime
|
||
},
|
||
// 按住后多久出现点击态,单位毫秒
|
||
hoverStartTime: {
|
||
type: [String, Number],
|
||
default: () => defProps.button.hoverStartTime
|
||
},
|
||
// 手指松开后点击态保留时间,单位毫秒
|
||
hoverStayTime: {
|
||
type: [String, Number],
|
||
default: () => defProps.button.hoverStayTime
|
||
},
|
||
// 按钮文字,之所以通过props传入,是因为slot传入的话
|
||
// nvue中无法控制文字的样式
|
||
text: {
|
||
type: [String, Number],
|
||
default: () => defProps.button.text
|
||
},
|
||
// 按钮图标
|
||
icon: {
|
||
type: String,
|
||
default: () => defProps.button.icon
|
||
},
|
||
// 按钮图标
|
||
iconColor: {
|
||
type: String,
|
||
default: () => defProps.button.icon
|
||
},
|
||
// 按钮颜色,支持传入linear-gradient渐变色
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.button.color
|
||
},
|
||
// 停止冒泡
|
||
stop: {
|
||
type: Boolean,
|
||
default: () => defProps.button.stop
|
||
}
|
||
}
|
||
});
|
||
const imageExtensions = [
|
||
"jpg",
|
||
"jpeg",
|
||
"png",
|
||
"gif",
|
||
"webp",
|
||
"ico"
|
||
];
|
||
const imageUploadProps = buildProps({
|
||
/**
|
||
* @description 已上传的图片列表绑定值,传递的是图片的url地址
|
||
*/
|
||
modelValue: {
|
||
type: definePropType(Array),
|
||
default: () => []
|
||
},
|
||
/**
|
||
* @description 禁止上传
|
||
*/
|
||
disabled: Boolean,
|
||
/**
|
||
* @description 图片上传地址
|
||
*/
|
||
action: String,
|
||
/**
|
||
* @description 图片上传的字段名称
|
||
*/
|
||
name: {
|
||
type: String,
|
||
default: "file"
|
||
},
|
||
/**
|
||
* @description 图片上传的header, header 中不能设置 Referer
|
||
*/
|
||
header: {
|
||
type: Object,
|
||
default: () => ({})
|
||
},
|
||
/**
|
||
* @description 图片上传HTTP 请求中其他额外的 form data
|
||
*/
|
||
formData: {
|
||
type: Object,
|
||
default: () => ({})
|
||
},
|
||
/**
|
||
* @description 最大允许上传个数
|
||
*/
|
||
limit: {
|
||
type: Number,
|
||
default: 9
|
||
},
|
||
/**
|
||
* @description 自动上传
|
||
*/
|
||
autoUpload: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 显示删除按钮
|
||
*/
|
||
showRemove: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 显示错误提示信息
|
||
*/
|
||
showErrorTips: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 显示上传进度条
|
||
*/
|
||
showUploadProgress: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 上传图片的SizeType
|
||
*/
|
||
sizeType: {
|
||
type: definePropType(Array),
|
||
default: () => ["original", "compressed"]
|
||
},
|
||
/**
|
||
* @description 上传图片的来源
|
||
*/
|
||
sourceType: {
|
||
type: definePropType(Array),
|
||
default: () => ["album", "camera"]
|
||
},
|
||
/**
|
||
* @description 允许多选图片
|
||
*/
|
||
multiple: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 允许上传的最大图片大小,单位为byte
|
||
*/
|
||
maxSize: {
|
||
type: Number,
|
||
default: 10 * 1024 * 1024
|
||
},
|
||
/**
|
||
* @description 允许上传的图片类型
|
||
*/
|
||
extensions: {
|
||
type: definePropType(Array),
|
||
default: () => imageExtensions
|
||
},
|
||
/**
|
||
* @description 自动移除上传失败的图片
|
||
*/
|
||
autoRemoveFaildFile: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
/**
|
||
* @description 自定义上传函数
|
||
*/
|
||
customUploadHandler: {
|
||
type: definePropType(Function)
|
||
},
|
||
/**
|
||
* @description 自定义上传回调处理函数
|
||
*/
|
||
customUploadCallback: {
|
||
type: definePropType(Function)
|
||
},
|
||
/**
|
||
* @description 上传前的钩子函数
|
||
*/
|
||
beforeUpload: {
|
||
type: definePropType(Function)
|
||
},
|
||
/**
|
||
* @description 删除前的钩子函数
|
||
*/
|
||
beforeRemove: {
|
||
type: definePropType(Function)
|
||
},
|
||
/**
|
||
* @description 值发生修改时是否触发表单验证
|
||
*/
|
||
validateEvent: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
});
|
||
const imageUploadEmits = {
|
||
[UPDATE_MODEL_EVENT]: (value2) => isArray$1(value2),
|
||
[CHANGE_EVENT]: (value2) => isArray$1(value2),
|
||
/**
|
||
* @description 图片超过最大尺寸或者文件不支持时触发
|
||
*/
|
||
oversizeOrNoSupport: (file) => true,
|
||
/**
|
||
* @description 图片上传成功回调
|
||
*/
|
||
success: (file) => true,
|
||
/**
|
||
* @description 图片上传失败回调
|
||
*/
|
||
fail: (error2, file) => true,
|
||
/**
|
||
* @description 图片删除成功回调
|
||
*/
|
||
remove: (url2) => true,
|
||
/**
|
||
* @description 图片预览回调
|
||
*/
|
||
preview: (url2) => true
|
||
};
|
||
const avatarGroupContextKey = Symbol(
|
||
"avatarGroupContextKey"
|
||
);
|
||
const formContextKey = Symbol("formContextKey");
|
||
const formItemContextKey = Symbol("formItemContextKey");
|
||
const formMetaProps = buildProps({
|
||
/**
|
||
* @description 设置表单下组件的尺寸
|
||
*/
|
||
size: {
|
||
type: String,
|
||
values: formComponentSizes
|
||
},
|
||
/**
|
||
* @description 是否禁用表单内的所有组件,优先级比组件自身的禁用属性高
|
||
*/
|
||
disabled: Boolean
|
||
});
|
||
const formProps = buildProps({
|
||
...formMetaProps,
|
||
/**
|
||
* @description 表单数据对象
|
||
*/
|
||
model: Object,
|
||
/**
|
||
* @description 表单校验规则
|
||
*/
|
||
rules: {
|
||
type: definePropType([Object, Array])
|
||
},
|
||
/**
|
||
* @description label标签位置
|
||
*/
|
||
labelPosition: {
|
||
type: String,
|
||
values: ["left", "right", "top"],
|
||
default: "right"
|
||
},
|
||
/**
|
||
* @description 必填星号显示位置
|
||
*/
|
||
requireAsteriskPosition: {
|
||
type: String,
|
||
values: ["left", "right"],
|
||
default: "left"
|
||
},
|
||
/**
|
||
* @description label的宽度,默认单位为rpx,支持传入数字、带单位的数值和auto
|
||
*/
|
||
labelWidth: {
|
||
type: [String, Number],
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 表单域标签的后缀
|
||
*/
|
||
labelSuffix: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 是否在输入框中显示校验结果反馈图标
|
||
*/
|
||
statusIcon: Boolean,
|
||
/**
|
||
* @description 是否显示校验结果
|
||
*/
|
||
showMessage: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 是否在校验规则修改后立马触发一次校验
|
||
*/
|
||
validateOnRuleChange: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 是否隐藏必填星号
|
||
*/
|
||
hideRequiredAsterisk: Boolean
|
||
});
|
||
const formEmits = {
|
||
validate: (prop, isValid, message) => (isArray$1(prop) || isString(prop)) && isBoolean(isValid) && isString(message)
|
||
};
|
||
const useFormCustomStyle = () => {
|
||
const ns = useNamespace("form");
|
||
const formClass = computed(() => {
|
||
const cls = [ns.b()];
|
||
return cls.join(" ");
|
||
});
|
||
return {
|
||
formClass
|
||
};
|
||
};
|
||
const useFormSize = (fallback, ignore = {}) => {
|
||
const emptyRef = ref(void 0);
|
||
const size2 = ignore.prop ? emptyRef : useProp("size");
|
||
const form = ignore.form ? { size: void 0 } : inject(formContextKey, void 0);
|
||
const formItem = ignore.formItem ? { size: void 0 } : inject(formItemContextKey, void 0);
|
||
return computed(
|
||
() => size2.value || unref(fallback) || (formItem == null ? void 0 : formItem.size) || (form == null ? void 0 : form.size) || ""
|
||
);
|
||
};
|
||
const useFormDisabled = (fallback) => {
|
||
const disabled = useProp("disabled");
|
||
const form = inject(formContextKey, void 0);
|
||
return computed(
|
||
() => disabled.value || unref(fallback) || (form == null ? void 0 : form.disabled) || false
|
||
);
|
||
};
|
||
const useFormItemCustomStyle = (props2, hasLabel, isRequired) => {
|
||
const form = inject(formContextKey, void 0);
|
||
const ns = useNamespace("form-item");
|
||
const size2 = useFormSize(void 0, { formItem: false });
|
||
const { getSelectorNodeInfo } = useSelectorQuery();
|
||
const labelWidth = computed(
|
||
() => formatDomSizeValue(props2.labelWidth || (form == null ? void 0 : form.labelWidth) || "")
|
||
);
|
||
const labelPosition = computed(
|
||
() => props2.labelPosition || (form == null ? void 0 : form.labelPosition) || "right"
|
||
);
|
||
const hideRequiredAsterisk = computed(
|
||
() => (form == null ? void 0 : form.hideRequiredAsterisk) || false
|
||
);
|
||
const requireAsteriskPosition = computed(
|
||
() => (form == null ? void 0 : form.requireAsteriskPosition) || "left"
|
||
);
|
||
const labelContainerWidth = ref(0);
|
||
const labelId = `label-${generateId()}`;
|
||
const initLabelContainerWidth = () => {
|
||
if (!hasLabel.value)
|
||
return;
|
||
getSelectorNodeInfo(`#${labelId}`).then((res) => {
|
||
labelContainerWidth.value = (res == null ? void 0 : res.width) || 0;
|
||
});
|
||
};
|
||
const formItemClass = computed(() => {
|
||
const cls = [ns.b()];
|
||
if (size2.value)
|
||
cls.push(ns.m(size2.value));
|
||
if (labelPosition.value)
|
||
cls.push(ns.m(`label-${labelPosition.value}`));
|
||
return cls.join(" ");
|
||
});
|
||
const formItemLabelClass = computed(() => {
|
||
const cls = [ns.e("label")];
|
||
if (!hideRequiredAsterisk.value && isRequired.value) {
|
||
cls.push(
|
||
ns.em("label", "required"),
|
||
ns.em("label", `asterisk-${requireAsteriskPosition.value}`)
|
||
);
|
||
}
|
||
return cls.join(" ");
|
||
});
|
||
const formItemLabelStyle = computed(() => {
|
||
const style = {};
|
||
if (labelPosition.value !== "top" && labelWidth.value)
|
||
style.width = labelWidth.value;
|
||
return style;
|
||
});
|
||
const formItemErrorMessageStyle = computed(() => {
|
||
const style = {};
|
||
if (labelPosition.value !== "top" && hasLabel.value) {
|
||
style.paddingLeft = `${labelContainerWidth.value}px`;
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
labelId,
|
||
formItemClass,
|
||
formItemLabelClass,
|
||
formItemLabelStyle,
|
||
formItemErrorMessageStyle,
|
||
initLabelContainerWidth
|
||
};
|
||
};
|
||
const useFormItem = () => {
|
||
const form = inject(formContextKey, void 0);
|
||
const formItem = inject(formItemContextKey, void 0);
|
||
return {
|
||
form,
|
||
formItem
|
||
};
|
||
};
|
||
const formatRegExp = /%[sdj%]/g;
|
||
let warning = () => {
|
||
};
|
||
if (typeof process !== "undefined" && process.env && true && typeof window !== "undefined" && typeof document !== "undefined") {
|
||
warning = (type2, errors) => {
|
||
if (typeof console !== "undefined" && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === "undefined") {
|
||
if (errors.every((e2) => typeof e2 === "string")) {
|
||
console.warn(type2, errors);
|
||
}
|
||
}
|
||
};
|
||
}
|
||
function convertFieldsError(errors) {
|
||
if (!errors || !errors.length)
|
||
return null;
|
||
const fields = {};
|
||
errors.forEach((error2) => {
|
||
const field = error2.field;
|
||
fields[field] = fields[field] || [];
|
||
fields[field].push(error2);
|
||
});
|
||
return fields;
|
||
}
|
||
function format(template, ...args) {
|
||
let i = 0;
|
||
const len = args.length;
|
||
if (typeof template === "function") {
|
||
return template.apply(null, args);
|
||
}
|
||
if (typeof template === "string") {
|
||
let str = template.replace(formatRegExp, (x) => {
|
||
if (x === "%%") {
|
||
return "%";
|
||
}
|
||
if (i >= len) {
|
||
return x;
|
||
}
|
||
switch (x) {
|
||
case "%s":
|
||
return String(args[i++]);
|
||
case "%d":
|
||
return Number(args[i++]);
|
||
case "%j":
|
||
try {
|
||
return JSON.stringify(args[i++]);
|
||
} catch (_) {
|
||
return "[Circular]";
|
||
}
|
||
break;
|
||
default:
|
||
return x;
|
||
}
|
||
});
|
||
return str;
|
||
}
|
||
return template;
|
||
}
|
||
function isNativeStringType(type2) {
|
||
return type2 === "string" || type2 === "url" || type2 === "hex" || type2 === "email" || type2 === "date" || type2 === "pattern";
|
||
}
|
||
function isEmptyValue(value2, type2) {
|
||
if (value2 === void 0 || value2 === null) {
|
||
return true;
|
||
}
|
||
if (type2 === "array" && Array.isArray(value2) && !value2.length) {
|
||
return true;
|
||
}
|
||
if (isNativeStringType(type2) && typeof value2 === "string" && !value2) {
|
||
return true;
|
||
}
|
||
return false;
|
||
}
|
||
function asyncParallelArray(arr, func2, callback) {
|
||
const results = [];
|
||
let total = 0;
|
||
const arrLength = arr.length;
|
||
function count(errors) {
|
||
results.push(...errors || []);
|
||
total++;
|
||
if (total === arrLength) {
|
||
callback(results);
|
||
}
|
||
}
|
||
arr.forEach((a) => {
|
||
func2(a, count);
|
||
});
|
||
}
|
||
function asyncSerialArray(arr, func2, callback) {
|
||
let index2 = 0;
|
||
const arrLength = arr.length;
|
||
function next(errors) {
|
||
if (errors && errors.length) {
|
||
callback(errors);
|
||
return;
|
||
}
|
||
const original = index2;
|
||
index2 = index2 + 1;
|
||
if (original < arrLength) {
|
||
func2(arr[original], next);
|
||
} else {
|
||
callback([]);
|
||
}
|
||
}
|
||
next([]);
|
||
}
|
||
function flattenObjArr(objArr) {
|
||
const ret = [];
|
||
Object.keys(objArr).forEach((k) => {
|
||
ret.push(...objArr[k] || []);
|
||
});
|
||
return ret;
|
||
}
|
||
class AsyncValidationError extends Error {
|
||
constructor(errors, fields) {
|
||
super("Async Validation Error");
|
||
this.errors = errors;
|
||
this.fields = fields;
|
||
}
|
||
}
|
||
function asyncMap(objArr, option, func2, callback, source) {
|
||
if (option.first) {
|
||
const pending2 = new Promise((resolve2, reject) => {
|
||
const next = (errors) => {
|
||
callback(errors);
|
||
return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve2(source);
|
||
};
|
||
const flattenArr = flattenObjArr(objArr);
|
||
asyncSerialArray(flattenArr, func2, next);
|
||
});
|
||
pending2.catch((e2) => e2);
|
||
return pending2;
|
||
}
|
||
const firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || [];
|
||
const objArrKeys = Object.keys(objArr);
|
||
const objArrLength = objArrKeys.length;
|
||
let total = 0;
|
||
const results = [];
|
||
const pending = new Promise((resolve2, reject) => {
|
||
const next = (errors) => {
|
||
results.push.apply(results, errors);
|
||
total++;
|
||
if (total === objArrLength) {
|
||
callback(results);
|
||
return results.length ? reject(
|
||
new AsyncValidationError(results, convertFieldsError(results))
|
||
) : resolve2(source);
|
||
}
|
||
};
|
||
if (!objArrKeys.length) {
|
||
callback(results);
|
||
resolve2(source);
|
||
}
|
||
objArrKeys.forEach((key) => {
|
||
const arr = objArr[key];
|
||
if (firstFields.indexOf(key) !== -1) {
|
||
asyncSerialArray(arr, func2, next);
|
||
} else {
|
||
asyncParallelArray(arr, func2, next);
|
||
}
|
||
});
|
||
});
|
||
pending.catch((e2) => e2);
|
||
return pending;
|
||
}
|
||
function isErrorObj(obj) {
|
||
return !!(obj && obj.message !== void 0);
|
||
}
|
||
function getValue(value2, path) {
|
||
let v = value2;
|
||
for (let i = 0; i < path.length; i++) {
|
||
if (v == void 0) {
|
||
return v;
|
||
}
|
||
v = v[path[i]];
|
||
}
|
||
return v;
|
||
}
|
||
function complementError(rule, source) {
|
||
return (oe) => {
|
||
let fieldValue;
|
||
if (rule.fullFields) {
|
||
fieldValue = getValue(source, rule.fullFields);
|
||
} else {
|
||
fieldValue = source[oe.field || rule.fullField];
|
||
}
|
||
if (isErrorObj(oe)) {
|
||
oe.field = oe.field || rule.fullField;
|
||
oe.fieldValue = fieldValue;
|
||
return oe;
|
||
}
|
||
return {
|
||
message: typeof oe === "function" ? oe() : oe,
|
||
fieldValue,
|
||
field: oe.field || rule.fullField
|
||
};
|
||
};
|
||
}
|
||
function deepMerge(target, source) {
|
||
if (source) {
|
||
for (const s2 in source) {
|
||
if (source.hasOwnProperty(s2)) {
|
||
const value2 = source[s2];
|
||
if (typeof value2 === "object" && typeof target[s2] === "object") {
|
||
target[s2] = {
|
||
...target[s2],
|
||
...value2
|
||
};
|
||
} else {
|
||
target[s2] = value2;
|
||
}
|
||
}
|
||
}
|
||
}
|
||
return target;
|
||
}
|
||
const required$1 = (rule, value2, source, errors, options, type2) => {
|
||
if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value2, type2 || rule.type))) {
|
||
errors.push(format(options.messages.required, rule.fullField));
|
||
}
|
||
};
|
||
const whitespace = (rule, value2, source, errors, options) => {
|
||
if (/^\s+$/.test(value2) || value2 === "") {
|
||
errors.push(format(options.messages.whitespace, rule.fullField));
|
||
}
|
||
};
|
||
let urlReg;
|
||
const getUrlRegex = () => {
|
||
if (urlReg) {
|
||
return urlReg;
|
||
}
|
||
const word = "[a-fA-F\\d:]";
|
||
const b = (options) => options && options.includeBoundaries ? `(?:(?<=\\s|^)(?=${word})|(?<=${word})(?=\\s|$))` : "";
|
||
const v4 = "(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}";
|
||
const v6seg = "[a-fA-F\\d]{1,4}";
|
||
const v6 = `
|
||
(?:
|
||
(?:${v6seg}:){7}(?:${v6seg}|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8
|
||
(?:${v6seg}:){6}(?:${v4}|:${v6seg}|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4
|
||
(?:${v6seg}:){5}(?::${v4}|(?::${v6seg}){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4
|
||
(?:${v6seg}:){4}(?:(?::${v6seg}){0,1}:${v4}|(?::${v6seg}){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4
|
||
(?:${v6seg}:){3}(?:(?::${v6seg}){0,2}:${v4}|(?::${v6seg}){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4
|
||
(?:${v6seg}:){2}(?:(?::${v6seg}){0,3}:${v4}|(?::${v6seg}){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4
|
||
(?:${v6seg}:){1}(?:(?::${v6seg}){0,4}:${v4}|(?::${v6seg}){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4
|
||
(?::(?:(?::${v6seg}){0,5}:${v4}|(?::${v6seg}){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4
|
||
)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1
|
||
`.replace(/\s*\/\/.*$/gm, "").replace(/\n/g, "").trim();
|
||
const v46Exact = new RegExp(`(?:^${v4}$)|(?:^${v6}$)`);
|
||
const v4exact = new RegExp(`^${v4}$`);
|
||
const v6exact = new RegExp(`^${v6}$`);
|
||
const ip = (options) => options && options.exact ? v46Exact : new RegExp(
|
||
`(?:${b(options)}${v4}${b(options)})|(?:${b(options)}${v6}${b(
|
||
options
|
||
)})`,
|
||
"g"
|
||
);
|
||
ip.v4 = (options) => options && options.exact ? v4exact : new RegExp(`${b(options)}${v4}${b(options)}`, "g");
|
||
ip.v6 = (options) => options && options.exact ? v6exact : new RegExp(`${b(options)}${v6}${b(options)}`, "g");
|
||
const protocol = `(?:(?:[a-z]+:)?//)`;
|
||
const auth = "(?:\\S+(?::\\S*)?@)?";
|
||
const ipv4 = ip.v4().source;
|
||
const ipv6 = ip.v6().source;
|
||
const host2 = "(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)";
|
||
const domain = "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*";
|
||
const tld = `(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))`;
|
||
const port = "(?::\\d{2,5})?";
|
||
const path = '(?:[/?#][^\\s"]*)?';
|
||
const regex = `(?:${protocol}|www\\.)${auth}(?:localhost|${ipv4}|${ipv6}|${host2}${domain}${tld})${port}${path}`;
|
||
urlReg = new RegExp(`(?:^${regex}$)`, "i");
|
||
return urlReg;
|
||
};
|
||
const pattern$2 = {
|
||
// http://emailregex.com/
|
||
email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/,
|
||
// url: new RegExp(
|
||
// '^(?!mailto:)(?:(?:http|https|ftp)://|//)(?:\\S+(?::\\S*)?@)?(?:(?:(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[0-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]+-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))|localhost)(?::\\d{2,5})?(?:(/|\\?|#)[^\\s]*)?$',
|
||
// 'i',
|
||
// ),
|
||
hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i
|
||
};
|
||
const types = {
|
||
integer(value2) {
|
||
return types.number(value2) && parseInt(value2, 10) === value2;
|
||
},
|
||
float(value2) {
|
||
return types.number(value2) && !types.integer(value2);
|
||
},
|
||
array(value2) {
|
||
return Array.isArray(value2);
|
||
},
|
||
regexp(value2) {
|
||
if (value2 instanceof RegExp) {
|
||
return true;
|
||
}
|
||
try {
|
||
return !!new RegExp(value2);
|
||
} catch (e2) {
|
||
return false;
|
||
}
|
||
},
|
||
date(value2) {
|
||
return typeof value2.getTime === "function" && typeof value2.getMonth === "function" && typeof value2.getYear === "function" && !isNaN(value2.getTime());
|
||
},
|
||
number(value2) {
|
||
if (isNaN(value2)) {
|
||
return false;
|
||
}
|
||
return typeof value2 === "number";
|
||
},
|
||
object(value2) {
|
||
return typeof value2 === "object" && !types.array(value2);
|
||
},
|
||
method(value2) {
|
||
return typeof value2 === "function";
|
||
},
|
||
email(value2) {
|
||
return typeof value2 === "string" && value2.length <= 320 && !!value2.match(pattern$2.email);
|
||
},
|
||
url(value2) {
|
||
return typeof value2 === "string" && value2.length <= 2048 && !!value2.match(getUrlRegex());
|
||
},
|
||
hex(value2) {
|
||
return typeof value2 === "string" && !!value2.match(pattern$2.hex);
|
||
}
|
||
};
|
||
const type$1 = (rule, value2, source, errors, options) => {
|
||
if (rule.required && value2 === void 0) {
|
||
required$1(rule, value2, source, errors, options);
|
||
return;
|
||
}
|
||
const custom = [
|
||
"integer",
|
||
"float",
|
||
"array",
|
||
"regexp",
|
||
"object",
|
||
"method",
|
||
"email",
|
||
"number",
|
||
"date",
|
||
"url",
|
||
"hex"
|
||
];
|
||
const ruleType = rule.type;
|
||
if (custom.indexOf(ruleType) > -1) {
|
||
if (!types[ruleType](value2)) {
|
||
errors.push(
|
||
format(options.messages.types[ruleType], rule.fullField, rule.type)
|
||
);
|
||
}
|
||
} else if (ruleType && typeof value2 !== rule.type) {
|
||
errors.push(
|
||
format(options.messages.types[ruleType], rule.fullField, rule.type)
|
||
);
|
||
}
|
||
};
|
||
const range = (rule, value2, source, errors, options) => {
|
||
const len = typeof rule.len === "number";
|
||
const min = typeof rule.min === "number";
|
||
const max = typeof rule.max === "number";
|
||
const spRegexp = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
|
||
let val = value2;
|
||
let key = null;
|
||
const num = typeof value2 === "number";
|
||
const str = typeof value2 === "string";
|
||
const arr = Array.isArray(value2);
|
||
if (num) {
|
||
key = "number";
|
||
} else if (str) {
|
||
key = "string";
|
||
} else if (arr) {
|
||
key = "array";
|
||
}
|
||
if (!key) {
|
||
return false;
|
||
}
|
||
if (arr) {
|
||
val = value2.length;
|
||
}
|
||
if (str) {
|
||
val = value2.replace(spRegexp, "_").length;
|
||
}
|
||
if (len) {
|
||
if (val !== rule.len) {
|
||
errors.push(format(options.messages[key].len, rule.fullField, rule.len));
|
||
}
|
||
} else if (min && !max && val < rule.min) {
|
||
errors.push(format(options.messages[key].min, rule.fullField, rule.min));
|
||
} else if (max && !min && val > rule.max) {
|
||
errors.push(format(options.messages[key].max, rule.fullField, rule.max));
|
||
} else if (min && max && (val < rule.min || val > rule.max)) {
|
||
errors.push(
|
||
format(options.messages[key].range, rule.fullField, rule.min, rule.max)
|
||
);
|
||
}
|
||
};
|
||
const ENUM$1 = "enum";
|
||
const enumerable$1 = (rule, value2, source, errors, options) => {
|
||
rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : [];
|
||
if (rule[ENUM$1].indexOf(value2) === -1) {
|
||
errors.push(
|
||
format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(", "))
|
||
);
|
||
}
|
||
};
|
||
const pattern$1 = (rule, value2, source, errors, options) => {
|
||
if (rule.pattern) {
|
||
if (rule.pattern instanceof RegExp) {
|
||
rule.pattern.lastIndex = 0;
|
||
if (!rule.pattern.test(value2)) {
|
||
errors.push(
|
||
format(
|
||
options.messages.pattern.mismatch,
|
||
rule.fullField,
|
||
value2,
|
||
rule.pattern
|
||
)
|
||
);
|
||
}
|
||
} else if (typeof rule.pattern === "string") {
|
||
const _pattern = new RegExp(rule.pattern);
|
||
if (!_pattern.test(value2)) {
|
||
errors.push(
|
||
format(
|
||
options.messages.pattern.mismatch,
|
||
rule.fullField,
|
||
value2,
|
||
rule.pattern
|
||
)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
const rules = {
|
||
required: required$1,
|
||
whitespace,
|
||
type: type$1,
|
||
range,
|
||
enum: enumerable$1,
|
||
pattern: pattern$1
|
||
};
|
||
const string = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2, "string") && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options, "string");
|
||
if (!isEmptyValue(value2, "string")) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
rules.pattern(rule, value2, source, errors, options);
|
||
if (rule.whitespace === true) {
|
||
rules.whitespace(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const method = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const number = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (value2 === "") {
|
||
value2 = void 0;
|
||
}
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const boolean = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const regexp = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (!isEmptyValue(value2)) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const integer = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const floatFn = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const array = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if ((value2 === void 0 || value2 === null) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options, "array");
|
||
if (value2 !== void 0 && value2 !== null) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
rules.range(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const object = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const ENUM = "enum";
|
||
const enumerable = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (value2 !== void 0) {
|
||
rules[ENUM](rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const pattern = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2, "string") && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (!isEmptyValue(value2, "string")) {
|
||
rules.pattern(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const date = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2, "date") && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
if (!isEmptyValue(value2, "date")) {
|
||
let dateObject;
|
||
if (value2 instanceof Date) {
|
||
dateObject = value2;
|
||
} else {
|
||
dateObject = new Date(value2);
|
||
}
|
||
rules.type(rule, dateObject, source, errors, options);
|
||
if (dateObject) {
|
||
rules.range(rule, dateObject.getTime(), source, errors, options);
|
||
}
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const required = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const type2 = Array.isArray(value2) ? "array" : typeof value2;
|
||
rules.required(rule, value2, source, errors, options, type2);
|
||
callback(errors);
|
||
};
|
||
const type = (rule, value2, callback, source, options) => {
|
||
const ruleType = rule.type;
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2, ruleType) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options, ruleType);
|
||
if (!isEmptyValue(value2, ruleType)) {
|
||
rules.type(rule, value2, source, errors, options);
|
||
}
|
||
}
|
||
callback(errors);
|
||
};
|
||
const any = (rule, value2, callback, source, options) => {
|
||
const errors = [];
|
||
const validate = rule.required || !rule.required && source.hasOwnProperty(rule.field);
|
||
if (validate) {
|
||
if (isEmptyValue(value2) && !rule.required) {
|
||
return callback();
|
||
}
|
||
rules.required(rule, value2, source, errors, options);
|
||
}
|
||
callback(errors);
|
||
};
|
||
const validators = {
|
||
string,
|
||
method,
|
||
number,
|
||
boolean,
|
||
regexp,
|
||
integer,
|
||
float: floatFn,
|
||
array,
|
||
object,
|
||
enum: enumerable,
|
||
pattern,
|
||
date,
|
||
url: type,
|
||
hex: type,
|
||
email: type,
|
||
required,
|
||
any
|
||
};
|
||
function newMessages() {
|
||
return {
|
||
default: "Validation error on field %s",
|
||
required: "%s is required",
|
||
enum: "%s must be one of %s",
|
||
whitespace: "%s cannot be empty",
|
||
date: {
|
||
format: "%s date %s is invalid for format %s",
|
||
parse: "%s date could not be parsed, %s is invalid ",
|
||
invalid: "%s date %s is invalid"
|
||
},
|
||
types: {
|
||
string: "%s is not a %s",
|
||
method: "%s is not a %s (function)",
|
||
array: "%s is not an %s",
|
||
object: "%s is not an %s",
|
||
number: "%s is not a %s",
|
||
date: "%s is not a %s",
|
||
boolean: "%s is not a %s",
|
||
integer: "%s is not an %s",
|
||
float: "%s is not a %s",
|
||
regexp: "%s is not a valid %s",
|
||
email: "%s is not a valid %s",
|
||
url: "%s is not a valid %s",
|
||
hex: "%s is not a valid %s"
|
||
},
|
||
string: {
|
||
len: "%s must be exactly %s characters",
|
||
min: "%s must be at least %s characters",
|
||
max: "%s cannot be longer than %s characters",
|
||
range: "%s must be between %s and %s characters"
|
||
},
|
||
number: {
|
||
len: "%s must equal %s",
|
||
min: "%s cannot be less than %s",
|
||
max: "%s cannot be greater than %s",
|
||
range: "%s must be between %s and %s"
|
||
},
|
||
array: {
|
||
len: "%s must be exactly %s in length",
|
||
min: "%s cannot be less than %s in length",
|
||
max: "%s cannot be greater than %s in length",
|
||
range: "%s must be between %s and %s in length"
|
||
},
|
||
pattern: {
|
||
mismatch: "%s value %s does not match pattern %s"
|
||
},
|
||
clone() {
|
||
const cloned = JSON.parse(JSON.stringify(this));
|
||
cloned.clone = this.clone;
|
||
return cloned;
|
||
}
|
||
};
|
||
}
|
||
const messages = newMessages();
|
||
const _Schema = class _Schema {
|
||
constructor(descriptor) {
|
||
this.rules = null;
|
||
this._messages = messages;
|
||
this.define(descriptor);
|
||
}
|
||
define(rules2) {
|
||
if (!rules2) {
|
||
throw new Error("Cannot configure a schema with no rules");
|
||
}
|
||
if (typeof rules2 !== "object" || Array.isArray(rules2)) {
|
||
throw new Error("Rules must be an object");
|
||
}
|
||
this.rules = {};
|
||
Object.keys(rules2).forEach((name) => {
|
||
const item = rules2[name];
|
||
this.rules[name] = Array.isArray(item) ? item : [item];
|
||
});
|
||
}
|
||
messages(messages2) {
|
||
if (messages2) {
|
||
this._messages = deepMerge(newMessages(), messages2);
|
||
}
|
||
return this._messages;
|
||
}
|
||
validate(source_, o2 = {}, oc = () => {
|
||
}) {
|
||
let source = source_;
|
||
let options = o2;
|
||
let callback = oc;
|
||
if (typeof options === "function") {
|
||
callback = options;
|
||
options = {};
|
||
}
|
||
if (!this.rules || Object.keys(this.rules).length === 0) {
|
||
if (callback) {
|
||
callback(null, source);
|
||
}
|
||
return Promise.resolve(source);
|
||
}
|
||
function complete(results) {
|
||
let errors = [];
|
||
let fields = {};
|
||
function add2(e2) {
|
||
if (Array.isArray(e2)) {
|
||
errors = errors.concat(...e2);
|
||
} else {
|
||
errors.push(e2);
|
||
}
|
||
}
|
||
for (let i = 0; i < results.length; i++) {
|
||
add2(results[i]);
|
||
}
|
||
if (!errors.length) {
|
||
callback(null, source);
|
||
} else {
|
||
fields = convertFieldsError(errors);
|
||
callback(errors, fields);
|
||
}
|
||
}
|
||
if (options.messages) {
|
||
let messages$1 = this.messages();
|
||
if (messages$1 === messages) {
|
||
messages$1 = newMessages();
|
||
}
|
||
deepMerge(messages$1, options.messages);
|
||
options.messages = messages$1;
|
||
} else {
|
||
options.messages = this.messages();
|
||
}
|
||
const series = {};
|
||
const keys = options.keys || Object.keys(this.rules);
|
||
keys.forEach((z) => {
|
||
const arr = this.rules[z];
|
||
let value2 = source[z];
|
||
arr.forEach((r2) => {
|
||
let rule = r2;
|
||
if (typeof rule.transform === "function") {
|
||
if (source === source_) {
|
||
source = { ...source };
|
||
}
|
||
value2 = source[z] = rule.transform(value2);
|
||
}
|
||
if (typeof rule === "function") {
|
||
rule = {
|
||
validator: rule
|
||
};
|
||
} else {
|
||
rule = { ...rule };
|
||
}
|
||
rule.validator = this.getValidationMethod(rule);
|
||
if (!rule.validator) {
|
||
return;
|
||
}
|
||
rule.field = z;
|
||
rule.fullField = rule.fullField || z;
|
||
rule.type = this.getType(rule);
|
||
series[z] = series[z] || [];
|
||
series[z].push({
|
||
rule,
|
||
value: value2,
|
||
source,
|
||
field: z
|
||
});
|
||
});
|
||
});
|
||
const errorFields = {};
|
||
return asyncMap(
|
||
series,
|
||
options,
|
||
(data, doIt) => {
|
||
var _a;
|
||
const rule = data.rule;
|
||
let deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object");
|
||
deep = deep && (rule.required || !rule.required && data.value);
|
||
rule.field = data.field;
|
||
function addFullField(key, schema) {
|
||
return {
|
||
...schema,
|
||
fullField: `${rule.fullField}.${key}`,
|
||
fullFields: rule.fullFields ? [...rule.fullFields, key] : [key]
|
||
};
|
||
}
|
||
function cb(e2 = []) {
|
||
let errorList = Array.isArray(e2) ? e2 : [e2];
|
||
if (!options.suppressWarning && errorList.length) {
|
||
_Schema.warning("async-validator:", errorList);
|
||
}
|
||
if (errorList.length && rule.message !== void 0) {
|
||
errorList = [].concat(rule.message);
|
||
}
|
||
let filledErrors = errorList.map(complementError(rule, source));
|
||
if (options.first && filledErrors.length) {
|
||
errorFields[rule.field] = 1;
|
||
return doIt(filledErrors);
|
||
}
|
||
if (!deep) {
|
||
doIt(filledErrors);
|
||
} else {
|
||
if (rule.required && !data.value) {
|
||
if (rule.message !== void 0) {
|
||
filledErrors = [].concat(rule.message).map(complementError(rule, source));
|
||
} else if (options.error) {
|
||
filledErrors = [
|
||
options.error(
|
||
rule,
|
||
format(options.messages.required, rule.field)
|
||
)
|
||
];
|
||
}
|
||
return doIt(filledErrors);
|
||
}
|
||
let fieldsSchema = {};
|
||
if (rule.defaultField) {
|
||
Object.keys(data.value).map((key) => {
|
||
fieldsSchema[key] = rule.defaultField;
|
||
});
|
||
}
|
||
fieldsSchema = {
|
||
...fieldsSchema,
|
||
...data.rule.fields
|
||
};
|
||
const paredFieldsSchema = {};
|
||
Object.keys(fieldsSchema).forEach((field) => {
|
||
const fieldSchema = fieldsSchema[field];
|
||
const fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema];
|
||
paredFieldsSchema[field] = fieldSchemaList.map(
|
||
addFullField.bind(null, field)
|
||
);
|
||
});
|
||
const schema = new _Schema(paredFieldsSchema);
|
||
schema.messages(options.messages);
|
||
if (data.rule.options) {
|
||
data.rule.options.messages = options.messages;
|
||
data.rule.options.error = options.error;
|
||
}
|
||
schema.validate(data.value, data.rule.options || options, (errs) => {
|
||
const finalErrors = [];
|
||
if (filledErrors && filledErrors.length) {
|
||
finalErrors.push(...filledErrors);
|
||
}
|
||
if (errs && errs.length) {
|
||
finalErrors.push(...errs);
|
||
}
|
||
doIt(finalErrors.length ? finalErrors : null);
|
||
});
|
||
}
|
||
}
|
||
let res;
|
||
if (rule.asyncValidator) {
|
||
res = rule.asyncValidator(rule, data.value, cb, data.source, options);
|
||
} else if (rule.validator) {
|
||
try {
|
||
res = rule.validator(rule, data.value, cb, data.source, options);
|
||
} catch (error2) {
|
||
(_a = console.error) == null ? void 0 : _a.call(console, error2);
|
||
if (!options.suppressValidatorError) {
|
||
setTimeout(() => {
|
||
throw error2;
|
||
}, 0);
|
||
}
|
||
cb(error2.message);
|
||
}
|
||
if (res === true) {
|
||
cb();
|
||
} else if (res === false) {
|
||
cb(
|
||
typeof rule.message === "function" ? rule.message(rule.fullField || rule.field) : rule.message || `${rule.fullField || rule.field} fails`
|
||
);
|
||
} else if (res instanceof Array) {
|
||
cb(res);
|
||
} else if (res instanceof Error) {
|
||
cb(res.message);
|
||
}
|
||
}
|
||
if (res && res.then) {
|
||
res.then(
|
||
() => cb(),
|
||
(e2) => cb(e2)
|
||
);
|
||
}
|
||
},
|
||
(results) => {
|
||
complete(results);
|
||
},
|
||
source
|
||
);
|
||
}
|
||
getType(rule) {
|
||
if (rule.type === void 0 && rule.pattern instanceof RegExp) {
|
||
rule.type = "pattern";
|
||
}
|
||
if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) {
|
||
throw new Error(format("Unknown rule type %s", rule.type));
|
||
}
|
||
return rule.type || "string";
|
||
}
|
||
getValidationMethod(rule) {
|
||
if (typeof rule.validator === "function") {
|
||
return rule.validator;
|
||
}
|
||
const keys = Object.keys(rule);
|
||
const messageIndex = keys.indexOf("message");
|
||
if (messageIndex !== -1) {
|
||
keys.splice(messageIndex, 1);
|
||
}
|
||
if (keys.length === 1 && keys[0] === "required") {
|
||
return validators.required;
|
||
}
|
||
return validators[this.getType(rule)] || void 0;
|
||
}
|
||
};
|
||
_Schema.register = function register(type2, validator) {
|
||
if (typeof validator !== "function") {
|
||
throw new Error(
|
||
"Cannot register a validator by type, validator is not a function"
|
||
);
|
||
}
|
||
validators[type2] = validator;
|
||
};
|
||
_Schema.warning = warning;
|
||
_Schema.messages = messages;
|
||
_Schema.validators = validators;
|
||
let Schema = _Schema;
|
||
const useFormItemOperation = (props2, slots) => {
|
||
const formContext = inject(formContextKey, void 0);
|
||
let initialValue = void 0;
|
||
let isResettingField = false;
|
||
const validateState = ref("");
|
||
const validateStateDebounced = ref("");
|
||
const validateMessage = ref("");
|
||
const hasLabel = computed(() => {
|
||
return !!(props2.label || slots.label);
|
||
});
|
||
const currentLabel = computed(
|
||
() => `${props2.label || ""}${(formContext == null ? void 0 : formContext.labelSuffix) || ""}`
|
||
);
|
||
const fieldValue = computed(() => {
|
||
const model = formContext == null ? void 0 : formContext.model;
|
||
if (!model || !props2.prop) {
|
||
return;
|
||
}
|
||
return getProp(model, props2.prop).value;
|
||
});
|
||
const propString = computed(() => {
|
||
if (!props2.prop)
|
||
return "";
|
||
return isString(props2.prop) ? props2.prop : props2.prop.join(".");
|
||
});
|
||
const normalizedRules = computed(() => {
|
||
const rules2 = [];
|
||
if (props2.rules)
|
||
rules2.push(...castArray(props2.rules));
|
||
const formRules = formContext == null ? void 0 : formContext.rules;
|
||
if (formRules && props2.prop) {
|
||
const _rules = getProp(
|
||
formRules,
|
||
props2.prop
|
||
).value;
|
||
if (_rules)
|
||
rules2.push(...castArray(_rules));
|
||
}
|
||
if (props2.required !== void 0) {
|
||
const requiredRules = rules2.map((rule, index2) => [rule, index2]).filter(([rule]) => Object.keys(rule).includes("required"));
|
||
if (requiredRules.length) {
|
||
for (const [rule, index2] of requiredRules) {
|
||
if (rule.required === props2.required)
|
||
continue;
|
||
rules2[index2] = { ...rule, required: props2.required };
|
||
}
|
||
} else {
|
||
rules2.push({ required: props2.required });
|
||
}
|
||
}
|
||
return rules2;
|
||
});
|
||
const validateEnabled = computed(() => normalizedRules.value.length > 0);
|
||
const isRequired = computed(
|
||
() => normalizedRules.value.some((rule) => rule.required)
|
||
);
|
||
const shouldShowError = computed(
|
||
() => validateStateDebounced.value === "error" && props2.showMessage && isEmptyVariableInDefault(formContext == null ? void 0 : formContext.showMessage, true)
|
||
);
|
||
const setValidateState = (state) => {
|
||
validateState.value = state;
|
||
};
|
||
const getFilterRule = (trigger2) => {
|
||
const rules2 = normalizedRules.value;
|
||
return rules2.filter((rule) => {
|
||
if (!rule.trigger || !trigger2)
|
||
return true;
|
||
if (Array.isArray(rule.trigger)) {
|
||
return rule.trigger.includes(trigger2);
|
||
} else {
|
||
return rule.trigger === trigger2;
|
||
}
|
||
}).map(({ trigger: trigger22, ...rule }) => rule);
|
||
};
|
||
const onValidationFailed = (error2) => {
|
||
var _a;
|
||
const { errors, fields } = error2;
|
||
if (!errors || !fields) {
|
||
console.error(error2);
|
||
}
|
||
setValidateState("error");
|
||
validateMessage.value = errors ? isEmptyVariableInDefault((_a = errors == null ? void 0 : errors[0]) == null ? void 0 : _a.message, `${props2.prop} 为必填项`) : "";
|
||
formContext == null ? void 0 : formContext.emits("validate", props2.prop, false, validateMessage.value);
|
||
};
|
||
const onValidationSucceded = () => {
|
||
setValidateState("success");
|
||
validateMessage.value = "";
|
||
formContext == null ? void 0 : formContext.emits("validate", props2.prop, true, "");
|
||
};
|
||
const doValidate = async (rules2) => {
|
||
const modelName = propString.value;
|
||
const validator = new Schema({
|
||
[modelName]: rules2
|
||
});
|
||
return validator.validate({ [modelName]: fieldValue.value }, { firstFields: true }).then(() => {
|
||
onValidationSucceded();
|
||
return true;
|
||
}).catch((err) => {
|
||
onValidationFailed(err);
|
||
return Promise.reject(err);
|
||
});
|
||
};
|
||
const validate = async (trigger2, callback) => {
|
||
if (isResettingField || !props2.prop)
|
||
return false;
|
||
const hasCallback2 = isFunction(callback);
|
||
if (!validateEnabled.value) {
|
||
callback == null ? void 0 : callback(false);
|
||
return false;
|
||
}
|
||
const rules2 = getFilterRule(trigger2);
|
||
if (rules2.length === 0) {
|
||
callback == null ? void 0 : callback(true);
|
||
return true;
|
||
}
|
||
setValidateState("validating");
|
||
return doValidate(rules2).then(() => {
|
||
callback == null ? void 0 : callback(true);
|
||
return true;
|
||
}).catch((err) => {
|
||
const { fields } = err;
|
||
callback == null ? void 0 : callback(false, fields);
|
||
return hasCallback2 ? false : Promise.reject(fields);
|
||
});
|
||
};
|
||
const clearValidate = () => {
|
||
setValidateState("");
|
||
validateMessage.value = "";
|
||
isResettingField = false;
|
||
};
|
||
const resetField = async () => {
|
||
const model = formContext == null ? void 0 : formContext.model;
|
||
if (!model || !props2.prop)
|
||
return;
|
||
const computedValue = getProp(model, props2.prop);
|
||
isResettingField = true;
|
||
computedValue.value = cloneDeep(initialValue);
|
||
await nextTick$1();
|
||
clearValidate();
|
||
isResettingField = false;
|
||
};
|
||
const initFieldValue = () => {
|
||
initialValue = cloneDeep(fieldValue.value);
|
||
};
|
||
const validateStateDebouncedUpdater = debounce(() => {
|
||
validateStateDebounced.value = validateState.value;
|
||
}, 100);
|
||
watch(
|
||
() => validateState.value,
|
||
() => validateStateDebouncedUpdater()
|
||
);
|
||
watch(
|
||
() => props2.error,
|
||
(val) => {
|
||
validateMessage.value = val || "";
|
||
setValidateState(val ? "error" : "");
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
watch(
|
||
() => props2.validateStatus,
|
||
(val) => {
|
||
setValidateState(val || "");
|
||
}
|
||
);
|
||
return {
|
||
formContext,
|
||
hasLabel,
|
||
currentLabel,
|
||
validateState,
|
||
validateMessage,
|
||
isRequired,
|
||
shouldShowError,
|
||
doValidate,
|
||
validate,
|
||
clearValidate,
|
||
resetField,
|
||
initFieldValue
|
||
};
|
||
};
|
||
const filterFields = (fields, props2) => {
|
||
const normalized = castArray(props2);
|
||
return normalized.length > 0 ? fields.filter((field) => field.prop && normalized.includes(field.prop)) : fields;
|
||
};
|
||
const useForm = (props2) => {
|
||
const fields = [];
|
||
const addField = (field) => {
|
||
fields.push(field);
|
||
};
|
||
const removeField = (field) => {
|
||
if (field.prop) {
|
||
fields.splice(fields.indexOf(field), 1);
|
||
}
|
||
};
|
||
const resetFields = (properties = []) => {
|
||
if (!props2.model) {
|
||
return console.warn("[TnForm] model参数未定义");
|
||
}
|
||
filterFields(fields, properties).forEach((field) => field.resetField());
|
||
};
|
||
const clearValidate = (props22 = []) => {
|
||
filterFields(fields, props22).forEach((field) => field.clearValidate());
|
||
};
|
||
const isValidatable = computed(() => {
|
||
const hasModel = !!props2.model;
|
||
if (!hasModel) {
|
||
console.warn("[TnForm] model参数未定义");
|
||
}
|
||
return hasModel;
|
||
});
|
||
const obtainValidateFields = (props22) => {
|
||
if (fields.length === 0)
|
||
return [];
|
||
const filteredFields = filterFields(fields, props22);
|
||
if (!filteredFields.length) {
|
||
console.warn("[TnForm] 未找到需要校验的字段");
|
||
return [];
|
||
}
|
||
return filteredFields;
|
||
};
|
||
const validate = async (callback) => validateField(void 0, callback);
|
||
const doValidateField = async (props22) => {
|
||
if (!isValidatable.value)
|
||
return false;
|
||
const fields2 = obtainValidateFields(props22);
|
||
if (fields2.length === 0)
|
||
return false;
|
||
let validationErrors = {};
|
||
for (const field of fields2) {
|
||
try {
|
||
await field.validate("");
|
||
} catch (fields3) {
|
||
validationErrors = {
|
||
...validationErrors,
|
||
...fields3
|
||
};
|
||
}
|
||
}
|
||
if (Object.keys(validationErrors).length === 0)
|
||
return true;
|
||
return Promise.reject(validationErrors);
|
||
};
|
||
const validateField = async (modelProps = [], callback) => {
|
||
const shouldThrow = !isFunction(callback);
|
||
try {
|
||
const result = await doValidateField(modelProps);
|
||
if (result === true) {
|
||
callback == null ? void 0 : callback(true);
|
||
}
|
||
return result;
|
||
} catch (e2) {
|
||
if (e2 instanceof Error)
|
||
throw e2;
|
||
const invalidFields = e2;
|
||
callback == null ? void 0 : callback(false, invalidFields);
|
||
return shouldThrow && Promise.reject(invalidFields);
|
||
}
|
||
};
|
||
return {
|
||
addField,
|
||
removeField,
|
||
resetFields,
|
||
clearValidate,
|
||
validate,
|
||
validateField
|
||
};
|
||
};
|
||
const _sfc_main$2 = /* @__PURE__ */ defineComponent({
|
||
__name: "form",
|
||
props: formProps,
|
||
emits: formEmits,
|
||
setup(__props, { expose: __expose, emit: __emit }) {
|
||
const props2 = __props;
|
||
const emits = __emit;
|
||
const { formClass } = useFormCustomStyle();
|
||
const {
|
||
addField,
|
||
removeField,
|
||
resetFields,
|
||
clearValidate,
|
||
validate,
|
||
validateField
|
||
} = useForm(props2);
|
||
watch(
|
||
() => props2.rules,
|
||
() => {
|
||
if (props2.validateOnRuleChange)
|
||
validate();
|
||
},
|
||
{
|
||
deep: true
|
||
}
|
||
);
|
||
provide(
|
||
formContextKey,
|
||
reactive({
|
||
...toRefs(props2),
|
||
emits,
|
||
resetFields,
|
||
clearValidate,
|
||
validateField,
|
||
addField,
|
||
removeField
|
||
})
|
||
);
|
||
__expose({
|
||
/**
|
||
* @description 对整个表单的内容进行验证。 接收一个回调函数或返回Promise
|
||
*/
|
||
validate,
|
||
/**
|
||
* @description 验证具体的某个字段
|
||
*/
|
||
validateField,
|
||
/**
|
||
* @description 重置表单
|
||
*/
|
||
resetFields,
|
||
/**
|
||
* @description 清除表单验证
|
||
*/
|
||
clearValidate
|
||
});
|
||
return (_ctx, _cache) => {
|
||
return {
|
||
a: n(unref(formClass))
|
||
};
|
||
};
|
||
}
|
||
});
|
||
const Form = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-b2b814ec"]]);
|
||
const formItemValidateStates = [
|
||
"",
|
||
"error",
|
||
"validating",
|
||
"success"
|
||
];
|
||
const formItemProps = buildProps({
|
||
/**
|
||
* @description label文本
|
||
*/
|
||
label: String,
|
||
/**
|
||
* @description label的宽度,默认单位为rpx,支持传入数字和auto
|
||
*/
|
||
labelWidth: {
|
||
type: [String, Number],
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description label标签位置
|
||
*/
|
||
labelPosition: {
|
||
type: String,
|
||
values: ["left", "right", "top"],
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description model中的key,如果需要使用校验,该字段为必填,可以是一个路径数组(['user', 'name', 0])
|
||
*/
|
||
prop: {
|
||
type: definePropType([String, Array])
|
||
},
|
||
/**
|
||
* @description 标记字段是否为必填,如果不填写则根据校验规则自动生成
|
||
*/
|
||
required: {
|
||
type: Boolean,
|
||
default: void 0
|
||
},
|
||
/**
|
||
* @description 表单校验规则
|
||
*/
|
||
rules: {
|
||
type: definePropType([Object, Array])
|
||
},
|
||
/**
|
||
* @description 字段错误信息,如果设置了该字段则校验状态会变成error,并显示该字段的内容
|
||
*/
|
||
error: String,
|
||
/**
|
||
* @description 校验状态
|
||
*/
|
||
validateStatus: {
|
||
type: String,
|
||
values: formItemValidateStates
|
||
},
|
||
/**
|
||
* @description 是否显示校验结果
|
||
*/
|
||
showMessage: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 控制表单组件尺寸
|
||
*/
|
||
size: {
|
||
type: String,
|
||
values: formComponentSizes
|
||
}
|
||
});
|
||
const _sfc_main$1 = /* @__PURE__ */ defineComponent({
|
||
__name: "form-item",
|
||
props: formItemProps,
|
||
setup(__props, { expose: __expose }) {
|
||
const props2 = __props;
|
||
const slots = useSlots();
|
||
const {
|
||
formContext,
|
||
validateState,
|
||
validateMessage,
|
||
hasLabel,
|
||
currentLabel,
|
||
shouldShowError,
|
||
isRequired,
|
||
resetField,
|
||
clearValidate,
|
||
validate,
|
||
initFieldValue
|
||
} = useFormItemOperation(props2, slots);
|
||
const {
|
||
ns: formItemNs,
|
||
labelId,
|
||
formItemClass,
|
||
formItemLabelClass,
|
||
formItemLabelStyle,
|
||
formItemErrorMessageStyle,
|
||
initLabelContainerWidth
|
||
} = useFormItemCustomStyle(props2, hasLabel, isRequired);
|
||
const _size = useFormSize(void 0, { formItem: false });
|
||
const context = reactive({
|
||
...toRefs(props2),
|
||
size: _size,
|
||
validateState,
|
||
hasLabel,
|
||
resetField,
|
||
clearValidate,
|
||
validate
|
||
});
|
||
onMounted(() => {
|
||
if (props2.prop) {
|
||
formContext == null ? void 0 : formContext.addField(context);
|
||
initFieldValue();
|
||
}
|
||
nextTick$1(() => {
|
||
initLabelContainerWidth();
|
||
});
|
||
});
|
||
onBeforeUnmount(() => {
|
||
formContext == null ? void 0 : formContext.removeField(context);
|
||
});
|
||
provide(formItemContextKey, context);
|
||
__expose({
|
||
/**
|
||
* @description 表单尺寸
|
||
*/
|
||
size: _size,
|
||
/**
|
||
* @description 校验信息
|
||
*/
|
||
validateMessage,
|
||
/**
|
||
* @description 校验状态
|
||
*/
|
||
validateState,
|
||
/**
|
||
* @description 对表单Item的内容进行验证。 接收一个回调函数或返回Promise
|
||
*/
|
||
validate,
|
||
/**
|
||
* @description 重置当前字段信息
|
||
*/
|
||
resetField,
|
||
/**
|
||
* @description 清除表单字段验证
|
||
*/
|
||
clearValidate
|
||
});
|
||
return (_ctx, _cache) => {
|
||
return e({
|
||
a: unref(hasLabel)
|
||
}, unref(hasLabel) ? {
|
||
b: t(unref(currentLabel)),
|
||
c: unref(labelId),
|
||
d: n(unref(formItemLabelClass)),
|
||
e: s(unref(formItemLabelStyle))
|
||
} : {}, {
|
||
f: n(unref(formItemNs).e("content")),
|
||
g: n(unref(formItemNs).e("wrapper")),
|
||
h: unref(shouldShowError)
|
||
}, unref(shouldShowError) ? {
|
||
i: t(unref(validateMessage)),
|
||
j: n(unref(formItemNs).e("error-message")),
|
||
k: s(unref(formItemErrorMessageStyle))
|
||
} : {}, {
|
||
l: n(unref(formItemClass))
|
||
});
|
||
};
|
||
}
|
||
});
|
||
const FormItem = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-944bef13"]]);
|
||
withInstall(Form, {
|
||
FormItem
|
||
});
|
||
withNoopInstall(FormItem);
|
||
const isJsonString = (value2) => {
|
||
if (typeof value2 == "string") {
|
||
try {
|
||
const obj = JSON.parse(value2);
|
||
if (typeof obj == "object" && obj) {
|
||
return true;
|
||
} else {
|
||
return false;
|
||
}
|
||
} catch (e2) {
|
||
return false;
|
||
}
|
||
}
|
||
return false;
|
||
};
|
||
function useUploadHandleFunction(props2) {
|
||
const chooseImage = (count) => {
|
||
return new Promise((resolve2, reject) => {
|
||
index$2.chooseImage({
|
||
count,
|
||
sizeType: props2.sizeType,
|
||
// extension: props.extensions,
|
||
sourceType: props2.sourceType,
|
||
success: (res) => {
|
||
resolve2(isArray$1(res.tempFiles) ? res.tempFiles : [res.tempFiles]);
|
||
},
|
||
fail: (err) => {
|
||
reject(err);
|
||
}
|
||
});
|
||
});
|
||
};
|
||
const uploading = ref(false);
|
||
watch(
|
||
() => uploading.value,
|
||
(val) => {
|
||
if (props2.showErrorTips) {
|
||
if (val)
|
||
index$2.showLoading({ title: "上传中" });
|
||
else
|
||
index$2.hideLoading();
|
||
}
|
||
}
|
||
);
|
||
const uploadProcess = (item) => {
|
||
const { customUploadHandler, customUploadCallback } = props2;
|
||
if (uploading.value)
|
||
return Promise.reject("有文件正在上传");
|
||
return new Promise((resolve2, reject) => {
|
||
if (customUploadHandler) {
|
||
const uploadHandlerResult = customUploadHandler(item.file);
|
||
const isUploadHandlePromiseOrString = [
|
||
isPromise(uploadHandlerResult),
|
||
isString(uploadHandlerResult)
|
||
].includes(true);
|
||
if (!isUploadHandlePromiseOrString) {
|
||
console.error(
|
||
"[TnImageUpload]自定义上传处理函数必须返回Promise和String"
|
||
);
|
||
reject("自定义上传处理函数必须返回Promise和String");
|
||
return;
|
||
}
|
||
uploading.value = true;
|
||
item.status = "uploading";
|
||
if (isPromise(uploadHandlerResult)) {
|
||
uploadHandlerResult.then((res) => {
|
||
if (res) {
|
||
item.url = res;
|
||
resolve2(true);
|
||
} else {
|
||
resolve2(false);
|
||
}
|
||
}).catch((err) => {
|
||
console.error("[TnImageUpload]上传文件发生错误", err);
|
||
reject((err == null ? void 0 : err.errMsg) || "上传文件发生错误");
|
||
}).finally(() => {
|
||
uploading.value = false;
|
||
});
|
||
} else {
|
||
if (uploadHandlerResult) {
|
||
item.url = uploadHandlerResult;
|
||
resolve2(true);
|
||
} else {
|
||
resolve2(false);
|
||
}
|
||
uploading.value = false;
|
||
}
|
||
} else {
|
||
uploading.value = true;
|
||
item.status = "uploading";
|
||
const task = index$2.uploadFile({
|
||
url: props2.action,
|
||
filePath: item.url,
|
||
name: props2.name,
|
||
formData: props2.formData,
|
||
header: props2.header,
|
||
success: (res) => {
|
||
if (customUploadCallback) {
|
||
const customUploadCallbackResult = customUploadCallback(res);
|
||
const isCustomUploadCallbackPromiseOrString = [
|
||
isPromise(customUploadCallbackResult),
|
||
isString(customUploadCallbackResult)
|
||
].includes(true);
|
||
if (!isCustomUploadCallbackPromiseOrString) {
|
||
console.error(
|
||
"[TnImageUpload]自定义上传回调函数必须返回Promise和String"
|
||
);
|
||
reject("自定义上传回调函数必须返回Promise和String");
|
||
return;
|
||
}
|
||
if (isPromise(customUploadCallbackResult)) {
|
||
customUploadCallbackResult.then((res2) => {
|
||
if (res2) {
|
||
item.url = res2;
|
||
resolve2(true);
|
||
} else {
|
||
resolve2(false);
|
||
}
|
||
}).catch((err) => {
|
||
console.error("[TnImageUpload]上传文件发生错误", err);
|
||
reject((err == null ? void 0 : err.errMsg) || "上传文件发生错误");
|
||
});
|
||
} else {
|
||
if (customUploadCallbackResult) {
|
||
item.url = customUploadCallbackResult;
|
||
resolve2(true);
|
||
} else {
|
||
resolve2(false);
|
||
}
|
||
}
|
||
} else {
|
||
const { statusCode, data: resData } = res;
|
||
if (![200, 201, 204].includes(statusCode)) {
|
||
console.error("[TnImageUpload]上传文件发生错误", res);
|
||
reject((res == null ? void 0 : res.errMsg) || "上传文件发生错误");
|
||
return;
|
||
} else {
|
||
const data = isJsonString(resData) ? JSON.parse(resData) : resData;
|
||
if (data.code === 200 && data.data.errCode === 0) {
|
||
item.url = data.data.url;
|
||
resolve2(true);
|
||
} else {
|
||
console.error("[TnImageUpload]上传文件发生错误", res);
|
||
reject(
|
||
isEmptyVariableInDefault(
|
||
data == null ? void 0 : data.message,
|
||
(data == null ? void 0 : data.msg) || "上传文件发生错误"
|
||
)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
},
|
||
fail: (err) => {
|
||
console.error("[TnImageUpload]上传文件发生错误", err);
|
||
reject((err == null ? void 0 : err.errMsg) || "上传文件发生错误");
|
||
},
|
||
complete: () => {
|
||
uploading.value = false;
|
||
resolve2(true);
|
||
}
|
||
});
|
||
item.uploadTask = task;
|
||
task.onProgressUpdate((res) => {
|
||
if (res.progress > 0) {
|
||
item.progress = res.progress;
|
||
}
|
||
});
|
||
}
|
||
});
|
||
};
|
||
const checkFileSizeAndExtension = (files) => {
|
||
const { extensions, maxSize } = props2;
|
||
const extReg = /.+\./;
|
||
return files.filter((item) => {
|
||
let fileExt = "";
|
||
fileExt = item.path.replace(extReg, "").toLowerCase();
|
||
return !extensions.some((ext) => ext.toLowerCase() === fileExt) || item.size > maxSize;
|
||
});
|
||
};
|
||
const showErrorTips = (msg) => {
|
||
if (!props2.showErrorTips)
|
||
return;
|
||
index$2.showToast({
|
||
icon: "none",
|
||
title: msg
|
||
});
|
||
};
|
||
return {
|
||
chooseImage,
|
||
uploadProcess,
|
||
checkFileSizeAndExtension,
|
||
showErrorTips
|
||
};
|
||
}
|
||
const useImageUpload = (props2) => {
|
||
const { emit: emit2 } = getCurrentInstance();
|
||
const {
|
||
chooseImage,
|
||
uploadProcess,
|
||
checkFileSizeAndExtension,
|
||
showErrorTips
|
||
} = useUploadHandleFunction(props2);
|
||
const { formItem } = useFormItem();
|
||
const fileList = ref([]);
|
||
let isInnerUpdate = false;
|
||
watch(
|
||
() => props2.modelValue,
|
||
(val) => {
|
||
if (isInnerUpdate) {
|
||
isInnerUpdate = false;
|
||
return;
|
||
}
|
||
fileList.value = val.map((item) => ({
|
||
url: item,
|
||
status: "done",
|
||
progress: 100
|
||
}));
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
const isExceedMaxCount = computed(
|
||
() => fileList.value.length >= props2.limit
|
||
);
|
||
const currentRemainFileCount = computed(() => {
|
||
if (props2.multiple) {
|
||
return props2.limit - fileList.value.length;
|
||
} else {
|
||
return props2.limit - fileList.value.length > 0 ? 1 : 0;
|
||
}
|
||
});
|
||
const chooseFile = async () => {
|
||
const { disabled, action, customUploadHandler } = props2;
|
||
if (disabled)
|
||
return;
|
||
if (!action && !customUploadHandler) {
|
||
showErrorTips("请设置action或者自定义图片上传处理函数");
|
||
debugWarn("TnImageUpload", "请设置action或者自定义图片上传处理函数");
|
||
return;
|
||
}
|
||
const prevUploadedFileCount = fileList.value.length;
|
||
chooseImage(currentRemainFileCount.value).then((res) => {
|
||
let selectFile = res;
|
||
const checkFailFiles = checkFileSizeAndExtension(selectFile);
|
||
if (checkFailFiles.length) {
|
||
showErrorTips("文件格式或大小不符合要求");
|
||
emit2("oversizeOrNoSupport", checkFailFiles);
|
||
selectFile = selectFile.filter(
|
||
(item) => !checkFailFiles.includes(item)
|
||
);
|
||
}
|
||
fileList.value.push(
|
||
...selectFile.map((item) => {
|
||
const url2 = item.path;
|
||
return {
|
||
url: url2,
|
||
status: "ready",
|
||
progress: 0,
|
||
file: item
|
||
};
|
||
})
|
||
);
|
||
if (props2.autoUpload && selectFile.length)
|
||
uploadFile(prevUploadedFileCount);
|
||
}).catch((err) => {
|
||
debugWarn("TnImageUpload", `选择图片失败: ${err}`);
|
||
showErrorTips((err == null ? void 0 : err.errMsg) || "选择图片失败");
|
||
});
|
||
};
|
||
const handleUploadEvent = (item, index2, uploadSingle = false) => {
|
||
uploadProcess(item).then((res) => {
|
||
if (res) {
|
||
handleUploadSuccess(item);
|
||
} else {
|
||
handleUploadError(item, "上传失败");
|
||
}
|
||
}).catch((err) => {
|
||
handleUploadError(item, err);
|
||
}).finally(() => {
|
||
if (!uploadSingle)
|
||
uploadFile(index2 + 1);
|
||
});
|
||
};
|
||
const uploadFile = (startIndex, uploadSingle = false) => {
|
||
const { autoUpload, beforeUpload } = props2;
|
||
const autoNextUpload = autoUpload && !uploadSingle;
|
||
if (startIndex >= fileList.value.length) {
|
||
if (props2.autoRemoveFaildFile)
|
||
handleUploadCompleteFailFile();
|
||
return;
|
||
}
|
||
const fileItem = fileList.value[startIndex];
|
||
if (fileItem.progress === 100) {
|
||
fileItem.status = "done";
|
||
fileItem.uploadTask = void 0;
|
||
if (autoNextUpload)
|
||
uploadFile(startIndex + 1);
|
||
return;
|
||
}
|
||
if (!beforeUpload) {
|
||
handleUploadEvent(fileItem, startIndex, uploadSingle);
|
||
return;
|
||
}
|
||
const shouldUpload = beforeUpload(fileItem.file);
|
||
const isBeforeUploadPromiseOrBoolean = [
|
||
isPromise(shouldUpload),
|
||
isBoolean(shouldUpload)
|
||
].includes(true);
|
||
if (!isBeforeUploadPromiseOrBoolean) {
|
||
throwError(
|
||
"[TnImageUpload]",
|
||
"beforeUpload返回值必须是Promise或者Boolean"
|
||
);
|
||
}
|
||
if (isPromise(shouldUpload)) {
|
||
shouldUpload.then((res) => {
|
||
if (res)
|
||
handleUploadEvent(fileItem, startIndex, uploadSingle);
|
||
else {
|
||
removeFile(startIndex);
|
||
if (autoNextUpload)
|
||
uploadFile(startIndex);
|
||
}
|
||
}).catch((err) => {
|
||
debugWarn("TnImageUpload", `beforeUpload出错: ${err}`);
|
||
fileItem.status = "failed";
|
||
});
|
||
} else {
|
||
if (shouldUpload)
|
||
handleUploadEvent(fileItem, startIndex, uploadSingle);
|
||
else {
|
||
removeFile(startIndex);
|
||
if (autoNextUpload)
|
||
uploadFile(startIndex);
|
||
}
|
||
}
|
||
};
|
||
const getUploadSuceesFileUrlValue = () => {
|
||
return fileList.value.filter((item) => item.status === "done").map((item) => item.url);
|
||
};
|
||
const uploadSuccessFileListChange = () => {
|
||
isInnerUpdate = true;
|
||
const value2 = getUploadSuceesFileUrlValue();
|
||
emit2(UPDATE_MODEL_EVENT, value2);
|
||
nextTick$1(() => {
|
||
var _a;
|
||
emit2(CHANGE_EVENT, value2);
|
||
if (props2.validateEvent) {
|
||
(_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "change").catch((err) => {
|
||
debugWarn(err);
|
||
});
|
||
}
|
||
});
|
||
};
|
||
const handleUploadSuccess = (item) => {
|
||
item.status = "done";
|
||
item.progress = 100;
|
||
item.uploadTask = void 0;
|
||
item.file = void 0;
|
||
emit2("success", item);
|
||
uploadSuccessFileListChange();
|
||
};
|
||
const handleUploadError = (item, errorMsg) => {
|
||
item.status = "failed";
|
||
item.progress = 0;
|
||
item.uploadTask = void 0;
|
||
item.file = void 0;
|
||
showErrorTips(errorMsg);
|
||
emit2("fail", new Error(errorMsg), item);
|
||
};
|
||
const handleUploadCompleteFailFile = () => {
|
||
const tempFileList = [...fileList.value];
|
||
tempFileList.forEach((item, index2) => {
|
||
if (item.status === "failed") {
|
||
removeFile(index2);
|
||
}
|
||
});
|
||
};
|
||
const retryUploadFile = (index2) => {
|
||
const fileItem = fileList.value[index2];
|
||
fileItem.status = "ready";
|
||
fileItem.progress = 0;
|
||
uploadFile(index2, true);
|
||
};
|
||
const retryAllUpload = () => {
|
||
const firstFailedFileIndex = fileList.value.findIndex(
|
||
(item) => item.status === "failed"
|
||
);
|
||
uploadFile(firstFailedFileIndex);
|
||
};
|
||
const customUploadHandle = () => {
|
||
if (!fileList.value.length)
|
||
return;
|
||
uploadFile(0);
|
||
};
|
||
const removeFile = (index2) => {
|
||
const fileItem = fileList.value[index2];
|
||
if (fileItem.status === "uploading" && fileItem.uploadTask && fileItem.progress > 0 && fileItem.progress < 100) {
|
||
fileItem.uploadTask.abort();
|
||
}
|
||
fileList.value.splice(index2, 1);
|
||
if (fileItem.status === "done") {
|
||
emit2("remove", fileItem.url);
|
||
uploadSuccessFileListChange();
|
||
}
|
||
};
|
||
const removeFileEvent = (index2) => {
|
||
const { disabled, beforeRemove } = props2;
|
||
if (disabled)
|
||
return;
|
||
const fileItem = fileList.value[index2];
|
||
if (!fileItem)
|
||
return;
|
||
index$2.showModal({
|
||
title: "操作提示",
|
||
content: "确认需要移除该图片吗?",
|
||
showCancel: true,
|
||
cancelText: "取 消",
|
||
confirmText: "确 认",
|
||
success: (res) => {
|
||
if (res.confirm) {
|
||
if (!beforeRemove) {
|
||
removeFile(index2);
|
||
return;
|
||
}
|
||
const shouldRemove = beforeRemove(fileItem);
|
||
const isShouldRemovePromiseOrBoolean = [
|
||
isPromise(shouldRemove),
|
||
isBoolean(shouldRemove)
|
||
].includes(true);
|
||
if (!isShouldRemovePromiseOrBoolean) {
|
||
throwError(
|
||
"[TnImageUpload]",
|
||
"beforeRemove返回值必须是Promise或者Boolean"
|
||
);
|
||
}
|
||
if (isPromise(shouldRemove)) {
|
||
shouldRemove.then((res2) => {
|
||
if (res2)
|
||
removeFile(index2);
|
||
}).catch((err) => {
|
||
debugWarn("TnImageUpload", `beforeRemove出错: ${err}`);
|
||
});
|
||
} else {
|
||
if (shouldRemove)
|
||
removeFile(index2);
|
||
}
|
||
}
|
||
}
|
||
});
|
||
};
|
||
const clearAllFile = () => {
|
||
fileList.value.forEach((item) => {
|
||
if (item.status === "uploading" && item.uploadTask && item.progress > 0 && item.progress < 100) {
|
||
item.uploadTask.abort();
|
||
}
|
||
});
|
||
fileList.value = [];
|
||
uploadSuccessFileListChange();
|
||
};
|
||
const previewImage2 = (index2) => {
|
||
const previewImageList = fileList.value.filter((item) => item.status === "done").map((item) => item.url);
|
||
index$2.previewImage({
|
||
current: index2,
|
||
urls: previewImageList
|
||
});
|
||
emit2("preview", previewImageList[index2]);
|
||
};
|
||
return {
|
||
fileList,
|
||
isExceedMaxCount,
|
||
chooseFile,
|
||
retryUploadFile,
|
||
retryAllUpload,
|
||
customUploadHandle,
|
||
removeFileEvent,
|
||
clearAllFile,
|
||
previewImage: previewImage2
|
||
};
|
||
};
|
||
const props$c = defineMixin({
|
||
props: {
|
||
// 主题颜色
|
||
type: {
|
||
type: String,
|
||
default: () => defProps.text.type
|
||
},
|
||
// 是否显示
|
||
show: {
|
||
type: Boolean,
|
||
default: () => defProps.text.show
|
||
},
|
||
// 显示的值
|
||
text: {
|
||
type: [String, Number],
|
||
default: () => defProps.text.text
|
||
},
|
||
// 前置图标
|
||
prefixIcon: {
|
||
type: String,
|
||
default: () => defProps.text.prefixIcon
|
||
},
|
||
// 后置图标
|
||
suffixIcon: {
|
||
type: String,
|
||
default: () => defProps.text.suffixIcon
|
||
},
|
||
// 文本处理的匹配模式
|
||
// text-普通文本,price-价格,phone-手机号,name-姓名,date-日期,link-超链接
|
||
mode: {
|
||
type: String,
|
||
default: () => defProps.text.mode
|
||
},
|
||
// mode=link下,配置的链接
|
||
href: {
|
||
type: String,
|
||
default: () => defProps.text.href
|
||
},
|
||
// 格式化规则
|
||
format: {
|
||
type: [String, Function],
|
||
default: () => defProps.text.format
|
||
},
|
||
// mode=phone时,点击文本是否拨打电话
|
||
call: {
|
||
type: Boolean,
|
||
default: () => defProps.text.call
|
||
},
|
||
// 小程序的打开方式
|
||
openType: {
|
||
type: String,
|
||
default: () => defProps.text.openType
|
||
},
|
||
// 是否粗体,默认normal
|
||
bold: {
|
||
type: Boolean,
|
||
default: () => defProps.text.bold
|
||
},
|
||
// 是否块状
|
||
block: {
|
||
type: Boolean,
|
||
default: () => defProps.text.block
|
||
},
|
||
// 文本显示的行数,如果设置,超出此行数,将会显示省略号
|
||
lines: {
|
||
type: [String, Number],
|
||
default: () => defProps.text.lines
|
||
},
|
||
// 文本颜色
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.text.color
|
||
},
|
||
// 字体大小
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => defProps.text.size
|
||
},
|
||
// 图标的样式
|
||
iconStyle: {
|
||
type: [Object, String],
|
||
default: () => defProps.text.iconStyle
|
||
},
|
||
// 文字装饰,下划线,中划线等,可选值 none|underline|line-through
|
||
decoration: {
|
||
tepe: String,
|
||
default: () => defProps.text.decoration
|
||
},
|
||
// 外边距,对象、字符串,数值形式均可
|
||
margin: {
|
||
type: [Object, String, Number],
|
||
default: () => defProps.text.margin
|
||
},
|
||
// 文本行高
|
||
lineHeight: {
|
||
type: [String, Number],
|
||
default: () => defProps.text.lineHeight
|
||
},
|
||
// 文本对齐方式,可选值left|center|right
|
||
align: {
|
||
type: String,
|
||
default: () => defProps.text.align
|
||
},
|
||
// 文字换行,可选值break-word|normal|anywhere
|
||
wordWrap: {
|
||
type: String,
|
||
default: () => defProps.text.wordWrap
|
||
},
|
||
// 占满剩余空间
|
||
flex1: {
|
||
type: Boolean,
|
||
default: () => defProps.text.flex1
|
||
}
|
||
}
|
||
});
|
||
const value = {
|
||
computed: {
|
||
// 经处理后需要显示的值
|
||
value() {
|
||
const {
|
||
text,
|
||
mode,
|
||
format: format2,
|
||
href
|
||
} = this;
|
||
if (mode === "price") {
|
||
if (!/^\d+(\.\d+)?$/.test(text)) {
|
||
error("金额模式下,text参数需要为金额格式");
|
||
}
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
return priceFormat(text, 2);
|
||
}
|
||
if (mode === "date") {
|
||
!test.date(text) && error("日期模式下,text参数需要为日期或时间戳格式");
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
if (format2) {
|
||
return timeFormat(text, format2);
|
||
}
|
||
return timeFormat(text, "yyyy-mm-dd");
|
||
}
|
||
if (mode === "phone") {
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
if (format2 === "encrypt") {
|
||
return `${text.substr(0, 3)}****${text.substr(7)}`;
|
||
}
|
||
return text;
|
||
}
|
||
if (mode === "name") {
|
||
!(typeof text === "string") && error("姓名模式下,text参数需要为字符串格式");
|
||
if (test.func(format2)) {
|
||
return format2(text);
|
||
}
|
||
if (format2 === "encrypt") {
|
||
return this.formatName(text);
|
||
}
|
||
return text;
|
||
}
|
||
if (mode === "link") {
|
||
!test.url(href) && error("超链接模式下,href参数需要为URL格式");
|
||
return text;
|
||
}
|
||
return text;
|
||
}
|
||
},
|
||
methods: {
|
||
// 默认的姓名脱敏规则
|
||
formatName(name) {
|
||
let value2 = "";
|
||
if (name.length === 2) {
|
||
value2 = name.substr(0, 1) + "*";
|
||
} else if (name.length > 2) {
|
||
let char = "";
|
||
for (let i = 0, len = name.length - 2; i < len; i++) {
|
||
char += "*";
|
||
}
|
||
value2 = name.substr(0, 1) + char + name.substr(-1, 1);
|
||
} else {
|
||
value2 = name;
|
||
}
|
||
return value2;
|
||
}
|
||
}
|
||
};
|
||
const props$b = defineMixin({
|
||
props: {
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.line.color
|
||
},
|
||
// 长度,竖向时表现为高度,横向时表现为长度,可以为百分比,带px单位的值等
|
||
length: {
|
||
type: [String, Number],
|
||
default: () => defProps.line.length
|
||
},
|
||
// 线条方向,col-竖向,row-横向
|
||
direction: {
|
||
type: String,
|
||
default: () => defProps.line.direction
|
||
},
|
||
// 是否显示细边框
|
||
hairline: {
|
||
type: Boolean,
|
||
default: () => defProps.line.hairline
|
||
},
|
||
// 线条与上下左右元素的间距,字符串形式,如"30px"、"20px 30px"
|
||
margin: {
|
||
type: [String, Number],
|
||
default: () => defProps.line.margin
|
||
},
|
||
// 是否虚线,true-虚线,false-实线
|
||
dashed: {
|
||
type: Boolean,
|
||
default: () => defProps.line.dashed
|
||
}
|
||
}
|
||
});
|
||
const props$a = defineMixin({
|
||
props: {
|
||
// 是否开启顶部安全区适配
|
||
safeAreaInsetTop: {
|
||
type: Boolean,
|
||
default: () => true
|
||
},
|
||
// 是否固定在顶部
|
||
fixed: {
|
||
type: Boolean,
|
||
default: () => true
|
||
},
|
||
// 左边的图标
|
||
leftIcon: {
|
||
type: String,
|
||
default: "arrow-leftward"
|
||
},
|
||
// 背景颜色
|
||
bgColor: {
|
||
type: String,
|
||
default: () => "rgba(0,0,0,.15)"
|
||
},
|
||
// 导航栏高度
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => "32px"
|
||
},
|
||
// 图标的大小
|
||
iconSize: {
|
||
type: [String, Number],
|
||
default: "20px"
|
||
},
|
||
// 图标的颜色
|
||
iconColor: {
|
||
type: String,
|
||
default: "#fff"
|
||
},
|
||
// 点击左侧区域(返回图标),是否自动返回上一页
|
||
autoBack: {
|
||
type: Boolean,
|
||
default: () => true
|
||
},
|
||
// 首页路径
|
||
homeUrl: {
|
||
type: [String],
|
||
default: ""
|
||
}
|
||
}
|
||
});
|
||
const updateUserInfoPopupProps = buildProps({
|
||
/**
|
||
* @description 控制弹框显示、隐藏
|
||
*/
|
||
show: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
/**
|
||
* @description 用户头像地址
|
||
*/
|
||
avatar: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 用户昵称
|
||
*/
|
||
nickname: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 弹框标题
|
||
*/
|
||
title: {
|
||
type: String,
|
||
default: "获取您的昵称、头像"
|
||
},
|
||
/**
|
||
* @description 弹框提示
|
||
*/
|
||
tips: {
|
||
type: String,
|
||
default: "获取用户头像、昵称,主要用于向用户提供具有辨识度的用户体验"
|
||
},
|
||
/**
|
||
* @description 弹框确认按钮文案
|
||
*/
|
||
confirmText: {
|
||
type: String,
|
||
default: "保 存"
|
||
},
|
||
/**
|
||
* @description 弹框按钮背景颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
confirmBgColor: {
|
||
type: String,
|
||
default: "tn-type-primary"
|
||
},
|
||
/**
|
||
* @description 弹框按钮文字颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
confirmTextColor: {
|
||
type: String,
|
||
default: "tn-white"
|
||
}
|
||
});
|
||
const updateUserInfoPopupEmits = {
|
||
"update:show": (val) => isBoolean(val),
|
||
"update:avatar": (val) => isString(val),
|
||
"update:nickname": (val) => isString(val),
|
||
/**
|
||
* @description 点击弹框确认按钮时触发
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
confirm: (avatar, nickname) => true,
|
||
/**
|
||
* @description 选择头像后触发
|
||
*/
|
||
"choose-avatar": (val) => isString(val)
|
||
};
|
||
const useUpdateUserInfoPopupCustomStyle = (props2) => {
|
||
const ns = useNamespace("update-user-info-popup");
|
||
const [confirmBtnBgColorClass, confirmBtnBgColorStyle] = useComponentColor(
|
||
toRef(props2, "confirmBgColor"),
|
||
"bg"
|
||
);
|
||
const [confirmBtnTextColorClass, confirmBtnTextColorStyle] = useComponentColor(toRef(props2, "confirmTextColor"), "text");
|
||
const submitBtnClass = computed(() => {
|
||
const cls = [ns.e("submit-btn")];
|
||
if (confirmBtnBgColorClass.value) {
|
||
cls.push(confirmBtnBgColorClass.value);
|
||
}
|
||
if (confirmBtnTextColorClass.value) {
|
||
cls.push(confirmBtnTextColorClass.value);
|
||
}
|
||
return cls.join(" ");
|
||
});
|
||
const submitBtnStyle = computed(() => {
|
||
const style = {};
|
||
if (!confirmBtnBgColorClass.value) {
|
||
style.backgroundColor = confirmBtnBgColorStyle.value || "var(--tn-color-primary)";
|
||
}
|
||
if (confirmBtnTextColorStyle.value) {
|
||
style.color = confirmBtnTextColorStyle.value;
|
||
} else if (!confirmBtnBgColorClass.value) {
|
||
style.color = "var(--tn-color-white)";
|
||
}
|
||
if (!props2.avatar || !props2.nickname) {
|
||
style.backgroundColor = "var(--tn-color-gray-disabled)";
|
||
style.color = "var(--tn-color-gray-dark)";
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
submitBtnClass,
|
||
submitBtnStyle
|
||
};
|
||
};
|
||
const useUpdateUserInfoPopup = (props2, emits) => {
|
||
const showUpdatePopup = ref(false);
|
||
const inputNickname = ref(props2.nickname);
|
||
watch(
|
||
() => props2.show,
|
||
(val) => {
|
||
showUpdatePopup.value = val;
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
const nickNameInputHandle = (e2) => {
|
||
const value2 = e2.detail.value;
|
||
inputNickname.value = value2;
|
||
emits("update:nickname", value2);
|
||
};
|
||
const avatarChooseHandle = (e2) => {
|
||
emits("choose-avatar", e2.detail.avatarUrl);
|
||
};
|
||
const submitBtnClickHandle = () => {
|
||
if (!inputNickname.value || !props2.avatar) {
|
||
return;
|
||
}
|
||
emits("confirm", props2.avatar, inputNickname.value);
|
||
emits("update:show", false);
|
||
};
|
||
const popupCloseHandle = () => {
|
||
emits("update:show", false);
|
||
};
|
||
return {
|
||
showUpdatePopup,
|
||
inputNickname,
|
||
nickNameInputHandle,
|
||
popupCloseHandle,
|
||
submitBtnClickHandle,
|
||
avatarChooseHandle
|
||
};
|
||
};
|
||
const buttonFormTypes = ["submit", "reset"];
|
||
const buttonOpenTypes = [
|
||
"feedback",
|
||
"share",
|
||
"contact",
|
||
"getPhoneNumber",
|
||
"getRealtimePhoneNumber",
|
||
"launchApp",
|
||
"openSetting",
|
||
"getUserInfo",
|
||
"chooseAvatar",
|
||
"agreePrivacyAuthorization"
|
||
];
|
||
const buttonProps = buildProps({
|
||
/**
|
||
* @description 按钮宽度
|
||
*/
|
||
width: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 按钮高度
|
||
*/
|
||
height: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 按钮尺寸
|
||
*/
|
||
size: useComponentSizeProp,
|
||
/**
|
||
* @description 按钮形状
|
||
*/
|
||
shape: {
|
||
type: String,
|
||
values: componentShapes,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 按钮颜色类型
|
||
*/
|
||
type: {
|
||
type: String,
|
||
values: componentTypes,
|
||
default: "primary"
|
||
},
|
||
/**
|
||
* @description 按钮图标
|
||
*/
|
||
icon: {
|
||
type: iconPropType
|
||
},
|
||
/**
|
||
* @description 是否加粗字体
|
||
*/
|
||
bold: Boolean,
|
||
/**
|
||
* @description 字体大小
|
||
*/
|
||
fontSize: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 背景颜色,以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
bgColor: String,
|
||
/**
|
||
* @description 文字颜色,以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
textColor: String,
|
||
/**
|
||
* @description 是否显示为文本按钮
|
||
*/
|
||
text: Boolean,
|
||
/**
|
||
* @description 是否为朴素按钮
|
||
*/
|
||
plain: Boolean,
|
||
/**
|
||
* @description 边框颜色,以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
borderColor: String,
|
||
/**
|
||
* @description 是否加粗边框
|
||
*/
|
||
borderBold: Boolean,
|
||
/**
|
||
* @description 是否显示阴影
|
||
*/
|
||
shadow: Boolean,
|
||
/**
|
||
* @description 阴影颜色,以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
shadowColor: String,
|
||
/**
|
||
* @description 点击时触发的类
|
||
*/
|
||
hoverClass: {
|
||
type: String,
|
||
default: "tn-u-btn-hover"
|
||
},
|
||
/**
|
||
* @description 自定义样式
|
||
*/
|
||
customStyle: useComponentCustomStyleProp,
|
||
/**
|
||
* @description 自定义类
|
||
*/
|
||
customClass: String,
|
||
/**
|
||
* @description 是否禁用按钮
|
||
*/
|
||
disabled: Boolean,
|
||
/**
|
||
* @description 是否只为一个按钮,不作用任何样式
|
||
*/
|
||
onlyButton: Boolean,
|
||
/**
|
||
* @description 是否显示加载中
|
||
*/
|
||
loading: Boolean,
|
||
/**
|
||
* @description 是否防抖
|
||
*/
|
||
debounce: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
/**
|
||
* @description 触发form表单的事件类型
|
||
*/
|
||
formType: {
|
||
type: String,
|
||
values: buttonFormTypes
|
||
},
|
||
/**
|
||
* @description 按钮开放能力,具体能力参考官网https://uniapp.dcloud.io/component/button.html
|
||
*/
|
||
openType: {
|
||
type: String,
|
||
values: buttonOpenTypes
|
||
},
|
||
/**
|
||
* @description 打开app时向app传递的参数, 在微信、QQ小程序和openType为launchApp时生效
|
||
*/
|
||
appParameter: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 会话来源, 在微信小程序和openType为contact时生效
|
||
*/
|
||
sessionFrom: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 会话内消息卡片标题, 默认为当前标题, 在微信小程序和openType为contact时生效
|
||
*/
|
||
sendMessageTitle: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 会话内消息卡片点击跳转小程序路径, 默认为当前路径, 在微信小程序和openType为contact时生效
|
||
*/
|
||
sendMessagePath: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 会话内消息卡片图片, 默认为截图, 在微信小程序和openType为contact时生效
|
||
*/
|
||
sendMessageImg: {
|
||
type: String,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 是否显示会话内消息卡片, 设置此参数为true, 用户进入客服会话会在右下角显示"可能要发送的小程序"提示, 用户点击后可以快速发送小程序消息, 在微信小程序和openType为contact时生效
|
||
*/
|
||
showMessageCard: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
/**
|
||
* @description 当手机号快速验证或手机号实时验证额度用尽时,是否对用户展示“申请获取你的手机号,但该功能使用次数已达当前小程序上限,暂时无法使用”的提示
|
||
*/
|
||
phoneNumberNoQuotaToast: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
clickModifiers: {
|
||
type: String
|
||
}
|
||
});
|
||
const buttonEmits = {
|
||
/**
|
||
* @description 按钮点击事件
|
||
*/
|
||
click: () => true,
|
||
/**
|
||
* @description 获取用户手机号码回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
getphonenumber: (e2) => true,
|
||
/**
|
||
* @description 获取用户手机号实时验证回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
getrealtimephonenumber: (e2) => true,
|
||
/**
|
||
* @description 打开权限设置面板并关闭时回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
opensetting: (e2) => true,
|
||
/**
|
||
* @description 打开APP成功时回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
launchapp: (e2) => true,
|
||
/**
|
||
* @description 获取用户信息回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
getuserinfo: (e2) => true,
|
||
/**
|
||
* @description 获取用户头像回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
chooseavatar: (e2) => true,
|
||
/**
|
||
* @description 同意隐私授权回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
agreeprivacyauthorization: (e2) => true,
|
||
/**
|
||
* @description 客服消息回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
contact: (e2) => true,
|
||
/**
|
||
* @description 开放能力调用发生错误时回调
|
||
*/
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
error: (e2) => true
|
||
};
|
||
const useButtonCustomStyle = (props2) => {
|
||
const ns = useNamespace("button");
|
||
const [bgColorClass, bgColorStyle] = useComponentColor(
|
||
toRef(props2, "bgColor"),
|
||
"bg"
|
||
);
|
||
const [textColorClass, textColorStyle] = useComponentColor(
|
||
toRef(props2, "textColor"),
|
||
"text"
|
||
);
|
||
const [borderColorClass, borderColorStyle] = useComponentColor(
|
||
toRef(props2, "borderColor"),
|
||
"border"
|
||
);
|
||
const [shadowColorClass, shadowColorStyle] = useComponentColor(
|
||
toRef(props2, "shadowColor"),
|
||
"shadow"
|
||
);
|
||
const buttonClass = computed(() => {
|
||
const cls = [ns.b()];
|
||
if (props2.onlyButton) {
|
||
cls.push(ns.m("only-button"));
|
||
return cls.join(" ");
|
||
}
|
||
if (props2.text)
|
||
cls.push(ns.m("text"));
|
||
if (props2.plain) {
|
||
cls.push(ns.m("plain"));
|
||
if (props2.borderBold)
|
||
cls.push(ns.m("plain-bold"));
|
||
}
|
||
if (props2.type) {
|
||
if (props2.text) {
|
||
if (!props2.textColor)
|
||
cls.push(`tn-type-${props2.type}_text`);
|
||
} else if (props2.plain) {
|
||
if (!props2.borderColor)
|
||
cls.push(`tn-type-${props2.type}_border`);
|
||
} else {
|
||
if (!props2.bgColor)
|
||
cls.push(`tn-type-${props2.type}_bg`);
|
||
}
|
||
}
|
||
if (props2.size)
|
||
cls.push(ns.m(props2.size));
|
||
if (!props2.text && props2.shape)
|
||
cls.push(ns.m(props2.shape));
|
||
if (props2.bold)
|
||
cls.push("tn-text-bold");
|
||
if (!props2.text && !props2.plain) {
|
||
if (bgColorClass.value)
|
||
cls.push(bgColorClass.value);
|
||
}
|
||
if (textColorClass.value)
|
||
cls.push(textColorClass.value);
|
||
if (props2.plain) {
|
||
if (borderColorClass.value)
|
||
cls.push(borderColorClass.value);
|
||
}
|
||
if (props2.shadow) {
|
||
cls.push("tn-shadow");
|
||
if (shadowColorClass.value)
|
||
cls.push(shadowColorClass.value);
|
||
}
|
||
if (props2.customClass)
|
||
cls.push(props2.customClass);
|
||
return cls.join(" ");
|
||
});
|
||
const buttonStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.onlyButton)
|
||
return style;
|
||
if (props2.width) {
|
||
style.width = formatDomSizeValue(props2.width);
|
||
if (props2.shape === "circle")
|
||
style.height = style.width;
|
||
}
|
||
if (props2.height && props2.shape !== "circle")
|
||
style.height = formatDomSizeValue(props2.height);
|
||
if (props2.fontSize)
|
||
style.fontSize = formatDomSizeValue(props2.fontSize);
|
||
if (!props2.text && !props2.plain) {
|
||
if (bgColorStyle.value)
|
||
style.backgroundColor = bgColorStyle.value;
|
||
}
|
||
if (textColorStyle.value) {
|
||
style.color = textColorStyle.value;
|
||
}
|
||
if (props2.plain && borderColorStyle.value) {
|
||
style.borderColor = borderColorStyle.value;
|
||
}
|
||
if (props2.shadow && shadowColorStyle.value)
|
||
style.boxShadow = shadowColorStyle.value;
|
||
if (!isEmpty(props2.customStyle)) {
|
||
Object.assign(style, props2.customStyle);
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
buttonClass,
|
||
buttonStyle
|
||
};
|
||
};
|
||
const useButton = (props2, emits) => {
|
||
const buttonClickHandle = () => {
|
||
if (props2.disabled || props2.loading)
|
||
return;
|
||
emits("click");
|
||
};
|
||
const buttonClick = props2.debounce ? debounce(buttonClickHandle, 250) : buttonClickHandle;
|
||
const getPhoneNumber = (e2) => {
|
||
emits("getphonenumber", e2);
|
||
};
|
||
const getRealTimePhoneNumber = (e2) => {
|
||
emits("getrealtimephonenumber", e2);
|
||
};
|
||
const openSetting = (e2) => {
|
||
emits("opensetting", e2);
|
||
};
|
||
const launchApp = (e2) => {
|
||
emits("launchapp", e2);
|
||
};
|
||
const getUserInfo = (e2) => {
|
||
emits("getuserinfo", e2);
|
||
};
|
||
const chooseAvatar = (e2) => {
|
||
emits("chooseavatar", e2);
|
||
};
|
||
const agreePrivacyAuthorization = (e2) => {
|
||
emits("agreeprivacyauthorization", e2);
|
||
};
|
||
const contact = (e2) => {
|
||
emits("contact", e2);
|
||
};
|
||
const openTypeError = (e2) => {
|
||
emits("error", e2);
|
||
};
|
||
return {
|
||
buttonClick,
|
||
getPhoneNumber,
|
||
getRealTimePhoneNumber,
|
||
openSetting,
|
||
launchApp,
|
||
getUserInfo,
|
||
chooseAvatar,
|
||
agreePrivacyAuthorization,
|
||
contact,
|
||
openTypeError
|
||
};
|
||
};
|
||
const avatarShape = ["circle", "square"];
|
||
const avatarProps = buildProps({
|
||
/**
|
||
* @description 头像地址(url地址和绝对地址)
|
||
*/
|
||
url: String,
|
||
/**
|
||
* @descripttion 头像图标
|
||
*/
|
||
icon: String,
|
||
/**
|
||
* @description 头像图标配置
|
||
*/
|
||
iconConfig: {
|
||
type: definePropType(Object),
|
||
default: () => ({})
|
||
},
|
||
/**
|
||
* @description 头像颜色类型
|
||
*/
|
||
type: {
|
||
type: String,
|
||
values: componentTypes,
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 头像大小
|
||
*/
|
||
size: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 头像形状
|
||
*/
|
||
shape: {
|
||
type: String,
|
||
values: avatarShape,
|
||
default: "circle"
|
||
},
|
||
/**
|
||
* @description 头像图片模式
|
||
*/
|
||
imgMode: {
|
||
type: String,
|
||
values: componentImgModes,
|
||
default: "aspectFill"
|
||
},
|
||
/**
|
||
* @description 背景颜色
|
||
*/
|
||
bgColor: String,
|
||
/**
|
||
* @description 显示边框
|
||
*/
|
||
border: useComponentBoolean,
|
||
/**
|
||
* @description 边框颜色
|
||
*/
|
||
borderColor: String,
|
||
/**
|
||
* @description 是否加粗边框
|
||
*/
|
||
borderBold: useComponentBoolean,
|
||
/**
|
||
* @description 显示阴影
|
||
*/
|
||
shadow: useComponentBoolean,
|
||
/**
|
||
* @description 阴影颜色
|
||
*/
|
||
shadowColor: String,
|
||
/**
|
||
* @description 角标内容
|
||
*/
|
||
badge: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 角标配置
|
||
*/
|
||
badgeConfig: {
|
||
type: definePropType(Object),
|
||
default: () => ({})
|
||
}
|
||
});
|
||
const avatarEmits = {
|
||
/**
|
||
* @description 点击事件
|
||
*/
|
||
click: () => true
|
||
};
|
||
const useAvatarIconConfig = (config2) => {
|
||
const avatarGroup = inject(avatarGroupContextKey, void 0);
|
||
const iconColor = computed(() => {
|
||
var _a;
|
||
return (config2 == null ? void 0 : config2.color) || ((_a = avatarGroup == null ? void 0 : avatarGroup.iconConfig) == null ? void 0 : _a.color) || "";
|
||
});
|
||
const iconSize = computed(() => {
|
||
var _a;
|
||
return (config2 == null ? void 0 : config2.size) || ((_a = avatarGroup == null ? void 0 : avatarGroup.iconConfig) == null ? void 0 : _a.size) || "";
|
||
});
|
||
const iconBold = computed(() => {
|
||
var _a;
|
||
return (config2 == null ? void 0 : config2.bold) || ((_a = avatarGroup == null ? void 0 : avatarGroup.iconConfig) == null ? void 0 : _a.bold) || false;
|
||
});
|
||
return {
|
||
iconColor,
|
||
iconSize,
|
||
iconBold
|
||
};
|
||
};
|
||
const useAvatarProps = (props2) => {
|
||
const avatarGroup = inject(avatarGroupContextKey, void 0);
|
||
const type2 = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(props2 == null ? void 0 : props2.type, avatarGroup == null ? void 0 : avatarGroup.type, "");
|
||
});
|
||
const size2 = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(props2 == null ? void 0 : props2.size, avatarGroup == null ? void 0 : avatarGroup.size, "");
|
||
});
|
||
const shape = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.shape,
|
||
avatarGroup == null ? void 0 : avatarGroup.shape,
|
||
"circle"
|
||
);
|
||
});
|
||
const imgMode = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.imgMode,
|
||
avatarGroup == null ? void 0 : avatarGroup.imgMode,
|
||
"aspectFill"
|
||
);
|
||
});
|
||
const bgColor = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.bgColor,
|
||
avatarGroup == null ? void 0 : avatarGroup.bgColor,
|
||
"tn-gray-light"
|
||
);
|
||
});
|
||
const border = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.border,
|
||
avatarGroup == null ? void 0 : avatarGroup.border,
|
||
false
|
||
);
|
||
});
|
||
const borderColor = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.borderColor,
|
||
avatarGroup == null ? void 0 : avatarGroup.borderColor,
|
||
""
|
||
);
|
||
});
|
||
const borderBold = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.borderBold,
|
||
avatarGroup == null ? void 0 : avatarGroup.borderBold,
|
||
false
|
||
);
|
||
});
|
||
const shadow = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.shadow,
|
||
avatarGroup == null ? void 0 : avatarGroup.shadow,
|
||
false
|
||
);
|
||
});
|
||
const shadowColor = computed(() => {
|
||
return isEmptyDoubleVariableInDefault(
|
||
props2 == null ? void 0 : props2.shadowColor,
|
||
avatarGroup == null ? void 0 : avatarGroup.shadowColor,
|
||
""
|
||
);
|
||
});
|
||
const avatarGap = computed(() => {
|
||
let gap = Number(isEmptyVariableInDefault(avatarGroup == null ? void 0 : avatarGroup.gap, 0));
|
||
if (gap < 0)
|
||
gap = 0;
|
||
if (gap > 1)
|
||
gap = 1;
|
||
return gap;
|
||
});
|
||
return {
|
||
type: type2,
|
||
size: size2,
|
||
shape,
|
||
imgMode,
|
||
bgColor,
|
||
border,
|
||
borderColor,
|
||
borderBold,
|
||
shadow,
|
||
shadowColor,
|
||
avatarGap
|
||
};
|
||
};
|
||
const useAvatarCustomStyle = (props2, groupIndex, avatarWidth) => {
|
||
const ns = useNamespace("avatar");
|
||
const {
|
||
type: type2,
|
||
size: size2,
|
||
shape,
|
||
bgColor,
|
||
border,
|
||
borderColor,
|
||
shadow,
|
||
shadowColor,
|
||
avatarGap
|
||
} = useAvatarProps(props2);
|
||
const [bgColorClass, bgColorStyle] = useComponentColor(bgColor, "bg");
|
||
const [borderColorClass, borderColorStyle] = useComponentColor(
|
||
borderColor,
|
||
"border"
|
||
);
|
||
const [shadowColorClass] = useComponentColor(shadowColor, "shadow");
|
||
const { sizeType } = useComponentSize(size2.value);
|
||
const avatarClass = computed(() => {
|
||
const cls = [];
|
||
cls.push(ns.b());
|
||
if (type2.value)
|
||
cls.push(`tn-type-${type2.value}_bg`);
|
||
if (!type2.value && bgColorClass.value)
|
||
cls.push(bgColorClass.value);
|
||
if (sizeType.value === "inner")
|
||
cls.push(ns.m(size2.value));
|
||
if (shape.value)
|
||
cls.push(ns.m(shape.value));
|
||
if (border.value) {
|
||
cls.push("tn-border");
|
||
if (borderColorClass.value)
|
||
cls.push(borderColorClass.value);
|
||
}
|
||
if (shadow.value) {
|
||
cls.push("tn-shadow");
|
||
if (shadowColorClass.value)
|
||
cls.push(shadowColorClass.value);
|
||
}
|
||
return cls.join(" ");
|
||
});
|
||
const avatarStyle = computed(() => {
|
||
const style = {};
|
||
if (sizeType.value === "custom") {
|
||
style.width = formatDomSizeValue(size2.value);
|
||
style.height = style.width;
|
||
}
|
||
if (bgColorStyle.value)
|
||
style.backgroundColor = bgColorStyle.value;
|
||
if (border.value && borderColorStyle.value)
|
||
style.borderColor = borderColorStyle.value;
|
||
if (groupIndex.value != -1) {
|
||
style.zIndex = groupIndex.value + 1;
|
||
if (groupIndex.value > 0) {
|
||
style.marginLeft = `calc(-${avatarWidth.value * avatarGap.value}px)`;
|
||
} else {
|
||
style.marginLeft = "0px";
|
||
}
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
avatarClass,
|
||
avatarStyle
|
||
};
|
||
};
|
||
const useAvatar = (props2, emits) => {
|
||
const instance = getCurrentInstance();
|
||
if (!instance) {
|
||
debugWarn("TnAvatarGroup", "请在 setup 中使用 useAvatarGroup");
|
||
}
|
||
const { uid: uid2 } = instance;
|
||
const avatarGroup = inject(avatarGroupContextKey, void 0);
|
||
avatarGroup == null ? void 0 : avatarGroup.addItem({ uid: uid2 });
|
||
const componentId = `ta-${generateId()}`;
|
||
const { getSelectorNodeInfo } = useSelectorQuery(instance);
|
||
const groupAvatarCount = computed(() => {
|
||
return isEmptyVariableInDefault(avatarGroup == null ? void 0 : avatarGroup.avatarItems.length, 0);
|
||
});
|
||
const avatarGroupIndex = ref(-1);
|
||
nextTick$1(() => {
|
||
const avatarIndex = avatarGroup == null ? void 0 : avatarGroup.avatarItems.findIndex(
|
||
(item) => item.uid === uid2
|
||
);
|
||
avatarGroupIndex.value = isEmptyVariableInDefault(avatarIndex, -1);
|
||
if (!avatarWidth.value && avatarGroupIndex.value !== -1) {
|
||
getAvatarWidthNodeInfo();
|
||
}
|
||
});
|
||
const avatarWidth = ref(0);
|
||
let initCount = 0;
|
||
const getAvatarWidthNodeInfo = async () => {
|
||
try {
|
||
const rectInfo = await getSelectorNodeInfo(`#${componentId}`);
|
||
if (!rectInfo.width) {
|
||
throw new Error("获取头像宽度信息失败");
|
||
}
|
||
avatarWidth.value = rectInfo.width || 0;
|
||
} catch (err) {
|
||
if (initCount > 10) {
|
||
initCount = 0;
|
||
debugWarn("TnAvatar", `获取头像宽度信息失败:${err}`);
|
||
return;
|
||
}
|
||
initCount++;
|
||
setTimeout(() => {
|
||
getAvatarWidthNodeInfo();
|
||
}, 150);
|
||
}
|
||
};
|
||
const avatarClick = () => {
|
||
avatarGroup == null ? void 0 : avatarGroup.handleItemClick(uid2);
|
||
emits("click");
|
||
};
|
||
onUnmounted(() => {
|
||
avatarGroup == null ? void 0 : avatarGroup.removeItem(uid2);
|
||
});
|
||
return {
|
||
componentId,
|
||
groupAvatarCount,
|
||
avatarGroupIndex,
|
||
avatarWidth,
|
||
avatarClick
|
||
};
|
||
};
|
||
const useAvatarGroup = (props2, emits) => {
|
||
const {
|
||
children: avatarItems,
|
||
addChild: addItem,
|
||
removeChild: removeItem
|
||
} = useOrderedChildren();
|
||
const handleItemClick = (uid2) => {
|
||
const index2 = avatarItems.value.findIndex((item) => item.uid === uid2);
|
||
emits("click", index2);
|
||
};
|
||
provide(
|
||
avatarGroupContextKey,
|
||
reactive({
|
||
...toRefs(props2),
|
||
avatarItems,
|
||
addItem,
|
||
removeItem,
|
||
handleItemClick
|
||
})
|
||
);
|
||
};
|
||
const useAvatarBadgeProps = (props2) => {
|
||
const avatarGroup = inject(avatarGroupContextKey, void 0);
|
||
const max = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.max,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.max
|
||
);
|
||
});
|
||
const type2 = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.type,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.type,
|
||
"primary"
|
||
);
|
||
});
|
||
const bgColor = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.bgColor,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.bgColor
|
||
);
|
||
});
|
||
const textColor = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.textColor,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.textColor
|
||
);
|
||
});
|
||
const fontSize = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.fontSize,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.fontSize
|
||
);
|
||
});
|
||
const size2 = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.size,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.size
|
||
);
|
||
});
|
||
const bold = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.bold,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.bold,
|
||
false
|
||
);
|
||
});
|
||
const dot = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.dot,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.dot,
|
||
false
|
||
);
|
||
});
|
||
const absolutePosition = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.absolutePosition,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.absolutePosition,
|
||
{}
|
||
);
|
||
});
|
||
const absoluteCenter = computed(() => {
|
||
var _a, _b;
|
||
return isEmptyDoubleVariableInDefault(
|
||
(_a = props2 == null ? void 0 : props2.badgeConfig) == null ? void 0 : _a.absoluteCenter,
|
||
(_b = avatarGroup == null ? void 0 : avatarGroup.badgeConfig) == null ? void 0 : _b.absoluteCenter,
|
||
true
|
||
);
|
||
});
|
||
const badgeConfig = computed(() => {
|
||
return {
|
||
value: props2.badge,
|
||
max: max.value,
|
||
type: type2.value,
|
||
bgColor: bgColor.value,
|
||
textColor: textColor.value,
|
||
fontSize: fontSize.value,
|
||
size: size2.value,
|
||
bold: bold.value,
|
||
customClass: "",
|
||
customStyle: {},
|
||
dot: dot.value,
|
||
absolute: true,
|
||
absolutePosition: absolutePosition.value,
|
||
absoluteCenter: absoluteCenter.value,
|
||
index: ""
|
||
};
|
||
});
|
||
return {
|
||
badgeConfig
|
||
};
|
||
};
|
||
const avatarGroupProps = buildProps({
|
||
/**
|
||
* @description 头像图标配置
|
||
*/
|
||
iconConfig: avatarProps.iconConfig,
|
||
/**
|
||
* @description 头像颜色类型
|
||
*/
|
||
type: avatarProps.type,
|
||
/**
|
||
* @description 头像大小
|
||
*/
|
||
size: avatarProps.size,
|
||
/**
|
||
* @description 头像形状
|
||
*/
|
||
shape: avatarProps.shape,
|
||
/**
|
||
* @description 头像图片模式
|
||
*/
|
||
imgMode: avatarProps.imgMode,
|
||
/**
|
||
* @description 背景颜色
|
||
*/
|
||
bgColor: avatarProps.bgColor,
|
||
/**
|
||
* @description 显示边框
|
||
*/
|
||
border: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 边框颜色
|
||
*/
|
||
borderColor: {
|
||
type: String,
|
||
default: "tn-white"
|
||
},
|
||
/**
|
||
* @description 是否加粗边框
|
||
*/
|
||
borderBold: avatarProps.borderBold,
|
||
/**
|
||
* @description 显示阴影
|
||
*/
|
||
shadow: avatarProps.shadow,
|
||
/**
|
||
* @description 阴影颜色
|
||
*/
|
||
shadowColor: avatarProps.shadowColor,
|
||
/**
|
||
* @description 头像角标配置
|
||
*/
|
||
badgeConfig: avatarProps.badgeConfig,
|
||
/**
|
||
* @description 头像之间遮挡比例
|
||
*/
|
||
gap: {
|
||
type: [String, Number],
|
||
default: 0.4
|
||
}
|
||
});
|
||
const avatarGroupEmits = {
|
||
/**
|
||
* @description 点击头像
|
||
*/
|
||
click: (index2) => typeof index2 === "number"
|
||
};
|
||
const props$9 = defineMixin({
|
||
props: {
|
||
// 搜索框形状,round-圆形,square-方形
|
||
shape: {
|
||
type: String,
|
||
default: () => defProps.search.shape
|
||
},
|
||
// 搜索框背景色,默认值#f2f2f2
|
||
bgColor: {
|
||
type: String,
|
||
default: () => defProps.search.bgColor
|
||
},
|
||
// 占位提示文字
|
||
placeholder: {
|
||
type: String,
|
||
default: () => defProps.search.placeholder
|
||
},
|
||
// 是否启用清除控件
|
||
clearabled: {
|
||
type: Boolean,
|
||
default: () => defProps.search.clearabled
|
||
},
|
||
// 是否自动聚焦
|
||
focus: {
|
||
type: Boolean,
|
||
default: () => defProps.search.focus
|
||
},
|
||
// 是否在搜索框右侧显示取消按钮
|
||
showAction: {
|
||
type: Boolean,
|
||
default: () => defProps.search.showAction
|
||
},
|
||
// 右边控件的样式
|
||
actionStyle: {
|
||
type: Object,
|
||
default: () => defProps.search.actionStyle
|
||
},
|
||
// 取消按钮文字
|
||
actionText: {
|
||
type: String,
|
||
default: () => defProps.search.actionText
|
||
},
|
||
// 输入框内容对齐方式,可选值为 left|center|right
|
||
inputAlign: {
|
||
type: String,
|
||
default: () => defProps.search.inputAlign
|
||
},
|
||
// input输入框的样式,可以定义文字颜色,大小等,对象形式
|
||
inputStyle: {
|
||
type: Object,
|
||
default: () => defProps.search.inputStyle
|
||
},
|
||
// 是否启用输入框
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => defProps.search.disabled
|
||
},
|
||
// 边框颜色
|
||
borderColor: {
|
||
type: String,
|
||
default: () => defProps.search.borderColor
|
||
},
|
||
// 搜索图标的颜色,默认同输入框字体颜色
|
||
searchIconColor: {
|
||
type: String,
|
||
default: () => defProps.search.searchIconColor
|
||
},
|
||
// 输入框字体颜色
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.search.color
|
||
},
|
||
// placeholder的颜色
|
||
placeholderColor: {
|
||
type: String,
|
||
default: () => defProps.search.placeholderColor
|
||
},
|
||
// 左边输入框的图标,可以为uView图标名称或图片路径
|
||
searchIcon: {
|
||
type: String,
|
||
default: () => defProps.search.searchIcon
|
||
},
|
||
searchIconSize: {
|
||
type: [Number, String],
|
||
default: () => defProps.search.searchIconSize
|
||
},
|
||
// 组件与其他上下左右元素之间的距离,带单位的字符串形式,如"30px"、"30px 20px"等写法
|
||
margin: {
|
||
type: String,
|
||
default: () => defProps.search.margin
|
||
},
|
||
// 开启showAction时,是否在input获取焦点时才显示
|
||
animation: {
|
||
type: Boolean,
|
||
default: () => defProps.search.animation
|
||
},
|
||
// 输入框的初始化内容
|
||
modelValue: {
|
||
type: String,
|
||
default: () => defProps.search.value
|
||
},
|
||
value: {
|
||
type: String,
|
||
default: () => defProps.search.value
|
||
},
|
||
// 输入框最大能输入的长度,-1为不限制长度(来自uniapp文档)
|
||
maxlength: {
|
||
type: [String, Number],
|
||
default: () => defProps.search.maxlength
|
||
},
|
||
// 搜索框高度,单位px
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => defProps.search.height
|
||
},
|
||
// 搜索框左侧文本
|
||
label: {
|
||
type: [String, Number, null],
|
||
default: () => defProps.search.label
|
||
},
|
||
// 键盘弹起时,是否自动上推页面
|
||
adjustPosition: {
|
||
type: Boolean,
|
||
default: () => true
|
||
},
|
||
// 键盘收起时,是否自动失去焦点
|
||
autoBlur: {
|
||
type: Boolean,
|
||
default: () => false
|
||
}
|
||
}
|
||
});
|
||
const props$8 = defineMixin({
|
||
props: {
|
||
// 滑块的移动过渡时间,单位ms
|
||
duration: {
|
||
type: Number,
|
||
default: () => defProps.tabs.duration
|
||
},
|
||
// tabs标签数组
|
||
list: {
|
||
type: Array,
|
||
default: () => defProps.tabs.list
|
||
},
|
||
// 滑块颜色
|
||
lineColor: {
|
||
type: String,
|
||
default: () => defProps.tabs.lineColor
|
||
},
|
||
// 菜单选择中时的样式
|
||
activeStyle: {
|
||
type: [String, Object],
|
||
default: () => defProps.tabs.activeStyle
|
||
},
|
||
// 菜单非选中时的样式
|
||
inactiveStyle: {
|
||
type: [String, Object],
|
||
default: () => defProps.tabs.inactiveStyle
|
||
},
|
||
// 滑块长度
|
||
lineWidth: {
|
||
type: [String, Number],
|
||
default: () => defProps.tabs.lineWidth
|
||
},
|
||
// 滑块高度
|
||
lineHeight: {
|
||
type: [String, Number],
|
||
default: () => defProps.tabs.lineHeight
|
||
},
|
||
// 滑块背景显示大小,当滑块背景设置为图片时使用
|
||
lineBgSize: {
|
||
type: String,
|
||
default: () => defProps.tabs.lineBgSize
|
||
},
|
||
// 菜单item的样式
|
||
itemStyle: {
|
||
type: [String, Object],
|
||
default: () => defProps.tabs.itemStyle
|
||
},
|
||
// 菜单是否可滚动
|
||
scrollable: {
|
||
type: Boolean,
|
||
default: () => defProps.tabs.scrollable
|
||
},
|
||
// 当前选中标签的索引
|
||
current: {
|
||
type: [Number, String],
|
||
default: () => defProps.tabs.current
|
||
},
|
||
// 默认读取的键名
|
||
keyName: {
|
||
type: String,
|
||
default: () => defProps.tabs.keyName
|
||
}
|
||
}
|
||
});
|
||
const overlayProps = buildProps({
|
||
/**
|
||
* @description 是否显示遮罩层
|
||
*/
|
||
show: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
/**
|
||
* @description 动画时间,单位毫秒
|
||
*/
|
||
duration: {
|
||
type: Number,
|
||
default: 300
|
||
},
|
||
/**
|
||
* @description 遮罩层透明度,有效值0-1
|
||
*/
|
||
opacity: {
|
||
type: Number,
|
||
default: 0.5
|
||
},
|
||
/**
|
||
* @description zIndex
|
||
*/
|
||
zIndex: {
|
||
type: Number,
|
||
default: ZIndex.mask
|
||
}
|
||
});
|
||
const overlayEmits = {
|
||
"update:show": (value2) => isBoolean(value2),
|
||
click: () => true
|
||
};
|
||
const useOverlay = (props2, emits) => {
|
||
const ns = useNamespace("overlay");
|
||
const overlayClass = computed(() => {
|
||
const cls = [ns.b()];
|
||
if (props2.show)
|
||
cls.push(ns.m("show"));
|
||
return cls.join(" ");
|
||
});
|
||
const overlayStyle = computed(() => {
|
||
const style = {};
|
||
style.transitionDuration = `${isEmptyVariableInDefault(
|
||
props2.duration,
|
||
300
|
||
)}ms`;
|
||
style.backgroundColor = `rgba(0, 0, 0, ${isEmptyVariableInDefault(
|
||
props2.opacity,
|
||
0.5
|
||
)})`;
|
||
if (props2.zIndex)
|
||
style.zIndex = props2.zIndex;
|
||
return style;
|
||
});
|
||
const overlayClick = () => {
|
||
emits("update:show", false);
|
||
emits("click");
|
||
};
|
||
return {
|
||
ns,
|
||
overlayClass,
|
||
overlayStyle,
|
||
overlayClick
|
||
};
|
||
};
|
||
const _sfc_main = /* @__PURE__ */ defineComponent({
|
||
__name: "overlay",
|
||
props: overlayProps,
|
||
emits: overlayEmits,
|
||
setup(__props, { emit: __emit }) {
|
||
const props2 = __props;
|
||
const emits = __emit;
|
||
const { overlayClass, overlayStyle, overlayClick } = useOverlay(props2, emits);
|
||
return (_ctx, _cache) => {
|
||
return {
|
||
a: n(unref(overlayClass)),
|
||
b: s(unref(overlayStyle)),
|
||
c: o(
|
||
//@ts-ignore
|
||
(...args) => unref(overlayClick) && unref(overlayClick)(...args)
|
||
),
|
||
d: o(() => {
|
||
})
|
||
};
|
||
};
|
||
}
|
||
});
|
||
const Component$1 = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data-v-40a804f4"]]);
|
||
withNoopInstall(Component$1);
|
||
const popupOpenDirection = [
|
||
"top",
|
||
"bottom",
|
||
"left",
|
||
"right",
|
||
"center"
|
||
];
|
||
const popupCloseBtnPosition = [
|
||
"left-top",
|
||
"right-top",
|
||
"left-bottom",
|
||
"right-bottom"
|
||
];
|
||
const popupProps = buildProps({
|
||
/**
|
||
* @description 控制弹框是否显示
|
||
*/
|
||
modelValue: Boolean,
|
||
/**
|
||
* @description 弹框打开的方向
|
||
*/
|
||
openDirection: {
|
||
type: String,
|
||
values: popupOpenDirection,
|
||
default: "center"
|
||
},
|
||
/**
|
||
* @description 弹窗的宽度,在 openDirection 为 left 或 right 或 center 时生效
|
||
*/
|
||
width: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 弹窗的高度,在 openDirection 为 top 或 bottom 或 center 时生效
|
||
*/
|
||
height: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 弹框的内容的背景颜色
|
||
*/
|
||
bgColor: {
|
||
type: String,
|
||
default: "#fff"
|
||
},
|
||
/**
|
||
* @description 弹框的内容的圆角
|
||
*/
|
||
radius: {
|
||
type: [String, Number],
|
||
default: 15
|
||
},
|
||
/**
|
||
* @description 是否显示overlay遮罩层
|
||
*/
|
||
overlay: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description overlay遮罩层的透明度
|
||
*/
|
||
overlayOpacity: overlayProps["opacity"],
|
||
/**
|
||
* @description 点击overlay关闭弹框
|
||
*/
|
||
overlayCloseable: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 是否显示关闭按钮
|
||
*/
|
||
closeBtn: Boolean,
|
||
/**
|
||
* @description 关闭按钮的位置
|
||
*/
|
||
closeBtnPosition: {
|
||
type: String,
|
||
values: popupCloseBtnPosition,
|
||
default: "right-top"
|
||
},
|
||
/**
|
||
* @description 底部是否开启安全区域
|
||
*/
|
||
safeAreaInsetBottom: useComponentSafeAreaInsetBottomProp,
|
||
/**
|
||
* @description zIndex
|
||
*/
|
||
zIndex: {
|
||
type: Number,
|
||
default: ZIndex.popup
|
||
},
|
||
/**
|
||
* @description 距离顶部的距离,在 openDirection 为 top 或 left 或 right 时生效,默认单位为`px`
|
||
*/
|
||
top: {
|
||
type: [String, Number]
|
||
}
|
||
});
|
||
const popupEmits = {
|
||
[UPDATE_MODEL_EVENT]: (value2) => isBoolean(value2),
|
||
open: () => true,
|
||
close: () => true,
|
||
["overlay-click"]: () => true
|
||
};
|
||
const usePopupCustomStyle = (props2) => {
|
||
const ns = useNamespace("popup");
|
||
const zIndex2 = computed(() => Number(props2.zIndex));
|
||
const overlayZIndex = computed(() => zIndex2.value - 1);
|
||
const [contentBgColorClass, contentBgColorStyle] = useComponentColor(
|
||
toRef(props2, "bgColor"),
|
||
"bg"
|
||
);
|
||
const popupContentClass = computed(() => {
|
||
const cls = [ns.e("content")];
|
||
if (props2.openDirection)
|
||
cls.push(ns.em("content", props2.openDirection));
|
||
if (props2.openDirection === "bottom" && props2.safeAreaInsetBottom) {
|
||
cls.push("tn-u-safe-area");
|
||
}
|
||
if (contentBgColorClass.value)
|
||
cls.push(contentBgColorClass.value);
|
||
return cls.join(" ");
|
||
});
|
||
const popupContentStyle = computed(() => {
|
||
const style = {};
|
||
if (contentBgColorStyle.value)
|
||
style.backgroundColor = contentBgColorStyle.value;
|
||
if (props2.radius) {
|
||
style.overflow = "hidden";
|
||
if (props2.openDirection === "center") {
|
||
style.borderRadius = formatDomSizeValue(props2.radius);
|
||
}
|
||
if (props2.openDirection === "top") {
|
||
style.borderBottomLeftRadius = formatDomSizeValue(props2.radius);
|
||
style.borderBottomRightRadius = formatDomSizeValue(props2.radius);
|
||
}
|
||
if (props2.openDirection === "left") {
|
||
style.borderTopRightRadius = formatDomSizeValue(props2.radius);
|
||
style.borderBottomRightRadius = formatDomSizeValue(props2.radius);
|
||
}
|
||
if (props2.openDirection === "right") {
|
||
style.borderTopLeftRadius = formatDomSizeValue(props2.radius);
|
||
style.borderBottomLeftRadius = formatDomSizeValue(props2.radius);
|
||
}
|
||
if (props2.openDirection === "bottom") {
|
||
style.borderTopLeftRadius = formatDomSizeValue(props2.radius);
|
||
style.borderTopRightRadius = formatDomSizeValue(props2.radius);
|
||
}
|
||
}
|
||
if (props2.top && (props2.openDirection === "top" || props2.openDirection === "left" || props2.openDirection === "right")) {
|
||
style.top = formatDomSizeValue(props2.top, "px");
|
||
}
|
||
if (props2.width && (props2.openDirection === "left" || props2.openDirection === "right" || props2.openDirection === "center")) {
|
||
style.width = formatDomSizeValue(props2.width);
|
||
}
|
||
if (props2.height && (props2.openDirection === "top" || props2.openDirection === "bottom" || props2.openDirection === "center")) {
|
||
style.height = formatDomSizeValue(props2.height);
|
||
}
|
||
if (props2.openDirection === "left" || props2.openDirection === "right") {
|
||
if (props2.top)
|
||
style.height = `calc(100% - ${formatDomSizeValue(props2.top, "px")})`;
|
||
}
|
||
style.zIndex = zIndex2.value;
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
zIndex: zIndex2,
|
||
overlayZIndex,
|
||
popupContentClass,
|
||
popupContentStyle
|
||
};
|
||
};
|
||
const usePopup = (props2) => {
|
||
const { emit: emit2 } = getCurrentInstance();
|
||
const iosDevice = computed(() => {
|
||
const systemInfo = index$2.getSystemInfoSync();
|
||
return systemInfo.osName === "ios" || systemInfo.osName === "macos";
|
||
});
|
||
const showOverlay = ref(false);
|
||
const showPopup = ref(false);
|
||
const visiblePopup = ref(false);
|
||
let initPopupModelValue = false;
|
||
watch(
|
||
() => props2.modelValue,
|
||
(value2) => {
|
||
if (value2) {
|
||
visiblePopup.value = true;
|
||
if (iosDevice.value) {
|
||
setTimeout(() => {
|
||
showPopup.value = true;
|
||
if (props2.overlay)
|
||
showOverlay.value = true;
|
||
initPopupModelValue && emit2("open");
|
||
}, 0);
|
||
} else {
|
||
showPopup.value = true;
|
||
if (props2.overlay)
|
||
showOverlay.value = true;
|
||
initPopupModelValue && emit2("open");
|
||
}
|
||
} else {
|
||
showPopup.value = false;
|
||
showOverlay.value = false;
|
||
setTimeout(() => {
|
||
visiblePopup.value = false;
|
||
}, 250);
|
||
initPopupModelValue && emit2("close");
|
||
}
|
||
initPopupModelValue = true;
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
const updateModelValue = (value2) => {
|
||
emit2(UPDATE_MODEL_EVENT, value2);
|
||
};
|
||
const onClickCloseBtn = () => {
|
||
updateModelValue(false);
|
||
emit2("close");
|
||
};
|
||
const onClickOverlay = () => {
|
||
if (props2.overlayCloseable) {
|
||
updateModelValue(false);
|
||
emit2("close");
|
||
emit2("overlay-click");
|
||
}
|
||
};
|
||
return {
|
||
iosDevice,
|
||
showOverlay,
|
||
showPopup,
|
||
visiblePopup,
|
||
updateModelValue,
|
||
onClickCloseBtn,
|
||
onClickOverlay
|
||
};
|
||
};
|
||
const propgressBaseProps = buildProps({
|
||
/**
|
||
* @description 当前进度百分比
|
||
*/
|
||
percent: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
/**
|
||
* @description 激活时的颜色,以tn开头则使用图鸟内置的颜色,在为圆环进度条是无法使用内置的颜色
|
||
*/
|
||
activeColor: String,
|
||
/**
|
||
* @description 未激活时的颜色,以tn开头则使用图鸟内置的颜色,在为圆环进度条是无法使用内置的颜色
|
||
*/
|
||
inactiveColor: String,
|
||
/**
|
||
* @description 显示当前进度
|
||
*/
|
||
showPercent: Boolean,
|
||
/**
|
||
* @description 动画执行时间,单位ms
|
||
*/
|
||
duration: {
|
||
type: Number,
|
||
default: 1500
|
||
}
|
||
});
|
||
const circleProgressProps = buildProps({
|
||
...propgressBaseProps,
|
||
/**
|
||
* @description 圆环的半径,单位 px,只支持传递固定的值
|
||
*/
|
||
radius: {
|
||
type: Number,
|
||
default: 50
|
||
},
|
||
/**
|
||
* @description 圆环的宽度,单位 px,只支持传递固定的值
|
||
*/
|
||
ringWidth: {
|
||
type: Number,
|
||
default: 7
|
||
}
|
||
});
|
||
const useCircleProgress = (props2) => {
|
||
const instance = getCurrentInstance();
|
||
const ns = useNamespace("circle-progress");
|
||
const radius = computed(() => {
|
||
return isEmptyVariableInDefault(props2 == null ? void 0 : props2.radius, 50);
|
||
});
|
||
const ringWidth = computed(() => {
|
||
return isEmptyVariableInDefault(props2 == null ? void 0 : props2.ringWidth, 14);
|
||
});
|
||
const circleColor = computed(() => {
|
||
return isEmptyVariableInDefault(props2 == null ? void 0 : props2.inactiveColor, "#e6e6e6");
|
||
});
|
||
const activeCircleColor = computed(() => {
|
||
return isEmptyVariableInDefault(props2 == null ? void 0 : props2.activeColor, "#01beff");
|
||
});
|
||
const duration = computed(() => {
|
||
return isEmptyVariableInDefault(props2 == null ? void 0 : props2.duration, 1500);
|
||
});
|
||
let currentPercent = 0;
|
||
let prevPercent = 0;
|
||
const canvasId = String(generateId());
|
||
let progressCanvas = null;
|
||
const startAngle = -90 * (Math.PI / 180);
|
||
const drawProgressCircle = (percent) => {
|
||
if (!progressCanvas) {
|
||
progressCanvas = index$2.createCanvasContext(canvasId, instance);
|
||
}
|
||
progressCanvas.clearRect(0, 0, radius.value * 2, radius.value * 2);
|
||
progressCanvas.beginPath();
|
||
progressCanvas.setLineWidth(ringWidth.value);
|
||
progressCanvas.setStrokeStyle(circleColor.value);
|
||
progressCanvas.arc(
|
||
radius.value,
|
||
radius.value,
|
||
radius.value - ringWidth.value / 2,
|
||
startAngle,
|
||
Math.PI * 1.5,
|
||
false
|
||
);
|
||
progressCanvas.stroke();
|
||
if (percent === 0) {
|
||
progressCanvas.draw();
|
||
return;
|
||
}
|
||
progressCanvas.beginPath();
|
||
progressCanvas.setLineCap("round");
|
||
progressCanvas.setLineWidth(ringWidth.value);
|
||
progressCanvas.setStrokeStyle(activeCircleColor.value);
|
||
const endAngle = Math.PI * 2 * percent / 100 - Math.PI / 2;
|
||
progressCanvas.arc(
|
||
radius.value,
|
||
radius.value,
|
||
radius.value - ringWidth.value / 2,
|
||
startAngle,
|
||
endAngle,
|
||
false
|
||
);
|
||
progressCanvas.stroke();
|
||
progressCanvas.draw();
|
||
};
|
||
function easeOutCubic(t2, b, c, d) {
|
||
return c * ((t2 = t2 / d - 1) * t2 * t2 + 1) + b;
|
||
}
|
||
let startTime = null;
|
||
const progressAnimation = () => {
|
||
if (!startTime)
|
||
startTime = Date.now();
|
||
const elapsed = Date.now() - startTime;
|
||
let percent = easeOutCubic(
|
||
elapsed,
|
||
prevPercent,
|
||
currentPercent - prevPercent,
|
||
duration.value
|
||
);
|
||
if (percent < 0)
|
||
percent = 0;
|
||
drawProgressCircle(percent);
|
||
if (elapsed < duration.value) {
|
||
setTimeout(progressAnimation, 16);
|
||
}
|
||
};
|
||
watch(
|
||
() => props2.percent,
|
||
(nVal, oVal) => {
|
||
currentPercent = nVal > 100 ? 100 : nVal;
|
||
prevPercent = !oVal || oVal < 0 ? 0 : oVal;
|
||
nextTick$1(() => {
|
||
startTime = null;
|
||
progressAnimation();
|
||
});
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
return {
|
||
ns,
|
||
canvasId,
|
||
radius,
|
||
activeCircleColor
|
||
};
|
||
};
|
||
const scrollListProps = buildProps({
|
||
/**
|
||
* @description 是否显示指示器
|
||
*/
|
||
indicator: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 指示器的宽度,单位 px
|
||
*/
|
||
indicatorWidth: {
|
||
type: Number,
|
||
default: 40
|
||
},
|
||
/**
|
||
* @description 指示器滑块的宽度,单位 px
|
||
*/
|
||
indicatorBlockWidth: {
|
||
type: Number,
|
||
default: 20
|
||
},
|
||
/**
|
||
* @description 指示器的背景颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
indicatorColor: String,
|
||
/**
|
||
* @description 指示器滑块的背景颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
indicatorBlockColor: String
|
||
});
|
||
const scrollListEmits = {
|
||
/**
|
||
* @description 滚动到左边时触发
|
||
*/
|
||
"scroll-left": () => true,
|
||
/**
|
||
* @description 滚动到右边时触发
|
||
*/
|
||
"scroll-right": () => true
|
||
};
|
||
const useScrollListCustomStyle = (props2) => {
|
||
const ns = useNamespace("scroll-list");
|
||
const [indicatorColorClass, indicatorColorStyle] = useComponentColor(
|
||
toRef(props2, "indicatorColor"),
|
||
"bg"
|
||
);
|
||
const [indicatorBlockColorClass, indicatorBlockColorStyle] = useComponentColor(toRef(props2, "indicatorBlockColor"), "bg");
|
||
const indicatorClass = computed(() => {
|
||
const cls = [ns.e("indicator")];
|
||
if (indicatorColorClass.value)
|
||
cls.push(indicatorColorClass.value);
|
||
return cls.join(" ");
|
||
});
|
||
const indicatorStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.indicatorWidth)
|
||
style.width = formatDomSizeValue(props2.indicatorWidth, "px");
|
||
if (!indicatorColorClass.value) {
|
||
style.backgroundColor = indicatorColorStyle.value || "var(--tn-color-gray-disabled)";
|
||
}
|
||
return style;
|
||
});
|
||
const indicatorBlockClass = computed(() => {
|
||
const cls = [ns.e("indicator-block")];
|
||
if (indicatorBlockColorClass.value)
|
||
cls.push(indicatorBlockColorClass.value);
|
||
return cls.join(" ");
|
||
});
|
||
const indicatorBlockStyle = computed(
|
||
() => {
|
||
return (distance) => {
|
||
const style = {};
|
||
if (props2.indicatorBlockWidth)
|
||
style.width = formatDomSizeValue(props2.indicatorBlockWidth, "px");
|
||
style.left = `${distance}px`;
|
||
if (!indicatorBlockColorClass.value) {
|
||
style.backgroundColor = indicatorBlockColorStyle.value || "var(--tn-color-primary)";
|
||
}
|
||
return style;
|
||
};
|
||
}
|
||
);
|
||
return {
|
||
ns,
|
||
indicatorClass,
|
||
indicatorStyle,
|
||
indicatorBlockClass,
|
||
indicatorBlockStyle
|
||
};
|
||
};
|
||
const useScrollList = (props2, emits) => {
|
||
const instance = getCurrentInstance();
|
||
if (!instance) {
|
||
debugWarn("TnScrollList", "请在setup函数中使用useScrollList");
|
||
}
|
||
const componentId = `tsl-${generateId()}`;
|
||
const componentContentId = `${componentId}-content`;
|
||
const { getSelectorNodeInfo } = useSelectorQuery(instance);
|
||
let componentWidth = 0;
|
||
let comoponentContentWidth = 0;
|
||
const indicatorBlockScrollDistance = ref(0);
|
||
let initCount = 0;
|
||
const getContentRectInfo = async () => {
|
||
try {
|
||
const componentRectInfo = await getSelectorNodeInfo(`#${componentId}`);
|
||
const contentRectInfo = await getSelectorNodeInfo(
|
||
`#${componentContentId}`
|
||
);
|
||
initCount = 0;
|
||
componentWidth = componentRectInfo.width || 0;
|
||
comoponentContentWidth = contentRectInfo.width || 0;
|
||
} catch (err) {
|
||
if (initCount > 10) {
|
||
initCount = 0;
|
||
debugWarn("TnScrollList", `获取内容容器的宽度失败: ${err}`);
|
||
return;
|
||
}
|
||
initCount++;
|
||
setTimeout(() => {
|
||
getContentRectInfo();
|
||
}, 150);
|
||
}
|
||
};
|
||
const scrollViewScrollEvent = (e2) => {
|
||
const scrollLeft = e2.detail.scrollLeft;
|
||
indicatorBlockScrollDistance.value = scrollLeft * (props2.indicatorWidth - props2.indicatorBlockWidth) / (comoponentContentWidth - componentWidth);
|
||
};
|
||
const scrollToLeftEvent = () => {
|
||
emits("scroll-left");
|
||
};
|
||
const scrollToRightEvent = () => {
|
||
emits("scroll-right");
|
||
};
|
||
onMounted(() => {
|
||
nextTick$1(() => {
|
||
getContentRectInfo();
|
||
});
|
||
});
|
||
return {
|
||
componentId,
|
||
componentContentId,
|
||
indicatorBlockScrollDistance,
|
||
scrollViewScrollEvent,
|
||
scrollToLeftEvent,
|
||
scrollToRightEvent
|
||
};
|
||
};
|
||
const props$7 = defineMixin({
|
||
props: {
|
||
// 是否显示组件
|
||
show: {
|
||
type: Boolean,
|
||
default: () => defProps.loadingIcon.show
|
||
},
|
||
// 颜色
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.loadingIcon.color
|
||
},
|
||
// 提示文字颜色
|
||
textColor: {
|
||
type: String,
|
||
default: () => defProps.loadingIcon.textColor
|
||
},
|
||
// 文字和图标是否垂直排列
|
||
vertical: {
|
||
type: Boolean,
|
||
default: () => defProps.loadingIcon.vertical
|
||
},
|
||
// 模式选择,circle-圆形,spinner-花朵形,semicircle-半圆形
|
||
mode: {
|
||
type: String,
|
||
default: () => defProps.loadingIcon.mode
|
||
},
|
||
// 图标大小,单位默认px
|
||
size: {
|
||
type: [String, Number],
|
||
default: () => defProps.loadingIcon.size
|
||
},
|
||
// 文字大小
|
||
textSize: {
|
||
type: [String, Number],
|
||
default: () => defProps.loadingIcon.textSize
|
||
},
|
||
// 文字内容
|
||
text: {
|
||
type: [String, Number],
|
||
default: () => defProps.loadingIcon.text
|
||
},
|
||
// 动画模式
|
||
timingFunction: {
|
||
type: String,
|
||
default: () => defProps.loadingIcon.timingFunction
|
||
},
|
||
// 动画执行周期时间
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => defProps.loadingIcon.duration
|
||
},
|
||
// mode=circle时的暗边颜色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: () => defProps.loadingIcon.inactiveColor
|
||
}
|
||
}
|
||
});
|
||
const props$6 = defineMixin({
|
||
props: {
|
||
// 最小可选值
|
||
min: {
|
||
type: [Number, String],
|
||
default: () => defProps.slider.min
|
||
},
|
||
// 最大可选值
|
||
max: {
|
||
type: [Number, String],
|
||
default: () => defProps.slider.max
|
||
},
|
||
// 步长,取值必须大于 0,并且可被(max - min)整除
|
||
step: {
|
||
type: [Number, String],
|
||
default: () => defProps.slider.step
|
||
},
|
||
// 当前取值
|
||
modelValue: {
|
||
type: [String, Number],
|
||
default: () => defProps.slider.value
|
||
},
|
||
// 是否区间模式
|
||
isRange: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
// 双滑块时值
|
||
rangeValue: {
|
||
type: [Array],
|
||
default: [0, 0]
|
||
},
|
||
// 滑块右侧已选择部分的背景色
|
||
activeColor: {
|
||
type: String,
|
||
default: () => defProps.slider.activeColor
|
||
},
|
||
// 滑块左侧未选择部分的背景色
|
||
inactiveColor: {
|
||
type: String,
|
||
default: () => defProps.slider.inactiveColor
|
||
},
|
||
// 滑块的大小,取值范围为 12 - 28
|
||
blockSize: {
|
||
type: [Number, String],
|
||
default: () => defProps.slider.blockSize
|
||
},
|
||
// 滑块的颜色
|
||
blockColor: {
|
||
type: String,
|
||
default: () => defProps.slider.blockColor
|
||
},
|
||
// 用户对滑块的自定义颜色
|
||
blockStyle: {
|
||
type: Object,
|
||
default: () => defProps.slider.blockStyle
|
||
},
|
||
// 禁用状态
|
||
disabled: {
|
||
type: Boolean,
|
||
default: () => defProps.slider.disabled
|
||
},
|
||
// 是否显示当前的选择值
|
||
showValue: {
|
||
type: Boolean,
|
||
default: () => defProps.slider.showValue
|
||
},
|
||
// 是否渲染uni-app框架内置组件
|
||
useNative: {
|
||
type: Boolean,
|
||
default: () => defProps.slider.useNative
|
||
},
|
||
// 滑块高度
|
||
height: {
|
||
type: String,
|
||
default: () => defProps.slider.height
|
||
}
|
||
}
|
||
});
|
||
const inputTypes = [
|
||
"text",
|
||
"number",
|
||
"idcard",
|
||
"digit",
|
||
"textarea",
|
||
"password",
|
||
"select"
|
||
];
|
||
const inputConfirmTypes = [
|
||
"",
|
||
"send",
|
||
"search",
|
||
"next",
|
||
"go",
|
||
"done",
|
||
"return"
|
||
];
|
||
const inputProps = buildProps({
|
||
/**
|
||
* @description 绑定的值
|
||
*/
|
||
modelValue: {
|
||
type: definePropType([
|
||
String,
|
||
Number,
|
||
Object
|
||
]),
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 输入框尺寸
|
||
*/
|
||
size: useFormSizeProps,
|
||
/**
|
||
* @description 输入框高度
|
||
*/
|
||
height: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 是否禁用
|
||
*/
|
||
disabled: Boolean,
|
||
/**
|
||
* @description 输入框类型
|
||
*/
|
||
type: {
|
||
type: String,
|
||
values: inputTypes,
|
||
default: "text"
|
||
},
|
||
/**
|
||
* @description 输入框占位文本
|
||
*/
|
||
placeholder: String,
|
||
/**
|
||
* @description 文字对齐方式
|
||
*/
|
||
textAlign: {
|
||
type: String,
|
||
values: ["left", "center", "right"],
|
||
default: "left"
|
||
},
|
||
/**
|
||
* @description 输入框占位文本的样式
|
||
*/
|
||
placeholderStyle: useComponentCustomStyleProp,
|
||
/**
|
||
* @description 是否显示边框
|
||
*/
|
||
border: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 边框颜色
|
||
*/
|
||
borderColor: {
|
||
type: String,
|
||
default: "tn-gray-disabled"
|
||
},
|
||
/**
|
||
* @description 下划线边框
|
||
*/
|
||
underline: Boolean,
|
||
/**
|
||
* @description 自定义样式
|
||
*/
|
||
customStyle: useComponentCustomStyleProp,
|
||
/**
|
||
* @description 自定义类名
|
||
*/
|
||
customClass: String,
|
||
/**
|
||
* @description 最大可输入长度,设置为 -1 的时候不限制最大长度
|
||
*/
|
||
maxlength: {
|
||
type: Number,
|
||
default: -1
|
||
},
|
||
/**
|
||
* @description 根据内容自动调整高度,仅在 textarea 模式下生效,如果设置了 height 则优先级最高
|
||
*/
|
||
autoHeight: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 设置键盘右下角按钮的文字,仅在使用系统键盘时生效
|
||
*/
|
||
confirmType: {
|
||
type: String,
|
||
values: inputConfirmTypes,
|
||
default: "done"
|
||
},
|
||
/**
|
||
* @description 获取焦点
|
||
*/
|
||
focus: Boolean,
|
||
/**
|
||
* @description 是否展示清除按钮
|
||
*/
|
||
clearable: Boolean,
|
||
/**
|
||
* @description 是否显示切换密码显示/隐藏按钮,仅在 type="password" 时生效
|
||
*/
|
||
showPassword: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 指定光标与键盘的距离,单位 px
|
||
*/
|
||
cursorSpacing: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
/**
|
||
* @description 光标起始位置,自动聚集时有效,需与selection-end搭配使用
|
||
*/
|
||
selectionStart: {
|
||
type: Number,
|
||
default: -1
|
||
},
|
||
/**
|
||
* @description 光标结束位置,自动聚集时有效,需与selection-start搭配使用
|
||
*/
|
||
selectionEnd: {
|
||
type: Number,
|
||
default: -1
|
||
},
|
||
/**
|
||
* @description 是否展示键盘上方带有”完成“按钮那一栏
|
||
*/
|
||
showConfirmBar: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 显示输入框右图标
|
||
*/
|
||
rightIcon: String,
|
||
/**
|
||
* @description 自动去除两端空格
|
||
*/
|
||
trim: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 显示字数统计,只有在 textarea 模式下且设置maxlength时生效
|
||
*/
|
||
showWordLimit: {
|
||
type: Boolean,
|
||
default: false
|
||
},
|
||
/**
|
||
* @description 字数统计文字颜色,以tn开头使用图鸟内置的颜色
|
||
*/
|
||
wordLimitColor: String,
|
||
/**
|
||
* @description 输入时是否触发表单验证
|
||
*/
|
||
validateEvent: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
});
|
||
const inputEmits = {
|
||
[UPDATE_MODEL_EVENT]: (value2) => isString(value2) || isNumber(value2),
|
||
/**
|
||
* @description 输入框输入内容时触发
|
||
*/
|
||
[INPUT_EVENT]: (value2) => isString(value2) || isNumber(value2),
|
||
/**
|
||
* @description 输入框内容变化时触发
|
||
*/
|
||
[CHANGE_EVENT]: (value2) => isString(value2) || isNumber(value2),
|
||
/**
|
||
* @description 输入框点击时触发
|
||
*/
|
||
click: () => true,
|
||
/**
|
||
* @description 输入框聚焦时触发
|
||
*/
|
||
focus: (e2) => isObject$1(e2),
|
||
/**
|
||
* @description 输入框失去焦点时触发
|
||
*/
|
||
blur: (e2) => isObject$1(e2),
|
||
/**
|
||
* @description 点击清除按钮时触发
|
||
*/
|
||
clear: () => true,
|
||
/**
|
||
* @description 点击键盘右下角按钮时触发
|
||
*/
|
||
confirm: (value2) => isString(value2) || isNumber(value2)
|
||
};
|
||
const useInputCustomStyle = (props2, validateState, disabled) => {
|
||
const ns = useNamespace("input");
|
||
const inputSize = useFormSize(props2.size);
|
||
const [borderColorClass, borderColorStyle] = useComponentColor(
|
||
toRef(props2, "borderColor"),
|
||
"border"
|
||
);
|
||
const [wordLimitColorClass, wordLimitColorStyle] = useComponentColor(
|
||
toRef(props2, "wordLimitColor"),
|
||
"text"
|
||
);
|
||
const placeholderStyle = computed(() => {
|
||
const style = {
|
||
color: "var(--tn-text-color-secondary)"
|
||
};
|
||
if (!isEmpty(props2.placeholderStyle))
|
||
Object.assign(style, props2.placeholderStyle);
|
||
return Object.entries(style).map(([key, value2]) => `${key}:${value2}`).join(";");
|
||
});
|
||
const inputClass = computed(() => {
|
||
const cls = [ns.b()];
|
||
if (disabled.value && props2.type !== "select")
|
||
cls.push(ns.m("disabled"));
|
||
if (inputSize.value)
|
||
cls.push(ns.m(inputSize.value));
|
||
if (props2.textAlign)
|
||
cls.push(ns.m(`text-${props2.textAlign}`));
|
||
if (validateState.value === "error")
|
||
cls.push(ns.m("error"));
|
||
if (props2.border || props2.underline || validateState.value === "error") {
|
||
cls.push(props2.underline ? "tn-border-bottom" : "tn-border");
|
||
if (validateState.value === "error")
|
||
cls.push("tn-red_border");
|
||
else if (borderColorClass.value)
|
||
cls.push(borderColorClass.value);
|
||
}
|
||
if (props2.underline) {
|
||
cls.push(ns.m("underline"));
|
||
}
|
||
if (props2.customClass)
|
||
cls.push(props2.customClass);
|
||
return cls.join(" ");
|
||
});
|
||
const inputStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.height)
|
||
style.height = formatDomSizeValue(props2.height);
|
||
if (props2.border && borderColorStyle.value && validateState.value !== "error")
|
||
style.borderColor = borderColorStyle.value;
|
||
if (!isEmpty(props2.customStyle))
|
||
Object.assign(style, props2.customStyle);
|
||
return style;
|
||
});
|
||
const wordLimitClass = computed(() => {
|
||
const cls = [ns.e("word-limit")];
|
||
if (wordLimitColorClass.value)
|
||
cls.push(wordLimitColorClass.value);
|
||
return cls.join(" ");
|
||
});
|
||
const wordLimitStyle = computed(() => {
|
||
const style = {};
|
||
if (!wordLimitColorClass.value) {
|
||
style.color = wordLimitColorStyle.value || "var(--tn-color-gray)";
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
inputClass,
|
||
inputStyle,
|
||
placeholderStyle,
|
||
wordLimitClass,
|
||
wordLimitStyle
|
||
};
|
||
};
|
||
const useInput = (props2, emits) => {
|
||
const { form, formItem } = useFormItem();
|
||
const inputText = ref(
|
||
String(isEmptyVariableInDefault(props2.modelValue, ""))
|
||
);
|
||
watch(
|
||
() => props2.modelValue,
|
||
(val) => {
|
||
var _a;
|
||
inputText.value = String(isEmptyVariableInDefault(val, ""));
|
||
if (props2.validateEvent) {
|
||
(_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "change").catch((err) => {
|
||
debugWarn(err);
|
||
});
|
||
}
|
||
}
|
||
);
|
||
const [passwordVisible, togglePasswordVisible] = useToggle(false);
|
||
const needStatusIcon = computed(
|
||
() => isEmptyVariableInDefault(form == null ? void 0 : form.statusIcon, false)
|
||
);
|
||
const validateState = computed(
|
||
() => isEmptyVariableInDefault(
|
||
formItem == null ? void 0 : formItem.validateState,
|
||
""
|
||
)
|
||
);
|
||
const validateIcon = computed(
|
||
() => validateState.value && FormValidateIconsMap[validateState.value]
|
||
);
|
||
const passwordIcon = computed(
|
||
() => passwordVisible.value ? "eye-hide" : "eye"
|
||
);
|
||
const showIcon = computed(() => {
|
||
let status = false;
|
||
if (validateState.value && needStatusIcon.value && validateIcon.value)
|
||
status = true;
|
||
if (props2.showPassword)
|
||
status = true;
|
||
if (props2.rightIcon)
|
||
status = true;
|
||
if (props2.clearable)
|
||
status = true;
|
||
return status;
|
||
});
|
||
const disabled = useFormDisabled(props2.disabled);
|
||
const showWordLimit = computed(
|
||
() => props2.type === "textarea" && !!(props2 == null ? void 0 : props2.maxlength) && !!(props2 == null ? void 0 : props2.showWordLimit)
|
||
);
|
||
const currentWordCount = computed(() => {
|
||
var _a;
|
||
if (props2.showWordLimit && props2.type === "textarea") {
|
||
return ((_a = inputText.value) == null ? void 0 : _a.length) || 0;
|
||
}
|
||
return 0;
|
||
});
|
||
const inputInputEvent = (event) => {
|
||
const { value: value2 } = event.detail;
|
||
_updateInputText(value2);
|
||
};
|
||
const inputFocusEvent = (event) => {
|
||
emits("focus", event);
|
||
};
|
||
const inputBlurEvent = (event) => {
|
||
var _a;
|
||
emits("blur", event);
|
||
if (props2.validateEvent) {
|
||
(_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "blur").catch((err) => {
|
||
debugWarn(err);
|
||
});
|
||
}
|
||
};
|
||
const confirmEvent = (event) => {
|
||
const { value: value2 } = event.detail;
|
||
emits("confirm", _formatInputText(value2));
|
||
};
|
||
const clearClickEvent = () => {
|
||
if (disabled.value)
|
||
return;
|
||
_updateInputText("");
|
||
emits("clear");
|
||
};
|
||
const _updateInputText = (value2) => {
|
||
value2 = props2.trim ? trim(value2) : value2;
|
||
emits(UPDATE_MODEL_EVENT, _formatInputText(value2));
|
||
nextTick$1(() => {
|
||
emits(INPUT_EVENT, _formatInputText(value2));
|
||
emits(CHANGE_EVENT, _formatInputText(value2));
|
||
});
|
||
};
|
||
const inputClickEvent = () => {
|
||
if (props2.type === "select") {
|
||
emits("click");
|
||
}
|
||
};
|
||
const _formatInputText = (value2) => {
|
||
if (value2 === "")
|
||
return "";
|
||
if (props2.type === "number" || props2.type === "digit")
|
||
return Number.parseFloat(value2);
|
||
return value2;
|
||
};
|
||
return {
|
||
inputText,
|
||
needStatusIcon,
|
||
validateState,
|
||
validateIcon,
|
||
passwordVisible,
|
||
passwordIcon,
|
||
showIcon,
|
||
disabled,
|
||
showWordLimit,
|
||
currentWordCount,
|
||
togglePasswordVisible,
|
||
inputInputEvent,
|
||
inputFocusEvent,
|
||
inputBlurEvent,
|
||
clearClickEvent,
|
||
confirmEvent,
|
||
inputClickEvent
|
||
};
|
||
};
|
||
const titleModes = [
|
||
"normal",
|
||
"vLine",
|
||
"dot",
|
||
"hLine",
|
||
"subTitle",
|
||
"transparent"
|
||
];
|
||
const titleAlign = ["left", "center", "right"];
|
||
const titleProps = buildProps({
|
||
/**
|
||
* @description 标题内容
|
||
*/
|
||
title: String,
|
||
/**
|
||
* @description 子标题内容,设置 mode 为 subTitle 时生效
|
||
*/
|
||
subTitle: String,
|
||
/**
|
||
* @description 标题模式
|
||
*/
|
||
mode: {
|
||
type: String,
|
||
values: titleModes,
|
||
default: "normal"
|
||
},
|
||
/**
|
||
* @description 标题大小,内置`sm`、`lg`、`xl`,同时也可以传递指定的尺寸
|
||
*/
|
||
size: String,
|
||
/**
|
||
* @description 标题对齐方式
|
||
*/
|
||
align: {
|
||
type: String,
|
||
values: titleAlign,
|
||
default: "left"
|
||
},
|
||
/**
|
||
* @description 标题颜色,以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
color: String,
|
||
/**
|
||
* @description 辅助元素颜色,以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
assistColor: String
|
||
});
|
||
const titleEmits = {
|
||
/**
|
||
* @description 点击事件
|
||
*/
|
||
click: () => true
|
||
};
|
||
const useTitleCustomStyle = (props2) => {
|
||
const ns = useNamespace("title");
|
||
const [titleTextColorClass, titleTextColorStyle] = useComponentColor(
|
||
toRef(props2, "color"),
|
||
"text"
|
||
);
|
||
const [titleBgColorClass, titleBgColorStyle] = useComponentColor(
|
||
toRef(props2, "color"),
|
||
"bg"
|
||
);
|
||
const [assistTextColorClass, assistTextColorStyle] = useComponentColor(
|
||
toRef(props2, "assistColor"),
|
||
"text"
|
||
);
|
||
const [assistBgColorClass, assistBgColorStyle] = useComponentColor(
|
||
toRef(props2, "assistColor"),
|
||
"bg"
|
||
);
|
||
const { sizeType } = useComponentSize(props2.size);
|
||
const titleClass = computed(() => {
|
||
const cls = [ns.e("title"), ns.em("title", props2.mode)];
|
||
if (props2.mode === "transparent") {
|
||
cls.push("tn-text-transparent");
|
||
if (titleBgColorClass.value)
|
||
cls.push(titleBgColorClass.value);
|
||
} else {
|
||
if (titleTextColorClass.value)
|
||
cls.push(titleTextColorClass.value);
|
||
}
|
||
if (props2.size && sizeType.value === "inner")
|
||
cls.push(ns.em("title", props2.size));
|
||
return cls.join(" ");
|
||
});
|
||
const titleStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.mode === "transparent") {
|
||
if (!titleBgColorClass.value)
|
||
style.backgroundColor = titleBgColorStyle.value || "var(--tn-color-primary)";
|
||
} else {
|
||
if (!titleTextColorClass.value)
|
||
style.color = titleTextColorStyle.value || "var(--tn-text-color-primary)";
|
||
}
|
||
if (props2.size && sizeType.value === "custom")
|
||
style.fontSize = formatDomSizeValue(props2.size);
|
||
if (props2.align)
|
||
style.textAlign = props2.align;
|
||
return style;
|
||
});
|
||
const assistColorClass = computed(() => {
|
||
const cls = [];
|
||
if (props2.mode === "subTitle") {
|
||
if (assistTextColorClass.value)
|
||
cls.push(assistTextColorClass.value);
|
||
} else {
|
||
if (assistBgColorClass.value)
|
||
cls.push(assistBgColorClass.value);
|
||
}
|
||
return cls.join(" ");
|
||
});
|
||
const assistColorStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.mode === "subTitle") {
|
||
if (!assistTextColorClass.value)
|
||
style.color = assistTextColorStyle.value || "var(--tn-color-primary-light-7)";
|
||
} else {
|
||
if (!assistBgColorClass.value)
|
||
style.backgroundColor = assistBgColorStyle.value || "var(--tn-color-primary)";
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
titleClass,
|
||
titleStyle,
|
||
assistColorClass,
|
||
assistColorStyle
|
||
};
|
||
};
|
||
const pickerBaseProps = buildProps({
|
||
/**
|
||
* @description 显示取消按钮
|
||
*/
|
||
showCancel: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 取消按钮的文本
|
||
*/
|
||
cancelText: {
|
||
type: String,
|
||
default: "取 消"
|
||
},
|
||
/**
|
||
* @description 取消按钮的字体颜色,支持图鸟内置的字体颜色
|
||
*/
|
||
cancelColor: String,
|
||
/**
|
||
* @description 显示确定按钮
|
||
*/
|
||
showConfirm: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 确定按钮的文本
|
||
*/
|
||
confirmText: {
|
||
type: String,
|
||
default: "确 定"
|
||
},
|
||
/**
|
||
* @description 确定按钮的字体颜色,支持图鸟内置的字体颜色
|
||
*/
|
||
confirmColor: String,
|
||
/**
|
||
* @description 显示遮罩
|
||
*/
|
||
mask: Boolean,
|
||
/**
|
||
* zIndex
|
||
*/
|
||
zIndex: {
|
||
type: Number,
|
||
default: ZIndex.popup
|
||
}
|
||
});
|
||
const pickerProps = buildProps({
|
||
...pickerBaseProps,
|
||
/**
|
||
* @description picker绑定的值
|
||
*/
|
||
modelValue: {
|
||
type: definePropType([String, Number, Array]),
|
||
default: ""
|
||
},
|
||
/**
|
||
* @description 显示picker选项弹框
|
||
*/
|
||
open: Boolean,
|
||
/**
|
||
* @description picker选项的数据
|
||
*/
|
||
data: {
|
||
type: definePropType([Array]),
|
||
default: () => []
|
||
},
|
||
/**
|
||
* @description picker选项的数据label属性名
|
||
*/
|
||
labelKey: {
|
||
type: String,
|
||
default: "label"
|
||
},
|
||
/**
|
||
* @description picker选项的数据value属性名
|
||
*/
|
||
valueKey: {
|
||
type: String,
|
||
default: "value"
|
||
},
|
||
/**
|
||
* @description picker选项的数据children属性名, 在级联选择器模式下生效
|
||
*/
|
||
childrenKey: {
|
||
type: String,
|
||
default: "children"
|
||
}
|
||
});
|
||
const pickerEmits = {
|
||
[UPDATE_MODEL_EVENT]: (value2) => isString(value2) || isNumber(value2) || isArray$1(value2),
|
||
"update:open": (value2) => isBoolean(value2),
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
[CHANGE_EVENT]: (value2, index2, item) => true,
|
||
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
||
confirm: (value2, item) => true,
|
||
cancel: () => true,
|
||
close: () => true
|
||
};
|
||
const usePickerCustomStyle = (props2) => {
|
||
const ns = useNamespace("picker");
|
||
const [cancelColorClass, cancelColorStyle] = useComponentColor(
|
||
toRef(props2, "cancelColor"),
|
||
"text"
|
||
);
|
||
const [confirmColorClass, confirmColorStyle] = useComponentColor(
|
||
toRef(props2, "confirmColor"),
|
||
"text"
|
||
);
|
||
const overlayOpacity = computed(() => {
|
||
return props2.mask ? 0.5 : 0;
|
||
});
|
||
const operationBtnClass = computed(() => {
|
||
return (type2) => {
|
||
const cls = [
|
||
ns.e("operation-btn"),
|
||
ns.em("operation-btn", type2)
|
||
];
|
||
if (type2 === "cancel") {
|
||
if (cancelColorClass.value)
|
||
cls.push(cancelColorClass.value);
|
||
} else if (type2 === "confirm") {
|
||
if (confirmColorClass.value)
|
||
cls.push(confirmColorClass.value);
|
||
}
|
||
return cls.join(" ");
|
||
};
|
||
});
|
||
const operationBtnStyle = computed(() => {
|
||
return (type2) => {
|
||
const style = {};
|
||
if (type2 === "cancel") {
|
||
if (!cancelColorClass.value)
|
||
style.color = cancelColorStyle.value || "var(--tn-color-danger)";
|
||
} else if (type2 === "confirm") {
|
||
if (!confirmColorClass.value)
|
||
style.color = confirmColorStyle.value || "var(--tn-color-primary)";
|
||
}
|
||
return style;
|
||
};
|
||
});
|
||
return {
|
||
ns,
|
||
overlayOpacity,
|
||
operationBtnClass,
|
||
operationBtnStyle
|
||
};
|
||
};
|
||
const usePicker = (props2) => {
|
||
const { emit: emit2 } = getCurrentInstance();
|
||
const openPopup = ref(false);
|
||
const showPicker = ref(true);
|
||
watch(
|
||
() => props2.open,
|
||
(value2) => {
|
||
openPopup.value = value2;
|
||
}
|
||
);
|
||
const _closePopup = () => {
|
||
emit2("update:open", false);
|
||
};
|
||
const closePopupEvent = () => {
|
||
_closePopup();
|
||
_generatePickerViewData(props2.modelValue);
|
||
emit2("close");
|
||
};
|
||
let pickerMode = "signle";
|
||
const _generateData = (data) => {
|
||
if (isObject$1(data)) {
|
||
const originalData = cloneDeep(data);
|
||
if (Object.prototype.hasOwnProperty.call(originalData, props2.childrenKey)) {
|
||
delete originalData[props2.childrenKey];
|
||
}
|
||
return {
|
||
label: data[props2.labelKey],
|
||
value: data[props2.valueKey],
|
||
originalData
|
||
};
|
||
} else {
|
||
return {
|
||
label: data,
|
||
value: data,
|
||
originalData: data
|
||
};
|
||
}
|
||
};
|
||
const _generateOrUpdateCascadeData = (data, generateIndex = 1, defaultValue = []) => {
|
||
if (pickerData.value.length < generateIndex) {
|
||
pickerData.value.push(
|
||
...Array.from(
|
||
{ length: generateIndex - pickerData.value.length },
|
||
() => []
|
||
)
|
||
);
|
||
}
|
||
pickerData.value[generateIndex - 1] = [
|
||
...data.map((item) => _generateData(item))
|
||
];
|
||
let childrenIndex = 0;
|
||
if (defaultValue.length) {
|
||
childrenIndex = pickerData.value[generateIndex - 1].findIndex(
|
||
(item) => item.value === defaultValue[generateIndex - 1]
|
||
);
|
||
childrenIndex = ~childrenIndex ? childrenIndex : 0;
|
||
}
|
||
if (data[childrenIndex] && Object.prototype.hasOwnProperty.call(
|
||
data[childrenIndex],
|
||
props2.childrenKey
|
||
)) {
|
||
_generateOrUpdateCascadeData(
|
||
data[childrenIndex][props2.childrenKey],
|
||
generateIndex + 1,
|
||
defaultValue
|
||
);
|
||
}
|
||
};
|
||
const pickerData = ref([]);
|
||
const currentPickerIndex = ref([]);
|
||
const initDefaultPickerIndex = () => {
|
||
let indexValue = [];
|
||
if (props2.modelValue === void 0 || !props2.modelValue && ["multiple", "cascade"].includes(pickerMode) || isArray$1(props2.modelValue) && !props2.modelValue.length) {
|
||
indexValue = Array.from({ length: pickerData.value.length }, () => 0);
|
||
} else {
|
||
if (isArray$1(props2.modelValue)) {
|
||
indexValue = pickerData.value.map((item, index2) => {
|
||
let pickerIndex = 0;
|
||
if (!props2.modelValue[index2])
|
||
pickerIndex = 0;
|
||
else {
|
||
pickerIndex = item.findIndex((childItem) => {
|
||
return childItem.value === props2.modelValue[index2];
|
||
});
|
||
}
|
||
return ~pickerIndex ? pickerIndex : 0;
|
||
});
|
||
} else {
|
||
indexValue = pickerData.value.map((_, k) => {
|
||
const index2 = pickerData.value[k].findIndex(
|
||
(item) => item.value === props2.modelValue
|
||
);
|
||
return index2 === -1 ? 0 : index2;
|
||
});
|
||
}
|
||
}
|
||
currentPickerIndex.value = indexValue;
|
||
};
|
||
const splitUserPickerData = () => {
|
||
const { data } = props2;
|
||
if (!data)
|
||
return;
|
||
if (!isArray$1(data)) {
|
||
throwError("TnPicker", "picker选择器数据不正确,请传递数组格式的数据");
|
||
}
|
||
if (data.length === 0)
|
||
return;
|
||
if (isArray$1(data[0])) {
|
||
pickerMode = "multiple";
|
||
pickerData.value = data.reduce(
|
||
(prev, cur) => {
|
||
prev.push(cur.map((item) => _generateData(item)));
|
||
return prev;
|
||
},
|
||
[]
|
||
);
|
||
} else if (!isArray$1(data[0]) && isObject$1(data[0]) && Object.prototype.hasOwnProperty.call(data[0], props2.childrenKey)) {
|
||
pickerMode = "cascade";
|
||
_generateOrUpdateCascadeData(
|
||
data,
|
||
1,
|
||
props2.modelValue
|
||
);
|
||
} else {
|
||
pickerMode = "signle";
|
||
pickerData.value = [data.map((item) => _generateData(item))];
|
||
}
|
||
nextTick$1(() => {
|
||
initDefaultPickerIndex();
|
||
});
|
||
};
|
||
watch(
|
||
() => props2.data,
|
||
() => {
|
||
splitUserPickerData();
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
const _getCurrentPickerValue = () => {
|
||
if (pickerMode === "signle" && !isArray$1(props2.data[0])) {
|
||
return pickerData.value[0][currentPickerIndex.value[0]].value;
|
||
} else {
|
||
const pickerIndex = cloneDeep(currentPickerIndex.value);
|
||
pickerIndex.splice(pickerData.value.length);
|
||
return pickerIndex.map(
|
||
(item, index2) => {
|
||
var _a;
|
||
return isEmptyVariableInDefault((_a = pickerData.value[index2][item]) == null ? void 0 : _a.value, 0);
|
||
}
|
||
);
|
||
}
|
||
};
|
||
const _getCurrentPickerOriginData = () => {
|
||
if (pickerMode === "signle" && !isArray$1(props2.data[0])) {
|
||
return pickerData.value[0][currentPickerIndex.value[0]].originalData;
|
||
} else {
|
||
const pickerIndex = cloneDeep(currentPickerIndex.value);
|
||
pickerIndex.splice(pickerData.value.length);
|
||
return pickerIndex.map(
|
||
(item, index2) => {
|
||
var _a;
|
||
return isEmptyVariableInDefault(
|
||
(_a = pickerData.value[index2][item]) == null ? void 0 : _a.originalData,
|
||
void 0
|
||
);
|
||
}
|
||
);
|
||
}
|
||
};
|
||
const _generatePickerViewData = (val) => {
|
||
if (pickerMode === "cascade") {
|
||
_generateOrUpdateCascadeData(
|
||
props2.data,
|
||
1,
|
||
val
|
||
);
|
||
}
|
||
nextTick$1(() => {
|
||
initDefaultPickerIndex();
|
||
});
|
||
};
|
||
let isInnerUpdate = false;
|
||
watch(
|
||
() => props2.modelValue,
|
||
(val) => {
|
||
if (isInnerUpdate) {
|
||
isInnerUpdate = false;
|
||
return;
|
||
}
|
||
_generatePickerViewData(val);
|
||
},
|
||
{
|
||
deep: true
|
||
}
|
||
);
|
||
let changeTimer = null;
|
||
let continuousChangeStatus = false;
|
||
const pickerViewChangeEvent = (e2) => {
|
||
if (continuousChangeStatus) {
|
||
return;
|
||
}
|
||
changeTimer = setTimeout(() => {
|
||
continuousChangeStatus = false;
|
||
changeTimer && clearTimeout(changeTimer);
|
||
changeTimer = null;
|
||
}, 300);
|
||
continuousChangeStatus = true;
|
||
let changePickerColumnIndex = currentPickerIndex.value.findIndex(
|
||
(item, index2) => item !== e2.detail.value[index2]
|
||
);
|
||
changePickerColumnIndex = ~changePickerColumnIndex ? changePickerColumnIndex : 0;
|
||
currentPickerIndex.value = e2.detail.value;
|
||
if (pickerMode === "cascade") {
|
||
let data = props2.data;
|
||
for (let i = 0; i < changePickerColumnIndex; i++) {
|
||
data = data[currentPickerIndex.value[i]][props2.childrenKey];
|
||
}
|
||
const pickerIndex = currentPickerIndex.value[changePickerColumnIndex];
|
||
pickerData.value.splice(changePickerColumnIndex + 1);
|
||
if (data[pickerIndex] && Object.prototype.hasOwnProperty.call(
|
||
data[pickerIndex],
|
||
props2.childrenKey
|
||
)) {
|
||
_generateOrUpdateCascadeData(
|
||
data[pickerIndex][props2.childrenKey],
|
||
changePickerColumnIndex + 2
|
||
);
|
||
currentPickerIndex.value = pickerData.value.map((item, index2) => {
|
||
return index2 <= changePickerColumnIndex ? currentPickerIndex.value[index2] : 0;
|
||
});
|
||
}
|
||
}
|
||
isInnerUpdate = true;
|
||
const value2 = _getCurrentPickerValue();
|
||
const originData = _getCurrentPickerOriginData();
|
||
emit2(CHANGE_EVENT, value2, changePickerColumnIndex, originData);
|
||
};
|
||
const resetPickerIndexWithPosition = (start, end) => {
|
||
currentPickerIndex.value = currentPickerIndex.value.map((item, index2) => {
|
||
return index2 >= start && (!end || index2 <= end) ? 0 : item;
|
||
});
|
||
};
|
||
const confirmEvent = () => {
|
||
const value2 = _getCurrentPickerValue();
|
||
const originData = _getCurrentPickerOriginData();
|
||
isInnerUpdate = true;
|
||
emit2(UPDATE_MODEL_EVENT, value2);
|
||
nextTick$1(() => {
|
||
emit2("confirm", value2, originData);
|
||
});
|
||
_closePopup();
|
||
};
|
||
const cancelEvent = () => {
|
||
_generatePickerViewData(props2.modelValue);
|
||
emit2("cancel");
|
||
_closePopup();
|
||
};
|
||
return {
|
||
openPopup,
|
||
showPicker,
|
||
pickerData,
|
||
currentPickerIndex,
|
||
closePopupEvent,
|
||
pickerViewChangeEvent,
|
||
confirmEvent,
|
||
cancelEvent,
|
||
initDefaultPickerIndex,
|
||
resetPickerIndexWithPosition
|
||
};
|
||
};
|
||
const numberBoxProps = buildProps({
|
||
/**
|
||
* @description 步进器绑定的值
|
||
*/
|
||
modelValue: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
/**
|
||
* @description 步进器的尺寸
|
||
*/
|
||
size: useComponentSizeProp,
|
||
/**
|
||
* @description 步进器的宽度
|
||
*/
|
||
width: String,
|
||
/**
|
||
* @description 步进器的高度
|
||
*/
|
||
height: String,
|
||
/**
|
||
* @description 文字大小
|
||
*/
|
||
fontSize: String,
|
||
/**
|
||
* @description 步进器背景颜色,以tn开头则使用图鸟内置的颜色只支持普通颜色
|
||
*/
|
||
bgColor: String,
|
||
/**
|
||
* @description 步进器字体颜色,以tn开头则使用图鸟内置的颜色只支持普通颜色
|
||
*/
|
||
textColor: String,
|
||
/**
|
||
* @description 步进器的最小值
|
||
*/
|
||
min: {
|
||
type: Number,
|
||
default: 0
|
||
},
|
||
/**
|
||
* @description 步进器的最大值
|
||
*/
|
||
max: {
|
||
type: Number,
|
||
default: 100
|
||
},
|
||
/**
|
||
* @description 步进器的步长
|
||
*/
|
||
step: {
|
||
type: Number,
|
||
default: 1
|
||
},
|
||
/**
|
||
* @description 禁止步进器操作
|
||
*/
|
||
disabled: Boolean,
|
||
/**
|
||
* @description 禁止步进器输入
|
||
*/
|
||
inputDisabled: Boolean,
|
||
/**
|
||
* @description 输入框与键盘的间距,单位px
|
||
*/
|
||
inputSpacing: {
|
||
type: Number,
|
||
default: 20
|
||
},
|
||
/**
|
||
* @description 长按递增减
|
||
*/
|
||
longPress: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 长按递增减的间隔时间,单位ms
|
||
*/
|
||
longPressInterval: {
|
||
type: Number,
|
||
default: 250
|
||
},
|
||
/**
|
||
* @description 值发生修改时是否触发表单验证
|
||
*/
|
||
validateEvent: {
|
||
type: Boolean,
|
||
default: true
|
||
}
|
||
});
|
||
const numberBoxEmits = {
|
||
[UPDATE_MODEL_EVENT]: (val) => isNumber(val),
|
||
[CHANGE_EVENT]: (val) => isNumber(val),
|
||
[INPUT_EVENT]: (val) => isNumber(val)
|
||
};
|
||
const useNumberBoxCustomStyle = (props2, inputValue) => {
|
||
const ns = useNamespace("number-box");
|
||
const [bgColorClass, bgColorStyle] = useComponentColor(
|
||
toRef(props2, "bgColor"),
|
||
"bg"
|
||
);
|
||
const [textColorClass, textColorStyle] = useComponentColor(
|
||
toRef(props2, "textColor"),
|
||
"text"
|
||
);
|
||
const numberBoxClass = computed(() => {
|
||
const cls = [ns.b()];
|
||
if (props2.size)
|
||
cls.push(ns.m(props2.size));
|
||
if (props2.disabled)
|
||
cls.push(ns.m("disabled"));
|
||
return cls.join(" ");
|
||
});
|
||
const numberBoxStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.width)
|
||
style.width = formatDomSizeValue(props2.width);
|
||
if (props2.height)
|
||
style.height = formatDomSizeValue(props2.height);
|
||
if (props2.fontSize)
|
||
style.fontSize = formatDomSizeValue(props2.fontSize);
|
||
return style;
|
||
});
|
||
const numberBoxOperationWrapperClass = computed(() => {
|
||
return (type2) => {
|
||
const cls = [];
|
||
if (bgColorClass.value)
|
||
cls.push(bgColorClass.value);
|
||
if (textColorClass.value)
|
||
cls.push(textColorClass.value);
|
||
if (type2 === "minus" && inputValue.value <= props2.min || type2 === "plus" && inputValue.value >= props2.max) {
|
||
cls.push(ns.is("disabled"));
|
||
}
|
||
return cls.join(" ");
|
||
};
|
||
});
|
||
const numberBoxOperationWrapperStyle = computed(() => {
|
||
return (type2) => {
|
||
const style = {};
|
||
if (!bgColorClass.value)
|
||
style.backgroundColor = bgColorStyle.value || "var(--tn-color-gray-light)";
|
||
if (textColorStyle.value)
|
||
style.color = textColorStyle.value;
|
||
if (type2 === "minus" || type2 === "plus") {
|
||
if (props2.height) {
|
||
style.width = formatDomSizeValue(props2.height);
|
||
style.height = style.width;
|
||
}
|
||
if (props2.fontSize) {
|
||
style.fontSize = `calc(${formatDomSizeValue(props2.fontSize)} * 1.2)`;
|
||
}
|
||
}
|
||
return style;
|
||
};
|
||
});
|
||
return {
|
||
ns,
|
||
numberBoxClass,
|
||
numberBoxStyle,
|
||
numberBoxOperationWrapperClass,
|
||
numberBoxOperationWrapperStyle
|
||
};
|
||
};
|
||
const useNumberBox = (props2) => {
|
||
const { emit: emit2 } = getCurrentInstance();
|
||
const { formItem } = useFormItem();
|
||
const inputValue = ref(0);
|
||
watch(
|
||
() => props2.modelValue,
|
||
(val) => {
|
||
const value2 = isEmptyVariableInDefault(val, 0);
|
||
inputValue.value = Math.max(props2.min, Math.min(value2, props2.max));
|
||
},
|
||
{
|
||
immediate: true
|
||
}
|
||
);
|
||
const step = computed(() => props2.step || 1);
|
||
const operationEvent = (type2) => {
|
||
if (props2.disabled)
|
||
return;
|
||
let value2 = inputValue.value;
|
||
if (type2 === "minus")
|
||
value2 -= step.value;
|
||
else if (type2 === "plus")
|
||
value2 += step.value;
|
||
if (value2 < props2.min) {
|
||
value2 = props2.min;
|
||
props2.longPress && clearLongPressTimer();
|
||
}
|
||
if (value2 > props2.max) {
|
||
value2 = props2.max;
|
||
props2.longPress && clearLongPressTimer();
|
||
}
|
||
updateNumberBoxValue(value2);
|
||
};
|
||
const { clearLongPressTimer, handleLongPressEvent: handleOperationEvent } = useLongPress(
|
||
operationEvent,
|
||
toRef(props2, "longPress"),
|
||
props2.longPressInterval
|
||
);
|
||
const numberBoxInputEvent = (e2) => {
|
||
const inputEventValue = e2.detail.value || 0;
|
||
let value2 = Number(inputEventValue);
|
||
if (value2 < props2.min) {
|
||
value2 = props2.min;
|
||
}
|
||
if (value2 > props2.max) {
|
||
value2 = props2.max;
|
||
}
|
||
emit2(INPUT_EVENT, inputEventValue);
|
||
if (props2.validateEvent) {
|
||
formItem == null ? void 0 : formItem.validate("input").catch(() => {
|
||
});
|
||
}
|
||
updateNumberBoxValue(value2);
|
||
};
|
||
const updateNumberBoxValue = (value2) => {
|
||
const stepValueArray = step.value.toString().split(".");
|
||
const decimalCount = stepValueArray.length > 1 ? stepValueArray[1].length : 0;
|
||
value2 = Number(value2.toFixed(decimalCount));
|
||
nextTick$1(() => {
|
||
setTimeout(() => {
|
||
inputValue.value = value2;
|
||
}, 0);
|
||
});
|
||
emit2(UPDATE_MODEL_EVENT, value2);
|
||
nextTick$1(() => {
|
||
var _a;
|
||
emit2(CHANGE_EVENT, value2);
|
||
if (props2.validateEvent) {
|
||
(_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "change").catch((err) => {
|
||
debugWarn(err);
|
||
});
|
||
}
|
||
});
|
||
};
|
||
return {
|
||
inputValue,
|
||
handleOperationEvent,
|
||
clearLongPressTimer,
|
||
numberBoxInputEvent
|
||
};
|
||
};
|
||
const props$5 = defineMixin({
|
||
props: {
|
||
// 列表数组,元素可为字符串,如为对象可通过keyName指定目标属性名
|
||
list: {
|
||
type: Array,
|
||
default: () => defProps.swiper.list
|
||
},
|
||
// 是否显示面板指示器
|
||
indicator: {
|
||
type: Boolean,
|
||
default: () => defProps.swiper.indicator
|
||
},
|
||
// 指示器非激活颜色
|
||
indicatorActiveColor: {
|
||
type: String,
|
||
default: () => defProps.swiper.indicatorActiveColor
|
||
},
|
||
// 指示器的激活颜色
|
||
indicatorInactiveColor: {
|
||
type: String,
|
||
default: () => defProps.swiper.indicatorInactiveColor
|
||
},
|
||
// 指示器样式,可通过bottom,left,right进行定位
|
||
indicatorStyle: {
|
||
type: [String, Object],
|
||
default: () => defProps.swiper.indicatorStyle
|
||
},
|
||
// 指示器模式,line-线型,dot-点型
|
||
indicatorMode: {
|
||
type: String,
|
||
default: () => defProps.swiper.indicatorMode
|
||
},
|
||
// 是否自动切换
|
||
autoplay: {
|
||
type: Boolean,
|
||
default: () => defProps.swiper.autoplay
|
||
},
|
||
// 当前所在滑块的 index
|
||
current: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiper.current
|
||
},
|
||
// 当前所在滑块的 item-id ,不能与 current 被同时指定
|
||
currentItemId: {
|
||
type: String,
|
||
default: () => defProps.swiper.currentItemId
|
||
},
|
||
// 滑块自动切换时间间隔
|
||
interval: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiper.interval
|
||
},
|
||
// 滑块切换过程所需时间
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiper.duration
|
||
},
|
||
// 播放到末尾后是否重新回到开头
|
||
circular: {
|
||
type: Boolean,
|
||
default: () => defProps.swiper.circular
|
||
},
|
||
// 前边距,可用于露出前一项的一小部分,nvue和支付宝不支持
|
||
previousMargin: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiper.previousMargin
|
||
},
|
||
// 后边距,可用于露出后一项的一小部分,nvue和支付宝不支持
|
||
nextMargin: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiper.nextMargin
|
||
},
|
||
// 当开启时,会根据滑动速度,连续滑动多屏,支付宝不支持
|
||
acceleration: {
|
||
type: Boolean,
|
||
default: () => defProps.swiper.acceleration
|
||
},
|
||
// 同时显示的滑块数量,nvue、支付宝小程序不支持
|
||
displayMultipleItems: {
|
||
type: Number,
|
||
default: () => defProps.swiper.displayMultipleItems
|
||
},
|
||
// 指定swiper切换缓动动画类型,有效值:default、linear、easeInCubic、easeOutCubic、easeInOutCubic
|
||
// 只对微信小程序有效
|
||
easingFunction: {
|
||
type: String,
|
||
default: () => defProps.swiper.easingFunction
|
||
},
|
||
// list数组中指定对象的目标属性名
|
||
keyName: {
|
||
type: String,
|
||
default: () => defProps.swiper.keyName
|
||
},
|
||
// 图片的裁剪模式
|
||
imgMode: {
|
||
type: String,
|
||
default: () => defProps.swiper.imgMode
|
||
},
|
||
// 组件高度
|
||
height: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiper.height
|
||
},
|
||
// 背景颜色
|
||
bgColor: {
|
||
type: String,
|
||
default: () => defProps.swiper.bgColor
|
||
},
|
||
// 组件圆角,数值或带单位的字符串
|
||
radius: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiper.radius
|
||
},
|
||
// 是否加载中
|
||
loading: {
|
||
type: Boolean,
|
||
default: () => defProps.swiper.loading
|
||
},
|
||
// 是否显示标题,要求数组对象中有title属性
|
||
showTitle: {
|
||
type: Boolean,
|
||
default: () => defProps.swiper.showTitle
|
||
}
|
||
}
|
||
});
|
||
const props$4 = defineMixin({
|
||
props: {
|
||
// 文字颜色
|
||
color: {
|
||
type: String,
|
||
default: () => defProps.link.color
|
||
},
|
||
// 字体大小,单位px
|
||
fontSize: {
|
||
type: [String, Number],
|
||
default: () => defProps.link.fontSize
|
||
},
|
||
// 是否显示下划线
|
||
underLine: {
|
||
type: Boolean,
|
||
default: () => defProps.link.underLine
|
||
},
|
||
// 要跳转的链接
|
||
href: {
|
||
type: String,
|
||
default: () => defProps.link.href
|
||
},
|
||
// 小程序中复制到粘贴板的提示语
|
||
mpTips: {
|
||
type: String,
|
||
default: () => defProps.link.mpTips
|
||
},
|
||
// 下划线颜色
|
||
lineColor: {
|
||
type: String,
|
||
default: () => defProps.link.lineColor
|
||
},
|
||
// 超链接的问题,不使用slot形式传入,是因为nvue下无法修改颜色
|
||
text: {
|
||
type: String,
|
||
default: () => defProps.link.text
|
||
}
|
||
}
|
||
});
|
||
const props$3 = defineMixin({
|
||
props: {
|
||
// 返回顶部的形状,circle-圆形,square-方形
|
||
mode: {
|
||
type: String,
|
||
default: () => defProps.backtop.mode
|
||
},
|
||
// 自定义图标
|
||
icon: {
|
||
type: String,
|
||
default: () => defProps.backtop.icon
|
||
},
|
||
// 提示文字
|
||
text: {
|
||
type: String,
|
||
default: () => defProps.backtop.text
|
||
},
|
||
// 返回顶部滚动时间
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => defProps.backtop.duration
|
||
},
|
||
// 滚动距离
|
||
scrollTop: {
|
||
type: [String, Number],
|
||
default: () => defProps.backtop.scrollTop
|
||
},
|
||
// 距离顶部多少距离显示,单位px
|
||
top: {
|
||
type: [String, Number],
|
||
default: () => defProps.backtop.top
|
||
},
|
||
// 返回顶部按钮到底部的距离,单位px
|
||
bottom: {
|
||
type: [String, Number],
|
||
default: () => defProps.backtop.bottom
|
||
},
|
||
// 返回顶部按钮到右边的距离,单位px
|
||
right: {
|
||
type: [String, Number],
|
||
default: () => defProps.backtop.right
|
||
},
|
||
// 层级
|
||
zIndex: {
|
||
type: [String, Number],
|
||
default: () => defProps.backtop.zIndex
|
||
},
|
||
// 图标的样式,对象形式
|
||
iconStyle: {
|
||
type: Object,
|
||
default: () => defProps.backtop.iconStyle
|
||
}
|
||
}
|
||
});
|
||
const loadingModes = ["semicircle", "circle", "flower"];
|
||
const loadingProps = buildProps({
|
||
/**
|
||
* @description 显示加载状态
|
||
*/
|
||
show: Boolean,
|
||
/**
|
||
* @description 加载动画
|
||
*/
|
||
animation: Boolean,
|
||
/**
|
||
* @description 加载模式
|
||
*/
|
||
mode: {
|
||
type: String,
|
||
values: loadingModes,
|
||
default: "circle"
|
||
},
|
||
/**
|
||
* @description 加载颜色类型
|
||
*/
|
||
type: {
|
||
type: String,
|
||
values: componentTypes,
|
||
default: "primary"
|
||
},
|
||
/**
|
||
* @description 颜色,以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
color: String,
|
||
/**
|
||
* @description 加载动画大小
|
||
*/
|
||
size: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 加载动画执行时间,单位s
|
||
*/
|
||
duration: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 加载动画执行时间函数,仅mode为circle和semicircle时有效
|
||
*/
|
||
timeFunction: String
|
||
});
|
||
const useLoadingCustomStyle = (props2) => {
|
||
const ns = useNamespace("loading");
|
||
const [colorClass, colorStyle, updateColor] = useComponentColor(
|
||
toRef(props2, "color"),
|
||
"bg"
|
||
);
|
||
const { sizeType } = useComponentSize(props2.size);
|
||
const loadingClass = computed(() => {
|
||
const cls = [];
|
||
cls.push(ns.b());
|
||
if (props2.size && sizeType.value === "inner")
|
||
cls.push(ns.m(props2.size));
|
||
return cls.join(" ");
|
||
});
|
||
const loadingStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.size && sizeType.value === "custom")
|
||
style.width = style.height = formatDomSizeValue(props2.size);
|
||
return style;
|
||
});
|
||
const loadingContentClass = computed(() => {
|
||
const cls = [];
|
||
cls.push(ns.b());
|
||
if (props2.animation)
|
||
cls.push(ns.m("animation"));
|
||
return cls.join(" ");
|
||
});
|
||
const loadingContentStyle = computed(() => {
|
||
const style = {};
|
||
if (props2.type)
|
||
style["--loading-color"] = `var(--tn-color-${props2.type})`;
|
||
if (props2.color && colorClass.value) {
|
||
const color2 = props2.color.replace("tn-", "");
|
||
style["--loading-color"] = `var(--tn-color-${color2})`;
|
||
}
|
||
if (colorStyle.value)
|
||
style["--loading-color"] = colorStyle.value;
|
||
if (props2.duration)
|
||
style.animationDuration = `${props2.duration}s`;
|
||
if (props2.mode === "circle" || props2.mode === "semicircle") {
|
||
if (props2.timeFunction)
|
||
style.animationTimingFunction = props2.timeFunction;
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
loadingClass,
|
||
loadingStyle,
|
||
loadingContentClass,
|
||
loadingContentStyle,
|
||
updateColor
|
||
};
|
||
};
|
||
const badgeProps = buildProps({
|
||
/**
|
||
* @description 徽标内容,可以是数字或者字符串,当为数字时,超过max会显示{max}+,以icon-开头则显示图标
|
||
*/
|
||
value: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 徽标内容最大值,在value为number时有效,超过最大值会显示{max}+
|
||
*/
|
||
max: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 徽标颜色类型
|
||
*/
|
||
type: {
|
||
type: String,
|
||
values: componentTypes,
|
||
default: "primary"
|
||
},
|
||
/**
|
||
* @description 徽标背景颜色, 以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
bgColor: String,
|
||
/**
|
||
* @description 徽标文字颜色, 以tn开头则使用图鸟内置的颜色
|
||
*/
|
||
textColor: String,
|
||
/**
|
||
* @description 徽标大小
|
||
*/
|
||
size: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 字体大小
|
||
*/
|
||
fontSize: {
|
||
type: [String, Number]
|
||
},
|
||
/**
|
||
* @description 徽标加粗
|
||
*/
|
||
bold: Boolean,
|
||
/**
|
||
* @description 自定义徽标样式
|
||
*/
|
||
customStyle: useComponentCustomStyleProp,
|
||
/**
|
||
* @description 自定义徽标类
|
||
*/
|
||
customClass: String,
|
||
/**
|
||
* @description 是否显示点徽标
|
||
*/
|
||
dot: Boolean,
|
||
/**
|
||
* @description 是否绝对定位徽标
|
||
*/
|
||
absolute: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 绝对定位的位置
|
||
*/
|
||
absolutePosition: {
|
||
type: definePropType(Object),
|
||
default: () => ({})
|
||
},
|
||
/**
|
||
* @description 绝对居中对齐
|
||
*/
|
||
absoluteCenter: {
|
||
type: Boolean,
|
||
default: true
|
||
},
|
||
/**
|
||
* @description 点击标识
|
||
*/
|
||
index: useComponentIndexProp
|
||
});
|
||
const badgeEmits = {
|
||
/**
|
||
* @description 点击事件
|
||
*/
|
||
click: (index2) => typeof index2 === "number" || typeof index2 === "string"
|
||
};
|
||
const useBadge = (props2, emits) => {
|
||
const showBadge = computed(() => {
|
||
return !!props2.dot || props2.value !== "" && props2.value !== void 0;
|
||
});
|
||
const contentType = computed(() => {
|
||
let type2 = "string";
|
||
if (isNumber(props2.value))
|
||
type2 = "number";
|
||
if (isString(props2.value) && props2.value.startsWith("icon-"))
|
||
type2 = "icon";
|
||
return type2;
|
||
});
|
||
const content = computed(() => {
|
||
if (props2.dot)
|
||
return "";
|
||
if (contentType.value === "number" && props2.max) {
|
||
const value2 = Number(props2.value || 0);
|
||
const max = Number(props2.max || 0);
|
||
return value2 > max ? `${max}+` : `${value2}`;
|
||
}
|
||
if (contentType.value === "icon")
|
||
return props2.value.replace("icon-", "");
|
||
return props2.value;
|
||
});
|
||
const badgeClick = () => {
|
||
if (emits)
|
||
emits("click", props2.index);
|
||
};
|
||
return {
|
||
showBadge,
|
||
contentType,
|
||
content,
|
||
badgeClick
|
||
};
|
||
};
|
||
const useBadgeCustomStyle = (props2) => {
|
||
const ns = useNamespace("badge");
|
||
const contentNs = useNamespace("badge-content");
|
||
const { contentType } = useBadge(props2);
|
||
const [bgColorClass, bgColorStyle] = useComponentColor(
|
||
toRef(props2, "bgColor"),
|
||
"bg"
|
||
);
|
||
const [textColorClass, textColorStyle] = useComponentColor(
|
||
toRef(props2, "textColor"),
|
||
"text"
|
||
);
|
||
const { sizeType } = useComponentSize(props2.size);
|
||
const badgeContentClass = computed(() => {
|
||
const cls = [];
|
||
cls.push(contentNs.b());
|
||
if (props2.dot)
|
||
cls.push(contentNs.m("dot"));
|
||
if (contentType.value === "icon")
|
||
cls.push(contentNs.m("icon"));
|
||
if (props2.absolute) {
|
||
cls.push(contentNs.e("absolute"));
|
||
if (props2.absoluteCenter)
|
||
cls.push(contentNs.em("absolute", "center"));
|
||
}
|
||
if (props2.type)
|
||
cls.push(`tn-type-${props2.type}_bg`);
|
||
if (bgColorClass.value)
|
||
cls.push(bgColorClass.value);
|
||
if (textColorClass.value)
|
||
cls.push(textColorClass.value);
|
||
if (props2.size && sizeType.value === "inner")
|
||
cls.push(contentNs.m(props2.size));
|
||
if (props2.bold)
|
||
cls.push("tn-text-bold");
|
||
if (props2.customClass)
|
||
cls.push(props2.customClass);
|
||
return cls.join(" ");
|
||
});
|
||
const badgeContentStyle = computed(() => {
|
||
const style = {};
|
||
if (bgColorStyle.value)
|
||
style.backgroundColor = bgColorStyle.value;
|
||
if (textColorStyle.value)
|
||
style.color = textColorStyle.value;
|
||
if (props2.size && (sizeType.value === "custom" || contentType.value === "icon"))
|
||
style.width = style.height = formatDomSizeValue(props2.size);
|
||
if (props2.fontSize)
|
||
style.fontSize = formatDomSizeValue(props2.fontSize);
|
||
if (props2.absolutePosition.top)
|
||
style.top = formatDomSizeValue(props2.absolutePosition.top);
|
||
if (props2.absolutePosition.right)
|
||
style.right = formatDomSizeValue(props2.absolutePosition.right);
|
||
if (!isEmpty(props2.customStyle)) {
|
||
Object.assign(style, props2.customStyle);
|
||
}
|
||
return style;
|
||
});
|
||
return {
|
||
ns,
|
||
contentNs,
|
||
badgeContentClass,
|
||
badgeContentStyle
|
||
};
|
||
};
|
||
const props$2 = defineMixin({
|
||
props: {
|
||
// 是否显示圆点
|
||
isDot: {
|
||
type: Boolean,
|
||
default: () => defProps.badge.isDot
|
||
},
|
||
// 显示的内容
|
||
value: {
|
||
type: [Number, String],
|
||
default: () => defProps.badge.value
|
||
},
|
||
// 显示的内容
|
||
modelValue: {
|
||
type: [Number, String],
|
||
default: () => defProps.badge.modelValue
|
||
},
|
||
// 是否显示
|
||
show: {
|
||
type: Boolean,
|
||
default: () => defProps.badge.show
|
||
},
|
||
// 最大值,超过最大值会显示 '{max}+'
|
||
max: {
|
||
type: [Number, String],
|
||
default: () => defProps.badge.max
|
||
},
|
||
// 主题类型,error|warning|success|primary
|
||
type: {
|
||
type: String,
|
||
default: () => defProps.badge.type
|
||
},
|
||
// 当数值为 0 时,是否展示 Badge
|
||
showZero: {
|
||
type: Boolean,
|
||
default: () => defProps.badge.showZero
|
||
},
|
||
// 背景颜色,优先级比type高,如设置,type参数会失效
|
||
bgColor: {
|
||
type: [String, null],
|
||
default: () => defProps.badge.bgColor
|
||
},
|
||
// 字体颜色
|
||
color: {
|
||
type: [String, null],
|
||
default: () => defProps.badge.color
|
||
},
|
||
// 徽标形状,circle-四角均为圆角,horn-左下角为直角
|
||
shape: {
|
||
type: String,
|
||
default: () => defProps.badge.shape
|
||
},
|
||
// 设置数字的显示方式,overflow|ellipsis|limit
|
||
// overflow会根据max字段判断,超出显示`${max}+`
|
||
// ellipsis会根据max判断,超出显示`${max}...`
|
||
// limit会依据1000作为判断条件,超出1000,显示`${value/1000}K`,比如2.2k、3.34w,最多保留2位小数
|
||
numberType: {
|
||
type: String,
|
||
default: () => defProps.badge.numberType
|
||
},
|
||
// 设置badge的位置偏移,格式为 [x, y],也即设置的为top和right的值,absolute为true时有效
|
||
offset: {
|
||
type: Array,
|
||
default: () => defProps.badge.offset
|
||
},
|
||
// 是否反转背景和字体颜色
|
||
inverted: {
|
||
type: Boolean,
|
||
default: () => defProps.badge.inverted
|
||
},
|
||
// 是否绝对定位
|
||
absolute: {
|
||
type: Boolean,
|
||
default: () => defProps.badge.absolute
|
||
}
|
||
}
|
||
});
|
||
const props$1 = defineMixin({
|
||
props: {
|
||
// 轮播的长度
|
||
length: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiperIndicator.length
|
||
},
|
||
// 当前处于活动状态的轮播的索引
|
||
current: {
|
||
type: [String, Number],
|
||
default: () => defProps.swiperIndicator.current
|
||
},
|
||
// 指示器非激活颜色
|
||
indicatorActiveColor: {
|
||
type: String,
|
||
default: () => defProps.swiperIndicator.indicatorActiveColor
|
||
},
|
||
// 指示器的激活颜色
|
||
indicatorInactiveColor: {
|
||
type: String,
|
||
default: () => defProps.swiperIndicator.indicatorInactiveColor
|
||
},
|
||
// 指示器模式,line-线型,dot-点型
|
||
indicatorMode: {
|
||
type: String,
|
||
default: () => defProps.swiperIndicator.indicatorMode
|
||
}
|
||
}
|
||
});
|
||
const props = defineMixin({
|
||
props: {
|
||
// 是否展示组件
|
||
show: {
|
||
type: Boolean,
|
||
default: () => defProps.transition.show
|
||
},
|
||
// 使用的动画模式
|
||
mode: {
|
||
type: String,
|
||
default: () => defProps.transition.mode
|
||
},
|
||
// 动画的执行时间,单位ms
|
||
duration: {
|
||
type: [String, Number],
|
||
default: () => defProps.transition.duration
|
||
},
|
||
// 使用的动画过渡函数
|
||
timingFunction: {
|
||
type: String,
|
||
default: () => defProps.transition.timingFunction
|
||
}
|
||
}
|
||
});
|
||
const getClassNames = (name) => ({
|
||
enter: `u-${name}-enter u-${name}-enter-active`,
|
||
"enter-to": `u-${name}-enter-to u-${name}-enter-active`,
|
||
leave: `u-${name}-leave u-${name}-leave-active`,
|
||
"leave-to": `u-${name}-leave-to u-${name}-leave-active`
|
||
});
|
||
const transitionMixin = {
|
||
methods: {
|
||
// 组件被点击发出事件
|
||
clickHandler() {
|
||
this.$emit("click");
|
||
},
|
||
// vue版本的组件进场处理
|
||
async vueEnter() {
|
||
const classNames = getClassNames(this.mode);
|
||
this.status = "enter";
|
||
this.$emit("beforeEnter");
|
||
this.inited = true;
|
||
this.display = true;
|
||
this.classes = classNames.enter;
|
||
await nextTick$1();
|
||
{
|
||
await sleep(20);
|
||
this.$emit("enter");
|
||
this.transitionEnded = false;
|
||
this.$emit("afterEnter");
|
||
this.classes = classNames["enter-to"];
|
||
}
|
||
},
|
||
// 动画离场处理
|
||
async vueLeave() {
|
||
if (!this.display)
|
||
return;
|
||
const classNames = getClassNames(this.mode);
|
||
this.status = "leave";
|
||
this.$emit("beforeLeave");
|
||
this.classes = classNames.leave;
|
||
await nextTick$1();
|
||
{
|
||
this.transitionEnded = false;
|
||
this.$emit("leave");
|
||
setTimeout(this.onTransitionEnd, this.duration);
|
||
this.classes = classNames["leave-to"];
|
||
}
|
||
},
|
||
// 完成过渡后触发
|
||
onTransitionEnd() {
|
||
if (this.transitionEnded)
|
||
return;
|
||
this.transitionEnded = true;
|
||
this.$emit(this.status === "leave" ? "afterLeave" : "afterEnter");
|
||
if (!this.show && this.display) {
|
||
this.display = false;
|
||
this.inited = false;
|
||
}
|
||
}
|
||
}
|
||
};
|
||
exports.Component = Component$1;
|
||
exports.TextDecoder = TextDecoder;
|
||
exports.TextEncoder = TextEncoder;
|
||
exports._export_sfc = _export_sfc;
|
||
exports.addStyle = addStyle;
|
||
exports.addUnit = addUnit;
|
||
exports.avatarEmits = avatarEmits;
|
||
exports.avatarGroupEmits = avatarGroupEmits;
|
||
exports.avatarGroupProps = avatarGroupProps;
|
||
exports.avatarProps = avatarProps;
|
||
exports.badgeEmits = badgeEmits;
|
||
exports.badgeProps = badgeProps;
|
||
exports.buildProps = buildProps;
|
||
exports.buttonEmits = buttonEmits;
|
||
exports.buttonMixin = buttonMixin;
|
||
exports.buttonProps = buttonProps;
|
||
exports.circleProgressProps = circleProgressProps;
|
||
exports.color = color;
|
||
exports.colorGradient = colorGradient;
|
||
exports.computed = computed;
|
||
exports.config = config;
|
||
exports.createPinia = createPinia;
|
||
exports.createSSRApp = createSSRApp;
|
||
exports.dayjs = dayjs;
|
||
exports.deepMerge = deepMerge$2;
|
||
exports.defProps = defProps;
|
||
exports.defineComponent = defineComponent;
|
||
exports.definePropType = definePropType;
|
||
exports.defineStore = defineStore;
|
||
exports.e = e;
|
||
exports.error = error;
|
||
exports.f = f;
|
||
exports.getPx = getPx;
|
||
exports.iconEmits = iconEmits;
|
||
exports.iconProps = iconProps;
|
||
exports.icons = icons;
|
||
exports.imageUploadEmits = imageUploadEmits;
|
||
exports.imageUploadProps = imageUploadProps;
|
||
exports.index = index$2;
|
||
exports.inject = inject;
|
||
exports.inputEmits = inputEmits;
|
||
exports.inputProps = inputProps;
|
||
exports.isEmptyVariableInDefault = isEmptyVariableInDefault;
|
||
exports.isRef = isRef;
|
||
exports.lazyLoadEmits = lazyLoadEmits;
|
||
exports.lazyLoadProps = lazyLoadProps;
|
||
exports.loadingProps = loadingProps;
|
||
exports.m = m;
|
||
exports.mergeModels = mergeModels;
|
||
exports.mixin = mixin;
|
||
exports.mpMixin = mpMixin;
|
||
exports.n = n;
|
||
exports.nextTick$1 = nextTick$1;
|
||
exports.numberBoxEmits = numberBoxEmits;
|
||
exports.numberBoxProps = numberBoxProps;
|
||
exports.o = o;
|
||
exports.onHide = onHide;
|
||
exports.onLoad = onLoad;
|
||
exports.onMounted = onMounted;
|
||
exports.onPageScroll = onPageScroll;
|
||
exports.onReady = onReady;
|
||
exports.onShow = onShow;
|
||
exports.onUnload = onUnload;
|
||
exports.onUnmounted = onUnmounted;
|
||
exports.openType = openType;
|
||
exports.p = p;
|
||
exports.photoAlbumEmits = photoAlbumEmits;
|
||
exports.photoAlbumProps = photoAlbumProps;
|
||
exports.pickerEmits = pickerEmits;
|
||
exports.pickerProps = pickerProps;
|
||
exports.popupEmits = popupEmits;
|
||
exports.popupProps = popupProps;
|
||
exports.props = props$j;
|
||
exports.props$1 = props$i;
|
||
exports.props$10 = props$9;
|
||
exports.props$11 = props$8;
|
||
exports.props$12 = props$7;
|
||
exports.props$13 = props$6;
|
||
exports.props$14 = props$5;
|
||
exports.props$15 = props$4;
|
||
exports.props$16 = props$3;
|
||
exports.props$17 = props$2;
|
||
exports.props$18 = props$1;
|
||
exports.props$19 = props;
|
||
exports.props$2 = props$h;
|
||
exports.props$3 = props$g;
|
||
exports.props$4 = props$f;
|
||
exports.props$5 = props$e;
|
||
exports.props$6 = props$d;
|
||
exports.props$7 = props$c;
|
||
exports.props$8 = props$b;
|
||
exports.props$9 = props$a;
|
||
exports.provide = provide;
|
||
exports.r = r;
|
||
exports.random = random;
|
||
exports.reactive = reactive;
|
||
exports.ref = ref;
|
||
exports.resolveComponent = resolveComponent;
|
||
exports.s = s;
|
||
exports.scrollListEmits = scrollListEmits;
|
||
exports.scrollListProps = scrollListProps;
|
||
exports.sleep = sleep;
|
||
exports.sr = sr;
|
||
exports.storeToRefs = storeToRefs;
|
||
exports.switchTabEmits = switchTabEmits;
|
||
exports.switchTabProps = switchTabProps;
|
||
exports.sys = sys;
|
||
exports.t = t;
|
||
exports.tagEmits = tagEmits;
|
||
exports.tagProps = tagProps;
|
||
exports.test = test;
|
||
exports.throttle = throttle;
|
||
exports.timeLineDataEmits = timeLineDataEmits;
|
||
exports.timeLineDataProps = timeLineDataProps;
|
||
exports.timeLineItemEmits = timeLineItemEmits;
|
||
exports.timeLineItemProps = timeLineItemProps;
|
||
exports.timeLineKey = timeLineKey;
|
||
exports.timeLineProps = timeLineProps;
|
||
exports.titleEmits = titleEmits;
|
||
exports.titleProps = titleProps;
|
||
exports.toRef = toRef;
|
||
exports.toast = toast;
|
||
exports.transitionMixin = transitionMixin;
|
||
exports.unref = unref;
|
||
exports.updateUserInfoPopupEmits = updateUserInfoPopupEmits;
|
||
exports.updateUserInfoPopupProps = updateUserInfoPopupProps;
|
||
exports.useAvatar = useAvatar;
|
||
exports.useAvatarBadgeProps = useAvatarBadgeProps;
|
||
exports.useAvatarCustomStyle = useAvatarCustomStyle;
|
||
exports.useAvatarGroup = useAvatarGroup;
|
||
exports.useAvatarIconConfig = useAvatarIconConfig;
|
||
exports.useAvatarProps = useAvatarProps;
|
||
exports.useBadge = useBadge;
|
||
exports.useBadgeCustomStyle = useBadgeCustomStyle;
|
||
exports.useButton = useButton;
|
||
exports.useButtonCustomStyle = useButtonCustomStyle;
|
||
exports.useCircleProgress = useCircleProgress;
|
||
exports.useComponentColor = useComponentColor;
|
||
exports.useIcon = useIcon;
|
||
exports.useImageUpload = useImageUpload;
|
||
exports.useInput = useInput;
|
||
exports.useInputCustomStyle = useInputCustomStyle;
|
||
exports.useLazyLoad = useLazyLoad;
|
||
exports.useLazyLoadCustomStyle = useLazyLoadCustomStyle;
|
||
exports.useLoadingCustomStyle = useLoadingCustomStyle;
|
||
exports.useModel = useModel;
|
||
exports.useNamespace = useNamespace;
|
||
exports.useNumberBox = useNumberBox;
|
||
exports.useNumberBoxCustomStyle = useNumberBoxCustomStyle;
|
||
exports.usePhotoAlbum = usePhotoAlbum;
|
||
exports.usePicker = usePicker;
|
||
exports.usePickerCustomStyle = usePickerCustomStyle;
|
||
exports.usePopup = usePopup;
|
||
exports.usePopupCustomStyle = usePopupCustomStyle;
|
||
exports.useScrollList = useScrollList;
|
||
exports.useScrollListCustomStyle = useScrollListCustomStyle;
|
||
exports.useSlots = useSlots;
|
||
exports.useSwitchTab = useSwitchTab;
|
||
exports.useSwitchTabCustomStyle = useSwitchTabCustomStyle;
|
||
exports.useTag = useTag;
|
||
exports.useTagCustomStyle = useTagCustomStyle;
|
||
exports.useTimeLineCustomStyle = useTimeLineCustomStyle;
|
||
exports.useTimeLineDataCustomStyle = useTimeLineDataCustomStyle;
|
||
exports.useTitleCustomStyle = useTitleCustomStyle;
|
||
exports.useUpdateUserInfoPopup = useUpdateUserInfoPopup;
|
||
exports.useUpdateUserInfoPopupCustomStyle = useUpdateUserInfoPopupCustomStyle;
|
||
exports.useWaterFall = useWaterFall;
|
||
exports.uviewPlus = uviewPlus;
|
||
exports.value = value;
|
||
exports.w = w;
|
||
exports.watch = watch;
|
||
exports.waterFallProps = waterFallProps;
|
||
exports.wx$1 = wx$1;
|