#include "DxLib.h"
#include<time.h>
#include<math.h>
#include<stdlib.h>
#define PI 3.141592654
#define Screen_Weight 1280
#define Screen_Hight 720
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)
{
//main
ChangeWindowMode(TRUE),DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK);
SetGraphMode(1280, 720, 32);
//MapChip
static const int MapHeight = 20;
static const int MapWidth = 130;
int MapChip[MapHeight][MapWidth];
for (int i = 0; i < MapHeight; i++)
{
for (int j = 0; j < MapWidth; j++)
{
MapChip[i][j] = 0;
}
}
int Map[3];
LoadDivGraph("画像/MapChip1.png", 3, 3, 1, 64, 64, Map);
FILE* fp = NULL;
fopen_s(&fp,"Stage1.txt", "r");
if (fp == NULL)
{
}
char ch;
int h = 0, w = 0;
while ((ch
= fgetc(fp
)) != EOF
) {
if (ch == '\n')
{
h++;
w = 0;
}
else
{
MapChip
[h
][w
] = atoi(&ch
); w++;
}
}
int GameMode = 1;
int Font00 = CreateFontToHandle("BIZ UDPゴシック", 50, 5, DX_FONTTYPE_NORMAL);
int FontScore = CreateFontToHandle("BIZ UDPゴシック", 20, 4, DX_FONTTYPE_NORMAL);
int PlayerX = 100, PlayerY = 300, PlayerMoveX = 0, PlayerMoveY = 0;
int Player[4];
int PlayerFlg = 1;
LoadDivGraph("画像/player.png", 4, 4, 1, 64, 64, Player);
ーーーーーその他の初期設定のため省略ーーーーーーーーーーーーーー
int GameTime = 0;
int ScroolCnt = 0, ScroolTime = 0;
while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0)
{
//Updata
if (GameMode == 1)
{
DrawStringToHandle(400, 100, "シューティングゲーム", GetColor(255, 255, 255), Font00);
DrawStringToHandle(400, 500, "ゲームスタート -> S", GetColor(255, 255, 255), Font00);
if (CheckHitKey(KEY_INPUT_S) == 1)
{
GameMode = 2;
}
}
else if (GameMode == 2)
{
if (PlayerFlg == 1)
{
PlayerMoveX = 0;
PlayerMoveY = 0;
if (CheckHitKey(KEY_INPUT_D) == 1)
{
PlayerMoveX += 10;
}
if (CheckHitKey(KEY_INPUT_A) == 1)
{
PlayerMoveX -= 10;
}
if (CheckHitKey(KEY_INPUT_W) == 1)
{
PlayerMoveY -= 5;
}
if (CheckHitKey(KEY_INPUT_S) == 1)
{
PlayerMoveY += 5;
}
}
ーーーーーーーその他の処理のため省略ーーーーーーーーーーー
float PlayerTop = PlayerY - 32.0;
float PlayerBottom = PlayerY + 32.0;
float PlayerRight = PlayerX + 32.0;
float PlayerLeft = PlayerX - 32.0;
float NextTop = PlayerTop + PlayerMoveY;
float NextBottom = PlayerBottom + PlayerMoveY;
float NextRight = PlayerRight + PlayerMoveX;
float NextLeft = PlayerLeft + PlayerMoveX;
for (int h = 0; h < MapHeight; h++)
{
for (int w = 0; w < MapWidth; w++)
{
if (MapChip[h][w] != 1)
{
continue;
}
float MapTop = (64 * h);
float MapBottom = 64 * (h + 1);
float MapRight = 64 * (w + 1) - ScroolTime * 6.4;
float MapLeft = 64 * w - ScroolTime * 6.4;
//左<右
if (PlayerRight > MapLeft && PlayerLeft < MapRight)
{
//上
//ブロックがめり込んでいるか確認した後、同じ辺を調べる
if (NextBottom > MapTop && NextTop < MapTop)
{
//mapTopだけだったら半分埋まるから+32する
PlayerY = MapTop - 32;
PlayerMoveY = 0;
}
//下
else if (NextTop < MapBottom && NextBottom > MapBottom)
{
PlayerY = MapBottom + 32;
PlayerMoveY = 0;
}
}
//下<上
else if (PlayerTop < MapBottom && PlayerBottom > MapTop)
{
//左
if (NextRight > MapLeft && NextLeft < MapLeft)
{
PlayerX = MapLeft - 32;
PlayerMoveX = 0;
}
//右
else if (NextLeft < MapRight && NextRight > MapRight)
{
PlayerX = MapRight + 32;
PlayerMoveX = 0;
}
}
}
}
//座標確定させる処理
if (PlayerX + PlayerMoveX > 1280 - 32)
{
PlayerX = 1280 - 32;
}
else if (PlayerX + PlayerMoveX< 32)
{
PlayerX = 32;
}
else
{
PlayerX += PlayerMoveX;
}
PlayerY += PlayerMoveY;
if (CheckHitKey(KEY_INPUT_O) == 1)
{
PlayerFlg = 1;
}
if (ShotCoolTime > 0)
{
ShotCoolTime--;
}
else
{
ShotCoolTime = 0;
}
//Draw
for (int i = 0; i < MapHeight; i++)
{
for (int j = 0; j < MapWidth; j++)
{
/*if (j > MapWidth)
{
break;
}*/
switch (MapChip[i][j])
{
case 0:
DrawGraph((64 * j - (6.4 * ScroolTime)), (64 * i), Map[0], TRUE);
break;
case 1:
DrawGraph((64 * j - (6.4 * ScroolTime)), (64 * i), Map[1], TRUE);
break;
}
}
}
ーーーーーその他の描画処理のため省略
if (PlayerFlg == 1)
{
DrawRotaGraph(PlayerX, PlayerY, 1.0, PI / 2, Player[0], TRUE);
}
GameTime++;
ScroolTime++;
}
else if(GameMode == 3)
{
ーーーーーその他の処理のため省略ーーーーーーーーーー
}
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}
I2luY2x1ZGUgIkR4TGliLmgiCiNpbmNsdWRlPHRpbWUuaD4KI2luY2x1ZGU8bWF0aC5oPgojaW5jbHVkZTxzdGRsaWIuaD4KCiNkZWZpbmUgUEkgMy4xNDE1OTI2NTQKI2RlZmluZSBTY3JlZW5fV2VpZ2h0IDEyODAgCiNkZWZpbmUgU2NyZWVuX0hpZ2h0IDcyMCAKCmludCBXSU5BUEkgV2luTWFpbihISU5TVEFOQ0UsSElOU1RBTkNFLExQU1RSLGludCkKewogICAgLy9tYWluCgogICAgQ2hhbmdlV2luZG93TW9kZShUUlVFKSxEeExpYl9Jbml0KCksIFNldERyYXdTY3JlZW4oRFhfU0NSRUVOX0JBQ0spOwogICAgU2V0R3JhcGhNb2RlKDEyODAsIDcyMCwgMzIpOwogICAgc3JhbmQodGltZSgwKSk7CgogICAgLy9NYXBDaGlwCgogICAgc3RhdGljIGNvbnN0IGludCBNYXBIZWlnaHQgPSAyMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgTWFwV2lkdGggPSAxMzA7CiAgICBpbnQgTWFwQ2hpcFtNYXBIZWlnaHRdW01hcFdpZHRoXTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IE1hcEhlaWdodDsgaSsrKQogICAgewogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTWFwV2lkdGg7IGorKykKICAgICAgICB7CiAgICAgICAgICAgIE1hcENoaXBbaV1bal0gPSAwOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgTWFwWzNdOwogICAgTG9hZERpdkdyYXBoKCLnlLvlg48vTWFwQ2hpcDEucG5nIiwgMywgMywgMSwgNjQsIDY0LCBNYXApOwoKICAgIEZJTEUqIGZwID0gTlVMTDsKCiAgICBmb3Blbl9zKCZmcCwiU3RhZ2UxLnR4dCIsICJyIik7CgogICAgaWYgKGZwID09IE5VTEwpCiAgICB7CiAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgfQoKICAgIGNoYXIgY2g7CiAgICBpbnQgaCA9IDAsIHcgPSAwOwoKICAgIHdoaWxlICgoY2ggPSBmZ2V0YyhmcCkpICE9IEVPRikKICAgIHsKICAgICAgICBpZiAoY2ggPT0gJ1xuJykKICAgICAgICB7CiAgICAgICAgICAgIGgrKzsKICAgICAgICAgICAgdyA9IDA7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIE1hcENoaXBbaF1bd10gPSBhdG9pKCZjaCk7CiAgICAgICAgICAgIHcrKzsKICAgICAgICB9CiAgICB9CgogICAgZmNsb3NlKGZwKTsKCgogICAgaW50IEdhbWVNb2RlID0gMTsKCiAgICBpbnQgRm9udDAwID0gQ3JlYXRlRm9udFRvSGFuZGxlKCJCSVogVURQ44K044K344OD44KvIiwgNTAsIDUsIERYX0ZPTlRUWVBFX05PUk1BTCk7CiAgICBpbnQgRm9udFNjb3JlID0gQ3JlYXRlRm9udFRvSGFuZGxlKCJCSVogVURQ44K044K344OD44KvIiwgMjAsIDQsIERYX0ZPTlRUWVBFX05PUk1BTCk7CgogICAgaW50IFBsYXllclggPSAxMDAsIFBsYXllclkgPSAzMDAsIFBsYXllck1vdmVYID0gMCwgUGxheWVyTW92ZVkgPSAwOwogICAgaW50IFBsYXllcls0XTsKICAgIGludCBQbGF5ZXJGbGcgPSAxOwogICAgTG9hZERpdkdyYXBoKCLnlLvlg48vcGxheWVyLnBuZyIsIDQsIDQsIDEsIDY0LCA2NCwgUGxheWVyKTsKCuODvOODvOODvOODvOODvOOBneOBruS7luOBruWIneacn+ioreWumuOBruOBn+OCgeecgeeVpeODvOODvOODvOODvOODvOODvOODvOODvOODvOODvOODvOODvOODvOODvAoKICAgIGludCBHYW1lVGltZSA9IDA7CiAgICBpbnQgU2Nyb29sQ250ID0gMCwgU2Nyb29sVGltZSA9IDA7CgogICAgd2hpbGUgKFNjcmVlbkZsaXAoKSA9PSAwICYmIFByb2Nlc3NNZXNzYWdlKCkgPT0gMCAmJiBDbGVhckRyYXdTY3JlZW4oKSA9PSAwKQogICAgewogICAgICAgIC8vVXBkYXRhCgogICAgICAgIGlmIChHYW1lTW9kZSA9PSAxKQogICAgICAgIHsKICAgICAgICAgICAgRHJhd1N0cmluZ1RvSGFuZGxlKDQwMCwgMTAwLCAi44K344Ol44O844OG44Kj44Oz44Kw44Ky44O844OgIiwgR2V0Q29sb3IoMjU1LCAyNTUsIDI1NSksIEZvbnQwMCk7CiAgICAgICAgICAgIERyYXdTdHJpbmdUb0hhbmRsZSg0MDAsIDUwMCwgIuOCsuODvOODoOOCueOCv+ODvOODiOOAgC0+IFMiLCBHZXRDb2xvcigyNTUsIDI1NSwgMjU1KSwgRm9udDAwKTsKCiAgICAgICAgICAgIGlmIChDaGVja0hpdEtleShLRVlfSU5QVVRfUykgPT0gMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgR2FtZU1vZGUgPSAyOwogICAgICAgICAgICB9CgogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChHYW1lTW9kZSA9PSAyKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKFBsYXllckZsZyA9PSAxKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBQbGF5ZXJNb3ZlWCA9IDA7CiAgICAgICAgICAgICAgICBQbGF5ZXJNb3ZlWSA9IDA7CgogICAgICAgICAgICAgICAgaWYgKENoZWNrSGl0S2V5KEtFWV9JTlBVVF9EKSA9PSAxKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIFBsYXllck1vdmVYICs9IDEwOwoKICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoQ2hlY2tIaXRLZXkoS0VZX0lOUFVUX0EpID09IDEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUGxheWVyTW92ZVggLT0gMTA7CgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChDaGVja0hpdEtleShLRVlfSU5QVVRfVykgPT0gMSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNb3ZlWSAtPSA1OwogICAKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoQ2hlY2tIaXRLZXkoS0VZX0lOUFVUX1MpID09IDEpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgUGxheWVyTW92ZVkgKz0gNTsKCiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICB9CgogICAgIOODvOODvOODvOODvOODvOODvOODvOOBneOBruS7luOBruWHpueQhuOBruOBn+OCgeecgeeVpeODvOODvOODvOODvOODvOODvOODvOODvOODvOODvOODvAoKICAgICAgICAgICAgZmxvYXQgUGxheWVyVG9wID0gUGxheWVyWSAtIDMyLjA7CiAgICAgICAgICAgIGZsb2F0IFBsYXllckJvdHRvbSA9IFBsYXllclkgKyAzMi4wOwogICAgICAgICAgICBmbG9hdCBQbGF5ZXJSaWdodCA9IFBsYXllclggKyAzMi4wOwogICAgICAgICAgICBmbG9hdCBQbGF5ZXJMZWZ0ID0gUGxheWVyWCAtIDMyLjA7CiAgICAgICAgICAgIAogICAgICAgICAgICBmbG9hdCBOZXh0VG9wID0gUGxheWVyVG9wICsgUGxheWVyTW92ZVk7CiAgICAgICAgICAgIGZsb2F0IE5leHRCb3R0b20gPSBQbGF5ZXJCb3R0b20gKyBQbGF5ZXJNb3ZlWTsKICAgICAgICAgICAgZmxvYXQgTmV4dFJpZ2h0ID0gUGxheWVyUmlnaHQgKyBQbGF5ZXJNb3ZlWDsKICAgICAgICAgICAgZmxvYXQgTmV4dExlZnQgPSBQbGF5ZXJMZWZ0ICsgUGxheWVyTW92ZVg7CgogICAgICAgICAgICBmb3IgKGludCBoID0gMDsgaCA8IE1hcEhlaWdodDsgaCsrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCB3ID0gMDsgdyA8IE1hcFdpZHRoOyB3KyspCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKE1hcENoaXBbaF1bd10gIT0gMSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgZmxvYXQgTWFwVG9wID0gKDY0ICogaCk7CiAgICAgICAgICAgICAgICAgICAgZmxvYXQgTWFwQm90dG9tID0gNjQgKiAoaCArIDEpOwogICAgICAgICAgICAgICAgICAgIGZsb2F0IE1hcFJpZ2h0ID0gNjQgKiAodyArIDEpIC0gU2Nyb29sVGltZSAqIDYuNDsKICAgICAgICAgICAgICAgICAgICBmbG9hdCBNYXBMZWZ0ID0gNjQgKiB3IC0gU2Nyb29sVGltZSAqIDYuNDsKCiAgICAgICAgICAgICAgICAgICAKCiAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvL+W3pu+8nOWPswogICAgICAgICAgICAgICAgICAgIGlmIChQbGF5ZXJSaWdodCA+IE1hcExlZnQgJiYgUGxheWVyTGVmdCA8IE1hcFJpZ2h0KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgLy/kuIoKICAgICAgICAgICAgICAgICAgICAgICAgLy/jg5bjg63jg4Pjgq/jgYzjgoHjgorovrzjgpPjgafjgYTjgovjgYvnorroqo3jgZfjgZ/lvozjgIHlkIzjgZjovrrjgpLoqr/jgbnjgosKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE5leHRCb3R0b20gPiBNYXBUb3AgJiYgTmV4dFRvcCA8IE1hcFRvcCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9tYXBUb3DjgaDjgZHjgaDjgaPjgZ/jgonljYrliIbln4vjgb7jgovjgYvjgokrMzLjgZnjgosKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllclkgPSBNYXBUb3AgLSAzMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllck1vdmVZID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy/kuIsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoTmV4dFRvcCA8IE1hcEJvdHRvbSAmJiBOZXh0Qm90dG9tID4gTWFwQm90dG9tKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJZID0gTWFwQm90dG9tICsgMzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNb3ZlWSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAvL+S4i++8nOS4igogICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKFBsYXllclRvcCA8IE1hcEJvdHRvbSAmJiBQbGF5ZXJCb3R0b20gPiBNYXBUb3ApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAvL+W3pgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoTmV4dFJpZ2h0ID4gTWFwTGVmdCAmJiBOZXh0TGVmdCA8IE1hcExlZnQpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllclggPSBNYXBMZWZ0IC0gMzI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJNb3ZlWCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIC8v5Y+zIAogICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChOZXh0TGVmdCA8IE1hcFJpZ2h0ICYmIE5leHRSaWdodCA+IE1hcFJpZ2h0KQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQbGF5ZXJYID0gTWFwUmlnaHQgKyAzMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBsYXllck1vdmVYID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8v5bqn5qiZ56K65a6a44GV44Gb44KL5Yem55CGCiAgICAgICAgICAgIGlmIChQbGF5ZXJYICsgUGxheWVyTW92ZVggPiAxMjgwIC0gMzIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFBsYXllclggPSAxMjgwIC0gMzI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGVsc2UgaWYgKFBsYXllclggKyBQbGF5ZXJNb3ZlWDwgMzIpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFBsYXllclggPSAzMjsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIFBsYXllclggKz0gUGxheWVyTW92ZVg7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgCiAgICAgICAgICAgIFBsYXllclkgKz0gUGxheWVyTW92ZVk7CgoKICAgICAgICAgICAgaWYgKENoZWNrSGl0S2V5KEtFWV9JTlBVVF9PKSA9PSAxKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBQbGF5ZXJGbGcgPSAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoU2hvdENvb2xUaW1lID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgU2hvdENvb2xUaW1lLS07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBTaG90Q29vbFRpbWUgPSAwOwogICAgICAgICAgICB9CgoKCiAgICAgICAgICAgIC8vRHJhdwoKICAgICAgICAgICAKICAgICAgICAgICAgCiAgICAgICAgICAgCiAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTWFwSGVpZ2h0OyBpKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgTWFwV2lkdGg7IGorKykKICAgICAgICAgICAgICAgIHsgIAogICAgICAgICAgICAgICAgICAgIC8qaWYgKGogPiBNYXBXaWR0aCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0qLwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChNYXBDaGlwW2ldW2pdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdHcmFwaCgoNjQgKiBqIC0gKDYuNCAqIFNjcm9vbFRpbWUpKSwgKDY0ICogaSksIE1hcFswXSwgVFJVRSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgIERyYXdHcmFwaCgoNjQgKiBqIC0gKDYuNCAqIFNjcm9vbFRpbWUpKSwgKDY0ICogaSksIE1hcFsxXSwgVFJVRSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCuODvOODvOODvOODvOODvOOBneOBruS7luOBruaPj+eUu+WHpueQhuOBruOBn+OCgeecgeeVpQoK44CA44CA44CA44CAIGlmIChQbGF5ZXJGbGcgPT0gMSkKIOOAgOOAgOOAgOOAgHsKICAgICDjgIDjgIDjgIBEcmF3Um90YUdyYXBoKFBsYXllclgsIFBsYXllclksIDEuMCwgUEkgLyAyLCBQbGF5ZXJbMF0sIFRSVUUpOwogIOOAgOOAgOOAgOOAgH0KCiAgICAgICAgICAgIEdhbWVUaW1lKys7CgogICAgICAgICAgICBTY3Jvb2xUaW1lKys7CgoKICAgICAgICB9CgogICAgICAgIGVsc2UgaWYoR2FtZU1vZGUgPT0gMykKICAgICAgICB7CiAgICDjg7zjg7zjg7zjg7zjg7zjgZ3jga7ku5bjga7lh6bnkIbjga7jgZ/jgoHnnIHnlaXjg7zjg7zjg7zjg7zjg7zjg7zjg7zjg7zjg7zjg7wKICAgICAgICAgfQogICAgfQoKICAgIER4TGliX0VuZCgpOyAgIC8vIERY44Op44Kk44OW44Op44Oq57WC5LqG5Yem55CGCiAgICByZXR1cm4gMDsKCn0=