日屄的能力

    1. <form id=YaojxIVIX><nobr id=YaojxIVIX></nobr></form>
      <address id=YaojxIVIX><nobr id=YaojxIVIX><nobr id=YaojxIVIX></nobr></nobr></address>

      Dominic Szablewski, @phoboslab
      — Monday, September 23rd 2019

      Voidcall – Making Of

      Like last year with Underrun, I participated in this year's js13kGames – a JavaScript game development competition with a file size limit of 13kb, including code, assets and everything else. My entry was Voidcall, a Real-time Strategy game.

      Voidcall Play Voidcall – A WebGL Real-time Strategy game in 13kb of JavaScript

      Recently, I played the original Command & Conquer (later dubbed "Tiberian Dawn") again. I spent a whole summer of my childhood exploring the game in a friends basement. Compared to later real-time strategy games it's quite simple, yet very compelling. I set out to capture a bit of the game's essence for js13k.

      Squeezing everything I wanted for this game into the tiny size of 13kb was a tough challenge. Much more so than last year. The technology is quite ambitious: a 3d rendered height map, fully polygonal and textured models with smooth keyframe interpolated vertex animations, comprehensive mouse control with accurate picking and solid pathfinding. It's a lot.

      This article presents the various pieces of the puzzle with in-depth explanations. Everything is open source, so you can follow along on github.

      Terrain Generation

      Initially I thought about implementing the game in a simpler Canvas2D rendered view, but realized that I would need a lot of different graphics for the map (and much more for animated characters). Using a 3d rendered height map was the easier way to get a good looking terrain on the screen.

      Perlin Noise Collision Map The collision map: 2-octave perlin noise, converted to 1bit

      An initial 256x256 Canvas2D image is generated using a perlin noise function. This function produces random values with a smooth gradient for nearby pixels. The key is to layer several perlin noise values with different frequencies on top of each other. In this case each pixel is the sum two perlin noise values. You can create the broad features of the terrain with just one value at a low frequency and add finer detail with a second one at a higher frequency.

      for (let y = 0, i = 0; y < MAP_SIZE; y++) {
          for (let x = 0; x < MAP_SIZE; x++, i++) {
              let height = 
                  noise(x/35, y/35) + // low frequency
                  noise(x/50, y/50); // high frequency
          }
      }

      While the result is visually already quite pleasing, it's not of much use for the game I wanted to build. I needed discrete distinction between walkable and un-walkable terrain for the pathfinding to work properly. So this image is converted to just 1 bit with a carefully chosen threshold.

      This 1 bit image becomes the initial collision map for the game logic. For the height map that is used for the graphics this collision map is further processed. The first step is a bit of blur, so we get some smooth edges around the hills again. After that a bunch of high frequency perlin noise is layered on top.

      Perlin Noise Height Map The height map: blurred and detailed with high frequency perlin noise

      Unfortunately, the Canvas2D API does not provide a cross-browser blur function. Applying a box blur on each pixel using a convolution filter is not only computationally expensive, but also requires a bit more code than I wanted to spend on this. My solution was just to draw the height map on top of itself a bunch of times:

      // Cheesy blur
      ctx.globalAlpha = 0.2;
      for (let x = -2; x < 2; x++) {
          for (let y = -2; y < 2; y++) {
              // Draw the canvas onto itself with the x,y offset
              ctx.drawImage(canvas, x, y); 
          }
      }

      For the details a number of perlin noise values are computed and mashed together until it looked right. The higher frequency noise is applied more strongly to the hills and less so to the valleys.

      for (let y = 0, i = 0; y < MAP_SIZE; y++) {
          for (let x = 0; x < MAP_SIZE; x++, i++) {
              let
                  coarse = px[(y*MAP_SIZE+x)*4],
                  mid = noise(x/12, y/12) * 8, 
                  fine = 
                      noise(x/30, y/30) * 4 +
                      noise(x/10, y/10) * 2 +
                      noise(x/5, y/5) + 
                      noise(x/3, y/3),
                  height = 
                      coarse * 6 + // Basic map height from collision
                      fine * 300 + // Details on everything
                      mid * 5 + // Mids on everything
                      (coarse * (mid+5)) * 2.5 + // Extra mids on hills
                      (coarse * (fine+1)) * 1.5 + // Extra details on hills
                      ((255-coarse) * mid*-1)*0.5; // Inverted mids in valleys
          }
      }

      Now that we have the height map, we can create the 3d geometry. For each pixel of this height map a quad (2 triangles) is created and pushed to the render buffer. Each quad is randomly textured with one of two different grass-like tiles – just enough to make it not look repetitive.

      The normal vector (the vector perpendicular to the surface) is computed once for each quad. This is later used for light calculations in the shader. The same normal vector is initially stored for each of the 4 vertices of the quad. This results in a flat shaded look.

      The final buffer for the height map contains 131k triangles consisting of 393k vertices, each described by 8 Float32 values. In total about 12 MB of data - which may sound like a lot, but your GPU laughs at these numbers. I'll talk more about how this is actually rendered later.

      Perlin Noise Terrain Flat shaded terrain, without smooth normals. Interesting, but not what I was going for.

      Computing smooth normals turned out to be a particularly hairy problem to solve in this very size constrained code. The solution I ended up with is to walk through the otherwise final buffer, gather all normals from adjacent vertices, average them and put the averaged normals straight back into the buffer. This in place editing of the normal vectors produces quite terse code, but is otherwise horrible in every aspect.

      The result of all this is stored in a gl.STATIC_DRAW buffer.

      For the final detailing a few thousand models of rocks and trees are randomly sprinkled over the map. The 1 bit collision map is used, so that these models are only placed in the valleys.

      It was important for the mouse picking to work correctly to have just the height map without trees in it's own buffer. So all detailed models combined are stored in second gl.STATIC_DRAW buffer, separate from the height map geometry.

      Perlin Noise Terrain The final Perlin Noise generated terrain, with smoothed normals and detail models

      Though the terrain generation is based on randomness, it was important for the gameplay that you always end up with the same terrain each time you load the game. So using JavaScript's built-in Math.random() would not do. Instead, the game makes use of a very simple seedable random number generator. Initializing it with the same seed value before generating the terrain always produces exactly the same result.

      A fun problem I encountered with my perlin noise function was that it still produced different results in different browsers. To initialize the perlin noise function an array of sequential values is shuffled using JavaScripts built-in Array.sort:

      p.sort(function() {
          return 0.5 - random_float();
      });

      While random_float() always correctly produced the same sequence of numbers in all browsers, browsers still implement the sort algorithm differently. So in Chrome you will end up with a different shuffled array than in Firefox. Of course MDN warns you about this:

      The time and space complexity of the sort cannot be guaranteed as it depends on the implementation.

      It's not exactly the right way to shuffle an array with an nonsensical comparator function anyway. Lesson learned. (The right way is to walk through the array and swap each element with a random other element).

      For the final game I just plugged in different seed values until I found a terrain that was interesting and suitable for the gameplay. Not all terrains generated with this method produce usable results. Sometimes one half of the map is completely cut off from the other half. Sometimes "islands" of unreachable terrain are generated.

      Perlin Noise Terrain Terrains generated with different seed values

      Even though the terrain I initially settled on was quite nice, I later discovered that an area that I thought was reachable in fact wasn't. I didn't want to search for a new terrain and carefully place all game objects again. So I just fudged it by drawing a rectangle on a certain spot on the map to make a traversable path. It's the nasty secrets of game development.

      The final code for the terrain generation is all in map_generate().

      3D Models, Textures & Vertex Animations

      A lot of work has gone into making the animated models and compressing them down to a reasonable size.

      I'm still a doofus when it comes to 3d modeling, but the amazingly ingenious Wings3D once again saved the day. It works great with low-poly models. Turns out low-poly modeling is a lot like creating low-res pixel art: you just push things around until it looks right.

      Low Poly Character Model The main character model – 36 vertices, 62 faces, 6 animation frames, compressed to 572 bytes

      The main character model is as low-poly as you can possibly get with a convincing humanoid. All limbs are just triangular and end in a single point. Still, as you previously saw with the terrain, 3d data can get absolutely huge. Even for this model, if we'd store each of the 62 faces with 3x3 Float32 values, we'd end up with 2kb of data - for a single animation frame.

      Now, the character model contains 6 animation frames. I looked into skeletal animations, but this would have required a lot of code to get working. So instead I opted for the simplest possible solution: vertex animations. I.e. each frame of an animation contains the whole model again.

      So the character model contains a full set of vertex positions for each of the 6 animation frames, but still compresses to just 572 bytes.

      Animation Frames The six different animation frames: 4x run, 1x shoot, 1x idle

      There's two techniques I used to get there. The first one is just common sense (and used by almost any model data format): each of the 36 vertices is shared by multiple faces. So we just store the x,y,z position for each of the 36 vertices once and use an index into the vertex positions for each of the 3 corners of a face.

      Furthermore, if we don't change the topology of the model in each animation frame, we just need to store the vertex positions again. The set of indices for the faces remains the same.

      If we restrict ourselves to a maximum of just 255 vertices, we can store each index as a single byte. Similarly, if we convert the Float32 x,y,z vertex positions to a single byte each, we can save 9 bytes per vertex. "Compressing" arbitrary precision numbers down to a set of discrete values (in this case 0–255) is called quantization.

      So with the x,y,z position as one byte each, we need 3 bytes to store each vertex. Similarly, with each face using 3 x 1 byte indices (one for each corner) into the vertex data, we need 3 bytes to store a single face.

      36 vertices * 6 animation frames * 3 byte = 648 bytes
       +
      62 faces * 3 byte = 186 byte
       =
      834 bytes

      Not too bad, but still too much.

      I noticed that with models this simple, we don't actually need the 1 byte "precision" of 256 discrete values for the x,y,z positions. We can lower the resolution even more.

      The next logical step is to pack all 3 values into just 2 bytes or 16 bit. This leaves us with 5 bits for each x,y,z value. (Technically 5.333 bits per value. We could use the extra 1 bit to give one of the x,y,z axis more resolution, but here I didn't. The extra 1 bit is just unused.)

      5 bits gives us values from 0–31. So each of the vertex positions is essentially snapped into a grid of 32x32x32 values.

      Of course I wanted to compress the face data similarly, but with values in the range 0–31 we wouldn't be able to address all 36 vertices. Luckily I noticed that Wings3D exports the face data with the vertex index for the first corner of each face in ascending order:

      f 1// 22// 2//
      f 2// 3// 1//
      f 2// 24// 18//
      f 3// 4// 1//
      f 3// 8// 6//
      f 4// 23// 17//
      f 5// 3// 6//
      …
      f 32// 35// 33//
      f 33// 26// 32//
      f 33// 34// 26//
      f 33// 35// 34//
      f 34// 32// 27//
      f 36// 30// 29//

      The exported model contains one row per face, 3 indices into the vertex data. Notice how the first index is in ascending order and increases by 2 at most.

      The logical conclusion is to store a 2 bit address increment for the first vertex index of each face and use 2 x 7 bit numbers for the two remaining indices. This allows us to store models with up to 127 vertices. Plenty!

      Of course we need to store a bit of metadata with each model: the number of vertices, faces and animation frames. Described as a C-struct, the final model format looks like this:

      // Retarded Model Format (.rmf):
      struct {
          uint8_t num_frames;
          uint8_t num_verts; // per frame
          uint16_t num_indices;
          struct {
              uint8_t reserved : 1;
              int8_t x : 5;
              int8_t y : 5;
              int8_t z : 5;
          } vertices[num_frames * num_verts];
          struct {
              uint8_t a_address_inc : 2;
              uint8_t b_index : 7;
              uint8_t c_index : 7;
          } indices[num_indices];
      } rmf_data;

      Of course Wings3D doesn't have an exporter for this esoteric format. Instead I exported my models in the Wavefront OBJ format. This format contains easily parsable plain text data. A simple PHP script is used to convert the OBJ format into this binary format.

      The game contains a total of 10 different models. All those are concatenated into a single file for easier loading and better ZIP compression, totaling in 1328 bytes. The model format is so terse that it barely ZIP-compresses (1203 bytes zipped).

      All Voidcall Models From left to right: tree, boulder (re-used for gibs and energy well), blade of grass (yes, really), waypoint, unit selection bracket, ship, harvester, turret, enemy, unit.

      The models then get textured, each with a single tile of the texture image.

      Textured Model All the textures used in the game, 1643 bytes

      Because my model format doesn't contain any texture coordinates I opted for a very simple hack to lay textures over the models: the tile is just projected from the front onto the model. Essentially the x,y coordinates of each vertex are the texture coordinates.

      Textured Model Textured Model, with the texture projected directly from the front

      Notice how the feet and hands of the untextured model are very pointy, ending in a single vertex. Using transparent pixels in the textures for all unit types the hand and feet are cut off, expect for the military unit where a black texture indicates the gun.

      To blend between the different animation frames the game just linearly interpolates between the vertex positions of the last and current frame. The frame interpolation, as well as unpacking of the face indices into vertex positions and Y-rotation of the models is all handled in JavaScript.

      The final code to load and render a model clocks in at just 150 lines. It's wholly unoptimized (e.g. loaded models are not cached) but it just doesn't matter for these kinds of poly-counts.

      Mouse Picking

      My game requires accurate mouse controls. I need to know exactly where the mouse cursor is, not in screen space, but in world space. Typically you'd project a ray from the mouse cursor, through the screen and onto the 3d geometry. This requires quite a bit of math that I so far avoided throughout the project. Plus, you'd need a hit-test function on the height map.

      Another technique – one that has fallen out of favor for modern games – is to render a specially encoded view of the game and read back the pixels. For instance, you could render each object that you can hit in a different color, then read back the pixel color under the mouse cursor and determine which object you have hit.

      For my game I wasn't really interested in any particular object, but where exactly the mouse cursor is on the height map. If I know that, I can easily determine the objects nearby in JavaScript.

      Mouse picking World position (x, y, z) encoded in RGB colors

      The game renders just the height map, nothing else, with a simple shader that encodes the x, y, z coordinates in RGB colors. This leaves us with a resolution of just 0–255 in each dimension, but as it turned out the low resolution is not really noticeable in game. The game space is divided into a tile grid anyway, so the accuracy to hit a single tile is plenty.

      The shader looks like this:

      void main(void) {
          gl_FragColor = vec4(
              vertex_pos.x / 512.0 + 0.5,
              vertex_pos.y / MAP_HEIGHT,
              vertex_pos.z / 512.0 + 1.2,
              1.0
          );
      }

      The x, z offset and the divisions are carefully selected for the normal camera distance. The Z-axis is just divided by the maximum height of the map. If the game would allow you to zoom out, we'd need to account for this in the shader. However, the game's zoom level always stays the same, so these values can be hardcoded.

      Of course these RGB colors are offset by the current camera position, so we have account for that when determining the mouse position:

      // Read a single pixel at the current mouse position
      let px = new Uint8Array(4);
      gl.readPixels(
          mouse_x, 
          screen_height - mouse_y, // damn opengl and it's bottom left 0 position
          1, 1, gl.RGBA, gl.UNSIGNED_BYTE, px
      );
      
      // Calculate world coords
      mouse_world_x = (px[0] / 255 - 0.5) * 512 - camera_x; // red = x
      mouse_world_y = (px[1] / 255) * MAP_HEIGHT;           // green = y
      mouse_world_z = (px[2] / 255 - 1.2) * 512 - camera_z; // blue = z
      

      Allow me to complain about OpenGLs coordinate system. OpenGL has it's 0,0 position in the lower left corner of screen, because apparently it's more scientific this way. It seems trivial to just invert everything, but the number of times and the hours I spent dealing with this just leaves me bitter. Whether it was for Ejecta, simple things like my WebGLImageFilter or for this game – you have to flip the screen and your coordinates ALL THE FKING TIME. I hate it.

      This way of mouse picking – implemented with another render pass – is discouraged these days because you typically stall your program while waiting for gl.readPixels() to render the view and return the color buffer, instead of letting the GPU do its thing and compute the next frame. It just absolutely kills performance. But as with so many other things for this game, it just doesn't matter. Computers are fast.

      Rendering

      The renderer borrows most of its code from my last year's entry Underrun. Underun pushed everything into a single buffer and rendered the whole game in just one draw call. For Voidcall I needed to divide that into several draw calls, but the overall structure remains the same.

      The terrain geometry is stored in a separate static buffer and first rendered in faux-colors for the mouse picking described above.

      Afterwards the terrain is rendered again with a special shader that desaturates the texture color based on the y position. This nicely "blends" the grass texture into gray-ish stone for the hills. On top of that follows another static buffer with all decorative geometry, trees and bolders.

      A dynamic buffer is used to render all the models, then flushed and re-used for another pass for the shadows.

      The object shadows are just quads with a shadow blurred shadow blob as texture. But because they are transparent, we need to render these on top of all the other objects, with the depth buffer disabled. Otherwise the semi-transparent pixels of the shadow texture would hide all objects below them.

      Voidcall render passes Four draw calls produce the final image

      The game allows for a maximum of 16 dynamic lights. They work basically the same as in Underrun, but this time the light calculations are done in the pixel shader, instead of in the vertex shaders. This gives us a smoother look, compared to the low-fi visuals of last year's game.

      The ingame "chat" of your units is just an HTML element overlayed over the canvas. I didn't want to deal with text-rendering inside of WebGL. After all we are running in a browser here, so why not use it?

      The code for the renderer can be found in the aptly named renderer.js.

      Pathfinding

      Voidcall uses a pretty standard A-Star algorithm for pathfinding. To optimize the performance a bit my A-Star implementation allocates all neccessary data up-front. It never has to allocate any data during run-time.

      Instead of storing the set of visited nodes and their costs in objects pushed into a plain JavaScript arrays, all state information is stored in a number of separate TypedArrays. To make this work, my implementation works directly with the "addresses" of nodes instead of their x, z position. The address is just z * MAP_SIZE + x – i.e. the index into these typed arrays. Consequently, this also reduced the code size quite a bit.

      let 
          nodes_parent = new Uint16Array(MAP_SIZE * MAP_SIZE),
          nodes_state = new Uint8Array(MAP_SIZE * MAP_SIZE),
          nodes_g = new Float32Array(MAP_SIZE * MAP_SIZE),
          nodes_f = new Float32Array(MAP_SIZE * MAP_SIZE),
          open_nodes = new Uint16Array(MAP_SIZE * 4), // Should be enough!
      
          NEIGHBORS = [
              -1-MAP_SIZE, -MAP_SIZE, 1-MAP_SIZE,
              -1,                     1,
              -1+MAP_SIZE,  MAP_SIZE, 1+MAP_SIZE
          ],
      
          STATE_UNKNOWN = 0,
          STATE_OPEN = 1,
          STATE_CLOSED = 2;
      
      while (num_open_nodes--) {
          let current_addr = open_nodes[num_open_nodes];for (let i = 0; i < NEIGHBORS.length; i++) {
              let neighbor_addr = current_addr + NEIGHBORS[i],
      
              // Compute cost: f, g.
      // Store node data
              nodes_parent[neighbor_addr] = current_addr;
              nodes_state[neighbor_addr] = STATE_OPEN;
              nodes_g[neighbor_addr] = g;
              nodes_f[neighbor_addr] = f;
              num_open_nodes++;
      
              // Insert into open_nodes
      }
      }

      Of course, to compute the cost for each node we need to get the x, z position from the address again, which is simply:

      let x = address % MAP_SIZE,
          z = (address / MAP_SIZE)|0;

      Or, as I knew my MAP_SIZE is 256, I can just use some bit-twiddling instead of costly divisions:

      let x = address & 0xff, // low byte
          z = address > 8;    // high byte
      

      AStar Pathfinding All visited nodes (white) and the found path (blue)

      In a final step the found path is condensed to the minimum number of waypoints: For each waypoint all subsequent waypoints are removed if they are visible across the map until we find one that is not. This eliminates extraneous waypoints that would result in stiff movement in a checkerboard fashion.

      AStar Pathfinding The condensed set of nodes necessary to reach the target

      With this all, plotting a path across the whole map takes about 1.5ms. Still costly, but good enough. The complete implementation fits in just 120 lines of code.

      Sound & Music

      Just like last year, I used the brilliant Sonant-X library for sound and music. My dear friend Andreas L?sch of no-fate.net once again produced an amazing soundtrack in Sonant-X Live. Likewise, the few sound effects also use this library.

      I did however overhaul the library; almost rewriting it. Instead of using generator functions for the sine, square, sawtooth and triangle oscillators everything is precomputed into a single lookup table. This tremendously sped up the time needed to render the soundtrack. It allowed me to remove all of the asynchronous setTimeout() calls that were originally implemented to make the page more responsive while loading.

      The whole library is now about 250 lines of code and generates the 120 seconds of music in just 900ms – down from 5900ms for the original library.

      Gameplay

      Admittedly the gameplay is a bit of a weak spot. With all the tech implemented I had very little time to tune the actual game mechanics. The game is probably a bit too hard, even if you know exactly what to do. Worse, most players are initially totally lost. The game really could have used a bit of tutorial or maybe just a slower start to give players more time to get familiar.

      Cursor controls stress test with a lot of units

      I'm pretty proud of how the mouse controls turned out: selecting single units, dragging selection areas, ordering them around, building turrets and harvesters all work pretty much like in any other full-blown RTS. The code to get this working however is a big mess of spaghetti. And it's not feature-complete either.

      You can't order one of your grunts to attack a specific enemy. Instead, they will only attack the closest one. Similarly, your medic will only heal the unit closest to him – even if that unit has full health already and another unit that really needs healing is in range. I simply ran out of time and space to implement these things.

      The logic to spawn enemies and their AI is pretty bare bones, too: Enemies spawn in decreasing time intervals, depending on the total amount of energy you're creating. A random position outside the map is chosen for the spawn point. The enemy then walks down the hills to the valley and searches for the nearest player unit or building. The initial random target for the enemy can be overridden if the enemy is attacked. It will then move towards the attacker. That's it.

      The game has a bit of animation when you successfully get your power levels up and return with all (remaining) units to the ship. I doubt many people have seen it.

      Minification

      Many of the same techniques as in Underrun were used to compress the game. This time however I had to work harder to keep the game's size under the 13kb limit. The uncompressed code weighs in at about 96kb, so minifying was absolutely crucial.

      Some random observations:

      The final game consists of just three files: the textures PNG, the models in binary format and an index.html with all the code. The PNG and models are just about 2kb; the rest, about 11kb, is all code.

      Voidcall code The complete minified code just about fits on my screen in the default font size

      The full uncompressed source for Voidcall is on github: github.com/phoboslab/voidcall

      Fun fact: this article contains 28000 characters – more than twice as much as was allowed for the game. It does ZIP-compress to just 10kb, though.

      © 2025 Dominic Szablewski – Imprint – powered by Pagenode (9ms) – made with <3
      “He must have hit himself trying to get out,” Larry surmised. “I remember that, too,” Larry said. Jeff chuckled rather sourly. “It’s funny,” Jeff remarked. “This-here psychology I’ve read about ain’t so far wrong when it says that folks who gets the wrong slant on a thing comes to believe it so strong that even the truth looks like a fib to them.” She could hear voices confusedly, men hurriedly calling and hallooing as she neared the back of the officers' line and crept into her tent. The door was barely closed when there came a knock, and the voice of the striker asking if she had heard the shot across the river. The blaze of glory had gone suddenly from the clouds, leaving them lifeless gray, when she turned her eyes back to them; and the outlook across the parade ground was very bare. She went and stood by the fire, leaning her arm on the mantel-shelf and setting her determined lips. Just then the whistle blew for a stop. This was enough excuse for Shorty. He fell back until the General was around the corner, out of sight, and then went up to Billings. There was a silence. "W?an't you be never coming here no more?" whispered Bessie in the next pause. His farm itself was at length forfeited, and Holgrave took shelter for the moment at old Hartwell's. The hut his father had reared when he married his mother, was still standing; the roof had fallen in, the ivy had grown over its walls; but even yet it sometimes sheltered the wandering mendicant, and often would the blaze of a large wood fire look cheerily through the shattered casement and the broken door, and shed an air almost of comfort over the bare walls. Holgrave remembered the ruin, as he was considering where he could abide until Margaret, who was far advanced in the family way, should be enabled to travel farther. His resolution was instantly formed; and refusing the assistance offered by Hartwell, and some other neighbours, and as decidedly rejecting the idea they proposed, of striving to regain possession of his house, he requested Lucy Hartwell to look to Margaret for a day or two, while he sought out a place to shelter them; and then, without mentioning his purpose, quitted the house. HoME日屄的能力 ENTER NUMBET 0017
      shehuo22.com.cn
      xuanzeba.com.cn
      rezu6.net.cn
      yizu3.net.cn
      www.quela5.com.cn
      www.sudai9.net.cn
      ruhou2.net.cn
      aqbe.com.cn
      www.houze1.com.cn
      www.shilila.com.cn
      主播115网盘 男女生身体下方相互动视频 543hy 久野千草h 韩国女主播玫瑰下载 女同互相舔脚p 在哪可以找到韩国美女主播朴妮唛28部 狠狠露b实图 性爱丰满呻吟 哪里能看到韩国女主播 他狂插 seses52 WWW.543BU.COM WWW.96CPZ.COM WWW.2222DDD.COM WWW.BBB197.COM WWW.Y6CZ.COM WWW.AILUB.COM WWW.GAO44.COM WWW.BBB442.COM WWW.SNXCR.COM WWW.218SJ.COM WWW.XBXB60.COM WWW.880BB.COM WWW.92DUDU.COM WWW.7060KK.COM WWW.HHH271.COM LAURA.SANCHEZ WWW.77HV.COM WWW.BBB40.COM WWW.AA191.COM WWW.QUICKLZ.COM WWW.ZJSUT.COM WWW.73NE.COM WWW.5678QI.COM WWW.WYXIUFU.COM 超碰欧美1 夜夜激情成人影音 av无限手机观看 9sekecim 依依社区人妻图片 goo电影777 三级做爱黄色小077 成人Av勉费电影视频wwwyehaobo7com 春晓大尺度私拍人体艺术 狠狠爱撸啊撸 成人游戏7878 日韩毛片基地ffff35com 激情影院男同性乱伦视频 刘芳菲口交 未成年色图片专区 熟女性穴图片 色姐姐找我解决 插我的小tube 久久熟女每日更新av 美女允男人的鸡巴视频 激情五月色姐妹83hhhhcom av网址图片 色妹妹luvvvvcom 插插插妹色色妹 淫翁浪媳玩3p 中年同志叔叔的大老二 九九色综合九九色综合九九色综合 欧美小浪妮免费视频 freechinesesexvideos 小泽玛利教室被搞 7黄片网站 青海色图 末世贱淫 亚洲视频视频99热 澳门赌场欧美辣图木木坏在线观看 国产sss视频在线 久热热 HTPPS6666av 男人吃女人的乳房好吗 幼女西瓜影音 2B姐姐的色图 成人电影苹果成人电影 成人电影偷拍自柏正在播放 深圳同志会所 99热女主播 美国性情中人网 av7886在线 淫色淫色激情成人网 百度wwwsusu29com 强奸初中妹在线播出 暴插大奶少妇 亚洲色图狠狠撸夜夜撸 妞干网无缓冲观看 汇聚全球精品丝袜50p rr150c0m 夜激情小说胸 亚洲美图欧美美图动漫美图精选小说人气小说家庭故事明星校园 野猪网播放器 大鸡巴用力操激情性爱 家庭教师做爱图片 5ekk 类似大波妹福利 偷拍自拍第一页46 色5天日本骚熟女 纵欲的少妇14p WWW259EECOMmp4 清纯美女插插自拍 一色 毛 美女无毛艺术下体 WWW_4444ATV_COM 欧美视频xxx 大鸡巴强奸a片亚州快播放录象视频 幼幼av在线 台湾老图片 开腿美女人体 干美穴p 欧美明星艳照门全集bt 771c人体淫 女s男m电影 色操逼成人网站 欧美浪屄图 护士的小屄 女同性爱快播 夫妻性爱淫片 百人体图片下载 我换妻的乐处 看儿子和妻子乱伦 插阴道人体艺术大图大全 淫乱的女同互相快播 狗吃美女奶 妹子射 大鸡巴的一篇 阴门抽插 dadanlubaoyubi 韩国最近出的一部电影男女主角在车里面发生关系的 成人在线国外 xxoo无插件 淫鬼五月 曰本全捰人体写真百度图片搜索 嫂子淫荡 国语对白影音先锋手机 日韩女神人体色图 苍老师淫叫 爷爷孙女做爱图 刘坤龙 福美来二代空调滤芯 萧强 队长袖标 黑脸娃娃前后对比 u盘有写保护 陈大顺 就去色色激情五月天 香奈儿成人视频 樋口冴子qvod快播 打飞机偷拍影音先锋 人体艺术性爱网页 在线播放日韩成人 欧美大屁股美女视频 日本妹妹综合 日本美女下体艺术摄影图 饭岛爱最后之作 俄罗斯熟女骚穴 乱骚淫荡图 av艳舞朴麦妮 偷拍自拍在线视频有声小说 幼女海滩p 人与动物的成人激情网 色老dou 裸体妹妹露b图片 朝美惠香yingyinxianfeng 朝鲜黄色一级片真玩 丝袜成人网站 ribennuedai 人体艺术ll chabiwang 性感沙滩漫画 母子交换撸区 乡村大妈淫乱 日木三极片 赤裸美女被操 天堂妹妹干网站 乱伦撸撸射wwwuc221com 亚洲美穴15p 女人互淫 五月热播另类 色色色色射射射狠狠 亚洲美女自拍人妻14p 清纯唯美四月五月 亚洲少妇和驴插逼 92jpmn 久久草鲁大妈电影 社会姐啪啪啪AV 中国妈妈口交 啪啪appwww23bene `国产毛片自拍 手机版色撸网 按摩抽插 电梯小姐无修国语版 鸡巴吃色色 好屌色qqc wwwxxx中国女影音 www250pp升级页面 邻家小妹是指什么气质 校园贞操带系列 色尼姑色和尚618mszhkcom wwww操 进出进出下体 美女淫荡的叫床声 我要曰逼 亿万老婆买一送一有声小说 樱井莉亚肉种子 小泽玛利亚露图 快播h网大全 51酒色网 黄色小说阅读器 D1D1成人网 蜜桃95撸管天堂 亚洲大香蕉 迅雷下载 www,好了av笫四色,com 美腿丝袜影音先锋av影视 法国av男主 色就色s94 vv影院 明日花绮罗snis615 www,javpapa,com 阿娇13分mp4下载磁力 放课后无码观看 人狗直播迅雷下载 性欧美孕妇x6 秋霞电院心理在线 性感女神ppp视频 邪恶dt图片第145大全 日本人六九视频jllzz 催眠羞辱学园在线视频 h动漫福利在线播放 女同性av在线观看 1四虎影剧在线播放 幸福一家人倪红霞 成人视频久廿 国产水柔全集 上司狂插少妇无码磁力 与男友爱爱的动作视屏 狠狠爱国产偷拍 美女掰阴自慰视 美国成人小视频 jezzz18 野鸡网在线577 微拍福利二区757 超碰AV大帝視頻 中文字慕大香蕉免费视频 韩国韩宝贝仙桃在线看 青青草影院肏屄视频直播 视频黄页 男女 操18岁女儿在线播放 cocogogo77在线 midd944 n七七卩S//156Zy 日本阿AV 机机干人人操视频在线观看 828vv类似平台 snis-731百度云 丝露视频在线 超碰免费视频 magnet 加勒比AV影音一本道 成人影片牛奶在线 av12天堂网2018亚洲 avop–227 微信sw225 yyzzooxx 嗯嗯啊啊噢噢用力操好爽大鸡巴 xo爽片体验视频 xmkk首发网 恋母故事在线 国产成人啪啪自拍 中文字幕伦理日本免费 午夜福利在线资源站 狠狠烽 吞精饮尿日本在线播放 周末情趣影院 在线Av网站 人人曰人人干 JSU发布组-最新最全导航书签 淫女福利视频导航 颐和园中国伦理片 美国四级复古磁力 国产白色视频在线 东京激情特辑无码 任你操不一样的视频 害羞素人中出在线视频 男用j插女b 超短裙女教师 第一次福利网站 色色在线视观看免费 里i番acg 人与人zoyXX 片名:[有码中文]禁断介护 绀野ひかる状 csobi 亚洲国产港台第一页 2018最新国产自拍做爱 日韩人妻免费高清视频 日本xx素人偷拍 在线观看一本道武藤兰 成电人影juyav 母乳av资源 chinese tubeboy free 舔阿姨淫水 祥仔在线 国产一级夫妻生活片 色农夫 导航 11111黄片 强奸了日本处女视频 啪啪声视频 四虎操逼影院久免费视频 美女主播裸身直播 虐阴虐乳在线观看 干日本妇妇高清 农夫AV神马枪AV神马影院 四虎天天干 强奸磁力 mp4 偷拍自拍情欲禁地 德川重男教书法gif电影 操锰影院 色pa动图 AV农夫 在线欧美AV 香蕉网婷婷 亚洲人成网站在线播放图片 淘av导航 毕业生 zaixian mianfei 成人电影偷拍 暴风福利在线播放 白丝小学生被操逼 snis724 在线 成人黄色自拍啪啪网 草榴t66y 超美外围女 冒险无套 百度福利高清视频在线观看 国产自拍-啪啪乐 伦理区eeuss 色爱区在线视频网站 7b7b视频网 国产搭讪乡村露脸磁力链接 下载 国产 三级 乱伦 强奸 人妻 xiaocaoshipinwang TS国产自拍 a性交视频 日本三级床呻吟视频 有奔空姐家狂操她的小逼视频 啪啪啪直播福利视频 四虎影音k66b muffia三乳女免费视频 wavr黄色 91邪恶网 裸男裸女啪啪啪视频 国产在线视频 美女自慰高潮冒白浆在线 欧美波霸影院 迅雷下载 俄罗斯母乳大赛 无码中文字幕视频 av网站资源大全 8xcao 美女a毛片 藤原瞳三孔齐上在线播放 大鸡吧操关婷婷逼痒痒的 东京性旅行 观看 九哥小浪窑网 可可和教练 迅雷链接 动漫自拍 色天使手机在线 奇奇网 混浴爱爱视频 鸡巴猛插插视频 青草在线内地 吉川莲无码流出链接 金卡戴珊在线观看地址 姐妹同夫81xacom 吉本多香美三级 起碰视频人人在线福利 肉肉 内射美女逼 人蓄交配视频 琪琪在线va 国产SM精品白富美富姐浴室玩弄漂亮女奴 白石茉莉奈 磁力下载 下载 狐狸hense 女主播 magnet swww560yycon 马小云资源在线 国外一级录像 《露出で乳イカせ》 国产偷拍自拍在线云播放 亚欧,日韩,中文在线 127 超碰3d动漫av在线播放 女主播自慰漏奶 美女主播手指扣逼视频 国产熟女BT riricaozongheyingyuan 动漫啪啪网 国产自拍 日本有码 91 亚洲第一导航福利视频 91深夜男人福利社区加入 国产偷拍自拍中文对白在线 干av在线 亚洲美乳无码分享 成人自拍碰碰在线免费观看 男人福利天堂免费观看 超碰av795 芦名未帆 西瓜影音 52avav我愿日本一 一级棒的美国j毛片 影音先锋qq318资源 689aaa 三上悠亚羽毛球 rmvb 国内自拍欧美激情 一本道 群交 在线播放 艾丝女王免费恋足视频 操逼网裸体掰阴 一个逼被日多了是怎么样的 大胆人体艺术网罗全球最大胆的人体艺术摄影图片照 波多野结衣美色图 快播丝袜少妇下载 林柏欣大胆人体艺述粉嫩美穴图片 操婆小说 成人做爱叫声 欧美金发美女洞大胆30p 1毛片级 激情男操女过程 肥腿人体艺术 音乐学院mm集体被强暴 美女老婆黑木耳 强暴在线自拍 欧美做爱透 25亚洲成人电影 色小三成人综合网 全部数据qvod偷拍自拍 萝莉h木耳图 青山菜菜 很狠爽影院com 人体少女成人艺术 肥佬簧片 色播张柏芝全套种子 操上美女楔 欧美熟妇刚交图 裸模麦苹果艳照种子 833jj in 性吧 美女吃精液高清图片 小川あさ美qvod 俺去也婷婷六月天 苍井空脚淫 先锋成人激情电影导航 xiao77论坛新年 影音先锋干女人逼 大鸡巴肏的爽风流老师 人体艺术ud 快乐公公和三个媳妇 熟女被干的种子 操大屄吗 俺去乱了 xfplay 6666 97成人小说 下载 经典av片名字 儿媳的靓屄 插穴粉逼蕾丝 bb4444 治要多少钱 泰囧电影下载 中华预测网 电动玩具车 怎么搞女逼逼 三级片露乳头 WWW_09GGG_COM wwwvv9vom 欧美幼交百度影音 插妹妹b电影 WWW_HOTLXCHYL_COM 苍井空乳房写真 风骚大胆性感人体艺术 教师的骚穴小说 中国顶级性爰片 及川淳子教授近照 美女黑川丰满可爱人体 sao美女人 关于足交的av WWW_988SE_COM 就爱操我逼 自拍伦理资源 乱伦短篇书籍 老姐视频合集 女阴口冈 日本肥婆 怎样看奶奶肏屄视频 波多野结衣人体艺术露阴 先锋大色妈导航 要能看波多野结衣的网站 色色成人网小说 黑木一香尻传说 爸爸插错洞吉吉 欧美女人露下沟图 幼女专区 操逼网武则天 媳妇欲哥哥淫欲 美女被插到高潮 妹妹窝欧洲人体艺术 山口铃子音影先锋 美妇露屄 全集网百科 成人在线av免费视 影音先锋sex8 骚穴内射骚逼 五月天33 妓女被轮奸小说 丁谈性交电影 欧洲色图亚洲色图撸 迅雷拳交网址 人与兽性交电影我和温柔的小母马 求一个成人黄色图片网站 快插爽死了呻吟mp3录音试听 蓝光波野多结衣 欧美另类少妇熟女11p 少女淫乱乳交爽图 明星11p 坏哥哥爱爱看视频在线观看 怀旧影苑茶余饭后 先锋影音欧美成人资源 波多野吉衣黄色网站 佐佐木的qq 久久撸久久肏开心五月 强奸乱伦校园都市激情 张雨绮内射p luanlun爱 宾馆极品15p 美女干逼人体艺术 大奶子插穴影音先锋 haodiaoorg 糗百偷拍自拍 晨诗怡磁力链接 evelynlinwikipedia 午夜情电影网 东北妞和哥哥激情 248部母乱自拍视频1页www9797ppcom wwwwuyefulinetvideo 网站wwwfoxtubecom 老师学生妹粉鲍穴 抽插咪咪 淫淫www38jwcom 撸露设 邪恶熟女系列 母子淫荡网角3 性虐老婆的小说 超碰视频来射吧飙奶 太平猴魁属于什么茶 爆操金发 b8mpmp4下载 安全无毒色图 婷四房色播 狠狠干天天色天天撸 小泽玛利亚在线dv观看 陌陌动漫网AV 梅伊比斯 超嫩幼女自慰 先先锋资源黄色网站 国语对白av先锋 av人体艺术之美穴 涩酷 艺术照少女未成年图片 无码女神陈丽 穿开档丝袜女人视频 嫩逼骚妇的精致美逼特写 亚洲有码无码中出百度网盘 亚洲炮照 黄色电影三星 影音先锋ye321net 小蚂蚁化学 乱伦锦集 酒色网女色网 操日本岳母 被操最多明星 强奸轮奸乱伦电影小说视频qiangjianluanluncom 亚女优Av 丰乳美艳人妻AV 海扁王2百度云 WWW92BBCCCON ■www190dcn■ 群交性奴图片小说 国产偷拍自拍14p 帅哥自慰视频 亚洲三级五月天百度 捆绑丝袜 男人免费超碰在线视频 做爱毛片岛国视频 师生 lu198com 和美女插dd小说 和女孩子穿牛仔裤啊啊啊啊 久草热在线视频精 大香蕉成人Av图片 做爱内射 中文无码口交乱伦短片 chinesepornvideos--porn300 印度伊人成人 yyxfav中文字幕 撸55 中文字幕强奸乱伦热播视频 老逼在线 大香蕉网伊人论坛 噜噜噜噜噜噜噜 wwwbaiducomwww4444dkcom 妹子插姐姐 88rrcon GG206ED2K 嫖娼系列在线 怕啪啪啪在线影院 女孩发骚自慰 五月欧美 淫荡老婆勾引大鸡巴 美国人xxx之偷窥 安卓成人视频器 2233AC0M 黄色l乱伦 淫荡少妇激情小说明星淫乱 成人自拍偷拍微信视频 日小妹妹网 www2bbbbcom 野人性交电影 高潮白浆你懂的 WWW,3Q5Q,C0n 人与动物天堂网站大全 av电影www5yycom 男女插水进 赤足者视频magnet 9191偷拍女厕视频 亚东方av在线狠狠撸自拍色图 色艺无间正面是哪集 与妻子小姨子同时啪啪啪 AV分类视频大全 人人插人人摸人人添 福利欧美顶级居家私拍 pornhd村上凉子 千人斩官网经典mnnnn58com 影音先锋调教资源 蝌蚪窝国产自拍在线 好逼天天网 q2002在线观看m917mmcom 不穿内裤的 wwwluav2comwwwluav2com 黄色电影之捆绑式 超碰95碰 巨乳学生制服自拍 公交车上的那些风流韵事 你懂的网站mp4 4444kkcom快播电影 美国黑人美女大屁股人体 av手机快播天堂 亚洲美女嫩穴图片 影音先锋人肏肏狗 om色青电影大片 婷婷五月天性爱片 夫妻打波照片 大鸡吧操大屄图片 全球人体四级电影 大胆 人体骚逼 快播qvod电影合集 逍遥社区成人网站 亚洲欧美自拍偷拍淫欲放荡激爽酷图清纯唯美明星艳照校园春色 WWW_38PA_COM 骚货熟女百度贴吧 偷拍小女人 插小姨的嫩洞穴 我操了妹妹的小穴 木屄 色图你色我也色 色导航色站导航 2012成人小说 插穴p 丝袜女人做爱偷拍自拍 日本 大奶丰满岳母 女儿都和女婿做爱 中文字幕 无码 先锋播放 我来也luanlunxiaoshuo 性干美女衣视频 08艳照 WWW_069QQ_COM 婷婷激情社区 幼女屄模 不穿戴任何衣物的大奶美女 国产草嫂子第二季 海贼王桌面壁纸高清 尹进良 巴布亚新几内亚属于哪个洲 五色天偷拍自拍 阴道极限虐待 www09kkk 女艺术图 欧美性爱潮喷集锦 人妻亲嘴图片小说 人妻小说激情网 自拍91自拍下载 草裙社区18成人网 有一个网站叫什么姐姐 人体艺术图片两性成人网 成人大奶人妻 学园2淫虐の図式 美人影院是真的吗 66人体激情艺术 淫萋小说 综合娱乐成人网 偷拍自拍12p 偷拍漏b无码 撸斆琅 成人免费电影乱伦小说 白白色人月马交配视频 kkbokk自拍图片 色女吃大阴茎 性爱技巧小故事 黄片处女破处流血 猛操死处女小说 苍井空母片 应采儿3ji 色吧淫乱 色尼姑五月天亚洲影院 无码电影 久久偷窥女厕国产视频wwwjiujiu7pcom 成人网站5566 金瓶梅在线免费电影 性感骚少妇视频 啪啪丝熟偷拍AV视频 青岛小琴简历 老外大鸡吧插逼 女人自慰久久网视频 福利电影院最新入口 ccc858com午夜a片 妻子与干爹李娜TXT 丝足会所导航 哥哥色姐姐干www777cccnet 日本邪恶动画片ftp 先锋影音中国无码免费色片 720lu自拍www820qqcc 老婆喜欢看大奶的女人 人妻熟女一级片在线播放 大色网小色网wwwlululu9com BT汤芳 11p图片欧美 性奴淫荡乱伦mp4 淫荡的教师艳母 亚洲欧美图片图片小说www2xnxncom 幼女刚刚发育图片 唐嫣av视频magnet 热热av原九九爱 成人直播下载地址 黄色片毛片三级片首页 兽皇合集在线播放 kanxxx 偷拍卡通动漫另类口味 激情综合五月激请 肥熟少妇图片 美女露小穴逼逼图片 谷露新片 亚洲色图欧美校园春色成人动漫青春 白虎ann WWW_ADY9_NET 有声小说包 词三分春色 春色代码 春色香 樱井莉亚监禁bt 樱井莉亚什么病 小泽玛利亚属于 小泽玛利亚gang 谁有免费的手机黄网 www苦歌com www桃太廊com www合肥演唱会 开心婷婷快播五月天 东京热03 pp在线看黄片 波野结衣av影音先锋 黑木耳影院 妹妹快播 淫意影视 爱窝窝在线 草淑女影视 Naruto 撸二哥电影男人网站 xfplay下载先锋影音 久久爱影院 歪歪电影 亚洲AV天堂在线2017免费 藤蒲惠在线视频 就去爱色和尚 葡京午夜成人 协和影院65页 午夜xo影 tiantian kan tiantiancao WWW,998aVaV,C0m 任你末言 yellow中文字幕网 制服中文 日本东京热一本道无码视频dvd欧美下载 颜射H网盘 情侣性福园 强奸漂亮女仆视频 性感护士检查丁丁的视频 青青手机免费看a片 青春草97视频碰碰碰碰 情趣内衣 亚洲 日本相亲节目接吻视频全集 日本男人插阴经视频 日本一本道高清无码DVDVD 日本女优丝袜足交视频 日本女人上高潮时阴道哗哗流水高清视频免费体验 男女之事60秒体验视频 成人免费观看网站大全 催眠羞辱学园在线视频 中文歌a片 J\香五月 朱音实在线 狼人干成人综合在线 东方后宫东方a 很黄A级 sihu最新网页地址 免费韩国ⅴip主播秀 偷拍情侣宾馆无码 mp4 欧美老熟妇视频 亚洲无码――四虎影库新版 操一下免费视频 老湿妹妹想要视频 原味丝足胭脂扣在线视频 成人网亚洲 黄色小姐视频小电影 国产自拍性爱视频在线播放 做爱视频无码大尺度 尤酷播电影网 超碰51无码 精灵影院 欧美免费AV km320全球华人成人短视频 另类资源 play视频在线提供好看的无码AV在线观看和在线播放,更有大量经典无码AV高清无 老司机影院体验区一分钟理论区 任你想不到的搞法 长梓泽免费视频 eee677 大西瓜pro福利亚州在线 掂花网 大香伊 在线美女 欧美无码番号下载 江疏影福利视频在线观看 一点拍福利视频 高铁上偷拍女人奶头 超长版黄片 夫妻做爱免费视频 情侣 秋霞在线观看_秋霞电影高清完整版-搜狗电影 三浦春佳肛交 下载 制服 丝袜 强奸 快播 骚屌操视频 露毛福利 日日日嗷嗷嗷视频在线观看 影音先锋主播勾引 757午夜福利影视1000 欧美啪啪51影院 青青青手机版自拍福利 树先生无删减版93分 秋欲浓成人网站 爱做av 日批视频有哪些 超在线操 张筱雨大尺度写真迅雷链接下载 午夜福利41 撸羊毛自拍 真人兔女郎福利视频 童颜巨乳女主播种子 90heyz 美国 高清无码 磁链接 256bl五月天 欧美AV 插死她 任你操任你曰爽爽 视频在线国产亚洲精品 91自拍网站在线看 绝色18岁美处女开苞 日本辣妈性交 wwwaⅤ747com 杨幂一分十一秒手机在线观看m youbbbla 在线 88资源总站 色友巴视频在线播放 岛国激情片 福利 下载 红楼吧影视 欧美九哥孕妇操逼视频 五色影院地址 日本大妈优女性爱视频 日本综合色高清无码 双飞美脚 下载 一级夫妻性生录像 东京热苍井空av 美国av磁力 爱的色放全2017奇奇网 苍井空无码a免费观看 操美女直播亚州在线 操逼故事在线视屏 操女人逼夜色视频 韩国丝袜购物直播 孩子们的秘密人人视频 不十岁的毛片一级 伦理片五月天六月丁香 mmmm89 床插胸 AV就去吻 av番号在线观看 www,岛国,com 爆乳白富美穿着性感肉丝拍写真逼逼真肥美 草帽AV 伦理短视频试着免费 十八禁啪啦啪漫画百度云 艺术写真视频得到k 乔丹卡佛三级磁力 青娱乐精品快播 恋脚癖的福利 日本wwww午夜com 高清强奸视频xxx 97和谐无码 amsr福利视频 啪啪啪鸡视频网 国产迷奸自拍 兼职模特琪琪 丝袜美腿诱惑优酷视频 操逼视频一级黄片 98g奶小妹视频 最新偷拍自拍图 露点紧身裤视频 偷拍爱爱视频电影院 欧美俱乐部在线视频 电影天堂利欧路 另类sm专区 1人体艺术无限极 斑斑马电影街 淫乱淑女 女屌操视 5388x成人 天使萌bt下载 李丽珍三级合集种子迅雷mp4 同人视频肉 小视频夜香阁在线观看 鲁呀鲁luya视频 日韩在线视频亚洲无码 限制级福利视频第九影院 国产夫产拍拍 美女爱爱短片 裸体女明星写真磁力下载 伦理色中文 色和尚2017最新综合在线 裸体瑜伽 magnet xt urn btih 青鱼视频情侣在線 秋霞网色大哥 日本亚洲风情性插图 qiqiluenli 性感视频在线 fk福利网站小视频 川村麻耶中文字幕 mp4 人与动物性交 足艺阁踩踏 真人插b 狠狠天天曰天天日 偶偶福利电影 女主播福利影院 嗨碰牛牛午?成人视频 坏坏小影院 色老板影院不卡 男女添bb日b视频 撸免费在线视频 韩国限制2018在线观看 柳岩午夜伦理 桃花岛在线视频五码 日本高清视频激情图片激情小说 普团惠 716OC0M 27报电影 91大神国产自拍 126bar自拍 意念射精视频 好屌看色色视频 国产自拍综 韩国天体营真人秀在线观看 国产自拍偷拍泡泡视频 国产自拍、欧美 鸡鸡爱逼逼av-淘宝m3n8 天天橹一把影院 快看漫画 亚洲老B骚AV视频在线 96碰碰在线播放 a片性爱视频 亚洲区欧美区综合图片自拍 法律的基本本能动漫 口交和乳交视频 6度影院鲁鲁片 苍井空真集 黄色小说女人与公犬做爱 97bt工厂现在怎么进去 奸鲍鱼肥臀视频 少妇嫩逼性交图片 她也色成人网站 男人操网 WWW_W3_ORG 男女在做爱色图