'분류 전체보기'에 해당되는 글 142건

  1. 2015.12.09 child 로 달린 것들 opacity 조절하는 코드.
  2. 2015.12.09 ndk 에서 C++ 0x 를 쓰기 위한 세팅 application.mk 편집
  3. 2015.12.09 Circular Queue 배열 구현 클래스
  4. 2015.12.09 boost::pool 메모리 풀
  5. 2015.12.09 AVR 하이퍼 터미널 기초 소스
  6. 2015.12.09 AVR PORTG 스위치 다루기
  7. 2015.04.22 211.197.83.121,43333 나이
  8. 2014.10.11 59.22.105.139,4333삼 121.176.218.149,43333
  9. 2012.05.18 다@
  10. 2012.02.15 짜증나는 어셈코딩
  11. 2012.02.10 pump save
  12. 2011.09.03 폭풍거짓말
  13. 2011.09.03 최장증가수열
  14. 2011.08.25 123
  15. 2011.05.09 한국사람

child 로 달린 것들 opacity 조절하는 코드.

컴퓨터 이야기/cocos2d-x 2.x 2015. 12. 9. 06:32
:

ndk 에서 C++ 0x 를 쓰기 위한 세팅 application.mk 편집

컴퓨터 이야기/cocos2d-x 2.x 2015. 12. 9. 06:31
APP_TOOLCHAIN_VERSION 는 자기한테 맞는 버전으로.
:

Circular Queue 배열 구현 클래스

컴퓨터 이야기/C++ 2015. 12. 9. 06:00
template <typename Node>
class CircularQueue
{
private:
    Node* node; // 노드 배열
    int capacity; // 큐의 용량
    int front; // 전단의 인덱스
    int rear; // 후단의 인덱스
public:
    CircularQueue(int capacity)
    {
        this->capacity = capacity + 1; // 노드 배열의 크기는 실제 용량에서 1을 더한 크기 (더미 공간 때문)
        node = new Node[this->capacity]; // Node 구조체 capacity + 1개를 메모리 공간에 할당한다
        front = 0; rear = 0; // 전단과 후단의 초기화
    }
    
    ~CircularQueue()
    {
        delete []node; // 노드 배열 소멸
    }
    void clear()
    {
        front = rear = 0;
    }
    void enqueue(const Node& data)
    {
        int pos; // 데이터가 들어갈 인덱스
        pos = rear;
        rear = (rear + 1) % (capacity);
        node[pos] = data; // pos 번째의 노드의 데이터에 data를 대입한다
    }
    Node dequeue() {
        int pos = front; // pos에 전단의 인덱스 대입
        front = (front + 1) % capacity;
        return node[pos]; // 제외되는 데이터를 반환한다
    }
    int getSize() {
        if (front <= rear) // 전단의 인덱스가 후단의 인덱스와 같거나 그보다 작다면
            return rear - front; // 후단의 인덱스에서 전단의 인덱스를 뺀값을 반환한다
        else // 전단의 인덱스가 후단의 인덱스보다 크다면
            return capacity - front + rear; // 용량에서 전단의 인덱스를 뺀 뒤에 후단의 인덱스를 더한 값을 반환한다
    }
    bool isEmpty() {
        return front == rear; // 전단의 인덱스와 후단의 인덱스가 같을 경우 true, 아니면 false
    }
    bool isFull() {
        return front == (rear + 1) % capacity;
    }
    int getRear() { return rear; }
    int getFront() { return front; }
    vector<Node> getTotalData()
    {
        int tempFront = front;
        vector<Node> T;
        while(tempFront != rear)
        {
            T.push_back(node[tempFront]);
            tempFront = (tempFront + 1) % capacity;
        }
        return T;
    }

    //  void show()
    //  {
    //      int tempFront = front;
    //      while(tempFront != rear)
    //      {
    //          cout << node[tempFront].data << "/";
    //
    //          tempFront = (tempFront + 1) % capacity;
    //      }
    //      cout << endl;
    //  }
};


'컴퓨터 이야기 > C++' 카테고리의 다른 글

32bit / 64bit well hash functions  (0) 2016.06.02
JNI 정리.  (0) 2016.05.30
boost::pool 메모리 풀  (0) 2015.12.09
C++ Standard draft 07  (0) 2011.02.05
나머지 연산자의 동작.  (2) 2011.01.13
:

boost::pool 메모리 풀

컴퓨터 이야기/C++ 2015. 12. 9. 05:58

일반적으로 new/delete 를 통해서 메모리를 할당하는것은 비용을 발생시키고

보기에 위험해 보입니다.

C/C++ 에선 메모리를 할당 하기 위해서 시스템 콜(OS 내부 함수를 요청)을 해야만 하는데 이는 생각보다 큰 비용을 발생 시킵니다. 그래서 할당을 미리 해놓고 꺼내오고 해제된 메모리를 다시 쓰는 방식으로 재활용을 해야하는데, 라이브러리를 잘 짜기가 힘이 듭니다.

boost 로 해결할 수 있습니다.



#include <iostream>
#include <boost/pool/pool.hpp>
#include <boost/pool/object_pool.hpp>
using namespace std;


struct SomeObject
{
    SomeObject()  { static int no=0; cout << "SomeObject() :" << (m_no=++no) << endl; }
    ~SomeObject() { cout << "~SomeObject():" << m_no << endl; }
    int m_no;
};

int main()
{
    {
        // sizeof(int) 바이트 사용
        boost::pool<> p( sizeof(int) );
        int* x = (int*)p.malloc();
        int* y = (int*)p.malloc();
        int* z = (int*)p.malloc();
        *x = 10;
        p.free(z); // 명시적 free

        // free 명시적안해도 알아서 해제됨
    }

    {
        // SomeObject 객체
        boost::object_pool<SomeObject> p;
        SomeObject* x = p.construct();
        SomeObject* y = p.construct();
        SomeObject* z = p.construct();
        p.destroy(y);// 명시적 해제

        // destroy 명시적으로 해제 안해도 알아서 됨.
    }

    return 0;
}


'컴퓨터 이야기 > C++' 카테고리의 다른 글

JNI 정리.  (0) 2016.05.30
Circular Queue 배열 구현 클래스  (0) 2015.12.09
C++ Standard draft 07  (0) 2011.02.05
나머지 연산자의 동작.  (2) 2011.01.13
strlen 따라잡기 in KLDP.ORG  (0) 2011.01.13
:

AVR 하이퍼 터미널 기초 소스

컴퓨터 이야기/AVR 2015. 12. 9. 05:56
#include <avr/io.h>
#include<avr/interrupt.h> 
#define F_CPU 16000000UL // 사용하고 있는 크리스탈 주파수 값을 상수로 설정합니다.
#include <util/delay.h> // 지연 함수 관련 헤더파일을 포함합니다.
char rx_char(void) // 문자형 rx_char 수신 사용자 함수를 생성합니다.
{
// 문자 수신이 완료될 때까지 대기 UCSRA의 RXC가 비트1 이 되면 다음라인으로
while((UCSR0A&0x80) == 0);
return UDR0; // UDR 수신데이터 반환
}

void tx_char(char tx_data) // 문자형 tx_char 송신 사용자 함수를 생성합니다.
{
while((UCSR0A&0x20) == 0); // UDR레지스터가 빌 때까지 대기 UCSRA의 UDRE가 비트1 이 되면 다음라인으로
UDR0 = tx_data; // UDR레지스터에 입력한 tx_data 입력합니다.
}

int main(void) // 메인함수를 호출합니다.
{
char i, data; // 부호없는 문자형 변수 i, data를 생성합니다.

DDRB=0xFF; // B포트 8비트 전체를 출력으로 설정합니다.
PORTB=0x00; // B포트 8비트 전체의 초기값을 논리0 (0V)로 설정합니다.

UCSR0A=0x00; // UART설정 레지스터A 별도 설정 없음
UCSR0B=0x18; // UART설정 레지스터B RXEN과 TXEN을 비트1로 설정해서 송수신기능을 활성화 합니다.
UCSR0C=0x06; // UART설정 레지스터C UCSZ1과 UCSZ0을 비트1로 설정해서 8비트 데이터 전송으로 설정합니다.
//UBRR = 416;
int baud = 2400;
int ubrr= F_CPU/16/baud-1;

// 통신 속도 설정
UBRR0H = (unsigned char)(ubrr>>8); 
UBRR0L=(unsigned char)ubrr;

while(1) // 아래 구문을 무한 반복합니다.
{
tx_char('B');
_delay_ms(100);
/* data = rx_char(); // data 변수에 rx_char 사용자 함수사용으로 수신된 데이터를 저장합니다. */

/* if(data=='y') // data변수와 문자y가 같으면 */
/* { */
/* PORTB=0xFF; // B포트 전체 논리1 (5V)를 출력합니다. */
/* tx_char('_'); // tx_char 사용자 함수 사용으로 _문자를 송신합니다. */
/* tx_char('o'); // tx_char 사용자 함수 사용으로 o문자를 송신합니다. */
/* tx_char('k'); // tx_char 사용자 함수 사용으로 k문자를 송신합니다. */
/* } */
/* if(data=='n') // data변수와 문자n과 같으면 */
/* { */
/* PORTB=0x00; // B포트 전체 논리0 (0V)를 출력합니다. */
/* tx_char('_'); // tx_char 사용자 함수 사용으로 _문자를 송신합니다. */
/* tx_char('o'); // tx_char 사용자 함수 사용으로 o문자를 송신합니다. */
/* tx_char('k'); // tx_char 사용자 함수 사용으로 k문자를 송신합니다. */
/* } */
/* if(data=='b') // data변수와 문자b가 같으면 */
/* { */
/* for(i=0;i<3;i++) // 아래구문을 3번 반복합니다. */
/* { */
/* PORTB=0xFF; // B포트 전체 논리1 (5V)를 출력합니다. */
/* _delay_ms(200); // 위 상태를 0.2초 동안 유지합니다. */
/* PORTB=0x00; // B포트 전체 논리0 (0V)를 출력합니다. */
/* _delay_ms(200); // 위 상태를 0.2초 동안 유지합니다. */
/* } */
/* tx_char('_'); // tx_char 사용자 함수 사용으로 _문자를 송신합니다. */
/* tx_char('o'); // tx_char 사용자 함수 사용으로 o문자를 송신합니다. */
/* tx_char('k'); // tx_char 사용자 함수 사용으로 k문자를 송신합니다. */
/* } */
}

return 0; // 정상종료 값 0을 리턴합니다.
}


'컴퓨터 이야기 > AVR' 카테고리의 다른 글

AVR PORTG 스위치 다루기  (0) 2015.12.09
:

AVR PORTG 스위치 다루기

컴퓨터 이야기/AVR 2015. 12. 9. 05:55
#include <avr/interrupt.h>
#include <avr/io.h>
void port_init(void)
{
    PORTA = 0x00;
    DDRA  = 0x00;
    PORTB = 0x00;
    DDRB  = 0x00;
    PORTC = 0x00; //m103 output only
    DDRC  = 0x00;
    PORTD = 0x00;
    DDRD  = 0x00;
    PORTE = 0x00;
    DDRE  = 0x00;
    PORTF = 0x00;
    DDRF  = 0x00;
    PORTG = 0x00;
    DDRG  = 0b00001111;
}


//call this routine to initialize all peripherals
void init_devices(void)
{
    //stop errant interrupts until set up
    cli(); //disable all interrupts
    XDIV  = 0x00; //xtal divider
    XMCRA = 0x00; //external memory
    port_init();


    MCUCR = 0x00;
    EICRA = 0x00; //extended ext ints
    EICRB = 0x00; //extended ext ints
    EIMSK = 0x00;
    TIMSK = 0x00; //timer interrupt sources
    ETIMSK = 0x00; //extended timer interrupt sources
    sei(); //re-enable interrupts
    //all peripherals are now initialized
}


void delay(int n)
{
    volatile int i,j;
    for(i=1;i<n;i++)
    {
        for(j=1;j<600;j++);
    }
}

int main(void)
{
    unsigned int temp, i;
    init_devices();    

    
    delay(600);
    
    while(1){
        if(PING & 0b00000100){
            PORTG = 0x01;
        }
        if(PING & 0b00001000){
    
            PORTG = 0x02;
        }
        delay(10);
    }
    return 0;
}


'컴퓨터 이야기 > AVR' 카테고리의 다른 글

AVR 하이퍼 터미널 기초 소스  (0) 2015.12.09
:

211.197.83.121,43333 나이

잡담 2015. 4. 22. 20:41

ㅇ.ㅇ

'잡담' 카테고리의 다른 글

59.22.105.139,4333삼 121.176.218.149,43333  (0) 2014.10.11
다@  (0) 2012.05.18
김현식 음원 몇개 추가 구입.  (1) 2011.04.30
현재 내가 배우는 과목과 그에 대한 느낌  (0) 2011.04.28
다리 찢기 하겠습니다.  (0) 2011.03.05
:

59.22.105.139,4333삼 121.176.218.149,43333

잡담 2014. 10. 11. 22:06

121.176.218.zzz149,43333 121.176.218.zzz149,43333



'잡담' 카테고리의 다른 글

211.197.83.121,43333 나이  (0) 2015.04.22
다@  (0) 2012.05.18
김현식 음원 몇개 추가 구입.  (1) 2011.04.30
현재 내가 배우는 과목과 그에 대한 느낌  (0) 2011.04.28
다리 찢기 하겠습니다.  (0) 2011.03.05
:

다@

잡담 2012. 5. 18. 19:16



:

짜증나는 어셈코딩

카테고리 없음 2012. 2. 15. 07:52
.486 
.model flat,stdcall 
option casemap:none 
include \masm32\include\windows.inc 
include \masm32\include\kernel32.inc 
includelib \masm32\lib\kernel32.lib 
include \masm32\include\user32.inc 
includelib \masm32\lib\user32.lib

MyMain proto

.data 

;01h -> 암호화
;00h -> 비암호화(import directory table)
encSections db 03h, 00h, 00h, 00h, 
01h, 00h, 10h, 40h, 00h, 26h, 10h, 40h, 00h, 
00h, 00h, 20h, 40h, 00h, 92h, 20h, 40h, 00h, 
01h, 00h, 30h, 40h, 00h, 0Bh, 30h, 40h, 00h
 
ImportTables IMAGE_IMPORT_DESCRIPTOR 3 dup (<>, <>, <>) 
strMsgBox db "MessageBoxA", 0 ; user32.dll
strCrtWindowExA db "CreateWindowExA", 0; user32.dll
strExitProcess db "ExitProcess", 0; //kernel32.dll
strSleep db "Sleep", 0; //kernel32.dll
strKernel32 db "kernel32.dll", 0
strUser32 db "user32.dll", 0
user32APIs dd 3 dup (0)
kernel32APIs dd 3 dup (0)
IATuser32 dd 3 dup(0)
IATkernel32 dd 3 dup(0)
ksooSectionBeg dd 404000h
ksooSectionEnd dd 40403Ch

.data?
importAddress dd ?

.code 
start: 
invoke MyMain
invoke ExitProcess, NULL 

MyMain proc

LOCAL sectionCnt:DWORD
LOCAL sectionBeg:DWORD
LOCAL sectionEnd:DWORD
LOCAL sectionPtr:DWORD
LOCAL minyHmod:DWORD
LOCAL minyVirtualProtect:DWORD
LOCAL minyFreeLibrary:DWORD
LOCAL minyOldProperties[20]:DWORD
LOCAL minyModOfKernel32:DWORD
LOCAL importDesc:IMAGE_IMPORT_DESCRIPTOR 
;
LOCAL imgBase:DWORD
LOCAL wholePtr:DWORD
LOCAL INTPtr:DWORD
LOCAL IATPtr:DWORD
LOCAL tmpModule:DWORD
LOCAL gabage:DWORD
LOCAL isEnc:BYTE
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
invoke GetModuleHandle, 0
mov imgBase, eax;
;db 1 DUP(121) ; 코드 난독화.
lea esi, [user32APIs]
mov [esi], offset strMsgBox
mov eax, imgBase
sub [esi], eax
lea esi, [user32APIs+4]
mov [esi], offset strCrtWindowExA
mov eax, imgBase
sub [esi], eax
lea esi, [kernel32APIs]
mov [esi], offset strExitProcess
mov eax, imgBase
sub [esi], eax
lea esi, [kernel32APIs+4]
mov [esi], offset strSleep;
mov eax, imgBase
sub [esi], eax
lea eax, [user32APIs]
sub eax, imgBase
mov ImportTables[0].OriginalFirstThunk, eax
mov ImportTables[0].TimeDateStamp, 0
mov ImportTables[0].ForwarderChain, 0
mov eax, offset strUser32;
sub eax, imgBase
mov ImportTables[0].Name1, eax
mov eax, offset IATuser32
sub eax, imgBase
mov ImportTables[0].FirstThunk, eax
lea eax, [kernel32APIs]
sub eax, imgBase
mov ImportTables[type IMAGE_IMPORT_DESCRIPTOR*1].OriginalFirstThunk, eax
mov ImportTables[type IMAGE_IMPORT_DESCRIPTOR*1].TimeDateStamp, 0
mov ImportTables[type IMAGE_IMPORT_DESCRIPTOR*1].ForwarderChain, 0
mov eax, offset strKernel32;
sub eax, imgBase
mov ImportTables[type IMAGE_IMPORT_DESCRIPTOR*1].Name1, eax
mov eax, offset IATkernel32
sub eax, imgBase
mov ImportTables[type IMAGE_IMPORT_DESCRIPTOR*1].FirstThunk, eax
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;동일한 환경 구성하기. 끝
;invoke LoadLibrary
;minyModOfKernel
push 0
push 6c6c642eh
push 32336C65h
push 6E72656Bh
invoke LoadLibrary, esp
db 1 DUP(90h)
mov minyModOfKernel32, eax
push 7463h
push 65746F72h
push 506C6175h
push 74726956h
invoke GetProcAddress, minyModOfKernel32, esp
db 1 DUP(90h)
mov minyVirtualProtect, eax
push 797261h
push 7262694Ch
push 65657246h
invoke GetProcAddress, minyModOfKernel32, esp
db 1 DUP(90h)
mov minyFreeLibrary, eax
;------------------------------------------------------
mov sectionCnt, 0
mov esi, offset encSections
mov eax, [esi]
mov sectionCnt, eax
add esi, 4
xor ecx, ecx
.WHILE ecx<sectionCnt; 0x10 복호화.
push ecx
mov eax, 9     ;lea eax, [esi + 9*ecx]
mul ecx
add eax, esi
mov eax, [eax]
mov isEnc, al; 암호화 된다면 1
mov eax, 9; lea eax, [esi + 9*ecx + 1]
mul ecx
add eax, esi
inc eax
mov eax, [eax]
mov sectionBeg, eax
mov eax, 9 ;lea eax, [esi + 9*ecx + 5]
mul ecx
add eax, esi
add eax, 5
mov eax, [eax]
mov sectionEnd, eax

; 권한 변경. READWRITE 로.
mov eax, 4
mul ecx; eax = 4*ecx 를 수행함.
lea edx, minyOldProperties
add edx, eax
push edx;
push PAGE_READWRITE;
mov eax, sectionBeg
mov ebx, sectionEnd
mov edx, ebx
sub edx, eax; ebx - eax 결과
push edx;
push eax
call minyVirtualProtect
;xor 0x10 수행.
mov eax, sectionBeg
mov ebx, sectionEnd
.IF isEnc != 0 ; 암호화 되는 부분이라면.
.WHILE eax != ebx
mov dl, byte ptr [eax];
xor dl, 10h
mov [eax], dl
inc eax
.ENDW
.ENDIF
pop ecx
inc ecx
.ENDW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
mov eax, ksooSectionBeg
mov ebx, ksooSectionEnd
xor ecx, ecx
.WHILE eax != ebx
mov dl, [eax]
lea edi, [ImportTables]
mov edi, [edi]
add edi, ecx
mov byte ptr [edi], dl
;mov ImportTables[ecx], dl
inc eax
inc ecx
.ENDW
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
lea esi, [ImportTables]; 어셈코드로는 00405165   8B35 00434000    MOV ESI,DWORD PTR DS:[404300]
mov wholePtr, esi
.WHILE TRUE
mov esi, wholePtr
mov edx, [esi]
.IF edx != 0
JMP CON
.ENDIF
mov edx, [esi+4]
.IF edx != 0
JMP CON
.ENDIF
mov edx, [esi+8]
.IF edx != 0
JMP CON
.ENDIF
mov edx, [esi+12]
.IF edx != 0
JMP CON
.ENDIF
mov edx, [esi+16]
.IF edx != 0
JMP CON
.ENDIF
.BREAK
CON:
lea eax, [esi+12]; 
mov eax, [eax]
add eax, imgBase
invoke LoadLibrary, eax ; dll 네임에 대한 호출
db 1 DUP(90h)
mov tmpModule, eax
;하나의 dll 에 대한 반복문 들어감
lea eax, [esi]
mov eax, [eax]
;add eax, imgBase
mov INTPtr, eax
lea eax, [esi+16]
mov eax, [eax]
add eax, imgBase
mov IATPtr, eax
.WHILE TRUE
lea esi, [INTPtr];
mov edx, [esi];
add edx, imgBase;
mov edx, [edx]
.IF edx != 0
JMP CON2
.ENDIF
.BREAK
CON2:
mov edx, [esi];
add edx, imgBase;
mov edx, [edx]
add edx, imgBase;
add edx, 2
invoke GetProcAddress, tmpModule, edx
db 1 DUP(90h)
lea edi, [IATPtr]
mov edi, [edi]
mov [edi], eax
;;;;;;;;;;;;;;;;
mov edx, INTPtr
add edx, 4
mov INTPtr, edx
mov edx, IATPtr
add edx, 4
mov IATPtr, edx
.ENDW
;반복문 끝남
mov esi, wholePtr
add esi, 20
mov wholePtr, esi
.ENDW
mov sectionCnt, 0
mov esi, offset encSections; MOV ESI,404314
mov eax, [esi]
mov sectionCnt, eax
add esi, 4
xor ecx, ecx
.WHILE ecx<sectionCnt;
push ecx
mov eax, 9; lea eax, [esi + 9*ecx + 1]
mul ecx
add eax, esi
inc eax
mov eax, [eax]
mov sectionBeg, eax
mov eax, 9 ;lea eax, [esi + 9*ecx + 5]
mul ecx
add eax, esi
add eax, 5
mov eax, [eax]
mov sectionEnd, eax
lea eax, [gabage]
push eax
mov eax, minyOldProperties[ecx * 4]
push eax
mov eax, sectionBeg
mov ebx, sectionEnd
mov edx, ebx
sub edx, eax; ebx - eax 결과
push edx;
push eax
call minyVirtualProtect ;권한 복구
pop ecx
inc ecx
.ENDW
ret
MyMain endp
end start






;404300 에 DataDirectory[1].VirtualAddress + ImageBase 저장 
;404304 에 ksooSection 시작위치 
;404308 에 ksooSection 끝. 
;40430C 에 Import Table 의 크기 
;404310 에 ImageBase 값 
;404314 에 암호화된 섹션의 개수 
;404318 부터 암호화된 섹션의 시작(voff)위치와 OverOfEnd 를 기록함. 
;A = LoadLibrary("dll");
;B = GetProcAddress(A, "API name");
;
;
;
;

:

pump save

카테고리 없음 2012. 2. 10. 16:08
:

폭풍거짓말

카테고리 없음 2011. 9. 3. 15:36
:

최장증가수열

카테고리 없음 2011. 9. 3. 14:49

2 7 4 3 5 1 6 라는 예에서

밑에 있는 각 수열의 뜻은
n 에 대해 : 처음부터 n까지의, n을 포함한 최장증가수열

2에 대해 2        
7에 대해 2 7
4에 대해 2 4
3에 대해 2 3
5에 대해 2 4 5, 3 5, 4 5 // 2 4 5 선택
1에 대해 1
6에 대해 2 6, 2 4 5 6, 2 3 6 // 2 4 5 6 선택

제일 긴거 2 4 5 6 선택
:

123

카테고리 없음 2011. 8. 25. 15:25

입력예
1
50
2500
3000
1000
1000
1500
700
800
0

출력예
6
port
starboard
starboard
starboard
port
port
:

한국사람

유희거리 2011. 5. 9. 12:21

ㄹㄹ

'유희거리' 카테고리의 다른 글

블랙 드래곤가는 길에 대한 모든것  (0) 2011.04.14
한국사람 하모니카  (0) 2011.04.10
똥냄새 중독.jpg  (1) 2011.03.15
흔한 수학갤의 까칠이.  (0) 2011.03.13
연애 시뮬레이션  (0) 2010.07.26
: