From 25b978f39fd5303b0f8d79c0ce3afb69c6098c4d Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Thu, 1 Apr 2021 18:41:37 +0200
Subject: [PATCH 1/2] Doc clarification.
---
src/db/db/gsiDeclDbLayout.cc | 6 ++++--
src/laybasic/laybasic/gsiDeclLayLayers.cc | 6 +++---
2 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/src/db/db/gsiDeclDbLayout.cc b/src/db/db/gsiDeclDbLayout.cc
index b950970b5..6ceeed6f6 100644
--- a/src/db/db/gsiDeclDbLayout.cc
+++ b/src/db/db/gsiDeclDbLayout.cc
@@ -1349,12 +1349,14 @@ Class decl_Layout ("db", "Layout",
"This method is provided to ensure this explicitly. This can be useful while using \\start_changes and \\end_changes to wrap a performance-critical operation. "
"See \\start_changes for more details."
) +
- gsi::method ("cleanup", &db::Layout::cleanup,
+ gsi::method ("cleanup", &db::Layout::cleanup, gsi::arg ("cell_indexes_to_keep", std::set (), "[]"),
"@brief Cleans up the layout\n"
"This method will remove proxy objects that are no longer in use. After changing PCell parameters such "
- "proxy objects may still be present in the layout and are cached for later reuse. Usually they are cleaned up automatically occasionally, "
+ "proxy objects may still be present in the layout and are cached for later reuse. Usually they are cleaned up automatically, "
"but in a scripting context it may be useful to clean up these cells explicitly.\n"
"\n"
+ "Use 'cell_indexes_to_keep' for specifying a list of cell indexes of PCell variants or library proxies you don't want to be cleaned up.\n"
+ "\n"
"This method has been introduced in version 0.25.\n"
) +
gsi::method ("dbu=", (void (db::Layout::*) (double)) &db::Layout::dbu, gsi::arg ("dbu"),
diff --git a/src/laybasic/laybasic/gsiDeclLayLayers.cc b/src/laybasic/laybasic/gsiDeclLayLayers.cc
index e04356784..75fd91eac 100644
--- a/src/laybasic/laybasic/gsiDeclLayLayers.cc
+++ b/src/laybasic/laybasic/gsiDeclLayLayers.cc
@@ -835,9 +835,9 @@ Class decl_LayerProperties ("lay", "LayerProperties",
"If the layer index is positive, the shapes drawn are taken from this layer rather than "
"searched for by layer and datatype. This property is stronger than the layer/datatype or "
"name specification.\n\n"
- "The similar method \\layer_index "
- "returns the actual layer index used, not the given one. The latter may be negative indicating "
- "that layer/datatype or name specifications are used.\n\n"
+ "A different method is \\layer_index which indicates the ID of the layer actually used. "
+ "While \"source_layer_index\" is one of several ways to address the layer drawn, \"layer_index\" is the ID (index) "
+ "of the layer matching the source specification and is >= 0 if such a layer is found.\n\n"
"If \"real\" is true, the effective value is returned."
) +
method_ext ("source_layer_index", &get_layer_index_1,
From 892f94016673dcc31fb387401778aed0cf778479 Mon Sep 17 00:00:00 2001
From: Matthias Koefferlein
Date: Thu, 1 Apr 2021 23:29:45 +0200
Subject: [PATCH 2/2] Fill feature: enhancements and debugging
- added "multi_origin" mode for repeated fill
- enhanced fill coverage by better separation of islands in auto-origin mode
---
src/db/db/dbFillTool.cc | 21 +++++----
src/db/db/dbFillTool.h | 2 +-
src/db/db/gsiDeclDbCell.cc | 5 +-
src/db/db/gsiDeclDbRegion.cc | 5 +-
src/drc/drc/built-in-macros/_drc_engine.rb | 4 ++
src/drc/drc/built-in-macros/_drc_layer.rb | 52 +++++++++++----------
src/drc/drc/built-in-macros/_drc_tags.rb | 6 ++-
src/drc/unit_tests/drcSimpleTests.cc | 10 ++++
src/lay/lay/doc/about/drc_ref_layer.xml | 4 +-
testdata/drc/drcSimpleTests_46.drc | 25 ++++++++++
testdata/drc/drcSimpleTests_46.gds | Bin 0 -> 1034 bytes
testdata/drc/drcSimpleTests_47.drc | 27 +++++++++++
testdata/drc/drcSimpleTests_47.gds | Bin 0 -> 1034 bytes
testdata/drc/drcSimpleTests_au41.gds | Bin 2593518 -> 2667642 bytes
testdata/drc/drcSimpleTests_au46.gds | Bin 0 -> 165114 bytes
testdata/drc/drcSimpleTests_au47.gds | Bin 0 -> 261734 bytes
16 files changed, 119 insertions(+), 42 deletions(-)
create mode 100644 testdata/drc/drcSimpleTests_46.drc
create mode 100644 testdata/drc/drcSimpleTests_46.gds
create mode 100644 testdata/drc/drcSimpleTests_47.drc
create mode 100644 testdata/drc/drcSimpleTests_47.gds
create mode 100644 testdata/drc/drcSimpleTests_au46.gds
create mode 100644 testdata/drc/drcSimpleTests_au47.gds
diff --git a/src/db/db/dbFillTool.cc b/src/db/db/dbFillTool.cc
index 855be54b5..a684bc149 100644
--- a/src/db/db/dbFillTool.cc
+++ b/src/db/db/dbFillTool.cc
@@ -212,11 +212,6 @@ fill_polygon_impl (db::Cell *cell, const db::Polygon &fp0, db::cell_index_type f
throw tl::Exception (tl::to_string (tr ("Invalid row or column step vectors in fill_region: row_step x column_step vector vector product must be > 0")));
}
- // disable enhanced mode an obey the origin if the polygon is not entirely inside and not at the boundary of the glue box
- if (enhanced_fill && ! glue_box.empty () && ! fp0.box ().enlarged (db::Vector (1, 1)).inside (glue_box)) {
- enhanced_fill = false;
- }
-
db::Vector kernel_origin (fc_bbox.left (), fc_bbox.bottom ());
std::vector filled_regions;
@@ -256,13 +251,21 @@ fill_polygon_impl (db::Cell *cell, const db::Polygon &fp0, db::cell_index_type f
continue;
}
- size_t ninsts = 0;
+ // disable enhanced mode an obey the origin if the polygon is not entirely inside and not at the boundary of the glue box
+ bool ef = enhanced_fill;
+ if (ef && ! glue_box.empty () && ! fp->box ().enlarged (db::Vector (1, 1)).inside (glue_box)) {
+ ef = false;
+ }
+ // pick a heuristic "good" starting point in enhanced mode
+ // TODO: this is a pretty weak optimization.
db::Point o = origin;
- if (enhanced_fill) {
+ if (ef) {
o = fp->hull () [0];
}
+ size_t ninsts = 0;
+
GenericRasterizer am (*fp, row_step, column_step, o, fc_bbox.p2 () - fc_bbox.p1 ());
for (unsigned int i = 0; i < am.area_maps (); ++i) {
@@ -454,7 +457,7 @@ fill_region (db::Cell *cell, const db::Region &fr, db::cell_index_type fill_cell
DB_PUBLIC void
fill_region_repeat (db::Cell *cell, const db::Region &fr, db::cell_index_type fill_cell_index,
const db::Box &fc_box, const db::Vector &row_step, const db::Vector &column_step,
- const db::Vector &fill_margin, db::Region *remaining_polygons, const db::Point &origin, const db::Box &glue_box)
+ const db::Vector &fill_margin, db::Region *remaining_polygons, const db::Box &glue_box)
{
const db::Region *fill_region = &fr;
@@ -468,7 +471,7 @@ fill_region_repeat (db::Cell *cell, const db::Region &fr, db::cell_index_type fi
++iteration;
remaining.clear ();
- fill_region_impl (cell, *fill_region, fill_cell_index, fc_box, row_step, column_step, origin, true, &remaining, fill_margin, remaining_polygons, iteration, glue_box);
+ fill_region_impl (cell, *fill_region, fill_cell_index, fc_box, row_step, column_step, db::Point (), true, &remaining, fill_margin, remaining_polygons, iteration, glue_box);
new_fill_region.swap (remaining);
fill_region = &new_fill_region;
diff --git a/src/db/db/dbFillTool.h b/src/db/db/dbFillTool.h
index a6b5c905c..e3e060514 100644
--- a/src/db/db/dbFillTool.h
+++ b/src/db/db/dbFillTool.h
@@ -118,6 +118,6 @@ fill_region (db::Cell *cell, const db::Region &fp, db::cell_index_type fill_cell
DB_PUBLIC void
fill_region_repeat (db::Cell *cell, const db::Region &fr, db::cell_index_type fill_cell_index,
const db::Box &fc_box, const db::Vector &row_step, const db::Vector &column_step,
- const db::Vector &fill_margin, db::Region *remaining_polygons = 0, const db::Point &origin = db::Point (), const db::Box &glue_box = db::Box ());
+ const db::Vector &fill_margin, db::Region *remaining_polygons = 0, const db::Box &glue_box = db::Box ());
}
diff --git a/src/db/db/gsiDeclDbCell.cc b/src/db/db/gsiDeclDbCell.cc
index 6681da3f8..8fb411341 100644
--- a/src/db/db/gsiDeclDbCell.cc
+++ b/src/db/db/gsiDeclDbCell.cc
@@ -1312,9 +1312,9 @@ fill_region_skew (db::Cell *cell, const db::Region &fr, db::cell_index_type fill
static void
fill_region_multi (db::Cell *cell, const db::Region &fr, db::cell_index_type fill_cell_index, const db::Box &fc_box, const db::Vector &row_step, const db::Vector &column_step,
- const db::Vector &fill_margin, db::Region *remaining_polygons, const db::Point &origin, const db::Box &glue_box)
+ const db::Vector &fill_margin, db::Region *remaining_polygons, const db::Box &glue_box)
{
- db::fill_region_repeat (cell, fr, fill_cell_index, fc_box, row_step, column_step, fill_margin, remaining_polygons, origin, glue_box);
+ db::fill_region_repeat (cell, fr, fill_cell_index, fc_box, row_step, column_step, fill_margin, remaining_polygons, glue_box);
}
static db::Instance cell_inst_dtransform_simple (db::Cell *cell, const db::Instance &inst, const db::DTrans &t)
@@ -1881,7 +1881,6 @@ Class decl_Cell ("db", "Cell",
gsi::arg ("column_step"),
gsi::arg ("fill_margin", db::Vector ()),
gsi::arg ("remaining_polygons", (db::Region *)0, "nil"),
- gsi::arg ("origin", db::Point ()),
gsi::arg ("glue_box", db::Box ()),
"@brief Fills the given region with cells of the given type in enhanced mode with iterations\n"
"This version operates like \\fill_region, but repeats the fill generation until no further fill cells can be placed. "
diff --git a/src/db/db/gsiDeclDbRegion.cc b/src/db/db/gsiDeclDbRegion.cc
index 898e01120..c8ee01b40 100644
--- a/src/db/db/gsiDeclDbRegion.cc
+++ b/src/db/db/gsiDeclDbRegion.cc
@@ -730,9 +730,9 @@ fill_region_skew (const db::Region *fr, db::Cell *cell, db::cell_index_type fill
static void
fill_region_multi (const db::Region *fr, db::Cell *cell, db::cell_index_type fill_cell_index, const db::Box &fc_box, const db::Vector &row_step, const db::Vector &column_step,
- const db::Vector &fill_margin, db::Region *remaining_polygons, const db::Point &origin, const db::Box &glue_box)
+ const db::Vector &fill_margin, db::Region *remaining_polygons, const db::Box &glue_box)
{
- db::fill_region_repeat (cell, *fr, fill_cell_index, fc_box, row_step, column_step, fill_margin, remaining_polygons, origin, glue_box);
+ db::fill_region_repeat (cell, *fr, fill_cell_index, fc_box, row_step, column_step, fill_margin, remaining_polygons, glue_box);
}
static db::Point default_origin;
@@ -2921,7 +2921,6 @@ Class decl_Region (decl_dbShapeCollection, "db", "Region",
gsi::arg ("column_step"),
gsi::arg ("fill_margin", db::Vector ()),
gsi::arg ("remaining_polygons", (db::Region *)0, "nil"),
- gsi::arg ("origin", db::Point ()),
gsi::arg ("glue_box", db::Box ()),
"@brief A mapping of \\Cell#fill_region to the Region class\n"
"\n"
diff --git a/src/drc/drc/built-in-macros/_drc_engine.rb b/src/drc/drc/built-in-macros/_drc_engine.rb
index d7cd228ed..9a3d2eefb 100644
--- a/src/drc/drc/built-in-macros/_drc_engine.rb
+++ b/src/drc/drc/built-in-macros/_drc_engine.rb
@@ -259,6 +259,10 @@ module DRC
DRCFillOrigin::new
end
+ def multi_origin
+ DRCFillOrigin::new(nil, nil, true)
+ end
+
def origin(x, y)
DRCFillOrigin::new(x, y)
end
diff --git a/src/drc/drc/built-in-macros/_drc_layer.rb b/src/drc/drc/built-in-macros/_drc_layer.rb
index 489f2da3a..4d22374b8 100644
--- a/src/drc/drc/built-in-macros/_drc_layer.rb
+++ b/src/drc/drc/built-in-macros/_drc_layer.rb
@@ -4251,7 +4251,9 @@ CODE
# @li @b origin(x, y) @/b: specifies a fixed point to align the pattern with. This point specifies the location
# of the reference point for one pattern cell. @/li
# @li @b auto_origin @/b: lets the algorithm choose the origin. This may result is a slightly better fill coverage
- # as the algorithm is able to determine a pattern origin per fill island. @/li
+ # as the algorithm is able to determine a pattern origin per island to fill. @/li
+ # @li @b multi_origin @/b: lets the algorithm choose the origin and repeats the fill with different origins
+ # until no further fill cell can be fitted. @/li
# @li @b fill_pattern(..) @/b: specifies the fill pattern. @/li
# @/ul
#
@@ -4355,6 +4357,7 @@ CODE
column_step = nil
pattern = nil
origin = RBA::DPoint::new
+ repeat = false
args.each_with_index do |a,ai|
if a.is_a?(DRCSource)
@@ -4381,6 +4384,7 @@ CODE
end
elsif a.is_a?(DRCFillOrigin)
origin = a.origin
+ repeat = a.repeat
else
raise("Argument ##{ai+1} not understood for '#{m}'")
end
@@ -4435,31 +4439,22 @@ CODE
tp.var("cs", cs)
tp.var("origin", origin)
tp.var("fc_index", fc_index)
+ tp.var("repeat", repeat)
+ tp.var("with_left", with_left)
- if with_left
- tp.queue(<<"END")
- var tc_box = _frame.bbox;
- var tile_box = _tile ? (tc_box & _tile.bbox) : tc_box;
- !tile_box.empty && (
- tile_box = tile_box.enlarged(Vector.new(max(rs.x, fc_box.width), max(cs.y, fc_box.height)));
- tile_box = tile_box & tc_box;
- var left = Region.new;
+ tp.queue(<<"END")
+ var tc_box = _frame.bbox;
+ var tile_box = _tile ? (tc_box & _tile.bbox) : tc_box;
+ !tile_box.empty && (
+ tile_box = tile_box.enlarged(Vector.new(max(rs.x, fc_box.width), max(cs.y, fc_box.height)));
+ tile_box = tile_box & tc_box;
+ var left = with_left ? Region.new : nil;
+ repeat ?
+ (region & tile_box).fill_multi(top_cell, fc_index, fc_box, rs, cs, Vector.new, left, _tile.bbox) :
(region & tile_box).fill(top_cell, fc_index, fc_box, rs, cs, origin, left, Vector.new, left, _tile.bbox);
- _output(#{result_arg}, left)
- )
+ with_left && _output(#{result_arg}, left)
+ )
END
- else
- tp.queue(<<"END")
- var tc_box = _frame.bbox;
- var tile_box = _tile ? (tc_box & _tile.bbox) : tc_box;
- !tile_box.empty && (
- tile_box.right = tile_box.right + rs.x - 1;
- tile_box.top = tile_box.top + cs.y - 1;
- tile_box = tile_box & tc_box;
- (region & tile_box).fill(top_cell, fc_index, fc_box, rs, cs, origin, nil, Vector.new, nil, _tile.bbox)
- )
-END
- end
begin
@engine._output_layout.start_changes
@@ -4477,10 +4472,19 @@ END
end
@engine.run_timed("\"#{m}\" in: #{@engine.src_line}", self.data) do
- self.data.fill(top_cell, fc_index, fc_box, rs, cs, origin, result, RBA::Vector::new, result)
+ if repeat
+ self.data.fill_multi(top_cell, fc_index, fc_box, rs, cs, RBA::Vector::new, result)
+ else
+ self.data.fill(top_cell, fc_index, fc_box, rs, cs, origin, result, RBA::Vector::new, result)
+ end
end
end
+
+ if fill_cell.parent_cells == 0
+ # fill cell not required (not placed) -> remove
+ fill_cell.delete
+ end
self.data.disable_progress
diff --git a/src/drc/drc/built-in-macros/_drc_tags.rb b/src/drc/drc/built-in-macros/_drc_tags.rb
index 283a7813d..0da810678 100644
--- a/src/drc/drc/built-in-macros/_drc_tags.rb
+++ b/src/drc/drc/built-in-macros/_drc_tags.rb
@@ -334,7 +334,8 @@ module DRC
# A wrapper for the fill origin definition
class DRCFillOrigin
- def initialize(x = nil, y = nil)
+ def initialize(x = nil, y = nil, repeat = false)
+ @repeat = repeat
if !x && !y
@origin = nil
else
@@ -350,6 +351,9 @@ module DRC
def origin
@origin
end
+ def repeat
+ @repeat
+ end
end
# A wrapper for the tile_size option
diff --git a/src/drc/unit_tests/drcSimpleTests.cc b/src/drc/unit_tests/drcSimpleTests.cc
index 36b46732a..5d3abc750 100644
--- a/src/drc/unit_tests/drcSimpleTests.cc
+++ b/src/drc/unit_tests/drcSimpleTests.cc
@@ -1222,3 +1222,13 @@ TEST(45_fillWithOverlappingBoxesTiled)
{
run_test (_this, "45", false);
}
+
+TEST(46_fillWithOverlappingBoxes)
+{
+ run_test (_this, "46", false);
+}
+
+TEST(47_fillWithOverlappingBoxesTiled)
+{
+ run_test (_this, "47", false);
+}
diff --git a/src/lay/lay/doc/about/drc_ref_layer.xml b/src/lay/lay/doc/about/drc_ref_layer.xml
index 0d2b34c84..4b9b0554c 100644
--- a/src/lay/lay/doc/about/drc_ref_layer.xml
+++ b/src/lay/lay/doc/about/drc_ref_layer.xml
@@ -1044,7 +1044,9 @@ a positive value. A horizontal displacement component can be specified too, whic
origin(x, y) : specifies a fixed point to align the pattern with. This point specifies the location
of the reference point for one pattern cell.
auto_origin : lets the algorithm choose the origin. This may result is a slightly better fill coverage
-as the algorithm is able to determine a pattern origin per fill island.
+as the algorithm is able to determine a pattern origin per island to fill.
+multi_origin : lets the algorithm choose the origin and repeats the fill with different origins
+until no further fill cell can be fitted.
fill_pattern(..) : specifies the fill pattern.
diff --git a/testdata/drc/drcSimpleTests_46.drc b/testdata/drc/drcSimpleTests_46.drc
new file mode 100644
index 000000000..1278a4681
--- /dev/null
+++ b/testdata/drc/drcSimpleTests_46.drc
@@ -0,0 +1,25 @@
+
+source $drc_test_source
+target $drc_test_target
+
+if $drc_test_deep
+ deep
+end
+
+l1 = input(1, 0)
+l1.output(1, 0)
+
+to_fill = extent - l1
+
+fp1 = fill_pattern("FP1").shape(10, 0, box(0, 0, 800.nm, 800.nm)).origin(-100.nm, -100.nm)
+to_fill = to_fill.fill_with_left(fp1, hstep(1.um), vstep(200.nm, 1.um), multi_origin)
+
+fp2 = fill_pattern("FP2").shape(10, 0, box(0, 0, 400.nm, 400.nm)).origin(-50.nm, -50.nm)
+to_fill = to_fill.fill_with_left(fp2, hstep(0.5.um), vstep(100.nm, 0.5.um), multi_origin)
+
+fp3 = fill_pattern("FP3").shape(10, 0, box(0, 0, 200.nm, 200.nm)).origin(-25.nm, -25.nm)
+to_fill = to_fill.fill_with_left(fp3, hstep(0.25.um), vstep(50.nm, 0.25.um), multi_origin)
+
+to_fill.output(100, 0)
+
+
diff --git a/testdata/drc/drcSimpleTests_46.gds b/testdata/drc/drcSimpleTests_46.gds
new file mode 100644
index 0000000000000000000000000000000000000000..e9e05712b8d946a42dfe312ab50be1bf52c31332
GIT binary patch
literal 1034
zcmaLVPe@cz6vy%JdGmbQBGVjq6NI2aNKp~yCNOLv83~!yw26>#71&CGiZ(&32o3Cy
z(JqJ}h$u;jh!`rcR!R`Gs$HPaDiZOWd*{rwnCDx}XSlz24v%vW8A)=6k|fQ)D6oSf
zUF`b*KP^c%Jahz#g{H#;xB8A%o~-r{&hLHvpgc;cX_LAv8$B@sX$xdq6NIca0fyTO
z`U^6-5`8!im0rZ1X@-xjh&%Nq=C0SNX?srp&polfseR?-T;1t&$f@gyJJl6)*ZNoM
z^ZHB24_G=t@ZWai;B9c1pCdc(fx9$@baw0eZnaM9bNdh7h_f-J4;lPjxBEVFaSmL|
z$KS-<)JLlIdHvbF4rj{*udc%JL*QQf0~43Qwew5oV{Uq#+Nl3CyWf{3c%k=bzB;X5
zs43+~@cJEY$QN$LTn*=Mf7T57`=>EiLtfcZGvuGX##{~g;+~ozU%VT0)4xk?^!;H!
zZ65mu;#~G0jdOCxzQ=jEc5d@>y-v;RFWZW7e}cLf>7BSA=JFL->8NXa)%GFomuY)f
ft#8!7*XBR727mRg%=K?D+f&!i)lje3l%{L|FIm3{
literal 0
HcmV?d00001
diff --git a/testdata/drc/drcSimpleTests_47.drc b/testdata/drc/drcSimpleTests_47.drc
new file mode 100644
index 000000000..0d4fb3a06
--- /dev/null
+++ b/testdata/drc/drcSimpleTests_47.drc
@@ -0,0 +1,27 @@
+
+source $drc_test_source
+target $drc_test_target
+
+if $drc_test_deep
+ deep
+end
+
+tiles(20, 20)
+
+l1 = input(1, 0)
+l1.output(1, 0)
+
+to_fill = extent - l1
+
+fp1 = fill_pattern("FP1").shape(10, 0, box(0, 0, 800.nm, 800.nm)).origin(-100.nm, -100.nm)
+to_fill = to_fill.fill_with_left(fp1, hstep(1.um), vstep(200.nm, 1.um), multi_origin)
+
+fp2 = fill_pattern("FP2").shape(10, 0, box(0, 0, 400.nm, 400.nm)).origin(-50.nm, -50.nm)
+to_fill = to_fill.fill_with_left(fp2, hstep(0.5.um), vstep(100.nm, 0.5.um), multi_origin)
+
+fp3 = fill_pattern("FP3").shape(10, 0, box(0, 0, 200.nm, 200.nm)).origin(-25.nm, -25.nm)
+to_fill = to_fill.fill_with_left(fp3, hstep(0.25.um), vstep(50.nm, 0.25.um), multi_origin)
+
+to_fill.output(100, 0)
+
+
diff --git a/testdata/drc/drcSimpleTests_47.gds b/testdata/drc/drcSimpleTests_47.gds
new file mode 100644
index 0000000000000000000000000000000000000000..e9e05712b8d946a42dfe312ab50be1bf52c31332
GIT binary patch
literal 1034
zcmaLVPe@cz6vy%JdGmbQBGVjq6NI2aNKp~yCNOLv83~!yw26>#71&CGiZ(&32o3Cy
z(JqJ}h$u;jh!`rcR!R`Gs$HPaDiZOWd*{rwnCDx}XSlz24v%vW8A)=6k|fQ)D6oSf
zUF`b*KP^c%Jahz#g{H#;xB8A%o~-r{&hLHvpgc;cX_LAv8$B@sX$xdq6NIca0fyTO
z`U^6-5`8!im0rZ1X@-xjh&%Nq=C0SNX?srp&polfseR?-T;1t&$f@gyJJl6)*ZNoM
z^ZHB24_G=t@ZWai;B9c1pCdc(fx9$@baw0eZnaM9bNdh7h_f-J4;lPjxBEVFaSmL|
z$KS-<)JLlIdHvbF4rj{*udc%JL*QQf0~43Qwew5oV{Uq#+Nl3CyWf{3c%k=bzB;X5
zs43+~@cJEY$QN$LTn*=Mf7T57`=>EiLtfcZGvuGX##{~g;+~ozU%VT0)4xk?^!;H!
zZ65mu;#~G0jdOCxzQ=jEc5d@>y-v;RFWZW7e}cLf>7BSA=JFL->8NXa)%GFomuY)f
ft#8!7*XBR727mRg%=K?D+f&!i)lje3l%{L|FIm3{
literal 0
HcmV?d00001
diff --git a/testdata/drc/drcSimpleTests_au41.gds b/testdata/drc/drcSimpleTests_au41.gds
index f509aa09765bce06f756d11da701db728484a9d1..edfe1a1fed1cd3cce4b166b791cb66c3107c7b32 100644
GIT binary patch
delta 351354
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