<commit_before>N=2;
M=2;
spacing=3;

module door_stop()
{
  span=10;
  difference()
  {
    union()
    {
      scale([0.5, 1, 1])
        rotate([-90, 0, 0])
          cylinder(r=10, h=span, $fn=50);
      cube([10, span, 10]);
    }
    // cutt bottom part
    translate([-10, -5, -15])
      cube([30, span+10, 15]);
    // drill
    translate([5, span/2, -5])
      cylinder(d=3.5, h=20, $fn=50);
  }
}

for(i=[0:N-1])
  for(j=[0:M-1])
    translate([i*(15+spacing), j*(10+spacing), 0])
      door_stop();<commit_msg>moved screw hole a bit<commit_after>N=2;
M=2;
spacing=3;

module door_stop()
{
  span=10;
  difference()
  {
    union()
    {
      scale([0.5, 1, 1])
        rotate([-90, 0, 0])
          cylinder(r=10, h=span, $fn=50);
      cube([10, span, 10]);
    }
    // cutt bottom part
    translate([-10, -5, -15])
      cube([30, span+10, 15]);
    // drill
    translate([5/2, span/2, -5])
      cylinder(d=3.5, h=20, $fn=50);
  }
}

for(i=[0:N-1])
  for(j=[0:M-1])
    translate([i*(15+spacing), j*(10+spacing), 0])
      door_stop();
{'fraction_non_alphanumeric': 0.2345679012345679, 'fraction_numerical': 0.09591642924976258, 'mean_word_length': 2.3354430379746836, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4137184', 'n_tokens_mistral': 520, 'n_tokens_neox': 469, 'n_words': 87}