1110010101001101100011000111101010110001010000111100001100100000100011100010011110011100101100001010101010101101100101000011010110100011000001011100001110111101111001000111000000001000101001000001000111100101001100001101110010101001001100100010011100111010001101111100100000111101010010000011000000100110001011100000100010010100010111100010001111001110011101100001001000010110010110001110001000111011 0110110011111111000010011100100001001010011001000011111110100010110100001100011111110001110110011111110101100001010100000000000111001111001111110001101001110001001011000110101011000110101111010101100011101011000010111011010011000111111010001010001111110111110100101011001011100110000111011010000110010010000001101010000011010000001100100000110100010100100001101100101111111100101111010010000010110001 1100101111101000011111011100111100000110010001010011100111001000111101000000100101000101001001100101011001011010100101011001111011010111010011111110100010110101010100010001001110010100011001100100000100101001101101111111101111111010100101000111100100101010110110101100010000010001100011110111110100110101111110011010000010000001010001010011000101000010000001000110011111010011111010000111100110010100 1110000011000101010001101111110110101101111100110100101001110110111010110010110101110111010100101100101100100001110111000110111111111111010100111110101011011000110001100010101011111101011111010110011001010111111111010011110001111000110001101101000000001110010001011110000110101000001111101010001010111101001000001000011010101111101101110101100000111010000110110011001011000000010100010010011110101101 1111010100010100000110011111111110110011011101010110010101101011011111001100100100110111101101111011101100111000100101000010101010101001010110100101111001011110001101011000110000010110101001010011001110111011001100000101010000101110010110101100101000011011100110110000001011101111011101001010010101100000100011111110001110111100100011010000101000111001011000110001001111000011000101010100010001110010 0011111001111101011111101000110111000100001110000100100010100010100101001010011110100000101100100010000010011011000000011101001001000110101000000010010100110100001110011110100000100100010101110110001111111001010110100100011110011000100110111100010010110101000111001101110111010110101100011110110100101100001101111101100000010101010010000000110010100101010110101110100000111101010110111100001001011110 1111010110010110100000000001101001101011000011001010101010001110010101101011100110001111111011110001101011010101101001001010000010111100010000101011101010000010010011111010000010101001111000010011011100101100110110111001111100000001101110000110101011011101001000011001100111011011011001010011110010011111110000101110110110111111110110101000101010111010010001100100110100011101010010101000001001111111 0001111111111101110110011111101111111010110110110011011011111100001011011011010100011010110111000001001110110100110111100000100100110100001111000101100111110001000011011011001110010011010000111110101001001100101001010111110110111011010110011010001010100011000110100101001111101010011110110100011100111101100100001110010001011001110100100010011111110001011111000101100111000011001000011000001010000101 0011011100000100011111110111000010011000001001010110110011111100001000011100101101100010001011010001010000010001001111100100011010011011001110001011101010001001010111100011101010001011010011010101001110101000111001010101100110010100010000101001001101001111111010001100010110101000101110100011010001001010010101000000110011000100000000110001110011010110110111111111001101000011110101001101111010011101 1011000010111110011001000011110010000111111111000101011111101010101101011111011011000010010110001100011111010100001000111110000001101010100010001011001101100110001011100011000100001010110000010111100000100111110000000000110010100011111110001111110001011111001011011000011011011011011011111011110110011111100111000101111011000101010001101010010100000000101100001110000101011100100000100110000100001101 0011011001001000001110111111010010000010010010000111110110010001101111101010011000101010010001011110101001011011011000101101000000100111000100011100011110011010001111011100010100011100101100010110011010100111010000001000110011100100111001010011100000110010110100010110001100001110011000001010010011111010001100110010001110101110100001101010111001110111111001110111010010001111000011011111010000111101 0011001001100010101000111011001100100111010101101000000000011110111000001101100110010011110100010111011010001111011011001011111101100001000011010101110000001000100110110011101001001010110011101000100111100101110111000010101100101010000011001011000011011000100001000100101010001011011000110011011001110101101000110100000100101000011001000101101010011100011100001010101100000011100110011110010011100111 0000000010101101000001101101100000010011011001110001011110011011110000110000110111101101110101111100110110011111000000010000000011011101101111101100100111100100101100011000110011100010101101010111001101100100010110011110000001110001110010110011010000011111111011110110000010111001000111001000101111111101011101100100100110010000011011111000000100010010000110110100011000100000111110000011000101011100 0100000001111010011100111000111010100010101101010111110010111010001100010101111011111111000011101101010100011010100111010011011100011100110101111010001010101101110100011001001000010001011101101111100100000100001011110101010011101101100011011100101100001100010101010000111101100111101101010011110100100111010111110011000111000111011100001100011010100101101001010101010010000101101111110010111100010100 1111100101000001011001001111100000101110001111110100011000101110100011011110110011011011000010010011000111111000000001110100101001100110011101010000110011100100000111110011010110000111011111100100100000101101010010100110001011010010100101100000110011110000011101001001111000000101011000010100011110001110111001000111001011011001101100011010110000100111100010101001001001110111111101110110001011111011 1001111010111010010010010001001011100101110011110110011010111011100101100101000001001111100011110010011100011110011000110100110000111100001001000011001111000000000110100100111111110011000110010001010001111110111011101111011011110101010000111001000001010101111111110001001111111010010001111111100010101011010010011011011010000010000110100010000100100011110000010110111111110111001101000001010000110010 0100001111000101001111110011001100101001101000100101111110000001110010100100001011100010100011100000011100101011101011111010100111000000100001001011000010110110101110111111010001011100011111100111100100111000000010010001100101010011010110110000011110011111000011011011001110111001001010101000110001011110000100011010101001011101011000001001011011010001000101100111000101001110110110111001111100011100 0011010010010100001110001101011011010001010111100000001110100010101101100100011010111010000110100001101111010111011110000100101110100100111011001011010110100010011010000110110010010001110101000110010000000110101000000111101111100001100101010000101110010000011110110110001011011111010100001111110011111000010001100010001000010100110001001010110010110100101011000010100011100100000110100011101101010111 0001011001010110100011101010111011001100111111000101110101011110001010000000000101001101011001111110001000110000011001110001111000111010111011101110110000000110000010011111011110011110100101100010001101110001001111001001100100111011111100101100010000011001111010010001100001101011111111011011011000111110100010101001100010010000100110101010011101011110111111110010111011011010101011101111111100100110 1001100000001011001110111001111000110000010000101000111000000010111010100110000000010011101000010101110010011101000011100110110010111011011001100011001000101100001010001110110011110111000111110001110111111111001011110011001100000000111000011011001101010010100001010001110001100111111010110110000011000111011101000110101101110100010011010011110000001101001001111010000101001011010000010110110110011111 0010110010111001100000111000000110000011110111101001101111010100000011001001101010110100001010010111001101101111101101101010011000010010110011001110010011100111011100011000101110011010010010111101100001000111110100000110010000111100111110101011111100111101000111010110101010001010110111100110011000011010001011000111100011101111111011001100000111101100000011001001111000100001000111100101011101110011 1011110011000001101110100011110001010000010100110110000010011011101111011010011000110000010111110110001100001100000110100010010000011001101100101000110100011110110001101100011010110100011001010001100001111000001111110000001011111000111100101001000111001111101111100001001001011100001110100111001010110011011100011111111011010001011011011011110001000011010000011000010001011111001100010100010011101010 0100011011110011001000000110010111111011011111011001010011010100100000011100000011100101001100011010101111100110100111000001101111000100001000001110100101110110111111111011110110100110011011001001000000100010001100001010110001000011110101000011011110111010001001100111101010000001100101001010011000101001011100111110111001010110111101100010110100100011111100001010101111111000100011110001001001010011 1010001010111000010011001011110111110101110100101010001110000110001011001000111001010111101001111001011010011100010100111101101100010111100001000101100110011110101101000101001001001110111000100011100010001001110100000110010000011000110010100110000101001000001010111100100010010101000000010100101101011001010101011011010111101111100011101111001100101001001011001100110100100111110100111010110000111000 0111000001010111010111100111101101000111100101011100100111111100001010011000110110001011101110100100000011011110000101101100111010100111110001011011101111011010011001101000000111010100110010000111000100100010001011111001101110000110110011010100110100011010010001011101101010111101010001101111100011101011101111001111111110110000101011010101000001010101011111011111100111011001001001110100100110100100 1110111111001010111111101010110110011100011000011111101110001011101100001011101100001111000011101110100000001011000110001001010011110000100010111111100010000101100000110000111110011000111010011001010010011001010001011111101011111000001001011000011011111110100110000100101101000011111100011000010001000011010111110010010111000101011110110011010100010111100001101110011100000101000100011111010111101100 0110101011100000110110111101100010001010111010111100110011001000011000001011010101111111011111111101111000101111111101100101000110111101110010011001100111000101110000011101011011110000001000011011100110111000000001011001001011011011111011110101010010010010100100111111110010001010000110100101111110111000111101000001011001001010010110110101111110101101010110000000010111101110000101100001001111001011 1011011111000010011100011001011110000000110001010101010010101111101000100111101100001010111000111001000111101111010110100010101110111111010011011001011001011000111001010011000011010010010110111100010111001100110001100111000101001010011010001000001110010111000100001010110111111110110001111010100010010000010001010110111101111010001110010000110101110011010111110111101011010001001011100110010101110011 0010011010100100011101111110001001111100010110111100110010011011011111010000110100000011110101000001001111000001100010011111000111000011101010101101001001001010110000001111001000110010101111011010110110010110110010000110111110001111010100100110101100001000100011001101111011100001110000010011111001111011001010011110000111011100110010011010111000010011110111000100100001111100010000000011000001000000 0100010011100001010000111011101100001001010000100000011101010100001000100011010100010101001100101111000010010011101010011000011001100000010011001100001111100001001101100010101001100111100101011101011111010100010000110000001111100011010110001101100110111111110011100110010001000110100000000101110101000011111011101101010011101100010101100000000100100110010010000011101111011100010101100100001010011111 0010011110111101010000010011101101010100011001100101000111010010110000010111010000100011001111001110111011100000000001000111111011100000110100110100001111110011000001101000100111010111001111001111110100001000110001010110001011110111010010110100000110001011111001101001110010011110100000010100110111011001011011101101110110111101010011011000111101011001111111110000000000110001100010101101000100011110 1101100010111010100010111011110010010111010110110010010110111001000001010101000100011111101111110011111011010110100111000100100000110101010111000101101010000011001001000110111010101010011111111010001111010001011010001000000000100000110100101101110000000010111011101110000110110010000001100001010001000010000110000010001110001110101100110011101100001011001000101001010100110111101001110100000111101011 0111100011100100111111010010110100100001000111010100111110100111011101110000111100101100110000011101100101010100101001100000100001110110000111011111100000011101110101011011100011000110111010111110010101001001110001011111100111101001111110001000111000110111101010100100000011101010101100001101101110111111111101101001110100101110000100000001110001100001001110001111111001011001101011110001001111010000 1000000101100101010001111110011111000100001100001000000001101111110101110101100101000000110110110111100001111010110111100001000111100110001100101110110000010101101111001011101001100011010101111110111000011111100000000110100100000010001110010110100000101111010000100001011011011100010100010010001001001010111011101001111010001111011010101001000110000100000110111101110110111100100010010011101000001111 0011101101001000100100101010111010000100100101100000100000000011111101011101010000101110100001111010100010111001111110011001001011011010100010010101010100001101000011100101010001001111111110010110010111011110100110001001111001100000101001010110011110111100001001001111111001011001100001000001000100101101101000100010100100010100001010011101010001010110111010100010000100010000011110110100010000001101 0010001100011111000110101001011010011011111111111000011001100111100001101001010111001100010000110001011001010001100101011011110110001111000111000111111110001101111011001011010000011010101000110101010001000011010010111000000111110011000111000011000111010100011111100101001101001101010100010000110000011111001111000000110001100110010011100110100111010011000111101110111001010010110011000001010001011111 0011100100011101011110010101110110110111100011000010010011110110001101010111000110001001110011101000101010101110101101011111101001110011111011010011000101110011110001011010011111110100111111011011110001010000010010001001011100011001100011000001000111100011101110000011001011101010101111110011000111000100101110010100011101010000000111010011011000111011100100000100101100110100101011110010101110101010 1000001010011001000101000101011110101111001001011101111111000101100101011101111111000001010100000111111111100010000001011111100010001100011111101001101101101001100100000101010110100011010101011000110011100101010111111010111001101101000101111010110101011011110110000110111111110100000100101100101111111101001010010000101000111111000100101010110000111111001000001110101011100111110000011000111000000000 0000110101011111110101110111110001010011001001101001011111111110100001110000101011000101001111110111010100000010100110110010011100010110100100110000101011000100011001111010000001001000101111111100000110110011100110000110100111000110100111010111101000100111001111001010011101010011101011010111111001010101000111000101000111000011101001001100110101010000100100010101010100011101011001000110000101111111 1001111010111111010010010001010011111010010011010110101101110011010110100110111111110101110101101111010000100110111001001100001001001111010100111010100100110001101000010101100101000110110100000001111111110101000010010100011010001101000111111001001001111000111011100111011011000011010011100111000001101101001000011000110101001000111010100101011101101000110100010010110011111111111010100100010010100000 0101100110000011110100100000111011101011111010101010010111011110000000111001100011010001111110011100111100001111100100111100001101000101111001001000000011111110111001111100100000111001011000101001110100100010111000111111100010000111000010100000001010110101111110011011011110100010111110010100110001111000101000000001100010010101010010001100101011011111010101001100011010101111000100000100110111100011 0011000010000111001110101110000011000000111000110011010010110000010110001101001111000010100101111000010001110011011011001000111111000101111111100110011111010000011001100000100100001000010101100110111101010010010110110111111011111011010011100011101001000110100001011111100010101011001110010000111011100101110000001011000011101011111100001000100111101010111010010011011010000100000111010110111010100000 1000101010010110001100011110101100000111010010011010011110001010100110000111110111011010100111001101011001110010110100100101001001110001111000010110011001011010101110010011001010010011100011100110111101110001010101100010010111010110100001101010001000011111100111010010010011100011010010110011111110011011100001001011001111000110001000000100001111111000010110000000001001101101110011110010001010000101 1101101110001001110010010010100111101010000010101110001111110011010000011101101010000111110101011000100001110010101010111001000000010010001111100001101110100111100110101011000000111101010000011101101000111010100011001000110111111011000000101100000101001000110010001101011111101110001001010101010000100010010001110010101101011000000001100110001110100010011101001111110111110000101000011111000000010000 0011100010100011101011110110101010101101111011100111010110110011000011011001110101010010110010000011100001011010101100110010011111111100110110001011000100000001111010110000101001000001011101001100111011001011100010011001101010110011010011110101101001011101000100100110111101110101111101100111100010000000001100110000111101100000110111011101001111111001110100010001100110011000001011101010111010100110 0101001001101101100101000001100010001000100010101100110010101101111001101011101011101110110100101010000100110001100101001100010100110110110000111110101010101101101011001011101001001111101101011100001010101001010011000001111110010100111110111010001100111001100000100011100001011010001010010110011010100100000111001001001111110100111011101010101001100110000100011100100111111011110001001010000011000101 1111000110000110100011011010010001111110111000111101101100111001100000000000000011110010111100001111111011110111111111011001101001110011010111100001010001111001100100101110011011100110001111111100000100101000010100001110011101111011010010101011011010101110111000011000011101101101100111001011011110011110000001001000011111000010001100110101010110100111111001101111001110101000111100111110100010101110 0111000011010001101110110001011010111100100001000101100111110001000111110010011110010110001100001010000010101000100101111001010000101101001010001110001001101011111010011101011000001001100011011000010100101000010010011111101100110101010100011010010100000010001010111010110100110100101111110110001100111100100110110101101000001100100010101000100101000011001110011101111111010000010001110111001100010000 0101100010110111000111101100110000100110110101111100110100000111100010010010001011010111101110001101000001010111001110000010110101010001100101011001001101101111000010000001100001110110100001100011111100101000100000111000010011000010101100001000010011000011010010010010111110100111001011101011100001000100001110011101011101001111000110000010111010001101010001001011111000000100101101110010000001000000 0111111001101000000110111111101110100011100001000111101110101001101001000110101011100110001011010100001101100101001110111110100001001001010111110101110100011011100101110000100100100000001100110110000111111001100100001111101101011101010100010101100011101101110000100101010000000110000111000111010010011110000010001010111001100111101000001001011011011101111000111001110111011110000110110000111101001011 1100000010110101110101001001100110100010000011000011000110110111100111100010010001100000011101011010111100110010110000101010011110010001000001111000001010010011110000100001000000100001111111101101100100111111001100100101001001001011100111110001011001010110011101111000100101100001001101001110000010111101010001100100000101110000010111000101010111101110111000101111100001101000111011100000110100010100 1001100000101010110001101100000101000000110101101001001010101111111010011000101001000110110101011111100010110101001001100110001010011100011100110010001111011010010111110011110110111010100101001010000110011101011000101100000100101100000111101111110011010001101110000100000100111010111111100011000000000100111101110101111011010101111110000100000011111001111101101111011010100010000101101110111000000001 0011001000101001100110100011001101010111010010010010101011111011011100100110101010010000100010111111011100110111000101100101100010111100111110001001100101111011111001100011011101100001000001111010111100110001001000100101111000011100110100010100001001101111110100110001101001010101000101111100100111001011110110000010001110100101110100110111100011110011011001100010111000000101001000100100100100101001 1001101001100011101100001110010110011100001110000100101101101101100111000110001111011000111011000010011001000100001000100101101110111110110100100010100111010011100011010101101010001110001001101110000100001111000010111110001110110001111101000010101001111110011100101010010001100100010110011101110101000101011000101011101110110001101010111010010110101000111101111001100011010001010111001100010001011110 0111011010101111010010110000100000110110011001001010111000000100100100011101100111100011111101010110011001011011100000100001100110001101010010101010010011001010110001010010011100000011111110010001100001010000010000011110111011100011100100011011001111100110100110100111110011001101111101110011000110000000101110000011001011100111000000100001010000011110110011111001011100101100001010101000110011011011 0100000110001110000001000011000100001000100110111110000101111001101101111011011000110010110111111110001101011100100111101111111111110000111100000111111010001011100111001110000110111101001110110101101111110000001110011111001101011011101001101110111010111000100100001001010101001111100001101001001001011000111010001010011101110001101011111011110010111001100001110110100001000101011110100001000101101111 0100111011001010001010001010011111001101101010110001100111110101011010010101001010111010011010110110110101100110100001110000101000110010011000001011111100100100101110010011001110011101001101010010100100110010001010101110011000110000011011001101000011110101110101101001100001011100010000000110100100100001101110000000010000100100010011001001011110011111001111110010011101100000110000010111000111010010 0010100001010110110001111010110010011011000100101110111110000000011111110011011101101110111101011100010110000001000101111000010100010001010100110001000011100011001000001000010111011110101001110001001101111100011100111101110010110111011000010111000010110111001001001111110011010001001010111100011111000011011001001010010011111111111111000101001011100101001111001001110110010000100001100101010111111001 0101111011111001111100001001011101110110001110100101111101010100100001100101001100010000010101000011101001111000011010001011111000110101011010100000011110100110100000101100011001011010001101010100001010110011111011000110011110011111110101001111101000110000010111110001110011111001100001000000110100110101000101000010001000011010010100001101110000000101100000111110101101011101001101000110110101011110 0110101010011110010000111110010010010000011100111010101110000111110011111010100100001110000110001010010001011100111000000011000000010010111001011000110101101101001010101110100000011010110100100001010111011111101001001011100100010100011111100111111010000110101011000011110010001100111111010101111011010110110101001111110100001110010100111001010000000011100110101010011000111111100010101111111001111011 1111100101010111010010010000111101100111111010101101001100111000111010010001000000110100100001001101100001111011000001000001001111110001010000000001111010000110001110110101010001001101011101000001111100011010110010100101011000010101111011110010011000010011101100011111000110110100001000011000110111100110001110010000110001010001010011101100010110100100110000111101111011101101100111011011010001111101 1011001100111101110000010011111111001011011111100001110011011011011100110011100101000111010110010010100110000001011001011111001111011100000110111000110010110110000100000010000101011111101010101011101100101101101010100010000011101001000111011111001001111110010011000111000011110111000111001011001011010000011001011100010110000100111010110100101000011011010011001110010111111010111110011000100110111011 0010011000000011001001001111101010010010110110001111000100001110101011000100011100101111111001110001011100001100100101110111001110011111011110101111000001011011000100110010000111111011101000010010110100010110111001010100001111000100010001010011100001011001100110100011010110110001010100000001101100010011010110000101110011111111010101000001111100010111000110111001000111010011100111010111100000101011 1001111101000111100011100101110110111111010111000010001010010100111110100010101101100001101111110000111001110000110101011001001101111010011010101011000111001101111011101000100111000111100100101001000000011111010110110101000000110110011000001000111101010100110101111101011000101010110001110111111001110001111111111000111110001000001100100001010110010001101111001011011001011101110111001101000101001101 1010101101111101000011011110001001000001010100011111101001111010111001001100101000011111111001111110011101001101110000111011110101010011100000111111000110101111001011011100100000101101001101111010011111001101011101001001110010011100111111111010010011101001101101001100100110101010100110001100111001111101010000011100001100001011000011100011000101100110001000011001011001100000101101001000001111100101 1000000100011010000101000010110110010011011001000010111100100111111010110101011111100000110001001001011111000000100101010000101110000010111000111000000110011011100011110111111000010010010011111111100010110110010110000101100100111110111100111001000101011100110011101111000101000111010011001111000001000010011000111110000000100011000101100100110111010001011010110001101010010111110100011101010110000011 0000010110101010011111100100001101010101101010011001011110000000110010110101111100011101011011001100110010000110101011000000010011110001011000000111111000000101111000001000011100000101010110000111110010010001011011100101011110010111110110101110001111111000110101101100101101101000011000001001110110000111000111010010101100001001010100111001010001100000111100110101010000110101011100110010111111100110 1100110000110001011010011111010010110010011111111100110011101111100010011111011110001011001001001101000100100011101100000111110110110011001110101110001111111000111000011110000101010000000111100111011100110000110101111011101000000110011010111100100001110001001100101110011010000101100110011101001001100010001000100000000111001011111101000110101100011010110000000010111001110011011100001110100110110100 1110011111101000010110001011111110111010100000110100101101110001101111100001001111101101110100110011001100111010110111000100101100011011011010010001001111100111110110100111100011111101000101110011110110111010011000110110000000001010011111001101101010101001111101010101111100000000000000011010000100001111011101010001001001001000110110111001000001101011000101000110101111001110110111000110100110100100 0010001010111001000011000110010000001001101001111110101011111110111011010010111100100010111001001011010001011110011100111011011111100000110110100001001010001111110101110001001011011001011100110010001010111000000101011001011100111010001010110001101101010001001100011001000111010100111010000110110011100110111101011111111000101111100001000101001111001000011110101000000101110000011101000111000110110100 0001100100101101101100001111000011011010011111111000100111110111111011111011101101110110111000000000100010100110111011000010001111111011100011010111110101111000101110101110110011000110101010101001101010011110010100101011101010101011010111010000110111111011110110011111110110001100011001011100100011101001001111011011101101100011010001111100101011000000010100000000101010010100000101110110011101010010 0111101010010001000001101111001100100001000101101000010010010000111001000001101110111110010110111100110101000101001010001110100110110000001010011100001011011011101111001000011111011100111010111100010001111101110100001000010101101000001011001010011110001111111011101010010101010000100000100111110011000101011110000101000011011111000110110110001100011110101000000101110000110000000110100110011011111010 1000000100001010110001100001001111010111010111010000011001100000110010101001101001100100101111110111100010001011001100010010100100111111001011100001011001011100001101110000001010011000111010010010100101011100000110100001100110000011001111100010000100111010111111110111100000011111001001000111000101100011011111001100011000101000101010000111110110011001101111100000111001010000111001111100110011100100 0111001101110111011101011001011111110111011000010100010111010101100100010111001100100000111000111111100011111011010110100010100111101110000110001000111101000010010110110001100001001101111000011110110011110011110010111011000100011000111110101010000000111111000111000011111110000101100010011001111111111000100010010001010011110010010000101000000111110011110010101100001100011110110111011011001001000100 1111111001011011100111011001011110110111001100011011110111001001101010110101101101101001111110111100110111111111001100100001100010100001100101010001110001100111011110011110101111111010000110001000100100010010101101110110101101010001101100000111000011101110111111001101100100011001110111001000101110000011011100101001011010101001010101110111010011110111111101111101100001101010100000100010110110001111 1001101000011110011011010111010010011111000111011011111110001100110011010011000101101100111101011101101001111001110011101101011011101011010010101111100011100000010110001100110111110011111001010100011000011111110101000110111101111010011010011000001101101011010100111111100111100100011001111110011101001001011010010110011011100101101100101110110110100010101101101011000110011101010110010101011111110101 1100001111011000111100101000000011001100001010001100100011110011101010110100110110110011101010011100001011000100001101000011001010011001110110110111100100011110101001100001110001000100000100111110010010011100011101110010101110000110010000100111000111011001110111101100000111100000001001111101000100110101011100111110100000110010001011011011101001111010110100000101000101010010010110110001110001010000 1000101111101101101011000011111000111111101101100000111010101111000000011110010101001000110001010100100011101011111110110001110011100011101101010010010011111100010100011111001110101101010001001011101110100110100001101100101101001111011111000011011000101001001010111011010010000110001011101000100011111011001111000011011010010000001011110010001001100100001001111100011000010110001001110000010111000010 0110100111001001000011011110101101100110010010111111010011011110110000111111111110110100011111010000001101001100110011111011101001011011100110110001011011000111011111111000101100011001101000111000001011010101000011111011110101100011010101111100100011000010101011000111001000010111011010111000101100111011111100100110101101010011000010010000011001011101001000001110010011000010111000101111011101001000 0111001010101011011110011111100110110110011010011111010000001110010101000110111100110111001001111000111000101111111111110001110110100110001101010101011000010110101100100110000011010111111000000100110101000111011010100100111001011000100100011001001110101000100110110011000101101100110000101101000010101101111001111000110000100001011010111111110111010001110111000001111000010011110101111000001100100100 1101000100100011001010101010101000001100010011111111110111000101010000111010101000011011010101011110011011111000100000010010001000011011000111001110100010111001100011100001000010000001001000000001110101110110101000001110010000000010110111111101111000010110110110100011111000001110011110000011011101000101101111000000100010001111011010111000001000100100011111011011010100000101010010001001011111000000 1110010001010000000101110000101010011010110011101101100011000100110010000011100000101011010000111100000011001101001100000001010101111101000010011101001111101001000111110000010001001111111010111011010110011000011110101010100001000000011101110111111001010101001000101011101010100011010000001011101001001100011101010100111100000110000110100110101001010010101110101111101010011001010111100001000111110111 1111010111111011000110010011010011101011000110001001101001101101111011000000111100000001011110111001000000001001101101111001001010101011001100010101010111100110010000010000011111110100111110001110010011101100000110001100011011001111100011101110001101101010111010001110001110010001011110010101011100011001110110110101110001010010001101010101011010111000000001010011101100011111110001111011001111100111 0011001000101101000010010000001011111110010000100111100110001100100110101011010010100010011111011101011100101101100100001000110110000001010011110010101101000110110100101011100110000100011000011111000101111111100010001011000011000110010111110101100000011101100111001110111101000101000101100010101001111001111101000011110110001110110011110000000101101001001101000101100011011001000001000101010010011001 0111101011101010110000011011100111010100011101110000010011101010110110101111010011110111100101011011001011111000101111101101100111001011110000001101010111001010001110000101100010001001000001000101100011100101111111010101100011011100111100001101000111010001010010011101001010001000000010001010010101011000000101011000101110011011111100111110100000001011011000111110101101010010010110111000101000001110 1111010111101100101010101011111110010110011010000001011011000000011001100000011001111100110100001110011010010100100001101001001101100100100000011010000101000110011100111010111011010011111011010000100111101000101100000011011101111110010101000010100001001001110001010100111001001001110100001000110100110010001000111011010001001100110101011110111111110010010010100011000110000111101111011100001000011010 0110110000001111000001110000010111111011100000000001111111111000001110011000110001100100111111001010000001011010011001010011110110010100011011110010100000001110110010110011000010011101001111010000000011011100001001001111001000101111001111000111101010010101111011001001001011111100000010010000110111000110101010000100000000111011011110111011101111111100011000100110000011000100001110111100100111101111 0100110101111111011101011010111010000000110010100010110110001000000110010000110000110000100100010000101110000111100111001001000101111000110110001011001101111100110100011101011010000110100000001001101110010001101101100010011100011001010111100110001101000010110011001101010011100110110100001110011111100011101110101101010111001000011010000111111100110110111000000001001010111100000010101111111001000000 0110110111101101100101111010011010110000001000001111100111111100101001110110000001010001100110111011001111111111110111001010010110100101110110101000110001110011011110100010011101011011111000011111101110101000010001011010100101101010010110000010011110100001101010000111010101101001111010011000011010011011001100000111001000001100001001111011000111011001000010110111001110111101011101000110001011101010 1000100101001111010000110010010101100101101100001111101111000101011011101111100010111000111011100111100111110110010010100111110100001010101101100110010001111100100010110011100110111000001100100110111111111000101101111100100010011000010010101010001100110001100011110000011111001111000010111001011001011110010011101000011100001000101110001000000001001100100000011111001110010111100101100100001100001000 1011110100010011011110011001101011100101010011100011001111011110100010110100000011011111110100111110001000000010101001111001010110010010110110100100110101011100010001010010011011100110011001010000111000011000101000010101000100000101000010001101110100101111101101101111100011010111001001000000001111111110010000000100101111000111000011100111100010001011101101001011101101111010100001101000100100001110 0011010000100011111001101100001101101001110011111001111100110100010100011010101001010110101010110010001111101000101011110100000001010111101100001100110001101011110000101111010110110101100111001010000101110001010001100111101110001010010101110101001001111101010001001001111010010101101101110110110011110101101000111111110110110111000110111001101100001100000111110110011011001100110100100110010111001011 0110010100100011101011110010110001011001101101101000111110101100100110110111010000110101011011100110111110110110101100110000011000011001101101100101110100101000010010101110000010000111011110001011111110101001000001111111111001110000000000111000111101100111101110011110010111101010000000011001001011010110100101110011100101000010010010001001001101110001101001010101000011000100101111001011110001111111 1000110101000000111100101001101001010000110111001101101101001101101011000011101110001000101111101001001010110011010100101100011010100011011101100100110100010000000100111011001001111011101100110001100100111100101001110011001000110011001010110010101101011001110110001011011100000000100110110110111000101100000011100101000001011111110111101001001001110110110110010000010101110100000101001101011111111111 0111000110100110001001011001101101001011001010101001000011011111001010110110010101010101110100101101011011111110110101101100100100011110011111100001101011111110100010100000000100011100100010101000011000001111001101100111010010000011000111011010010110001101111001000010100001001101101001011001110100111100011010000101001110110100010101100111010111010001000100000101010011101010011110011001100111001101 0100010100101001111100000100101110111000110001000001010100111100010000100111100111000001101001011001001100101100100100101111100110010001011101101011001000111111010000110101100011011010011100101011000100110101101110010111100001001110111111000110001111001011011110001111010110001101110000100110110100010111101100111111000110011000001010000011011111111101100001001001011001101011100100000110011110110000 1000010011011001111010101010101011100101010000110110110100111111010111100100010001101101111110011100101110000000100101001000011001110011111001001011110000001010111001111100110011011110111101100000100010101000100110010000000000010101001110011110111000111100010111111100001100111000101100111011111001011011010010011110000101110000101110100110000111110100110100110010110111111010111101001110100001011010 1101110001010101110111100100010010101010001100101010000000000001001001000110111101001010111001100110000000100110100000011010001100111110000111000100010110111000101101000000101101101101010011101100100110000111011010010111101111101111001001011011010111001010000001001110010001101001111010111010001100010110001000100110100110000100000100010010111110011001101000011101101111010000110110101111101000001011 1111111010100010011100011000100001100011010000101011001000011110011001110111001100010011001110001101101110011010111000111101000100001111100100111010010111010010101010000100101101000101110010111011111101011110010110011001101011101101110110111011100010111011110111111010100011100100110100111111010101100010001010110111010100001100001111100011100111101010110011001011001111001000010111110110101111100001 0111001111011010101011110101110100010100000111011100001011001110111111101101110101010010000110110111110001010011010101010111000111100010101001111010101001000001011110011000010000101000100100001100000110010001100001011111111101111100110010110010001110101000111011001010111010100000111100011001100001101000111001000101101100100010000100011011001010010001000010001111000010110111110011011010011110100001
cTrader Algo

StackPanel WrapPanel DockPanel【cAlgoAPI】

2/28/2021 3/29/2021

4年以上前の記事です。内容が古くなっている可能性があります。

パネル色々

Canvasよりもこっちの3種のパネルの方がよく使います。

Canvasでは子要素の各コントロール内で厳密な座標を指定して配置しましたが、ここで紹介する~Panelは自動的にいい感じに並べてくれます

これらのPanelではCanvasと異なりAddChildを呼び出す順番によって子要素の配置が変わるため、ここは注意が必要です。

また、ほとんどのコントロールでVerticalAlignmentとHorizontalAlignmentのデフォルト値はCenterとなっているのですが、StackPanelとWrapPanelは一部異なりますのでご注意ください。

 

 

StackPanelクラス

子要素のコントロールを上から下、もしくは左から右に一列にずらっと並べます

public class StackPanel : Panel

個人的にさらっとサンプル作るときとかは一番よく使います。

 

プロパティ
(Orientation) Orientation {get; set;}

子要素を並べる向きを取得、設定します。初期値はVertical(上から下)です。

OrientationがVerticalの場合はVerticalAlignmentの初期値がTopに、Horizontalの場合はHorizontalAlignmentの初期値はLeftになります。(明示的に指定して上書きは可能)

 

サンプルコード
// ボタンたくさん作る
var buttons = new Button[20];
for(int i=0; i<buttons.Length; i++) {
    buttons[i] = new Button {
        Text = (i+1).ToString(),
        Width = 50,
        Margin = 3,
    };
}

// パネル作る
var panel = new StackPanel {
    Orientation = Orientation.Horizontal,
    VerticalAlignment = VerticalAlignment.Center,
    HorizontalAlignment = HorizontalAlignment.Center,
};

//配置
foreach(var button in buttons) {
    panel.AddChild(button);
}
Chart.AddControl(panel);

こんな見た目になります。(わかりやすくするため、あえて小さめのチャートで実行させてます。)

20個のボタンが横一列に並びきらずに左右にはみ出てしまっています。

 

 

WrapPanelクラス

StackPanelとだいたい同じように縦か横にずらっと並べますが、子要素のコントロールを並べていって、一定以上の幅(高さ)を超えると折り返します

StackPanelのようにはみ出すことがありません。また、子要素を配置するセルの大きさも指定できます。

public class WrapPanel : Panel

 

 

プロパティ
(Orientation) Orientation {get; set;}

子要素を並べる向きを取得、設定します。初期値はHorizontal(左から右)です。StackPanelと異なります。

なお、OrientationにかかわらずVerticalAlignmentの初期値はTop、HorizontalAlignmentの初期値はLeftです。

(int) ItemWidth {get; set;}

子要素を配置するスペース一つ当たりの横幅を取得、設定します。

(int) ItemHeight {get; set;}

子要素を配置するスペース一つ当たりの高さを取得、設定します。

 

サンプルコード
// ボタンたくさん作る
var buttons = new Button[20];
for(int i=0; i<buttons.Length; i++) {
    buttons[i] = new Button {
        Text = (i+1).ToString(),
        Width = 50,
        Margin = 3,
    };
}

// パネル作る
var panel = new WrapPanel {
    Orientation = Orientation.Horizontal,
    VerticalAlignment = VerticalAlignment.Center,
    HorizontalAlignment = HorizontalAlignment.Center,
    ItemWidth = 100,
    ItemHeight = 30,
};

//配置
foreach(var button in buttons) {
    panel.AddChild(button);
}
Chart.AddControl(panel);

こんな見た目になります。

ちなみに先ほどのコードのStackPanel→WrapPanelに変更し、ItemWidthとItemHeightの記述を加えただけです。

ItemWidthとItemHeightを指定したため、先ほどよりも余裕をもって並べられており、チャート右端で自動的に折り返しています。

各ボタンの幅はButtonのWidthで指定した通りで、ItemWidthに合わせて余白をあけて並んでいますが、ボタンの高さは指定していないため、ItemHeightに合わせて引き伸ばされます。

なお、WrapPanelではButton側でHorizontalAlignmentやVerticalAlignmentを設定してあげれば与えられたスペース内での配置調整が可能です。

 

 

DockPanelクラス

子要素内のDockプロパティでコントロールをどっち方向に詰め込むか指定して配置します。

public class DockPanel : Panel

 

プロパティ
(bool) LastChildFill {get; set;}

最後に配置された子要素で残りのスペースを埋め尽くすかどうかを取得、設定します。

 

サンプルコード
// ボタンたくさん作る
var buttons = new Button[20];
for (int i = 0; i < buttons.Length; i++) {
    buttons[i] = new Button {
        Margin = 3,
        Dock = (Dock)(i%4),
        Text = (i + 1).ToString() + ":" + ((Dock)(i % 4)).ToString(),
    };
}

// パネル作って配置
var panel = new DockPanel {
    VerticalAlignment = VerticalAlignment.Center,
    HorizontalAlignment = HorizontalAlignment.Center,
};
foreach (var button in buttons) {
    panel.AddChild(button);
}
Chart.AddControl(panel);

子要素ボタンのDockプロパティ設定のところがわかりにくいかもしれませんが、一つ目がLeft、2つ目がTop、3つ目がRight、4つ目がBottom、5つ目がLeft・・・と順番に設定してると思ってください。

こうなります。ぐるぐる~。

ボタン番号の後ろに表示されてるのがDockプロパティの値です。DockPanelという四角い箱に、1から順にDockで指定された方向に詰め込んでいった感じです。・・・伝わりますでしょうか。

順番に配置していくとこんな感じです。なお、別にcAlgo特有のものではなく、C#WPFのDockPanelと考え方は同じですのでわからない場合は検索してみてください。(丸投げ)

 

 

関連する列挙型

Orientation列挙型

StackPanelとWrapPanelがプロパティとして持ち、並べる方向を表します。

Horizontal 横方向
Vertical 縦方向

 

 

Dock列挙型

DockPanelで詰め込む方向を表します。コントロール子要素側(ControlBaseクラス)がプロパティとして持ちます。このプロパティはDockPanelに配置されたときのみ有効です。

Top 上方向
Bottom 下方向
Left 左方向
Right 右方向

 

Canvasで作った発注パネルを作り直す

Canvasのサンプルコードで簡単な発注パネルを作りました。

Canvasでのレイアウト設定部分はこんな感じでした。

            // ボリュームテキストボックス
            var volume = new TextBox {
                Text = "1000",
                Left = 10,
                Top = 10,
                Width = 90,
                Height = 20,
            };

            //売買ボタン
            var buy = new Button {
                Text = "Buy",
                Width = 40,
                Height = 20,
                Left = 10,
                Top = 40,
            };
            var sell = new Button {
                Text = "Sell",
                Width = 40,
                Height = 20,
                Left = 60,
                Top = 40,
            };

            //canvas作って配置
            var canvas = new Canvas {
                BackgroundColor = Color.White,
                Width = 110,
                Height = 70,
            };
            canvas.AddChild(volume);
            canvas.AddChild(buy);
            canvas.AddChild(sell);
            Chart.AddControl(canvas);

これを今回説明したPanelで作り直してみます。

 

DockPanelバージョン

こうなります。(Canvas記事サンプルコードのレイアウト部分だけこれに入れ替えれば動きます)

            // ボリュームテキストボックス
            var volume = new TextBox {
                Text = "1000",
                Margin = 5,
                Dock = Dock.Top,
            };

            //売買ボタン
            var buy = new Button {
                Text = "Buy",
                Margin = 8,
                Dock = Dock.Left,
            };
            var sell = new Button {
                Text = "Sell",
                Margin = 8,
                Dock = Dock.Right
            };

            //panel作って配置
            var panel = new DockPanel {
                BackgroundColor = Color.White,
                Width = 110,
                Height = 70,
            };
            panel.AddChild(volume);
            panel.AddChild(buy);
            panel.AddChild(sell);
            Chart.AddControl(panel);

見た目。

厳密には少し違いますが、だいたい同じです。子要素ではサイズも位置も自動調整に任せて、MarginとDockだけ指定してるところがポイントです。コード量も減ってますし、ちょっとしたレイアウト調整がこっちの方が圧倒的に楽になります。

 

StackPanel、WrapPanelバージョン

おおむね同じですが。

            // ボリュームテキストボックス
            var volume = new TextBox {
                Text = "1000",
                Margin = 5,
            };

            //売買ボタン
            var buy = new Button {
                Text = "Buy",
                Margin = 8,
            };
            var sell = new Button {
                Text = "Sell",
                Margin = 8,
            };

            //panel作って配置
            var panel = new StackPanel {
                BackgroundColor = Color.White,
                Width = 110,
                Height = 70,
            };
            var buttonPanel = new WrapPanel();
            buttonPanel.AddChild(buy);
            buttonPanel.AddChild(sell);
            panel.AddChild(volume);
            panel.AddChild(buttonPanel);
            Chart.AddControl(panel);

DockPanelバージョンとほぼ同じですが、子要素のDock指定がなくなって、配置部分ではPanelを2つ用意して組み合わせています。見た目は同じ。

コードではStackPanelとWrapPanelを使ってますが、たいした意味はありません。(Orientation指定を省略したかっただけ。)両方ともStackPanelもしくはWrapPanelでも構いません。

 

いずれにしても、Canvasで作った場合と比べてすっきりした記述になる上、いじってみた人はレイアウト調整もやりやすくなってるのがわかると思います。基本的にはこれら3つのPanelを利用しましょう。


まだコメントはありません

新しいコメント

コメントは承認後に公開されます。承認まで次のコメントは投稿できません。

cTrader's Life

© 2025 ajinori