1
0

Initial commit

This commit is contained in:
kekami 2022-02-19 17:36:39 -05:00
commit 349a784840
No known key found for this signature in database
GPG Key ID: 0F0158A0A5192D31
19 changed files with 2567 additions and 0 deletions

9
README.md Normal file
View File

@ -0,0 +1,9 @@
# IIDX
Plugin Version: **v1.4.1**
This is A Core IIDX Plugin.
Supported Versions:
- HEROIC VERSE

352
data/27customlist.ts Normal file
View File

@ -0,0 +1,352 @@
// 参考:bemaniwiki
export const frame_list: string[] = ["デフォルト"];
export const menumusic_list: string[] = ["デフォルト"];
export const noteburst_list: string[] = [
"デフォルト",
"初代",
"9th style",
"IIDX RED(オレンジ爆発)",
"HAPPY SKY",
"DistorteD",
"GOLD",
"DJ TROOPERS",
"EMPRESS",
"SIRIUS",
"Resort Anthem",
"Lincle",
"tricoro",
"SPADA",
"オンリーワンボム",
"PENDUAL",
"copula",
"SINOBUZ",
"キャノンスパーク",
"Rootage",
"HEROIC VERSE",
];
export const turntable_list: string[] = [
"デフォルト",
"トラン",
"JOJO",
"デルタ",
"オレンジディスク",
"DistorteD",
"GOLD",
"DJ TROOPERS",
"EMPRESS",
"SIRIUS",
"Resort Anthem",
"Lincle",
"tricoro",
"SPADA",
"灼熱",
"オンリーワンレコード",
"PENDUAL",
"copula",
"SINOBUZ",
"キャノンボーラーズ",
"Rootage",
"HEROIC VERSE",
"BPL",
"BPL ROUND1",
"BPL APINA VRAMeS",
"BPL SILKHAT",
"BPL レジャーランド",
"BPL SUPER NOVA Tohoku",
"BPL GAME PANIC",
];
export const lanecover_list: string[] = [
"デフォルト",
"sigsig",
"内部フレーム",
"空",
"KAMAITACHI",
"タオル",
"コスモス",
"度胸兄弟",
"Blind Justice",
"迷彩",
"bloomin' feeling",
"Marie Antoinette(AC未使用)", //削除曲のため
"Elisha",
"Kung-fu Empire",
"Tune of beat#3",
"EMPRESS",
"Programmed World",
"3y3s",
"UMEGIRI",
"KANZAKI",
"Rock Da House",
"THE DOOR INTO RAINBOW",
"Aegis",
"Vermilion",
"Phoenix",
"Lucky Days",
"Almace",
"DIAMOND CROSSING",
"Mamonis",
"Ashemu",
"Bulluvegola",
"Beridzebeth",
"Levaslater",
"STN",
"Rche",
"Neulakyussra",
"Cybele",
"Cuvelia",
"Liberation",
"Praludium",
"少女アリスと箱庭幻想コンチェルト",
"Re:GENERATION",
"20 system bg",
"旋律のドグマMiserables/TYPE A",
"旋律のドグマMiserables/TYPE B",
"Elektric U-Phoria",
"MAGIC LOVE",
"スパーダレリーフ",
"S!ck",
"CONCEPTUAL",
"ΕΛΠΙΣ",
"rumrum triplets",
"SYNC-ANTHEM",
"Thor's Hammer",
"Plan 8",
"仮想空間の旅人たち",
"8bit Princess",
"planarian",
"Dynamite1",
"龍と少女とデコヒーレンス",
"トリカゴノ鳳凰",
"Proof of the existence",
"BRAVE GLOW/機動怪獣リングール",
"BRAVE GLOW/トリコロイダー",
"VEGA/VEGAうさぎ",
"VEGA/中のひと",
"カジノファイヤーことみちゃん",
"New Lights",
"灼熱くんやきそば",
"即席!脳直★ミュージックシステム",
"キャトられ恋はモ~モク",
"オンリーワンカバー",
"ジザル",
"ジャックティーロ",
"ジャックハンス",
"イェンス",
"アムドゥシアン",
"マクスウェリオン",
"ラプラシア",
"ルシェ",
"スモモ",
"ファウラ",
"ベリゼベス",
"エルピス・キラ",
"フェリーラ",
"オールパトナ",
"あいむちゃん",
"人魚のPrim",
"アヤカシ二人",
"SHELTER OF THE MIND",
"Acid Pumper",
"X",
"ハーティー",
"Nightmare before oversleep",
"Highcharge Divolt",
"Godspeed(少年)",
"車掌イージス",
"GENERATE",
"Dynamite2",
"格闘乙女",
"レル DX2300系",
"つゆ太",
"La dolce primavera",
"AO-1",
"真 地獄超特急 -HELL or HELL-",
"モード",
"ミニョンヌ鉄道兄弟",
"冬椿",
"PAPAYAPA BASS",
"鴉",
"AsiaN distractive",
"TOGAKUSHI",
"Modular Technology",
"獅子霞麗ノ舞",
"Music is The Answer",
"!Viva!",
"SINOBUZ UI",
"ChaserXX",
"Amor De Verao",
"エディブルフラワーの独白",
"ハイ*ビスカス ft. Kanae Asaba",
"Midnight Lady",
"FUTURE is Dead",
"Break Stasis",
"草原の王女-軌跡を辿って-",
"Exhaust Hype",
"25UI",
"焔極OVERKILL",
"Breakin' Chain",
"津軽雪",
"Yellow Sketch(RX-Ver.S.P.L.)",
"Steel Edge",
"Go Ahead!!",
"Sky High(AC未使用)",
"イザナミノナゲキ",
"GuNGNiR",
"ディッシュウォッシャー◎彡おいわちゃん(AC未使用)",
"BroGamer",
"FUZIN RIZIN(AC未使用)",
"Mare Nectaris(AC未使用)",
"Quakes",
"Rave Cannon(AC未使用)",
"ECHIDNA",
"Snakey Kung-fu",
"刃図羅",
"忍恋花",
"法具「バズラ」",
"HADES",
"DEATH†ZIGOQ",
"東京神話",
"Initiation",
"EMERALDAS",
"Chemical Cookie",
"ナイトシティー・アヴァンチュール",
"シムルグの目醒め",
"n'pa pa BBQ",
"ANCHOR",
"IIDX AIR RACE",
"THE DAY OF JUBILATIONS",
"HEISEI",
"IDC feat.REVERBEE (Mo'Cuts Ver)",
"Yum Yum Jelly",
"夏の匂い。キミの残像。 ft. Kanae Asaba",
"Hurry Hurry",
"OVERTIME",
"ミストレス・アンに花束を",
"Ember Lights",
"Rootage",
"Urban Constellations",
"金野火織の金色提言",
"龍王の霊廟(Mausoleum Of The Primal Dragon)",
"Painful Fate",
"Drastic Dramatic",
"抱きしめてモナムール",
"Trill auf G",
"Lethal Weapon",
"HEROIC VERSE",
"Primitive Vibes",
"Calvados Queen",
"Ska-sh All Neurons!!",
"Moving on",
"Hyper Drive feat. ぷにぷに電機",
"THE BRAVE MUST DIE",
"曼荼羅恋々",
"Silly Love",
"Change Yourself",
"Virus Funk",
"BPL",
"BPL ROUND1",
"BPL APINA VRAMeS",
"BPL SILKHAT",
"BPL レジャーランド",
"BPL SUPER NOVA Tohoku",
"BPL GAME PANIC",
];
export const judge_list: string[] = [
"デフォルト",
"デジタル",
"スマート",
"メタリックブルー",
"テクノ",
"ワイヤー",
"ABYSS",
"SPADA",
"ANCIENT",
"オンリーワンジャッジ",
"電光掲示板風",
"SINOBUZ",
"セグメント",
"Rootage",
"HEROIC VERSE",
];
export const notes_list: string[] = [
"デフォルト",
"細いノーツ",
"極細ノーツ",
"ゴージャス",
"アクア",
"ギャル",
"フォトン",
"パステル",
"シンプルカラー",
"ライト",
"tricoro",
"バブル",
];
export const keybeam_list: string[] = [
"デフォルト",
"ショート",
"ロング",
"オレンジ",
"ピンク",
"モノクロ",
"ベリーショート",
"ライトニング",
"オンリーワンビーム",
"コピュライト",
"CBビーム",
"HVビーム(AC未使用)",
];
export const fullcombo_list: string[] = [
"デフォルト",
"IIDX RED",
"HAPPY SKY",
"DistorteD",
"GOLD",
"DJ TROOPERS",
"EMPRESS",
"SIRIUS",
"Resort Anthem",
"Lincle",
"tricoro",
"SPADA",
"オンリーワンフルコンボ",
"PENDUAL",
"copula",
"SINOBUZ",
"キャノンフィニッシュ",
"Rootage",
"HEROIC VERSE",
];
export const effect_list: string[] = [
"OFF",
"ECHO / REVERB",
"COMPRESSOR / REVERB EX",
"CHORUS / FLANGER",
"GARGLE / DISTORTION",
"EQ ONLY"
];
export const bombsize_list: string[] = [
"100%",
"70%",
"80%",
"90%",
"110%",
"120%",
"130%",
];
export const first_note_preview_list: string[] = [
"default",
"Always ON",
"Always OFF",
];

1
data/settingslist.ts Normal file
View File

@ -0,0 +1 @@
export const ShopRanking_list: string[] = ["PersonalBest","AllProfilesRanking"];

92
handlers/IIDXgrade.ts Normal file
View File

@ -0,0 +1,92 @@
import { grade } from "../models/grade";
import { GetVersion, IIDXidTorefid } from "../util";
import { pc_data } from "../models/pc_data";
export const graderaised: EPR = async (info, data, send) => {
const iidxid = parseInt($(data).attr().iidxid);
const refid = await IIDXidTorefid(iidxid);
const version = GetVersion(info);
const style = parseInt($(data).attr().gtype);
const gid = parseInt($(data).attr().gid);
const cstage = parseInt($(data).attr().cstage);
const achi = parseInt($(data).attr().achi);
const grade = await DB.FindOne<grade>(refid, {
collection: "grade",
version: version,
style: style,
grade: gid,
});
const pc_data = await DB.FindOne<pc_data>(refid, {
collection: "pc_data",
version: version,
});
if (grade) {
if (cstage <= grade.dArray[2]) {
let archmax = Math.max(achi, grade.dArray[3]);
let cstagemax = Math.max(cstage, grade.dArray[2]);
await DB.Upsert<grade>(
refid,
{
collection: "grade",
version: version,
style: style,
grade: gid,
},
{
$set: {
version: version,
style: style,
grade: gid,
dArray: [style, gid, cstagemax, archmax],
},
}
);
}
} else {
await DB.Upsert<grade>(
refid,
{
collection: "grade",
version: version,
style: style,
grade: gid,
},
{
$set: {
version: version,
style: style,
grade: gid,
dArray: [style, gid, cstage, achi],
},
}
);
}
if (cstage == 4 && style == 0 && pc_data.sgid < gid) {
await DB.Upsert<pc_data>(
refid,
{
collection: "pc_data",
version: version,
},
{
$set: {
sgid: gid,
},
}
);
} else if (cstage == 4 && style == 1 && pc_data.dgid < gid) {
await DB.Upsert<pc_data>(
refid,
{
collection: "pc_data",
version: version,
},
{
$set: {
dgid: gid,
},
}
);
}
send.object(K.ATTR({ pnum: "1337" }));
};

493
handlers/IIDXmusic.ts Normal file
View File

@ -0,0 +1,493 @@
import { score, score_detail } from "../models/score";
import { profile } from "../models/profile";
import { shop_data } from "../models/shop_data";
import {
base64decode,
ClidToRank,
GetVersion,
IIDXidTorefid,
DateToName,
refidToName,
} from "../util";
import { pc_data } from "../models/pc_data";
import { ShopRanking_list } from "../data/settingslist";
export const musicreg: EPR = async (info, data, send) => {
const iidxid = parseInt($(data).attr().iidxid);
const version = GetVersion(info);
const refid = await IIDXidTorefid(iidxid);
const profile = await DB.FindOne<profile>(refid, {
collection: "profile",
});
const shop_data = await DB.FindOne<shop_data>({
collection: "shop_data",
});
const pc_data = await DB.FindOne<pc_data>(refid, {
collection: "pc_data",
version: version,
});
const qpro = {
head: U.GetConfig("qpro_head"),
hair: U.GetConfig("qpro_hair"),
hand: U.GetConfig("qpro_hand"),
face: U.GetConfig("qpro_face"),
body: U.GetConfig("qpro_body"),
};
//譜面難易度(0がSPビギナー 4がSPレジェンダリア 5がDPビギナー(該当曲無し) 9がDPレジェンダリア)
const clid = parseInt($(data).attr().clid);
//musicid
const music_id = parseInt($(data).element("music_play_log").attr().music_id);
//SPが0 DPが1
const style = parseInt($(data).element("music_play_log").attr().play_style);
//譜面難易度(0がビギナー 4がレジェンダリア)
const rank = parseInt($(data).element("music_play_log").attr().note_id);
//クリア(0:noplay 1:failed 2:assisted 3:easy 4:normal 5:hard 6:exhard 7:fc)
const clear = parseInt($(data).element("music_play_log").attr().clear_flg);
//exscore
const exscore = parseInt($(data).element("music_play_log").attr().ex_score);
//ミスカウント
const miss = parseInt($(data).element("music_play_log").attr().miss_num);
//途中落ちかどうか(途中落ち:0 完走:1)
const is_sudden_death = !$(data)
.element("music_play_log")
.bool("is_sudden_death");
//ゴースト(base64)
const ghost = $(data)
.element("music_play_log")
.buffer("ghost")
.toString("base64");
let mArray = [-1, music_id, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1];
let dbflg = 0;
let update = 1;
const music_data: score | null = await DB.FindOne<score>(refid, {
collection: "score",
music_id: music_id,
});
const score_temp: score_detail | null = await DB.FindOne<score_detail>(
refid,
{
collection: "score_detail",
music_id: music_id,
clid: clid,
}
);
//mArrayがDB内に見つかったら代入
if (music_data) {
if (style == 0 && music_data.spmArray) {
mArray = music_data.spmArray;
dbflg = 1;
if (
_.isNil(score_temp) &&
(music_data.spmArray[rank + 2] != 0 ||
music_data.spmArray[rank + 7] != 0)
) {
await DB.Insert<score_detail>(refid, {
collection: "score_detail",
music_id: music_id,
clid: clid,
score: music_data.spmArray[rank + 7],
clflg: music_data.spmArray[rank + 2],
miss: music_data.spmArray[rank + 12],
time: Date.now() - 86400000,
});
}
} else if (style == 1 && music_data.dpmArray) {
mArray = music_data.dpmArray;
dbflg = 1;
if (
_.isNil(score_temp) &&
(music_data.dpmArray[rank + 2] != 0 ||
music_data.spmArray[rank + 7] != 0)
) {
await DB.Insert<score_detail>(refid, {
collection: "score_detail",
music_id: music_id,
clid: clid,
score: music_data.dpmArray[rank + 7],
clflg: music_data.dpmArray[rank + 2],
miss: music_data.dpmArray[rank + 12],
time: Date.now() - 86400000,
});
}
}
}
//クリアランプ
mArray[rank + 2] = Math.max(clear, mArray[rank + 2]);
// 完走の場合ミスカウントセーブ
if (is_sudden_death) {
// -1の場合大小比較出来ない為
if (mArray[rank + 12] == -1) {
mArray[rank + 12] = miss;
} else {
mArray[rank + 12] = Math.min(mArray[rank + 12], miss);
}
}
if (style == 0) {
if (mArray[rank + 7] < exscore || dbflg == 0) {
//スコア
mArray[rank + 7] = Math.max(exscore, mArray[rank + 7]);
await DB.Upsert<score>(
refid,
{
collection: "score",
music_id: music_id,
},
{
$set: {
music_id: music_id,
spmArray: mArray,
[clid]: ghost,
},
}
);
} else {
mArray[rank + 7] = Math.max(exscore, mArray[rank + 7]);
update = 0;
await DB.Upsert<score>(
refid,
{
collection: "score",
music_id: music_id,
},
{
$set: {
music_id: music_id,
spmArray: mArray,
},
}
);
}
} else if (style == 1) {
if (mArray[rank + 7] < exscore || dbflg == 0) {
mArray[rank + 7] = Math.max(exscore, mArray[rank + 7]);
await DB.Upsert<score>(
refid,
{
collection: "score",
music_id: music_id,
},
{
$set: {
music_id: music_id,
dpmArray: mArray,
[clid]: ghost,
},
}
);
} else {
mArray[rank + 7] = Math.max(exscore, mArray[rank + 7]);
update = 0;
await DB.Upsert<score>(
refid,
{
collection: "score",
music_id: music_id,
},
{
$set: {
music_id: music_id,
dpmArray: mArray,
},
}
);
}
}
//スコア詳細
await DB.Insert<score_detail>(refid, {
collection: "score_detail",
music_id: music_id,
clid: clid,
score: exscore,
clflg: clear,
miss: miss,
time: Date.now(),
});
const result = {
shopdata: K.ATTR({ rank: "1" }),
LDJ: K.ATTR({
clid: "1",
crate: "1000",
frate: "0",
mid: String(music_id),
}),
ranklist: {
data: [],
},
};
//スコア詳細ロード[スコア,クリアランプ]
const scores = (
await DB.Find<score_detail>(refid, {
collection: "score_detail",
music_id: music_id,
clid: clid,
})
).map((r) => [r.score, r.clflg, r.time]);
scores.sort((a, b) => b[0] - a[0] || a[1] - b[1]);
//スコアが5つの時削除(仮)
if (scores.length >= 5) {
const dscore = scores[4][0];
const dclflg = scores[4][1];
const dtime = scores[4][2];
await DB.Remove<score_detail>(refid, {
collection: "score_detail",
music_id: music_id,
clid: clid,
score: dscore,
clflg: dclflg,
time: dtime,
});
}
if (ShopRanking_list.indexOf(U.GetConfig("ShopRanking")) == 0) {
//今プレイした順位を計算
const currentrank = scores.findIndex(
(item) => item[0] == exscore && item[1] == clear
);
const now = Date.now();
scores.forEach((rankscore, index) => {
if (index == currentrank) {
result.ranklist.data.push(
K.ATTR({
body: qpro.body,
clflg: String(rankscore[1]),
dgrade: String(pc_data.dgid),
face: qpro.face,
hair: qpro.hair,
hand: qpro.hand,
head: qpro.head,
iidx_id: String(profile.iidxid),
myFlg: "1",
name: profile.name,
opname: shop_data.shop_name,
pid: String(profile.pid),
rnum: String(index + 1),
score: String(rankscore[0]),
sgrade: String(pc_data.sgid),
update: String(update),
})
);
} else {
result.ranklist.data.push(
K.ATTR({
body: qpro.body,
clflg: String(rankscore[1]),
dgrade: String(pc_data.dgid),
face: qpro.face,
hair: qpro.hair,
hand: qpro.hand,
head: qpro.head,
iidx_id: String(profile.iidxid),
myFlg: "0",
name: DateToName(now, rankscore[2]),
opname: shop_data.shop_name,
pid: String(profile.pid),
rnum: String(index + 1),
score: String(rankscore[0]),
sgrade: String(pc_data.sgid),
update: "0",
})
);
}
});
} else if (ShopRanking_list.indexOf(U.GetConfig("ShopRanking")) == 1) {
let pscores: any[][];
if (style == 0) {
pscores = (
await DB.Find(null, {
collection: "score",
music_id: music_id,
spmArray: { $exists: true },
})
).map((r) => [r.spmArray[rank + 7], r.spmArray[rank + 2], r.__refid]);
} else if (style == 1) {
pscores = (
await DB.Find(null, {
collection: "score",
music_id: music_id,
dpmArray: { $exists: true },
})
).map((r) => [r.dpmArray[rank + 7], r.dpmArray[rank + 2], r.__refid]);
}
pscores.sort((a, b) => b[0] - a[0]);
const currentrank = pscores.findIndex((item) => item[2] == refid);
pscores = await Promise.all(
pscores.map(async (r) => [r[0], r[1], await refidToName(r[2])])
);
pscores.forEach((rankscore, index) => {
if (index == currentrank) {
result.ranklist.data.push(
K.ATTR({
body: qpro.body,
clflg: String(rankscore[1]),
dgrade: String(pc_data.dgid),
face: qpro.face,
hair: qpro.hair,
hand: qpro.hand,
head: qpro.head,
iidx_id: String(profile.iidxid),
myFlg: "1",
name: profile.name,
opname: shop_data.shop_name,
pid: String(profile.pid),
rnum: String(index + 1),
score: String(rankscore[0]),
sgrade: String(pc_data.sgid),
update: String(update),
})
);
} else if (rankscore[0] != 0 || rankscore[1] != 0) {
result.ranklist.data.push(
K.ATTR({
body: qpro.body,
clflg: String(rankscore[1]),
dgrade: String(pc_data.dgid),
face: qpro.face,
hair: qpro.hair,
hand: qpro.hand,
head: qpro.head,
iidx_id: String(profile.iidxid),
myFlg: "0",
name: rankscore[2],
opname: shop_data.shop_name,
pid: String(profile.pid),
rnum: String(index + 1),
score: String(rankscore[0]),
sgrade: String(pc_data.sgid),
update: "0",
})
);
}
});
}
send.object(result);
};
export const musicgetrank: EPR = async (info, data, send) => {
const cltype = $(data).attr().cltype;
const iidxid = parseInt($(data).attr().iidxid);
const refid = await IIDXidTorefid(iidxid);
const spmArray: any = (
await DB.Find(refid, {
collection: "score",
spmArray: { $exists: true },
})
).map((r) => r.spmArray);
spmArray.sort((a: number, b: number) => a[1] - b[1]);
const dpmArray: any = (
await DB.Find(refid, {
collection: "score",
dpmArray: { $exists: true },
})
).map((r) => r.dpmArray);
dpmArray.sort((a: number, b: number) => a[1] - b[1]);
const result: any = {
style: K.ATTR({ type: cltype }),
m: [],
best: K.ARRAY(
"u16",
[
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
65535,
],
{ rno: "-1" }
),
};
if (cltype == "0") {
spmArray.forEach((m: number[]) => {
result.m.push(K.ARRAY("s16", m));
});
} else if (cltype == "1") {
dpmArray.forEach((m: number[]) => {
result.m.push(K.ARRAY("s16", m));
});
}
send.object(result);
};
export const musicappoint: EPR = async (info, data, send) => {
const iidxid = parseInt($(data).attr().iidxid);
const refid = await IIDXidTorefid(iidxid);
const music_id = parseInt($(data).attr().mid);
const clid = parseInt($(data).attr().clid);
const rank = ClidToRank(clid).rank;
const style = ClidToRank(clid).style;
let ghost: string,
score = 0;
const music_data_sp = await DB.FindOne(refid, {
collection: "score",
music_id: music_id,
spmArray: { $exists: true },
[clid]: { $exists: true },
});
const music_data_dp = await DB.FindOne(refid, {
collection: "score",
music_id: music_id,
dpmArray: { $exists: true },
[clid]: { $exists: true },
});
if (style == 0 && music_data_sp) {
score = music_data_sp.spmArray[rank + 7];
ghost = base64decode(music_data_sp[clid]);
send.object({ mydata: K.ITEM("bin", ghost, { score: String(score) }) });
} else if (style == 1 && music_data_dp) {
score = music_data_dp.dpmArray[rank + 7];
ghost = base64decode(music_data_dp[clid]);
send.object({ mydata: K.ITEM("bin", ghost, { score: String(score) }) });
} else {
send.success();
}
};
export const musiccrate: EPR = async (info, data, send) => {
const version = info.module;
send.pugFile("pug/crate.pug", { version });
};

446
handlers/IIDXpc.ts Normal file
View File

@ -0,0 +1,446 @@
import { settings } from "../models/settings";
import { pc_data, IIDX27_pc_data} from "../models/pc_data";
import { shop_data } from "../models/shop_data";
import { profile } from "../models/profile";
import { grade } from "../models/grade";
import { GetVersion, IDToCode, AppendSettingConverter } from "../util";
import {
first_note_preview_list,
bombsize_list,
effect_list,
} from "../data/27customlist";
import {
frame_list,
fullcombo_list,
judge_list,
keybeam_list,
lanecover_list,
menumusic_list,
noteburst_list,
notes_list,
turntable_list,
} from "../data/27customlist";
export const pccommon: EPR = async (info, data, send) => {
const version = GetVersion(info);
if (version == 27) {
send.pugFile("pug/27pccommon.pug");
}
};
export const pcoldget: EPR = async (info, data, send) => {
const refid = $(data).attr().rid;
const profile = await DB.FindOne<profile>(refid, { collection: "profile" });
if (profile) {
send.success();
} else {
send.deny();
}
};
export const pcgetname: EPR = async (info, data, send) => {
const refid = $(data).attr().rid;
const profile = await DB.FindOne<profile>(refid, { collection: "profile" });
send.object(
K.ATTR({
idstr: profile.iidxidstr,
name: profile.name,
pid: String(profile.pid),
})
);
};
export const pctakeover: EPR = async (info, data, send) => {
const refid = $(data).attr().rid;
const profile = await DB.FindOne<profile>(refid, { collection: "profile" });
const version = GetVersion(info);
let pc_data: object;
if (version == 27) {
pc_data = IIDX27_pc_data;
}
await DB.Upsert<profile>(
refid,
{
collection: "profile",
},
{
$set: {
name: $(data).attr().name,
pid: parseInt($(data).attr().pid),
iidxid: profile.iidxid,
iidxidstr: profile.iidxidstr,
refid: refid,
},
}
);
await DB.Upsert<pc_data>(
refid,
{
collection: "pc_data",
version: version,
},
{
$set: pc_data,
}
);
send.object(
K.ATTR({
id: String(profile.iidxid),
})
);
};
export const pcreg: EPR = async (info, data, send) => {
const id = _.random(10000000, 99999999);
const id_str = IDToCode(id);
const refid = $(data).attr().cid.split('|')[0];
const version = GetVersion(info);
let pc_data: object;
if (version == 27) {
pc_data = IIDX27_pc_data;
}
await DB.Upsert<profile>(
refid,
{
collection: "profile",
},
{
$set: {
name: $(data).attr().name,
pid: parseInt($(data).attr().pid),
iidxid: id,
iidxidstr: id_str,
refid: refid,
},
}
);
await DB.Upsert<pc_data>(
refid,
{
collection: "pc_data",
version: version,
},
{
$set: pc_data,
}
);
send.object(
K.ATTR({
id: id,
id_str: id_str,
// status: "0",
})
);
};
export const pcget: EPR = async (info, data, send) => {
const refid = $(data).attr().rid;
const version = GetVersion(info);
const pc_data = await DB.FindOne<pc_data>(refid, {
collection: "pc_data",
version: version,
});
if (_.isNil(pc_data)) {
send.deny();
} else {
const profile = await DB.FindOne<profile>(refid, { collection: "profile" });
const shop_data = await DB.FindOne<shop_data>({
collection: "shop_data",
});
const dArray = (
await DB.Find<grade>(refid, {
collection: "grade",
version: version,
})
).map((r) => r.dArray);
dArray.sort((a, b) => a[0] - b[0] || a[1] - b[1]);
const settings: settings = {
frame: frame_list.indexOf(U.GetConfig("frame")),
menu_music: menumusic_list.indexOf(U.GetConfig("menu_music")),
note_burst: noteburst_list.indexOf(U.GetConfig("note_burst")),
turntable: turntable_list.indexOf(U.GetConfig("turntable")),
lane_cover: lanecover_list.indexOf(U.GetConfig("lane_cover")),
pacemaker_cover: lanecover_list.indexOf(U.GetConfig("pacemaker_cover")),
note_skin: notes_list.indexOf(U.GetConfig("note_skin")),
judge_font: judge_list.indexOf(U.GetConfig("judge_font")),
note_beam: keybeam_list.indexOf(U.GetConfig("note_beam")),
full_combo_splash: fullcombo_list.indexOf(
U.GetConfig("full_combo_splash")
),
score_folders: Boolean(U.GetConfig("score_folders")),
clear_folders: Boolean(U.GetConfig("clear_folders")),
difficulty_folders: Boolean(U.GetConfig("difficulty_folders")),
alphabet_folders: Boolean(U.GetConfig("alphabet_folders")),
hide_playcount: Boolean(U.GetConfig("hide_playcount")),
disable_graphcutin: Boolean(U.GetConfig("disable_graphcutin")),
classic_hispeed: Boolean(U.GetConfig("classic_hispeed")),
hide_iidxid: Boolean(U.GetConfig("hide_iidxid")),
disable_musicpreview: Number(U.GetConfig("disable_musicpreview")),
vefx_lock: Number(U.GetConfig("vefx_lock")),
effect: effect_list.indexOf(U.GetConfig("effect")),
bomb_size: bombsize_list.indexOf(U.GetConfig("bomb_size")),
disable_hcn_color: Number(U.GetConfig("disable_hcn_color")),
first_note_preview: first_note_preview_list.indexOf(
U.GetConfig("first_note_preview")
),
qpro_head: U.GetConfig("qpro_head"),
qpro_hair: U.GetConfig("qpro_hair"),
qpro_hand: U.GetConfig("qpro_hand"),
qpro_face: U.GetConfig("qpro_face"),
qpro_body: U.GetConfig("qpro_body"),
};
const appendsetting = AppendSettingConverter(
settings.score_folders,
settings.clear_folders,
settings.difficulty_folders,
settings.alphabet_folders,
settings.hide_playcount,
settings.disable_graphcutin,
settings.classic_hispeed,
settings.hide_iidxid
);
if (version == 27) {
send.pugFile("pug/27get.pug", {
settings,
profile,
appendsetting,
pc_data,
shop_data,
dArray,
});
}
}
};
export const pcsave: EPR = async (info, data, send) => {
const refid = $(data).attr().cid.split('|')[0];
const cltype = parseInt($(data).attr().cltype);
const version = GetVersion(info);
const pc_data = await DB.FindOne<pc_data>(refid, {
collection: "pc_data",
version: version,
});
let spnum = pc_data.spnum,
dpnum = pc_data.dpnum,
sprank = pc_data.sprank,
sppoint = pc_data.sppoint,
dprank = pc_data.dprank,
dppoint = pc_data.dppoint,
spradar = pc_data.spradar,
dpradar = pc_data.dpradar,
dp_clear_mission_clear = pc_data.dp_clear_mission_clear,
dp_clear_mission_level = pc_data.dp_clear_mission_level,
dp_dj_mission_clear = pc_data.dp_dj_mission_clear,
dp_dj_mission_level = pc_data.dp_dj_mission_level,
dp_level = pc_data.dp_level,
dp_mission_point = pc_data.dp_mission_point,
dp_mplay = pc_data.dp_mplay,
enemy_damage = pc_data.enemy_damage,
progress = pc_data.progress,
sp_clear_mission_clear = pc_data.sp_clear_mission_clear,
sp_clear_mission_level = pc_data.sp_clear_mission_level,
sp_dj_mission_clear = pc_data.sp_dj_mission_clear,
sp_dj_mission_level = pc_data.sp_dj_mission_level,
sp_level = pc_data.sp_level,
sp_mission_point = pc_data.sp_mission_point,
sp_mplay = pc_data.sp_mplay,
tips_read_list = pc_data.tips_read_list;
let d_liflen = 0,
s_liflen = 0,
ngrade = 0;
if (cltype == 0) {
spnum = pc_data.spnum + 1;
dpnum = pc_data.dpnum;
}
if (cltype == 1) {
spnum = pc_data.spnum + 1;
//dpnumって何
dpnum = pc_data.dpnum + 1;
}
//liflenが存在したとき
if ($(data).attr().d_lift) {
d_liflen = parseInt($(data).attr().d_lift);
}
if ($(data).attr().s_lift) {
s_liflen = parseInt($(data).attr().s_lift);
}
if (!_.isNil($(data).attr("step").dp_clear_mission_clear)) {
dp_clear_mission_clear = parseInt(
$(data).attr("step").dp_clear_mission_clear
);
dp_clear_mission_level = parseInt(
$(data).attr("step").dp_clear_mission_level
);
dp_dj_mission_clear = parseInt($(data).attr("step").dp_dj_mission_clear);
dp_dj_mission_level = parseInt($(data).attr("step").dp_dj_mission_level);
dp_level = parseInt($(data).attr("step").dp_level);
dp_mission_point = parseInt($(data).attr("step").dp_mission_point);
dp_mplay = parseInt($(data).attr("step").dp_mplay);
enemy_damage = parseInt($(data).attr("step").enemy_damage);
progress = parseInt($(data).attr("step").progress);
sp_clear_mission_clear = parseInt(
$(data).attr("step").sp_clear_mission_clear
);
sp_clear_mission_level = parseInt(
$(data).attr("step").sp_clear_mission_level
);
sp_dj_mission_clear = parseInt($(data).attr("step").sp_dj_mission_clear);
sp_dj_mission_level = parseInt($(data).attr("step").sp_dj_mission_level);
sp_level = parseInt($(data).attr("step").sp_level);
sp_mission_point = parseInt($(data).attr("step").sp_mission_point);
sp_mplay = parseInt($(data).attr("step").sp_mplay);
tips_read_list = parseInt($(data).attr("step").tips_read_list);
}
if ($(data).attr("dj_rank.1").style == "1") {
sprank = $(data).element("dj_rank").numbers("rank");
sppoint = $(data).element("dj_rank").numbers("point");
dprank = $(data).element("dj_rank.1").numbers("rank");
dppoint = $(data).element("dj_rank.1").numbers("point");
} else if ($(data).attr("dj_rank").style == "0") {
sprank = $(data).element("dj_rank").numbers("rank");
sppoint = $(data).element("dj_rank").numbers("point");
dprank = pc_data.dprank;
dppoint = pc_data.dppoint;
} else if ($(data).attr("dj_rank").style == "1") {
sprank = pc_data.sprank;
sppoint = pc_data.sppoint;
dprank = $(data).element("dj_rank").numbers("rank");
dppoint = $(data).element("dj_rank").numbers("point");
} else {
sprank = pc_data.sprank;
sppoint = pc_data.sppoint;
dprank = pc_data.dprank;
dppoint = pc_data.dppoint;
}
if ($(data).attr("notes_radar.1").style == "1") {
spradar = $(data).element("notes_radar").numbers("radar_score");
dpradar = $(data).element("notes_radar.1").numbers("radar_score");
} else if ($(data).attr("notes_radar").style == "0") {
spradar = $(data).element("notes_radar").numbers("radar_score");
dpradar = pc_data.dpradar;
} else if ($(data).attr("notes_radar").style == "1") {
spradar = pc_data.spradar;
dpradar = $(data).element("notes_radar").numbers("radar_score");
} else {
spradar = pc_data.spradar;
dpradar = pc_data.dpradar;
}
if (version == 27) {
await DB.Upsert<pc_data>(
refid,
{
collection: "pc_data",
version: version,
},
{
$set: {
deller:
pc_data.deller + parseInt($(data).element("deller").attr().deller),
trophy: $(data)
.element("achievements")
.bigints("trophy")
.slice(0, 10)
.map(String),
sprank: sprank,
sppoint: sppoint,
dprank: dprank,
dppoint: dppoint,
spradar: spradar,
dpradar: dpradar,
dp_clear_mission_clear: dp_clear_mission_clear,
dp_clear_mission_level: dp_clear_mission_level,
dp_dj_mission_clear: dp_dj_mission_clear,
dp_dj_mission_level: dp_dj_mission_level,
dp_level: dp_level,
dp_mission_point: dp_mission_point,
dp_mplay: dp_mplay,
enemy_damage: enemy_damage,
progress: progress,
sp_clear_mission_clear: sp_clear_mission_clear,
sp_clear_mission_level: sp_clear_mission_level,
sp_dj_mission_clear: sp_dj_mission_clear,
sp_dj_mission_level: sp_dj_mission_level,
sp_level: sp_level,
sp_mission_point: sp_mission_point,
sp_mplay: sp_mplay,
tips_read_list: tips_read_list,
dpnum: dpnum,
d_auto_scrach: parseInt($(data).attr().d_auto_scrach),
d_camera_layout: parseInt($(data).attr().d_camera_layout),
d_disp_judge: parseInt($(data).attr().d_disp_judge),
d_gauge_disp: parseInt($(data).attr().d_gauge_disp),
d_ghost_score: parseInt($(data).attr().d_ghost_score),
d_gno: parseInt($(data).attr().d_gno),
d_graph_score: parseInt($(data).attr().d_graph_score),
d_gtype: parseInt($(data).attr().d_gtype),
d_hispeed: parseFloat($(data).attr().d_hispeed),
d_judge: parseInt($(data).attr().d_judge),
d_judgeAdj: parseInt($(data).attr().d_judgeAdj),
d_lane_brignt: parseInt($(data).attr().d_lane_brignt),
d_liflen: d_liflen,
d_notes: parseFloat($(data).attr().d_notes),
d_opstyle: parseInt($(data).attr().d_opstyle),
d_pace: parseInt($(data).attr().d_pace),
d_sdlen: parseInt($(data).attr().d_sdlen),
d_sdtype: parseInt($(data).attr().d_sdtype),
d_sorttype: parseInt($(data).attr().d_sorttype),
d_timing: parseInt($(data).attr().d_timing),
d_tsujigiri_disp: parseInt($(data).attr().d_tsujigiri_disp),
dach: parseInt($(data).attr().d_achi),
dp_opt: $(data).attr().dp_opt,
dp_opt2: $(data).attr().dp_opt2,
d_sub_gno: parseInt($(data).attr().d_sub_gno),
gpos: parseInt($(data).attr().gpos),
mode: parseInt($(data).attr().mode),
pmode: parseInt($(data).attr().pmode),
rtype: parseInt($(data).attr().rtype),
spnum: spnum,
s_auto_scrach: parseInt($(data).attr().s_auto_scrach),
s_camera_layout: parseInt($(data).attr().s_camera_layout),
s_disp_judge: parseInt($(data).attr().s_disp_judge),
s_gauge_disp: parseInt($(data).attr().s_gauge_disp),
s_ghost_score: parseInt($(data).attr().s_ghost_score),
s_gno: parseInt($(data).attr().s_gno),
s_graph_score: parseInt($(data).attr().s_graph_score),
s_gtype: parseInt($(data).attr().s_gtype),
s_hispeed: parseFloat($(data).attr().s_hispeed),
s_judge: parseInt($(data).attr().s_judge),
s_judgeAdj: parseInt($(data).attr().s_judgeAdj),
s_lane_brignt: parseInt($(data).attr().s_lane_brignt),
s_liflen: s_liflen,
s_notes: parseFloat($(data).attr().s_notes),
s_opstyle: parseInt($(data).attr().s_opstyle),
s_pace: parseInt($(data).attr().s_pace),
s_sdlen: parseInt($(data).attr().s_sdlen),
s_sdtype: parseInt($(data).attr().s_sdtype),
s_sorttype: parseInt($(data).attr().s_sorttype),
s_timing: parseInt($(data).attr().s_timing),
s_tsujigiri_disp: parseInt($(data).attr().s_tsujigiri_disp),
sach: parseInt($(data).attr().s_achi),
sp_opt: $(data).attr().sp_opt,
s_sub_gno: parseInt($(data).attr().s_sub_gno),
},
}
);
}
send.success();
};

77
handlers/IIDXshop.ts Normal file
View File

@ -0,0 +1,77 @@
import { shop_data } from "../models/shop_data";
export const shopgetname: EPR = async (info, data, send) => {
// バージョン
console.debug(`Version:${info.module.substr(0, 6)}`);
const shop_data = await DB.FindOne<shop_data>({
collection: "shop_data",
});
const shop_data_old = await DB.FindOne<shop_data>(null, {
collection: "shop_data",
});
if(shop_data_old){
await DB.Remove<shop_data>(null, {
collection: "shop_data",
});
}
if (_.isNil(shop_data)) {
await DB.Insert<shop_data>({
collection: "shop_data",
shop_name: "",
});
send.object(
K.ATTR({
cls_opt: "0",
hr: "0",
mi: "0",
opname: "",
pid: "57",
// status: "0",
})
);
} else {
send.object(
K.ATTR({
cls_opt: "0",
hr: "0",
mi: "0",
opname: shop_data.shop_name,
pid: "57",
// status: "0",
})
);
}
};
export const shopgetconvention: EPR = async (info, data, send) => {
send.object(
K.ATTR(
{
end_time: "0",
music_0: "23051",
music_1: "24010",
music_2: "12004",
music_3: "26007",
start_time: "0",
// status: "0",
},
{
valid: K.ITEM("bool", 0),
}
)
);
};
export const shopsavename: EPR = async (info, data, send) => {
await DB.Upsert<shop_data>(
{
collection: "shop_data",
},
{
$set: {
shop_name: $(data).attr().opname,
},
}
);
send.success();
};

199
index.ts Normal file
View File

@ -0,0 +1,199 @@
import {
shopgetname,
shopgetconvention,
shopsavename,
} from "./handlers/IIDXshop";
import {
pccommon,
pcoldget,
pcreg,
pcget,
pcsave,
pctakeover,
pcgetname,
} from "./handlers/IIDXpc";
import {
effect_list,
frame_list,
fullcombo_list,
judge_list,
keybeam_list,
lanecover_list,
menumusic_list,
noteburst_list,
notes_list,
turntable_list,
} from "./data/27customlist";
import {
musicreg,
musicgetrank,
musicappoint,
musiccrate,
} from "./handlers/IIDXmusic";
import { graderaised } from "./handlers/IIDXgrade";
import { bombsize_list, first_note_preview_list } from "./data/27customlist";
import { ShopRanking_list } from "./data/settingslist";
export function register() {
R.Contributor("sol#1207", "https://twitter.com/0x1F5");
R.Config("ShopRanking", {
type: "string",
default: "PersonalBest",
options: ShopRanking_list,
});
R.Config("frame", {
type: "string",
default: "デフォルト",
options: frame_list,
});
R.Config("menu_music", {
type: "string",
default: "デフォルト",
options: menumusic_list,
});
R.Config("note_burst", {
type: "string",
default: "デフォルト",
options: noteburst_list,
});
R.Config("turntable", {
type: "string",
default: "デフォルト",
options: turntable_list,
});
R.Config("lane_cover", {
type: "string",
default: "デフォルト",
options: lanecover_list,
});
R.Config("pacemaker_cover", {
type: "string",
default: "デフォルト",
options: lanecover_list,
});
R.Config("note_skin", {
type: "string",
default: "デフォルト",
options: notes_list,
});
R.Config("judge_font", {
type: "string",
default: "デフォルト",
options: judge_list,
});
R.Config("note_beam", {
type: "string",
default: "デフォルト",
options: keybeam_list,
});
R.Config("full_combo_splash", {
type: "string",
default: "デフォルト",
options: fullcombo_list,
});
R.Config("score_folders", { type: "boolean", default: true });
R.Config("clear_folders", { type: "boolean", default: true });
R.Config("difficulty_folders", { type: "boolean", default: true });
R.Config("alphabet_folders", { type: "boolean", default: true });
R.Config("hide_playcount", { type: "boolean", default: false });
R.Config("disable_graphcutin", { type: "boolean", default: false });
R.Config("classic_hispeed", { type: "boolean", default: false });
R.Config("hide_iidxid", { type: "boolean", default: false });
R.Config("disable_musicpreview", { type: "boolean", default: false });
R.Config("vefx_lock", { type: "boolean", default: false });
R.Config("effect", {
type: "string",
default: "OFF",
options: effect_list,
});
R.Config("bomb_size", {
type: "string",
default: "100%",
options: bombsize_list,
});
R.Config("disable_hcn_color", { type: "boolean", default: false });
R.Config("first_note_preview", {
type: "string",
default: "default",
options: first_note_preview_list,
});
R.Config("qpro_head", { type: "integer", default: 0 });
R.Config("qpro_hair", { type: "integer", default: 0 });
R.Config("qpro_hand", { type: "integer", default: 0 });
R.Config("qpro_face", { type: "integer", default: 0 });
R.Config("qpro_body", { type: "integer", default: 0 });
R.GameCode("LDJ");
const MultiRoute = (method: string, handler: EPR | boolean) => {
// Helper for register multiple versions.
R.Route(`IIDX27${method}`, handler);
//R.Route(`IIDXのバージョン${method}`, handler);
};
//pc
MultiRoute("pc.get", pcget);
MultiRoute("pc.reg", pcreg);
//MultiRoute("pc.lcommon", true);
MultiRoute("pc.save", pcsave);
MultiRoute("pc.getname", pcgetname);
//MultiRoute("pc.locaend", true);
MultiRoute("pc.common", pccommon);
MultiRoute("pc.takeover", pctakeover);
//MultiRoute("pc.playstart", true);
//MultiRoute("pc.playend", true);
MultiRoute("pc.delete", true);
//MultiRoute("pc.visit", true);
//MultiRoute("pc.shopregister", true);
MultiRoute("pc.oldget", pcoldget);
MultiRoute("pc.eaappliresult", true);
MultiRoute("pc.eaappliexpert", true);
MultiRoute("pc.logout", true);
//MultiRoute("pc.qrreward", true);
//MultiRoute("pc.qrcompe", true);
//MultiRoute("pc.qrfollow", true);
//music
MultiRoute("music.getrank", musicgetrank);
//MultiRoute("music.lplay", true);
//MultiRoute("music.play", true);
MultiRoute("music.reg", musicreg);
MultiRoute("music.crate", musiccrate);
MultiRoute("music.appoint", musicappoint);
//MultiRoute("music.nosave", true);
//MultiRoute("music.arenaCPU", true);
//grade
MultiRoute("grade.raised", graderaised);
//shop
MultiRoute("shop.sentinfo", true);
//MultiRoute("shop.keepalive", true);
MultiRoute("shop.savename", shopsavename);
MultiRoute("shop.getname", shopgetname);
//MultiRoute("shop.setconvention", true);
MultiRoute("shop.getconvention", shopgetconvention);
//MultiRoute("shop.sendpcbdetail", true);
MultiRoute("shop.sendescapepackageinfo", true);
//MultiRoute("shop.recoveryfilelog", true);
//ranking
//MultiRoute("ranking.entry", true);
//MultiRoute("ranking.oentry", true);
MultiRoute("ranking.getranker", true);
//MultiRoute("ranking.classicentry", true);
//MultiRoute("ranking.conventionentry", true);
//lobby
//MultiRoute("lobby.entry", true);
//MultiRoute("lobby.update", true);
//MultiRoute("lobby.delete", true);
//gameSystem
MultiRoute("gameSystem.systemInfo", true);
R.Unhandled();
}

8
models/grade.ts Normal file
View File

@ -0,0 +1,8 @@
export interface grade {
collection: "grade";
version: number;
style: number,
grade: number,
dArray: number[];
}

194
models/pc_data.ts Normal file
View File

@ -0,0 +1,194 @@
export interface pc_data {
collection: "pc_data";
version: number;
sgid: number;
dgid: number;
deller: number;
trophy: string[];
sprank: number[];
sppoint: number[];
dprank: number[];
dppoint: number[];
spradar: number[];
dpradar: number[];
dp_clear_mission_clear: number;
dp_clear_mission_level: number;
dp_dj_mission_clear: number;
dp_dj_mission_level: number;
dp_level: number;
dp_mission_point: number;
dp_mplay: number;
enemy_damage: number;
progress: number;
sp_clear_mission_clear: number;
sp_clear_mission_level: number;
sp_dj_mission_clear: number;
sp_dj_mission_level: number;
sp_level: number;
sp_mission_point: number;
sp_mplay: number;
tips_read_list: number;
dpnum: number;
d_auto_scrach: number;
d_camera_layout: number;
d_disp_judge: number;
d_gauge_disp: number;
d_ghost_score: number;
d_gno: number;
d_graph_score: number;
d_gtype: number;
d_hispeed: number;
d_judge: number;
d_judgeAdj: number;
d_lane_brignt: number;
d_liflen: number;
d_notes: number;
d_opstyle: number;
d_pace: number;
d_sdlen: number;
d_sdtype: number;
d_sorttype: number;
d_timing: number;
d_tsujigiri_disp: number;
dach: number;
dp_opt: string;
dp_opt2: string;
d_exscore: number;
d_sub_gno: number;
d_tune: number;
gpos: number;
mode: number;
pmode: number;
rtype: number;
ngrade: number;
spnum: number;
s_auto_scrach: number;
s_camera_layout: number;
s_disp_judge: number;
s_gauge_disp: number;
s_ghost_score: number;
s_gno: number;
s_graph_score: number;
s_gtype: number;
s_hispeed: number;
s_judge: number;
s_judgeAdj: number;
s_lane_brignt: number;
s_liflen: number;
s_notes: number;
s_opstyle: number;
s_pace: number;
s_sdlen: number;
s_sdtype: number;
s_sorttype: number;
s_timing: number;
s_tsujigiri_disp: number;
sach: number;
sp_opt: string;
s_exscore: number;
s_sub_gno: number;
s_tune: number;
}
export const IIDX27_pc_data = {
version: 27,
deller: 0,
sgid: -1,
dgid: -1,
trophy: ["0", "0", "0", "0", "0", "0", "0", "0", "0", "0"],
sprank: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
sppoint: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
dprank: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
dppoint: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
spradar: [0, 0, 0, 0, 0, 0],
dpradar: [0, 0, 0, 0, 0, 0],
dp_clear_mission_clear: 0,
dp_clear_mission_level: 0,
dp_dj_mission_clear: 0,
dp_dj_mission_level: 0,
dp_level: 0,
dp_mission_point: 0,
dp_mplay: 0,
enemy_damage: 0,
progress: 0,
sp_clear_mission_clear: 0,
sp_clear_mission_level: 0,
sp_dj_mission_clear: 0,
sp_dj_mission_level: 0,
sp_level: 0,
sp_mission_point: 0,
sp_mplay: 0,
tips_read_list: 0,
dpnum: 0,
d_auto_scrach: 0,
d_camera_layout: 0,
d_disp_judge: 0,
d_gauge_disp: 0,
d_ghost_score: 0,
d_gno: 0,
d_graph_score: 0,
d_gtype: 0,
d_hispeed: 0,
d_judge: 0,
d_judgeAdj: 0,
d_lane_brignt: 0,
d_liflen: 0,
d_notes: 0,
d_opstyle: 0,
d_pace: 0,
d_sdlen: 0,
d_sdtype: 0,
d_sorttype: 0,
d_timing: 0,
d_tsujigiri_disp: 0,
dach: 0,
dp_opt: "0",
dp_opt2: "0",
d_sub_gno: 0,
d_tune: 0,
gpos: 0,
mode: 0,
pmode: 0,
rtype: 0,
spnum: 0,
s_auto_scrach: 0,
s_camera_layout: 0,
s_disp_judge: 0,
s_gauge_disp: 0,
s_ghost_score: 0,
s_gno: 0,
s_graph_score: 0,
s_gtype: 0,
s_hispeed: 0,
s_judge: 0,
s_judgeAdj: 0,
s_lane_brignt: 0,
s_liflen: 0,
s_notes: 0,
s_opstyle: 0,
s_pace: 0,
s_sdlen: 0,
s_sdtype: 0,
s_sorttype: 0,
s_timing: 0,
s_tsujigiri_disp: 0,
sach: 0,
sp_opt: "0",
s_sub_gno: 0,
s_tune: 0,
};

9
models/profile.ts Normal file
View File

@ -0,0 +1,9 @@
export interface profile {
collection: "profile";
name: string;
pid: number;
iidxid: number;
iidxidstr: string;
refid: string;
}

21
models/score.ts Normal file
View File

@ -0,0 +1,21 @@
export interface score {
collection: "score";
music_id: number;
spmArray: number[];
dpmArray: number[];
}
export interface score_detail {
collection: "score_detail";
music_id: number;
clid: number;
score: number;
clflg: number;
miss: number;
time: number;
}

32
models/settings.ts Normal file
View File

@ -0,0 +1,32 @@
export interface settings {
frame: number;
menu_music: number;
note_burst: number;
turntable: number;
lane_cover: number;
pacemaker_cover: number;
note_skin: number;
judge_font: number;
note_beam: number;
full_combo_splash: number;
score_folders: boolean;
clear_folders: boolean;
difficulty_folders: boolean;
alphabet_folders: boolean;
hide_playcount: boolean;
disable_graphcutin: boolean;
classic_hispeed: boolean;
hide_iidxid: boolean;
disable_musicpreview: number;
vefx_lock: number;
effect: number;
bomb_size: number;
disable_hcn_color: number;
first_note_preview: number;
qpro_head: number;
qpro_hair: number;
qpro_hand: number;
qpro_face: number;
qpro_body: number;
}

5
models/shop_data.ts Normal file
View File

@ -0,0 +1,5 @@
export interface shop_data {
collection: "shop_data";
shop_name: string;
}

58
pug/27get.pug Normal file
View File

@ -0,0 +1,58 @@
IIDX27pc(status="0")
pcdata(d_auto_scrach=pc_data.d_auto_scrach d_camera_layout=pc_data.d_camera_layout d_disp_judge=pc_data.d_disp_judge d_gauge_disp=pc_data.d_gauge_disp d_ghost_score=pc_data.d_ghost_score d_gno=pc_data.d_gno d_graph_score=pc_data.d_graph_score d_gtype=pc_data.d_gtype d_hispeed=pc_data.d_hispeed d_judge=pc_data.d_judge d_judgeAdj=pc_data.d_judgeAdj d_lane_brignt=pc_data.d_lane_brignt d_liflen=pc_data.d_liflen d_notes=pc_data.d_notes d_opstyle=pc_data.d_opstyle d_pace=pc_data.d_pace d_sdlen=pc_data.d_sdlen d_sdtype=pc_data.d_sdtype d_sorttype=pc_data.d_sorttype d_sub_gno=pc_data.d_sub_gno d_timing=pc_data.d_timing d_tsujigiri_disp=pc_data.d_tsujigiri_disp d_tune=pc_data.d_tune dach=pc_data.dach dp_opt=pc_data.dp_opt dp_opt2=pc_data.dp_opt2 dpnum=0 gpos=pc_data.gpos id=profile.iidxid idstr=profile.iidxidstr mode=pc_data.mode name=profile.name pid=profile.pid pmode=pc_data.pmode rtype=pc_data.rtype s_auto_scrach=pc_data.s_auto_scrach s_camera_layout=pc_data.s_camera_layout s_disp_judge=pc_data.s_disp_judge s_gauge_disp=pc_data.s_gauge_disp s_ghost_score=pc_data.s_ghost_score s_gno=pc_data.s_gno s_graph_score=pc_data.s_graph_score s_gtype=pc_data.s_gtype s_hispeed=pc_data.s_hispeed s_judge=pc_data.s_judge s_judgeAdj=pc_data.s_judgeAdj s_lane_brignt=pc_data.s_lane_brignt s_liflen=pc_data.s_liflen s_notes=pc_data.s_notes s_opstyle=pc_data.s_opstyle s_pace=pc_data.s_pace s_sdlen=pc_data.s_sdlen s_sdtype=pc_data.s_sdtype s_sorttype=pc_data.s_sorttype s_sub_gno=pc_data.s_sub_gno s_timing=pc_data.s_timing s_tsujigiri_disp=pc_data.s_tsujigiri_disp s_tune=pc_data.s_tune sach=pc_data.sach sp_opt=pc_data.sp_opt spnum=pc_data.spnum)
join_shop(join_cflg="1" join_id="ea" join_name=shop_data.shop_name joinflg="1")
grade(sgid=pc_data.sgid dgid=pc_data.dgid)
- for (let d of dArray)
g(__type="u8" __count="4") #{d[0]} #{d[1]} #{d[2]} #{d[3]}
deller(deller=pc_data.deller rate="0")
rlist
ir_data
secret_course_data
secret
flg1(__type="s64" __count="3") 0 0 0
flg2(__type="s64" __count="3") 0 0 0
flg3(__type="s64" __count="3") 0 0 0
flg4(__type="s64" __count="3") 0 0 0
achievements(last_weekly="0" pack="0" pack_comp="0" rival_crush="0" visit_flg="0" weekly_num="0")
trophy(__type="s64" __count="20") #{pc_data.trophy[0]} #{pc_data.trophy[1]} #{pc_data.trophy[2]} #{pc_data.trophy[3]} #{pc_data.trophy[4]} #{pc_data.trophy[5]} #{pc_data.trophy[6]} #{pc_data.trophy[7]} #{pc_data.trophy[8]} #{pc_data.trophy[9]}
expert_point
classic_course_data
qprodata(__type="u32" __count="5") #{settings.qpro_head} #{settings.qpro_hair} #{settings.qpro_face} #{settings.qpro_hand} #{settings.qpro_body}
step(dp_clear_mission_clear=pc_data.dp_clear_mission_clear dp_clear_mission_level=pc_data.dp_clear_mission_level dp_dj_mission_clear=pc_data.dp_dj_mission_clear dp_dj_mission_level=pc_data.dp_dj_mission_level dp_level=pc_data.dp_level dp_mission_point=pc_data.dp_mission_point dp_mplay=pc_data.dp_mplay enemy_damage=pc_data.enemy_damage progress=pc_data.progress sp_clear_mission_clear=pc_data.sp_clear_mission_clear sp_clear_mission_level=pc_data.sp_clear_mission_level sp_dj_mission_clear=pc_data.sp_dj_mission_clear sp_dj_mission_level=pc_data.sp_dj_mission_level sp_level=pc_data.sp_level sp_mission_point=pc_data.sp_mission_point sp_mplay=pc_data.sp_mplay tips_read_list=pc_data.tips_read_list)
is_track_ticket(__type="bool") 1
dj_rank(style="0")
rank(__type="s32" __count="15") #{pc_data.sprank[0]} #{pc_data.sprank[1]} #{pc_data.sprank[2]} #{pc_data.sprank[3]} #{pc_data.sprank[4]} #{pc_data.sprank[5]} #{pc_data.sprank[6]} #{pc_data.sprank[7]} #{pc_data.sprank[8]} #{pc_data.sprank[9]} #{pc_data.sprank[10]} #{pc_data.sprank[11]} #{pc_data.sprank[12]} #{pc_data.sprank[13]} #{pc_data.sprank[14]}
point(__type="s32" __count="15") #{pc_data.sppoint[0]} #{pc_data.sppoint[1]} #{pc_data.sppoint[2]} #{pc_data.sppoint[3]} #{pc_data.sppoint[4]} #{pc_data.sppoint[5]} #{pc_data.sppoint[6]} #{pc_data.sppoint[7]} #{pc_data.sppoint[8]} #{pc_data.sppoint[9]} #{pc_data.sppoint[10]} #{pc_data.sppoint[11]} #{pc_data.sppoint[12]} #{pc_data.sppoint[13]} #{pc_data.sppoint[14]}
dj_rank(style="1")
rank(__type="s32" __count="15") #{pc_data.dprank[0]} #{pc_data.dprank[1]} #{pc_data.dprank[2]} #{pc_data.dprank[3]} #{pc_data.dprank[4]} #{pc_data.dprank[5]} #{pc_data.dprank[6]} #{pc_data.dprank[7]} #{pc_data.dprank[8]} #{pc_data.dprank[9]} #{pc_data.dprank[10]} #{pc_data.dprank[11]} #{pc_data.dprank[12]} #{pc_data.dprank[13]} #{pc_data.dprank[14]}
point(__type="s32" __count="15") #{pc_data.dppoint[0]} #{pc_data.dppoint[1]} #{pc_data.dppoint[2]} #{pc_data.dppoint[3]} #{pc_data.dppoint[4]} #{pc_data.dppoint[5]} #{pc_data.dppoint[6]} #{pc_data.dppoint[7]} #{pc_data.dppoint[8]} #{pc_data.dppoint[9]} #{pc_data.dppoint[10]} #{pc_data.dppoint[11]} #{pc_data.dppoint[12]} #{pc_data.dppoint[13]} #{pc_data.dppoint[14]}
notes_radar(style="0")
radar_score(__type="s32" __count="6") #{pc_data.spradar[0]} #{pc_data.spradar[1]} #{pc_data.spradar[2]} #{pc_data.spradar[3]} #{pc_data.spradar[4]} #{pc_data.spradar[5]}
notes_radar(style="1")
radar_score(__type="s32" __count="6") #{pc_data.dpradar[0]} #{pc_data.dpradar[1]} #{pc_data.dpradar[2]} #{pc_data.dpradar[3]} #{pc_data.dpradar[4]} #{pc_data.dpradar[5]}
arena_data(play_num="0" play_num_dp="1" play_num_sp="1")
achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="0" rating_value="0")
achieve_data(arena_class="19" best_top_class_continuing="0" now_top_class_continuing="0" play_style="1" rating_value="0")
cube_data(cube="0" season_id="0")
ea_premium_course
bind_eaappli
leggendaria_open
pay_per_use(item_num="99")
playlist(encrypt_playlist="0" index="0" play_style="0")
spdp_rival(flg="0")
enable_qr_reward
visitor(anum="0" pnum="0" snum="0" vs_flg="0")
konami_stytle(skip_flg="0")
arena_penalty
defeat(defeat_flg="0")
bemani_vote(music_list="-1")
floor_infection3(music_list="-1")
language_setting(language="-1")
leggendaria_semi_open(flg="0")
kac_entry_info
enable_kac_deller
disp_kac_mark
is_kac_entry
is_kac_evnet_entry
kac_secret_music
skin(__type="s16" __count="20") #{settings.frame} #{settings.turntable} #{settings.note_burst} #{settings.menu_music} #{appendsetting} #{settings.lane_cover} 0 0 #{settings.note_skin} #{settings.full_combo_splash} #{settings.note_beam} #{settings.judge_font} 0 #{settings.disable_musicpreview} #{settings.pacemaker_cover} #{settings.vefx_lock} #{settings.effect} #{settings.bomb_size} #{settings.disable_hcn_color} #{settings.first_note_preview}

42
pug/27pccommon.pug Normal file
View File

@ -0,0 +1,42 @@
IIDX27pc(status="0")
monthly_mranking(__type="u16" __count="1") 65535
total_mranking(__type="u16" __count="1") 65535
internet_ranking
secret_ex_course
kac_mid(__type="s32" __count="1") 65535
kac_clid(__type="s32" __count="1") 0
ir(beat="3")
cm(compo="cm_ultimate" folder="cm_ultimate" id="0")
tdj_cm
cm(filename="cm_bn_001" id="0")
cm(filename="cm_bn_002" id="1")
cm(filename="event_bn_001" id="2")
cm(filename="event_bn_004" id="3")
cm(filename="event_bn_006" id="4")
cm(filename="fipb_001" id="5")
cm(filename="year_bn_004" id="6")
cm(filename="year_bn_005" id="7")
cm(filename="year_bn_006_2" id="8")
cm(filename="year_bn_007" id="9")
license
string(__type="str") Asphyxia
file_recovery(url="https://example.com")
button_release_frame( frame="0")
escape_package_info
list(apply_file_name="XXX" apply_release_code="XXX")
expert(phase="1")
expert_random_secret(phase="2")
boss(phase="0")
vip_pass_black
deller_bonus(open="1")
newsong_another(open="1")
pcb_check(flg="0")
expert_secret_full_open
eaorder_phase(phase="2")
common_evnet(flg="65535")
system_voice_phase(phase="0")
extra_boss_event(phase="0")
event1_phase(phase="0")
premium_area_news(open="1")
premium_area_qpro(open="1")
ignore_button_mashing

362
pug/crate.pug Normal file
View File

@ -0,0 +1,362 @@
//-
crateはSPクリアレート5つ(BegginerLeddendaria)DPクリアレート5つ
SPフルコンボレート5つDPフルコンボレート5つの20項目で表されます
クリアレートはMax1000(100%)で小数点第一位まで設定できます
書式例
<c __type="s32" __count="20" mid=曲番号>Numbers</c>
今回は12のみレートを実装します
レートはCPI難易度表(2020/10/20)を参考にしています
https://cpi.makecir.com/scores/tables#clear
https://cpi.makecir.com/scores/tables#hard
2250-曲レートをレートとして表示しています
クリアレートがノマゲレートでフルコンボレートがハードクリアレートになっています
#{version}(status="0")
c(__type="s32" __count="20" mid="5021") -1 -1 -1 793 -1 -1 -1 -1 -1 -1 -1 -1 -1 746 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="6005") -1 -1 -1 799 -1 -1 -1 -1 -1 -1 -1 -1 -1 718 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="7002") -1 -1 -1 905 -1 -1 -1 -1 -1 -1 -1 -1 -1 811 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="8031") -1 -1 -1 715 -1 -1 -1 -1 -1 -1 -1 -1 -1 698 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="8048") -1 -1 -1 736 -1 -1 -1 -1 -1 -1 -1 -1 -1 661 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="9012") -1 -1 -1 799 -1 -1 -1 -1 -1 -1 -1 -1 -1 749 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="9038") -1 -1 -1 828 -1 -1 -1 -1 -1 -1 -1 -1 -1 736 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="10022") -1 -1 -1 845 -1 -1 -1 -1 -1 -1 -1 -1 -1 788 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="10028") -1 -1 838 802 -1 -1 -1 -1 -1 -1 -1 -1 702 690 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="10049") -1 -1 -1 698 -1 -1 -1 -1 -1 -1 -1 -1 -1 692 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="11012") -1 -1 -1 -1 738 -1 -1 -1 -1 -1 -1 -1 -1 -1 720 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="11026") -1 -1 -1 603 -1 -1 -1 -1 -1 -1 -1 -1 -1 581 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="11030") -1 -1 -1 682 -1 -1 -1 -1 -1 -1 -1 -1 -1 672 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="11032") -1 -1 -1 -1 834 -1 -1 -1 -1 -1 -1 -1 -1 -1 769 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="11037") -1 -1 899 817 -1 -1 -1 -1 -1 -1 -1 -1 880 803 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="11040") -1 -1 -1 829 -1 -1 -1 -1 -1 -1 -1 -1 -1 767 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="12002") -1 -1 -1 -1 688 -1 -1 -1 -1 -1 -1 -1 -1 -1 672 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="12004") -1 -1 -1 594 -1 -1 -1 -1 -1 -1 -1 -1 -1 231 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="12007") -1 -1 -1 665 -1 -1 -1 -1 -1 -1 -1 -1 -1 550 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="12016") -1 -1 -1 -1 632 -1 -1 -1 -1 -1 -1 -1 -1 -1 603 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="12045") -1 -1 -1 807 -1 -1 -1 -1 -1 -1 -1 -1 -1 750 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="12054") -1 -1 -1 755 -1 -1 -1 -1 -1 -1 -1 -1 -1 685 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="13005") -1 -1 -1 531 -1 -1 -1 -1 -1 -1 -1 -1 -1 516 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="13010") -1 -1 -1 -1 546 -1 -1 -1 -1 -1 -1 -1 -1 -1 542 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="13031") -1 -1 -1 691 -1 -1 -1 -1 -1 -1 -1 -1 -1 645 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="13038") -1 -1 -1 -1 592 -1 -1 -1 -1 -1 -1 -1 -1 -1 585 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="13054") -1 -1 -1 806 -1 -1 -1 -1 -1 -1 -1 -1 -1 715 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="13055") -1 -1 -1 814 -1 -1 -1 -1 -1 -1 -1 -1 -1 791 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14004") -1 -1 -1 -1 425 -1 -1 -1 -1 -1 -1 -1 -1 -1 408 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14005") -1 -1 -1 726 -1 -1 -1 -1 -1 -1 -1 -1 -1 711 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14009") -1 -1 -1 830 484 -1 -1 -1 -1 -1 -1 -1 -1 757 453 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14021") -1 -1 -1 845 -1 -1 -1 -1 -1 -1 -1 -1 -1 762 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14022") -1 -1 -1 -1 811 -1 -1 -1 -1 -1 -1 -1 -1 -1 737 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14029") -1 -1 -1 777 -1 -1 -1 -1 -1 -1 -1 -1 -1 720 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14030") -1 -1 -1 802 -1 -1 -1 -1 -1 -1 -1 -1 -1 753 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14035") -1 -1 -1 692 -1 -1 -1 -1 -1 -1 -1 -1 -1 659 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14046") -1 -1 -1 -1 348 -1 -1 -1 -1 -1 -1 -1 -1 -1 328 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14052") -1 -1 -1 627 -1 -1 -1 -1 -1 -1 -1 -1 -1 410 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="14053") -1 -1 -1 -1 880 -1 -1 -1 -1 -1 -1 -1 -1 -1 835 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15001") -1 -1 -1 622 -1 -1 -1 -1 -1 -1 -1 -1 -1 586 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15004") -1 -1 -1 -1 610 -1 -1 -1 -1 -1 -1 -1 -1 -1 598 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15007") -1 -1 -1 -1 680 -1 -1 -1 -1 -1 -1 -1 -1 -1 652 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15013") -1 -1 -1 769 -1 -1 -1 -1 -1 -1 -1 -1 -1 722 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15014") -1 -1 -1 900 -1 -1 -1 -1 -1 -1 -1 -1 -1 820 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15016") -1 -1 -1 795 -1 -1 -1 -1 -1 -1 -1 -1 -1 760 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15023") -1 -1 -1 782 335 -1 -1 -1 -1 -1 -1 -1 -1 652 34 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15039") -1 -1 -1 763 -1 -1 -1 -1 -1 -1 -1 -1 -1 703 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15049") -1 -1 -1 587 -1 -1 -1 -1 -1 -1 -1 -1 -1 529 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="15061") -1 -1 -1 -1 665 -1 -1 -1 -1 -1 -1 -1 -1 -1 628 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16002") -1 -1 -1 -1 559 -1 -1 -1 -1 -1 -1 -1 -1 -1 537 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16003") -1 -1 -1 715 -1 -1 -1 -1 -1 -1 -1 -1 -1 666 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16006") -1 -1 -1 703 -1 -1 -1 -1 -1 -1 -1 -1 -1 684 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16009") -1 -1 -1 702 -1 -1 -1 -1 -1 -1 -1 -1 -1 671 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16015") -1 -1 -1 -1 757 -1 -1 -1 -1 -1 -1 -1 -1 -1 707 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16020") -1 -1 -1 349 -1 -1 -1 -1 -1 -1 -1 -1 -1 275 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16026") -1 -1 -1 567 -1 -1 -1 -1 -1 -1 -1 -1 -1 406 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16028") -1 -1 -1 542 -1 -1 -1 -1 -1 -1 -1 -1 -1 399 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16045") -1 -1 -1 -1 678 -1 -1 -1 -1 -1 -1 -1 -1 -1 631 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="16051") -1 -1 -1 739 -1 -1 -1 -1 -1 -1 -1 -1 -1 414 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17006") -1 -1 -1 644 -1 -1 -1 -1 -1 -1 -1 -1 -1 629 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17007") -1 -1 -1 748 -1 -1 -1 -1 -1 -1 -1 -1 -1 665 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17009") -1 -1 -1 646 -1 -1 -1 -1 -1 -1 -1 -1 -1 637 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17016") -1 -1 -1 581 -1 -1 -1 -1 -1 -1 -1 -1 -1 526 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17017") -1 -1 -1 756 -1 -1 -1 -1 -1 -1 -1 -1 -1 674 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17022") -1 -1 -1 644 -1 -1 -1 -1 -1 -1 -1 -1 -1 609 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17028") -1 -1 -1 -1 589 -1 -1 -1 -1 -1 -1 -1 -1 -1 580 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17032") -1 -1 -1 729 -1 -1 -1 -1 -1 -1 -1 -1 -1 623 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17044") -1 -1 -1 850 -1 -1 -1 -1 -1 -1 -1 -1 -1 778 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17054") -1 -1 -1 733 -1 -1 -1 -1 -1 -1 -1 -1 -1 696 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17056") -1 -1 -1 727 -1 -1 -1 -1 -1 -1 -1 -1 -1 672 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17059") -1 -1 -1 627 -1 -1 -1 -1 -1 -1 -1 -1 -1 610 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17060") -1 -1 -1 798 608 -1 -1 -1 -1 -1 -1 -1 -1 728 587 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="17061") -1 -1 -1 757 -1 -1 -1 -1 -1 -1 -1 -1 -1 712 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18001") -1 -1 -1 732 -1 -1 -1 -1 -1 -1 -1 -1 -1 637 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18004") -1 -1 -1 483 -1 -1 -1 -1 -1 -1 -1 -1 -1 477 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18007") -1 -1 -1 698 -1 -1 -1 -1 -1 -1 -1 -1 -1 663 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18009") -1 -1 -1 576 -1 -1 -1 -1 -1 -1 -1 -1 -1 559 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18017") -1 -1 -1 686 -1 -1 -1 -1 -1 -1 -1 -1 -1 655 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18026") -1 -1 -1 627 -1 -1 -1 -1 -1 -1 -1 -1 -1 611 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18032") -1 -1 -1 414 -1 -1 -1 -1 -1 -1 -1 -1 -1 305 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18039") -1 -1 -1 684 -1 -1 -1 -1 -1 -1 -1 -1 -1 632 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18050") -1 -1 -1 680 -1 -1 -1 -1 -1 -1 -1 -1 -1 595 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18059") -1 -1 -1 780 -1 -1 -1 -1 -1 -1 -1 -1 -1 734 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18060") -1 -1 -1 853 -1 -1 -1 -1 -1 -1 -1 -1 -1 785 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18061") -1 -1 -1 936 -1 -1 -1 -1 -1 -1 -1 -1 -1 833 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18068") -1 -1 -1 810 -1 -1 -1 -1 -1 -1 -1 -1 -1 757 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="18071") -1 -1 -1 983 -1 -1 -1 -1 -1 -1 -1 -1 -1 861 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19001") -1 -1 -1 665 -1 -1 -1 -1 -1 -1 -1 -1 -1 576 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19002") -1 -1 -1 625 -1 -1 -1 -1 -1 -1 -1 -1 -1 594 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19003") -1 -1 -1 853 -1 -1 -1 -1 -1 -1 -1 -1 -1 793 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19005") -1 -1 -1 813 -1 -1 -1 -1 -1 -1 -1 -1 -1 749 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19007") -1 -1 -1 644 -1 -1 -1 -1 -1 -1 -1 -1 -1 621 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19008") -1 -1 -1 430 -1 -1 -1 -1 -1 -1 -1 -1 -1 415 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19016") -1 -1 -1 866 -1 -1 -1 -1 -1 -1 -1 -1 -1 778 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19026") -1 -1 -1 855 -1 -1 -1 -1 -1 -1 -1 -1 -1 786 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19028") -1 -1 -1 794 -1 -1 -1 -1 -1 -1 -1 -1 -1 735 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19030") -1 -1 -1 781 -1 -1 -1 -1 -1 -1 -1 -1 -1 730 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19033") -1 -1 -1 678 -1 -1 -1 -1 -1 -1 -1 -1 -1 657 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19037") -1 -1 -1 591 -1 -1 -1 -1 -1 -1 -1 -1 -1 528 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19042") -1 -1 -1 712 -1 -1 -1 -1 -1 -1 -1 -1 -1 631 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19063") -1 -1 -1 -1 660 -1 -1 -1 -1 -1 -1 -1 -1 -1 637 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19064") -1 -1 -1 768 -1 -1 -1 -1 -1 -1 -1 -1 -1 688 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19065") -1 -1 -1 692 -1 -1 -1 -1 -1 -1 -1 -1 -1 631 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19068") -1 -1 -1 749 -1 -1 -1 -1 -1 -1 -1 -1 -1 715 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19071") -1 -1 -1 667 -1 -1 -1 -1 -1 -1 -1 -1 -1 654 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19074") -1 -1 -1 -1 485 -1 -1 -1 -1 -1 -1 -1 -1 -1 437 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="19075") -1 -1 -1 622 -1 -1 -1 -1 -1 -1 -1 -1 -1 604 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20002") -1 -1 -1 783 -1 -1 -1 -1 -1 -1 -1 -1 -1 722 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20003") -1 -1 -1 883 -1 -1 -1 -1 -1 -1 -1 -1 -1 825 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20004") -1 -1 -1 771 -1 -1 -1 -1 -1 -1 -1 -1 -1 714 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20006") -1 -1 -1 739 -1 -1 -1 -1 -1 -1 -1 -1 -1 693 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20007") -1 -1 -1 647 -1 -1 -1 -1 -1 -1 -1 -1 -1 603 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20008") -1 -1 -1 488 -1 -1 -1 -1 -1 -1 -1 -1 -1 472 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20012") -1 -1 -1 707 -1 -1 -1 -1 -1 -1 -1 -1 -1 672 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20019") -1 -1 -1 -1 682 -1 -1 -1 -1 -1 -1 -1 -1 -1 660 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20020") -1 -1 -1 471 -1 -1 -1 -1 -1 -1 -1 -1 -1 453 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20029") -1 -1 -1 525 -1 -1 -1 -1 -1 -1 -1 -1 -1 401 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20038") -1 -1 -1 398 -1 -1 -1 -1 -1 -1 -1 -1 -1 393 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20039") -1 -1 -1 -1 645 -1 -1 -1 -1 -1 -1 -1 -1 -1 640 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20041") -1 -1 -1 677 -1 -1 -1 -1 -1 -1 -1 -1 -1 664 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20043") -1 -1 -1 491 -1 -1 -1 -1 -1 -1 -1 -1 -1 441 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20047") -1 -1 -1 660 -1 -1 -1 -1 -1 -1 -1 -1 -1 615 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20048") -1 -1 -1 849 -1 -1 -1 -1 -1 -1 -1 -1 -1 783 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20049") -1 -1 -1 679 -1 -1 -1 -1 -1 -1 -1 -1 -1 652 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20051") -1 -1 -1 708 -1 -1 -1 -1 -1 -1 -1 -1 -1 674 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20054") -1 -1 -1 784 -1 -1 -1 -1 -1 -1 -1 -1 -1 727 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20058") -1 -1 -1 776 -1 -1 -1 -1 -1 -1 -1 -1 -1 746 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20062") -1 -1 -1 626 -1 -1 -1 -1 -1 -1 -1 -1 -1 603 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20063") -1 -1 -1 678 -1 -1 -1 -1 -1 -1 -1 -1 -1 627 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20067") -1 -1 -1 667 -1 -1 -1 -1 -1 -1 -1 -1 -1 619 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20070") -1 -1 -1 636 -1 -1 -1 -1 -1 -1 -1 -1 -1 548 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20071") -1 -1 -1 614 -1 -1 -1 -1 -1 -1 -1 -1 -1 536 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20073") -1 -1 -1 646 -1 -1 -1 -1 -1 -1 -1 -1 -1 613 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20074") -1 -1 -1 666 -1 -1 -1 -1 -1 -1 -1 -1 -1 648 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20083") -1 -1 -1 686 -1 -1 -1 -1 -1 -1 -1 -1 -1 661 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20093") -1 -1 -1 782 -1 -1 -1 -1 -1 -1 -1 -1 -1 726 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20094") -1 -1 -1 587 -1 -1 -1 -1 -1 -1 -1 -1 -1 581 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20097") -1 -1 -1 723 -1 -1 -1 -1 -1 -1 -1 -1 -1 670 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20099") -1 -1 -1 549 -1 -1 -1 -1 -1 -1 -1 -1 -1 516 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="20101") -1 -1 -1 746 -1 -1 -1 -1 -1 -1 -1 -1 -1 701 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21002") -1 -1 -1 754 -1 -1 -1 -1 -1 -1 -1 -1 -1 706 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21005") -1 -1 -1 745 -1 -1 -1 -1 -1 -1 -1 -1 -1 683 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21012") -1 -1 -1 741 607 -1 -1 -1 -1 -1 -1 -1 -1 685 574 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21019") -1 -1 -1 766 -1 -1 -1 -1 -1 -1 -1 -1 -1 734 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21029") -1 -1 -1 -1 655 -1 -1 -1 -1 -1 -1 -1 -1 -1 609 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21032") -1 -1 -1 546 -1 -1 -1 -1 -1 -1 -1 -1 -1 499 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21033") -1 -1 -1 654 -1 -1 -1 -1 -1 -1 -1 -1 -1 611 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21044") -1 -1 -1 671 -1 -1 -1 -1 -1 -1 -1 -1 -1 623 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21045") -1 -1 -1 721 -1 -1 -1 -1 -1 -1 -1 -1 -1 683 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21047") -1 -1 -1 654 -1 -1 -1 -1 -1 -1 -1 -1 -1 611 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21048") -1 -1 -1 719 314 -1 -1 -1 -1 -1 -1 -1 -1 681 304 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21050") -1 -1 -1 632 372 -1 -1 -1 -1 -1 -1 -1 -1 572 309 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21052") -1 -1 -1 786 570 -1 -1 -1 -1 -1 -1 -1 -1 730 431 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21055") -1 -1 -1 777 -1 -1 -1 -1 -1 -1 -1 -1 -1 714 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21059") -1 -1 -1 526 404 -1 -1 -1 -1 -1 -1 -1 -1 519 399 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21062") -1 -1 -1 613 -1 -1 -1 -1 -1 -1 -1 -1 -1 544 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21069") -1 -1 -1 774 570 -1 -1 -1 -1 -1 -1 -1 -1 736 556 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21073") -1 -1 -1 874 579 -1 -1 -1 -1 -1 -1 -1 -1 792 570 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21076") -1 -1 -1 772 -1 -1 -1 -1 -1 -1 -1 -1 -1 713 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21081") -1 -1 -1 701 -1 -1 -1 -1 -1 -1 -1 -1 -1 639 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21082") -1 -1 -1 489 -1 -1 -1 -1 -1 -1 -1 -1 -1 479 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21088") -1 -1 -1 758 -1 -1 -1 -1 -1 -1 -1 -1 -1 705 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="21089") -1 -1 -1 597 429 -1 -1 -1 -1 -1 -1 -1 -1 565 410 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22001") -1 -1 -1 697 -1 -1 -1 -1 -1 -1 -1 -1 -1 684 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22003") -1 -1 -1 692 -1 -1 -1 -1 -1 -1 -1 -1 -1 559 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22004") -1 -1 -1 662 -1 -1 -1 -1 -1 -1 -1 -1 -1 653 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22005") -1 -1 -1 771 -1 -1 -1 -1 -1 -1 -1 -1 -1 703 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22006") -1 -1 -1 -1 691 -1 -1 -1 -1 -1 -1 -1 -1 -1 661 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22007") -1 -1 -1 600 -1 -1 -1 -1 -1 -1 -1 -1 -1 565 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22008") -1 -1 -1 -1 553 -1 -1 -1 -1 -1 -1 -1 -1 -1 539 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22009") -1 -1 -1 832 -1 -1 -1 -1 -1 -1 -1 -1 -1 756 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22011") -1 -1 -1 724 -1 -1 -1 -1 -1 -1 -1 -1 -1 649 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22012") -1 -1 -1 552 -1 -1 -1 -1 -1 -1 -1 -1 -1 523 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22015") -1 -1 -1 623 -1 -1 -1 -1 -1 -1 -1 -1 -1 604 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22016") -1 -1 -1 686 -1 -1 -1 -1 -1 -1 -1 -1 -1 624 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22017") -1 -1 -1 885 -1 -1 -1 -1 -1 -1 -1 -1 -1 798 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22018") -1 -1 -1 747 -1 -1 -1 -1 -1 -1 -1 -1 -1 670 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22027") -1 -1 -1 -1 771 -1 -1 -1 -1 -1 -1 -1 -1 -1 724 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22031") -1 -1 -1 -1 569 -1 -1 -1 -1 -1 -1 -1 -1 -1 551 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22032") -1 -1 -1 708 -1 -1 -1 -1 -1 -1 -1 -1 -1 671 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22033") -1 -1 -1 713 -1 -1 -1 -1 -1 -1 -1 -1 -1 659 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22038") -1 -1 -1 889 -1 -1 -1 -1 -1 -1 -1 -1 -1 799 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22039") -1 -1 -1 663 -1 -1 -1 -1 -1 -1 -1 -1 -1 576 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22043") -1 -1 -1 679 -1 -1 -1 -1 -1 -1 -1 -1 -1 642 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22053") -1 -1 -1 751 -1 -1 -1 -1 -1 -1 -1 -1 -1 708 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22054") -1 -1 -1 466 -1 -1 -1 -1 -1 -1 -1 -1 -1 438 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22055") -1 -1 -1 800 -1 -1 -1 -1 -1 -1 -1 -1 -1 749 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22065") -1 -1 -1 719 -1 -1 -1 -1 -1 -1 -1 -1 -1 693 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22069") -1 -1 -1 767 -1 -1 -1 -1 -1 -1 -1 -1 -1 709 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22070") -1 -1 -1 647 -1 -1 -1 -1 -1 -1 -1 -1 -1 621 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22073") -1 -1 -1 662 -1 -1 -1 -1 -1 -1 -1 -1 -1 621 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22074") -1 -1 -1 672 -1 -1 -1 -1 -1 -1 -1 -1 -1 640 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22077") -1 -1 -1 760 -1 -1 -1 -1 -1 -1 -1 -1 -1 732 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22079") -1 -1 -1 804 -1 -1 -1 -1 -1 -1 -1 -1 -1 755 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22080") -1 -1 -1 720 -1 -1 -1 -1 -1 -1 -1 -1 -1 660 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22083") -1 -1 -1 907 530 -1 -1 -1 -1 -1 -1 -1 -1 858 525 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22087") -1 -1 -1 756 -1 -1 -1 -1 -1 -1 -1 -1 -1 708 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22089") -1 -1 -1 715 507 -1 -1 -1 -1 -1 -1 -1 -1 656 469 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22091") -1 -1 -1 744 -1 -1 -1 -1 -1 -1 -1 -1 -1 706 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22093") -1 -1 -1 683 -1 -1 -1 -1 -1 -1 -1 -1 -1 638 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22095") -1 -1 -1 735 -1 -1 -1 -1 -1 -1 -1 -1 -1 686 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="22099") -1 -1 -1 712 -1 -1 -1 -1 -1 -1 -1 -1 -1 646 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23000") -1 -1 -1 642 -1 -1 -1 -1 -1 -1 -1 -1 -1 560 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23001") -1 -1 -1 497 -1 -1 -1 -1 -1 -1 -1 -1 -1 477 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23005") -1 -1 -1 747 -1 -1 -1 -1 -1 -1 -1 -1 -1 710 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23007") -1 -1 -1 830 -1 -1 -1 -1 -1 -1 -1 -1 -1 760 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23009") -1 -1 -1 762 -1 -1 -1 -1 -1 -1 -1 -1 -1 719 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23013") -1 -1 -1 707 -1 -1 -1 -1 -1 -1 -1 -1 -1 684 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23018") -1 -1 -1 677 -1 -1 -1 -1 -1 -1 -1 -1 -1 626 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23027") -1 -1 -1 627 -1 -1 -1 -1 -1 -1 -1 -1 -1 560 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23031") -1 -1 -1 -1 664 -1 -1 -1 -1 -1 -1 -1 -1 -1 641 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23037") -1 -1 -1 701 -1 -1 -1 -1 -1 -1 -1 -1 -1 666 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23041") -1 -1 -1 571 -1 -1 -1 -1 -1 -1 -1 -1 -1 535 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23045") -1 -1 -1 760 -1 -1 -1 -1 -1 -1 -1 -1 -1 721 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23051") -1 -1 -1 296 -1 -1 -1 -1 -1 -1 -1 -1 -1 253 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23055") -1 -1 -1 682 -1 -1 -1 -1 -1 -1 -1 -1 -1 622 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23061") -1 -1 -1 612 -1 -1 -1 -1 -1 -1 -1 -1 -1 601 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23063") -1 -1 -1 565 -1 -1 -1 -1 -1 -1 -1 -1 -1 560 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23070") -1 -1 -1 -1 662 -1 -1 -1 -1 -1 -1 -1 -1 -1 632 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23072") -1 -1 -1 722 -1 -1 -1 -1 -1 -1 -1 -1 -1 652 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23074") -1 -1 -1 791 -1 -1 -1 -1 -1 -1 -1 -1 -1 670 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23075") -1 -1 -1 712 -1 -1 -1 -1 -1 -1 -1 -1 -1 641 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23079") -1 -1 -1 891 -1 -1 -1 -1 -1 -1 -1 -1 -1 772 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23083") -1 -1 -1 884 -1 -1 -1 -1 -1 -1 -1 -1 -1 774 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23085") -1 -1 -1 696 -1 -1 -1 -1 -1 -1 -1 -1 -1 661 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23088") -1 -1 -1 575 -1 -1 -1 -1 -1 -1 -1 -1 -1 546 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23090") -1 -1 -1 664 -1 -1 -1 -1 -1 -1 -1 -1 -1 628 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23092") -1 -1 -1 665 -1 -1 -1 -1 -1 -1 -1 -1 -1 636 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23094") -1 -1 -1 645 -1 -1 -1 -1 -1 -1 -1 -1 -1 609 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="23095") -1 -1 -1 -1 595 -1 -1 -1 -1 -1 -1 -1 -1 -1 582 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24001") -1 -1 -1 513 -1 -1 -1 -1 -1 -1 -1 -1 -1 502 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24003") -1 -1 -1 758 -1 -1 -1 -1 -1 -1 -1 -1 -1 694 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24005") -1 -1 -1 733 -1 -1 -1 -1 -1 -1 -1 -1 -1 697 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24006") -1 -1 -1 826 -1 -1 -1 -1 -1 -1 -1 -1 -1 756 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24007") -1 -1 -1 775 -1 -1 -1 -1 -1 -1 -1 -1 -1 690 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24010") -1 -1 -1 235 -1 -1 -1 -1 -1 -1 -1 -1 -1 231 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24012") -1 -1 -1 759 -1 -1 -1 -1 -1 -1 -1 -1 -1 695 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24014") -1 -1 -1 667 -1 -1 -1 -1 -1 -1 -1 -1 -1 629 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24018") -1 -1 -1 629 -1 -1 -1 -1 -1 -1 -1 -1 -1 603 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24020") -1 -1 -1 565 -1 -1 -1 -1 -1 -1 -1 -1 -1 527 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24021") -1 -1 -1 595 -1 -1 -1 -1 -1 -1 -1 -1 -1 584 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24023") -1 -1 -1 734 -1 -1 -1 -1 -1 -1 -1 -1 -1 657 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24024") -1 -1 -1 756 -1 -1 -1 -1 -1 -1 -1 -1 -1 690 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24034") -1 -1 -1 415 -1 -1 -1 -1 -1 -1 -1 -1 -1 346 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24036") -1 -1 -1 750 -1 -1 -1 -1 -1 -1 -1 -1 -1 712 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24039") -1 -1 -1 919 -1 -1 -1 -1 -1 -1 -1 -1 -1 817 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24041") -1 -1 -1 -1 707 -1 -1 -1 -1 -1 -1 -1 -1 -1 659 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24044") -1 -1 -1 741 -1 -1 -1 -1 -1 -1 -1 -1 -1 700 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24050") -1 -1 -1 569 -1 -1 -1 -1 -1 -1 -1 -1 -1 530 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24051") -1 -1 -1 645 -1 -1 -1 -1 -1 -1 -1 -1 -1 632 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24065") -1 -1 -1 692 -1 -1 -1 -1 -1 -1 -1 -1 -1 657 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24070") -1 -1 -1 791 -1 -1 -1 -1 -1 -1 -1 -1 -1 735 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24072") -1 -1 -1 677 -1 -1 -1 -1 -1 -1 -1 -1 -1 658 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24073") -1 -1 -1 659 -1 -1 -1 -1 -1 -1 -1 -1 -1 631 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24076") -1 -1 -1 742 -1 -1 -1 -1 -1 -1 -1 -1 -1 716 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24077") -1 -1 -1 806 -1 -1 -1 -1 -1 -1 -1 -1 -1 759 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24078") -1 -1 -1 833 -1 -1 -1 -1 -1 -1 -1 -1 -1 743 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24086") -1 -1 -1 819 -1 -1 -1 -1 -1 -1 -1 -1 -1 746 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24089") -1 -1 -1 838 -1 -1 -1 -1 -1 -1 -1 -1 -1 779 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24094") -1 -1 -1 737 -1 -1 -1 -1 -1 -1 -1 -1 -1 709 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="24095") -1 -1 -1 872 -1 -1 -1 -1 -1 -1 -1 -1 -1 806 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25000") -1 -1 -1 689 -1 -1 -1 -1 -1 -1 -1 -1 -1 659 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25003") -1 -1 -1 572 -1 -1 -1 -1 -1 -1 -1 -1 -1 523 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25004") -1 -1 -1 587 -1 -1 -1 -1 -1 -1 -1 -1 -1 544 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25007") -1 -1 -1 468 -1 -1 -1 -1 -1 -1 -1 -1 -1 407 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25008") -1 -1 -1 655 -1 -1 -1 -1 -1 -1 -1 -1 -1 627 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25009") -1 -1 -1 700 -1 -1 -1 -1 -1 -1 -1 -1 -1 669 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25015") -1 -1 -1 601 -1 -1 -1 -1 -1 -1 -1 -1 -1 586 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25017") -1 -1 -1 568 -1 -1 -1 -1 -1 -1 -1 -1 -1 536 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25019") -1 -1 -1 693 -1 -1 -1 -1 -1 -1 -1 -1 -1 626 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25021") -1 -1 -1 624 -1 -1 -1 -1 -1 -1 -1 -1 -1 582 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25025") -1 -1 -1 687 -1 -1 -1 -1 -1 -1 -1 -1 -1 640 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25027") -1 -1 -1 619 -1 -1 -1 -1 -1 -1 -1 -1 -1 567 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25029") -1 -1 -1 636 -1 -1 -1 -1 -1 -1 -1 -1 -1 612 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25040") -1 -1 -1 654 -1 -1 -1 -1 -1 -1 -1 -1 -1 629 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25049") -1 -1 -1 667 -1 -1 -1 -1 -1 -1 -1 -1 -1 639 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25052") -1 -1 -1 783 -1 -1 -1 -1 -1 -1 -1 -1 -1 745 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25058") -1 -1 -1 547 -1 -1 -1 -1 -1 -1 -1 -1 -1 488 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25063") -1 -1 -1 739 -1 -1 -1 -1 -1 -1 -1 -1 -1 640 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25074") -1 -1 -1 651 -1 -1 -1 -1 -1 -1 -1 -1 -1 628 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25075") -1 -1 -1 808 -1 -1 -1 -1 -1 -1 -1 -1 -1 760 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25080") -1 -1 -1 891 -1 -1 -1 -1 -1 -1 -1 -1 -1 820 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25083") -1 -1 -1 632 -1 -1 -1 -1 -1 -1 -1 -1 -1 584 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25085") -1 -1 -1 664 -1 -1 -1 -1 -1 -1 -1 -1 -1 625 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25088") -1 -1 -1 855 -1 -1 -1 -1 -1 -1 -1 -1 -1 785 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25091") -1 -1 -1 820 -1 -1 -1 -1 -1 -1 -1 -1 -1 782 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="25093") -1 -1 -1 656 -1 -1 -1 -1 -1 -1 -1 -1 -1 593 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26000") -1 -1 -1 701 -1 -1 -1 -1 -1 -1 -1 -1 -1 658 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26001") -1 -1 -1 686 -1 -1 -1 -1 -1 -1 -1 -1 -1 666 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26003") -1 -1 -1 664 -1 -1 -1 -1 -1 -1 -1 -1 -1 638 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26007") -1 -1 -1 327 -1 -1 -1 -1 -1 -1 -1 -1 -1 196 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26010") -1 -1 -1 786 -1 -1 -1 -1 -1 -1 -1 -1 -1 739 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26011") -1 -1 -1 712 -1 -1 -1 -1 -1 -1 -1 -1 -1 683 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26012") -1 -1 -1 625 -1 -1 -1 -1 -1 -1 -1 -1 -1 610 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26025") -1 -1 -1 613 -1 -1 -1 -1 -1 -1 -1 -1 -1 573 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26029") -1 -1 -1 625 -1 -1 -1 -1 -1 -1 -1 -1 -1 596 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26033") -1 -1 -1 765 -1 -1 -1 -1 -1 -1 -1 -1 -1 715 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26034") -1 -1 -1 745 -1 -1 -1 -1 -1 -1 -1 -1 -1 716 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26037") -1 -1 -1 432 -1 -1 -1 -1 -1 -1 -1 -1 -1 417 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26038") -1 -1 -1 721 -1 -1 -1 -1 -1 -1 -1 -1 -1 696 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26039") -1 -1 -1 611 -1 -1 -1 -1 -1 -1 -1 -1 -1 596 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26043") -1 -1 -1 717 -1 -1 -1 -1 -1 -1 -1 -1 -1 697 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26047") -1 -1 -1 511 -1 -1 -1 -1 -1 -1 -1 -1 -1 435 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26059") -1 -1 -1 682 -1 -1 -1 -1 -1 -1 -1 -1 -1 632 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26070") -1 -1 -1 646 -1 -1 -1 -1 -1 -1 -1 -1 -1 601 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26072") -1 -1 -1 537 -1 -1 -1 -1 -1 -1 -1 -1 -1 417 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26078") -1 -1 -1 580 -1 -1 -1 -1 -1 -1 -1 -1 -1 566 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26079") -1 -1 -1 755 -1 -1 -1 -1 -1 -1 -1 -1 -1 709 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26080") -1 -1 -1 689 -1 -1 -1 -1 -1 -1 -1 -1 -1 660 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26083") -1 -1 -1 729 -1 -1 -1 -1 -1 -1 -1 -1 -1 691 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26085") -1 -1 -1 761 -1 -1 -1 -1 -1 -1 -1 -1 -1 688 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26086") -1 -1 -1 484 -1 -1 -1 -1 -1 -1 -1 -1 -1 483 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26087") -1 -1 -1 607 -1 -1 -1 -1 -1 -1 -1 -1 -1 561 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26093") -1 -1 -1 677 -1 -1 -1 -1 -1 -1 -1 -1 -1 656 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26095") -1 -1 -1 879 -1 -1 -1 -1 -1 -1 -1 -1 -1 796 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26102") -1 -1 -1 826 -1 -1 -1 -1 -1 -1 -1 -1 -1 739 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26104") -1 -1 -1 705 -1 -1 -1 -1 -1 -1 -1 -1 -1 692 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26106") -1 -1 -1 681 -1 -1 -1 -1 -1 -1 -1 -1 -1 656 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26107") -1 -1 -1 709 -1 -1 -1 -1 -1 -1 -1 -1 -1 634 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26108") -1 -1 -1 547 -1 -1 -1 -1 -1 -1 -1 -1 -1 529 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="26110") -1 -1 -1 725 -1 -1 -1 -1 -1 -1 -1 -1 -1 686 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27000") -1 -1 -1 631 -1 -1 -1 -1 -1 -1 -1 -1 -1 611 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27003") -1 -1 -1 562 -1 -1 -1 -1 -1 -1 -1 -1 -1 535 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27007") -1 -1 -1 826 -1 -1 -1 -1 -1 -1 -1 -1 -1 754 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27009") -1 -1 -1 736 -1 -1 -1 -1 -1 -1 -1 -1 -1 688 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27012") -1 -1 -1 631 -1 -1 -1 -1 -1 -1 -1 -1 -1 612 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27018") -1 -1 -1 606 -1 -1 -1 -1 -1 -1 -1 -1 -1 589 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27019") -1 -1 -1 740 -1 -1 -1 -1 -1 -1 -1 -1 -1 688 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27020") -1 -1 -1 456 -1 -1 -1 -1 -1 -1 -1 -1 -1 429 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27030") -1 -1 -1 750 -1 -1 -1 -1 -1 -1 -1 -1 -1 733 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27034") -1 -1 -1 713 -1 -1 -1 -1 -1 -1 -1 -1 -1 664 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27035") -1 -1 -1 601 -1 -1 -1 -1 -1 -1 -1 -1 -1 573 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27039") -1 -1 -1 499 -1 -1 -1 -1 -1 -1 -1 -1 -1 456 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27043") -1 -1 -1 991 -1 -1 -1 -1 -1 -1 -1 -1 -1 852 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27044") -1 -1 -1 816 -1 -1 -1 -1 -1 -1 -1 -1 -1 732 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27052") -1 -1 -1 628 -1 -1 -1 -1 -1 -1 -1 -1 -1 597 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27054") -1 -1 -1 687 -1 -1 -1 -1 -1 -1 -1 -1 -1 645 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27056") -1 -1 -1 783 -1 -1 -1 -1 -1 -1 -1 -1 -1 743 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27059") -1 -1 -1 631 -1 -1 -1 -1 -1 -1 -1 -1 -1 604 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27060") -1 -1 -1 625 -1 -1 -1 -1 -1 -1 -1 -1 -1 597 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27064") -1 -1 -1 767 -1 -1 -1 -1 -1 -1 -1 -1 -1 715 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27078") -1 -1 -1 689 -1 -1 -1 -1 -1 -1 -1 -1 -1 618 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27084") -1 -1 -1 605 -1 -1 -1 -1 -1 -1 -1 -1 -1 567 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27088") -1 -1 -1 572 -1 -1 -1 -1 -1 -1 -1 -1 -1 566 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27094") -1 -1 -1 560 -1 -1 -1 -1 -1 -1 -1 -1 -1 557 -1 -1 -1 -1 -1 -1
c(__type="s32" __count="20" mid="27102") -1 -1 -1 729 -1 -1 -1 -1 -1 -1 -1 -1 -1 686 -1 -1 -1 -1 -1 -1

109
util.ts Normal file
View File

@ -0,0 +1,109 @@
import { profile } from "./models/profile";
import { Profile } from "../sdvx@asphyxia/models/profile";
export function IDToCode(id: number) {
const padded = _.padStart(id.toString(), 8);
return `${padded.slice(0, 4)}-${padded.slice(4)}`;
}
export function base64decode(s: string) {
const base64list =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
let t = "",
p = -8,
a = 0,
c: number,
d: number;
for (let i = 0; i < s.length; i++) {
if ((c = base64list.indexOf(s.charAt(i))) < 0) continue;
a = (a << 6) | (c & 63);
if ((p += 6) >= 0) {
d = (a >> p) & 255;
if (c != 64) t += String.fromCharCode(d);
a &= 63;
p -= 8;
}
}
return t;
}
export function GetVersion(info: EamuseInfo) {
return parseInt(info.module.substr(4, 2));
}
export async function IIDXidTorefid(iidxid: number) {
const profile = await DB.FindOne<profile>(null, {
collection: "profile",
iidxid: iidxid,
});
return profile.refid;
}
export function ClidToRank(clid: number) {
let style: number, rank: number;
if (clid >= 5) {
style = 1;
rank = clid - 5;
} else {
style = 0;
rank = clid;
}
return {
style: style,
rank: rank,
};
}
export function AppendSettingConverter(
sf: boolean,
cf: boolean,
df: boolean,
af: boolean,
hp: boolean,
dg: boolean,
ch: boolean,
hi: boolean
) {
const result =
Number(sf) * 1 +
Number(cf) * 2 +
Number(df) * 4 +
Number(af) * 8 +
Number(hp) * 256 +
Number(dg) * 512 +
Number(ch) * 1024 +
Number(hi) * 4196;
return result;
}
export function DateToName(now: number, score_time: number) {
const msPerMinute = 60 * 1000;
const msPerHour = msPerMinute * 60;
const msPerDay = msPerHour * 24;
const msPerMonth = msPerDay * 30;
const msPerYear = msPerDay * 365;
const elapsed = now - score_time;
if (elapsed < msPerMinute) {
return "-" + Math.round(elapsed / 1000) + "s";
} else if (elapsed < msPerHour) {
return "-" + Math.round(elapsed / msPerMinute) + "m";
} else if (elapsed < msPerDay) {
return "-" + Math.round(elapsed / msPerHour) + "h";
} else if (elapsed < msPerMonth) {
return "-" + Math.round(elapsed / msPerDay) + "d";
} else if (elapsed < msPerYear) {
return "-" + Math.round(elapsed / msPerMonth) + "mo";
} else {
return "-" + Math.round(elapsed / msPerYear) + "yr";
}
}
export async function refidToName(refid: string) {
const profile = await DB.FindOne<profile>(refid, {
collection: "profile",
});
return profile.name;
}

58
webui/profile_detail.pug Normal file
View File

@ -0,0 +1,58 @@
//DATA//
profile: DB.FindOne(refid, { collection: "profile" })
pc_data: DB.FindOne(refid, { collection: "pc_data" })
-
const gradelist=[
"七級",
"六級",
"五級",
"四級",
"三級",
"二級",
"一級",
"初段",
"二段",
"三段",
"四段",
"五段",
"六段",
"七段",
"八段",
"九段",
"十段",
"中伝",
"皆伝"]
div
.card
.card-header
p.card-header-title
span.icon
i.mdi.mdi-account-edit
| Detail
.card-content
.field
label.label Name
.body
body #{profile.name}
.field
label.label IIDX ID
.body
body #{profile.iidxidstr}
.field
label.label SP Grade
.body
- const a = pc_data.sgid
if a==-1
body ----
else
body #{gradelist[pc_data.sgid]}
.field
label.label DP Grade
.body
- const b = pc_data.dgid
if b==-1
body ----
else
body #{gradelist[pc_data.dgid]}