Corrected more python strings which needed to be made into "r-strings"
to keep python from issuing error messages about them.  Finished
changing the repository locations in github from efabless to
fossi-foundation.  Rebuilt both open PDKs and regenerated the
reference hashes.
diff --git a/common/create_verilog_library.py b/common/create_verilog_library.py
index 3761540..39d671b 100755
--- a/common/create_verilog_library.py
+++ b/common/create_verilog_library.py
@@ -133,21 +133,21 @@
 def create_blackboxes(ntext):
     updated = []
 
-    modrex = re.compile('^[ \t]*module[ \t\n]+')
-    endrex = re.compile('^[ \t]*endmodule[ \t\n]+')
-    inrex = re.compile('^[ \t]*input[ \t\n]+')
-    outrex = re.compile('^[ \t]*output[ \t\n]+')
-    inoutrex = re.compile('^[ \t]*inout[ \t\n]+')
-    ifrex = re.compile('^[ \t]*`if')
-    elsrex = re.compile('^[ \t]*`els')
-    endifrex = re.compile('^[ \t]*`end')
-    suprex = re.compile('^[ \t]*supply')
+    modrex = re.compile(r'^[ \t]*module[ \t\n]+')
+    endrex = re.compile(r'^[ \t]*endmodule[ \t\n]+')
+    inrex = re.compile(r'^[ \t]*input[ \t\n]+')
+    outrex = re.compile(r'^[ \t]*output[ \t\n]+')
+    inoutrex = re.compile(r'^[ \t]*inout[ \t\n]+')
+    ifrex = re.compile(r'^[ \t]*`if')
+    elsrex = re.compile(r'^[ \t]*`els')
+    endifrex = re.compile(r'^[ \t]*`end')
+    suprex = re.compile(r'^[ \t]*supply')
 
     in_mod = False
     depth = 0
     for line in ntext.splitlines():
         # Strip any comments from line before checking
-        nocline = re.sub('[ \t]*//.*', '', line)
+        nocline = re.sub(r'[ \t]*//.*', '', line)
         if not in_mod:
             mmatch = modrex.match(nocline)
             if mmatch:
diff --git a/common/find_all_devices.py b/common/find_all_devices.py
index 71c27c5..59c6ebd 100755
--- a/common/find_all_devices.py
+++ b/common/find_all_devices.py
@@ -207,8 +207,8 @@
 
     allcells = os.listdir(cellspath)
 
-    subcktrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+', re.IGNORECASE)
-    includerex = re.compile('\.include[ \t]+([^ \t]+)', re.IGNORECASE)
+    subcktrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+', re.IGNORECASE)
+    includerex = re.compile(r'\.include[ \t]+([^ \t]+)', re.IGNORECASE)
 
     filesdict  = {}
     subcktdict  = {}
@@ -291,7 +291,7 @@
         # of all primitive devices used in the file by cross-checking against
         # the dictionary of subcircuits.
 
-        devrex = re.compile('x([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
+        devrex = re.compile(r'x([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
         incfiles = []
 
         with open(sourcefile, 'r') as ifile:
diff --git a/common/fix_subckt_params.py b/common/fix_subckt_params.py
index f961326..e5fcb18 100755
--- a/common/fix_subckt_params.py
+++ b/common/fix_subckt_params.py
@@ -38,10 +38,10 @@
 
 def param_split(line, params, debug):
     # Regexp patterns
-    parm1rex = re.compile('(\.param[ \t]+)(.*)')
-    parm2rex = re.compile('(\+[ \t]*)(.*)')
-    parm3rex = re.compile('([^= \t]+)([ \t]*=[ \t]*[^ \t]+[ \t]*)(.*)')
-    parm4rex = re.compile('([^= \t]+)([ \t]*)(.*)')
+    parm1rex = re.compile(r'(\.param[ \t]+)(.*)')
+    parm2rex = re.compile(r'(\+[ \t]*)(.*)')
+    parm3rex = re.compile(r'([^= \t]+)([ \t]*=[ \t]*[^ \t]+[ \t]*)(.*)')
+    parm4rex = re.compile(r'([^= \t]+)([ \t]*)(.*)')
 
     part1 = ''
     part2 = ''
@@ -95,11 +95,11 @@
 def convert_file(in_file, out_path, params, debug):
 
     # Regexp patterns
-    paramrex = re.compile('\.param[ \t]+(.*)')
-    subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
-    modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
-    endsubrex = re.compile('\.ends[ \t]+(.+)')
-    increx = re.compile('\.include[ \t]+')
+    paramrex = re.compile(r'\.param[ \t]+(.*)')
+    subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+    modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+    endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+    increx = re.compile(r'\.include[ \t]+')
 
     with open(in_file, 'r') as ifile:
         inplines = ifile.read().splitlines()
diff --git a/common/fixspice.py b/common/fixspice.py
index dc2fd04..6d0756a 100755
--- a/common/fixspice.py
+++ b/common/fixspice.py
@@ -74,14 +74,14 @@
     modified = False
 
     # Regular expression to find 'agauss(a,b,c)' lines and record a, b, and c
-    grex = re.compile('[^{]agauss\(([^,]*),([^,]*),([^)]*)\)', re.IGNORECASE)
+    grex = re.compile(r'[^{]agauss\(([^,]*),([^,]*),([^)]*)\)', re.IGNORECASE)
 
     # Regular expression to determine if the line is a .PARAM card    
-    paramrex = re.compile('^\.param', re.IGNORECASE)
+    paramrex = re.compile(r'^\.param', re.IGNORECASE)
     # Regular expression to determine if the line is a .MODEL card    
-    modelrex = re.compile('^\.model', re.IGNORECASE)
+    modelrex = re.compile(r'^\.model', re.IGNORECASE)
     # Regular expression to detect a .SUBCKT card
-    subcktrex = re.compile('^\.subckt', re.IGNORECASE)
+    subcktrex = re.compile(r'^\.subckt', re.IGNORECASE)
 
     for line in spilines:
         devtype = line[0].upper() if len(line) > 0 else 0
@@ -130,21 +130,21 @@
                 # Fixes related specifically to MOS models:
 
                 # Fix: Look for hspver=98.2 in FET model
-                altered = re.sub(' hspver[ ]*=[ ]*98\.2', ' ', fixedline, flags=re.IGNORECASE)
+                altered = re.sub(r' hspver[ ]*=[ ]*98\.2', ' ', fixedline, flags=re.IGNORECASE)
                 if altered != fixedline:
                     fixedline = altered
                     if debug:
                         print('Removed hspver=98.2 from ' + modeltype + ' model')
 
                 # Fix:  Change level 53 FETs to level 49
-                altered = re.sub(' (level[ ]*=[ ]*)53', ' \g<1>49', fixedline, flags=re.IGNORECASE)
+                altered = re.sub(r' (level[ ]*=[ ]*)53', ' \g<1>49', fixedline, flags=re.IGNORECASE)
                 if altered != fixedline:
                     fixedline = altered
                     if debug:
                         print('Changed level 53 ' + modeltype + ' to level 49')
 
                 # Fix: Look for version=4.3 or 4.5 FETs, change to 4.8.0 per recommendations
-                altered = re.sub(' (version[ ]*=[ ]*)4\.[35]', ' \g<1>4.8.0',
+                altered = re.sub(r' (version[ ]*=[ ]*)4\.[35]', ' \g<1>4.8.0',
 					fixedline, flags=re.IGNORECASE)
                 if altered != fixedline:
                     fixedline = altered
@@ -209,7 +209,7 @@
                     print('Removed tref= from ' + modeltype + ' model')
 
             # Fix: Look for double-dot model binning and replace with single dot
-            altered = re.sub('\.\.([0-9]+)', '.\g<1>', fixedline, flags=re.IGNORECASE)
+            altered = re.sub(r'\.\.([0-9]+)', '.\g<1>', fixedline, flags=re.IGNORECASE)
             if altered != fixedline:
                 fixedline = altered
                 if debug:
@@ -220,30 +220,30 @@
         # usual numeric assignments.
 
         if devtype == 'M':
-            altered = re.sub(' nf=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
-            altered = re.sub(' nf=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+            altered = re.sub(r' nf=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+            altered = re.sub(r' nf=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
             if altered != fixedline:
                 fixedline = altered
                 if debug:
                     print('Removed nf= from MOSFET device instance')
 
-            altered = re.sub(' mulu0=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
-            altered = re.sub(' mulu0=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+            altered = re.sub(r' mulu0=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+            altered = re.sub(r' mulu0=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
             if altered != fixedline:
                 fixedline = altered
                 if debug:
                     print('Removed mulu0= from MOSFET device instance')
 
-            altered = re.sub(' s[abcd]=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
-            altered = re.sub(' s[abcd]=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+            altered = re.sub(r' s[abcd]=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+            altered = re.sub(r' s[abcd]=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
             if altered != fixedline:
                 fixedline = altered
                 if debug:
                     print('Removed s[abcd]= from MOSFET device instance')
 
         # Remove tref= from all device type instances
-        altered = re.sub(' tref=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
-        altered = re.sub(' tref=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
+        altered = re.sub(r' tref=[^ \'\t]+', ' ', fixedline, flags=re.IGNORECASE)
+        altered = re.sub(r' tref=\'[^\'\t]+\'', ' ', altered, flags=re.IGNORECASE)
         if altered != fixedline:
             fixedline = altered
             if debug:
diff --git a/common/print_subckt_params.py b/common/print_subckt_params.py
index 66786ca..b26339a 100755
--- a/common/print_subckt_params.py
+++ b/common/print_subckt_params.py
@@ -21,9 +21,9 @@
 
 def parse_pins(line, debug):
     # Regexp patterns
-    subrex = re.compile('\.subckt[ \t]+[^ \t]+[ \t]+(.*)')
-    parm1rex = re.compile('([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
-    parm2rex = re.compile('([^= \t]+)[ \t]*(.*)')
+    subrex = re.compile(r'\.subckt[ \t]+[^ \t]+[ \t]+(.*)')
+    parm1rex = re.compile(r'([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
+    parm2rex = re.compile(r'([^= \t]+)[ \t]*(.*)')
 
     params = []
 
@@ -58,10 +58,10 @@
 
 def param_parse(line, debug):
     # Regexp patterns
-    parm1rex = re.compile('\.param[ \t]+(.*)')
-    parm2rex = re.compile('\+[ \t]*(.*)')
-    parm3rex = re.compile('([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
-    parm4rex = re.compile('([^= \t]+)[ \t]*(.*)')
+    parm1rex = re.compile(r'\.param[ \t]+(.*)')
+    parm2rex = re.compile(r'\+[ \t]*(.*)')
+    parm3rex = re.compile(r'([^= \t]+)[ \t]*=[ \t]*[^ \t]+[ \t]*(.*)')
+    parm4rex = re.compile(r'([^= \t]+)[ \t]*(.*)')
 
     if debug:
         print('Diagnostic:  param line in = "' + line + '"')
@@ -97,11 +97,11 @@
 def parse_file(in_file, debug):
 
     # Regexp patterns
-    paramrex = re.compile('\.param[ \t]+(.*)')
-    subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
-    modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
-    endsubrex = re.compile('\.ends[ \t]+(.+)')
-    increx = re.compile('\.include[ \t]+')
+    paramrex = re.compile(r'\.param[ \t]+(.*)')
+    subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+    modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+    endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+    increx = re.compile(r'\.include[ \t]+')
 
     with open(in_file, 'r') as ifile:
         inplines = ifile.read().splitlines()
diff --git a/common/remove_specify.py b/common/remove_specify.py
index 746a06f..b26805f 100755
--- a/common/remove_specify.py
+++ b/common/remove_specify.py
@@ -34,10 +34,10 @@
     # case that has been seen seems to work under the assumption that leading
     # whitespace is ignored up to the amount used by the last indentation.
 
-    vlines = re.sub('\\\\\n[ \t]*', '', vtext)
+    vlines = re.sub(r'\\\\\n[ \t]*', '', vtext)
 
-    specrex = re.compile('\n[ \t]*specify[ \t\n]+')
-    endspecrex = re.compile('\n[ \t]*endspecify')
+    specrex = re.compile(r'\n[ \t]*specify[ \t\n]+')
+    endspecrex = re.compile(r'\n[ \t]*endspecify')
     smatch = specrex.search(vlines)
     while smatch:
         specstart = smatch.start()
diff --git a/common/save_commit_refs.py b/common/save_commit_refs.py
index c226313..d1179a5 100755
--- a/common/save_commit_refs.py
+++ b/common/save_commit_refs.py
@@ -83,8 +83,8 @@
         print("Error:  Cannot open file " + outputfile + " for writing.\n", file=sys.stderr)
         return
 
-    keyrex = re.compile('[ \t]*"([^"]+)":[ \t]*"[^"]+"')
-    valuerex = re.compile('[ \t]*"[^"]+":[ \t]*"([a-z0-9]+)"')
+    keyrex = re.compile(r'[ \t]*"([^"]+)":[ \t]*"[^"]+"')
+    valuerex = re.compile(r'[ \t]*"[^"]+":[ \t]*"([a-z0-9]+)"')
     distdefs = {}
     defs = []
 
diff --git a/common/spectre_to_spice.py b/common/spectre_to_spice.py
index 52698e0..136f2a4 100755
--- a/common/spectre_to_spice.py
+++ b/common/spectre_to_spice.py
@@ -30,13 +30,13 @@
 def parse_param_line(line, inparam, insub, iscall, ispassed, inmod, linenum):
 
     # Regexp patterns
-    parm1rex = re.compile('[ \t]*parameters[ \t]*(.*)')
-    parm2rex = re.compile('[ \t]*params:[ \t]*(.*)')
-    parm3rex = re.compile('[ \t]*\+[ \t]*(.*)')
-    parm4rex = re.compile('[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
-    parm5rex = re.compile('[ \t]*([^= \t]+)[ \t]*(.*)')
-    parm6rex = re.compile('[ \t]*([^= \t]+)[ \t]*=[ \t]*([\'{][^\'}]+[\'}])[ \t]*(.*)')
-    rtok = re.compile('([^ \t\n]+)[ \t]*(.*)')
+    parm1rex = re.compile(r'[ \t]*parameters[ \t]*(.*)')
+    parm2rex = re.compile(r'[ \t]*params:[ \t]*(.*)')
+    parm3rex = re.compile(r'[ \t]*\+[ \t]*(.*)')
+    parm4rex = re.compile(r'[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
+    parm5rex = re.compile(r'[ \t]*([^= \t]+)[ \t]*(.*)')
+    parm6rex = re.compile(r'[ \t]*([^= \t]+)[ \t]*=[ \t]*([\'{][^\'}]+[\'}])[ \t]*(.*)')
+    rtok = re.compile(r'([^ \t\n]+)[ \t]*(.*)')
 
     fmtline = []
 
@@ -73,7 +73,7 @@
         # Parameter expression given with no braces or quotes around
         # the expression.  Fix the expression by removing the spaces
         # around '*'.
-        rest = re.sub('[ \t]*([\*\+\-])[ \t]*', '\g<1>', rest)
+        rest = re.sub(r'[ \t]*([\*\+\-])[ \t]*', '\g<1>', rest)
 
         pmatch = parm4rex.match(rest)
         if pmatch:
@@ -173,20 +173,20 @@
     # ngspice does not understand round(), so replace it with the equivalent
     # floor() expression.
 
-    finalline = re.sub('round\(', 'floor(0.5+', finalline)
+    finalline = re.sub(r'round\(', 'floor(0.5+', finalline)
 
     # use of "no" and "yes" as parameter values is not allowed in ngspice.
 
-    finalline = re.sub('sw_et[ \t]*=[ \t]*{no}', 'sw_et=0', finalline)
-    finalline = re.sub('sw_et[ \t]*=[ \t]*{yes}', 'sw_et=1', finalline)
-    finalline = re.sub('isnoisy[ \t]*=[ \t]*{no}', 'isnoisy=0', finalline)
-    finalline = re.sub('isnoisy[ \t]*=[ \t]*{yes}', 'isnoisy=1', finalline)
+    finalline = re.sub(r'sw_et[ \t]*=[ \t]*{no}', 'sw_et=0', finalline)
+    finalline = re.sub(r'sw_et[ \t]*=[ \t]*{yes}', 'sw_et=1', finalline)
+    finalline = re.sub(r'isnoisy[ \t]*=[ \t]*{no}', 'isnoisy=0', finalline)
+    finalline = re.sub(r'isnoisy[ \t]*=[ \t]*{yes}', 'isnoisy=1', finalline)
 
     # Use of "m" in parameters is forbidden.  Specifically look for "{N*m}".
     # e.g., replace "mult = {2*m}" with "mult = 2".  Note that this usage
     # is most likely an error in the source.
 
-    finalline = re.sub('\{([0-9]+)\*[mM]\}', r'\1', finalline)
+    finalline = re.sub(r'\{([0-9]+)\*[mM]\}', r'\1', finalline)
 
     return finalline, ispassed
 
@@ -198,7 +198,7 @@
     # model name.  There are only a few instances of this, so this
     # routine is not rigorously checking all parameters, just entries
     # on lines with ".param".
-    parmrex = re.compile('[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
+    parmrex = re.compile(r'[ \t]*([^= \t]+)[ \t]*=[ \t]*([^ \t]+)[ \t]*(.*)')
     rest = line
     paramnames = []
     while rest != '':
@@ -214,7 +214,7 @@
 # binned model
 
 def addmodel(modellines, linenum):
-    typerex = re.compile('([ \t]*type[ \t]*=[ \t]*)([^ \t]+)[ \t]*', re.IGNORECASE)
+    typerex = re.compile(r'([ \t]*type[ \t]*=[ \t]*)([^ \t]+)[ \t]*', re.IGNORECASE)
   
     # 'ZYXW' was left as a placeholder for the device type
     if len(modellines) > 0:
@@ -249,31 +249,31 @@
 def convert_file(in_file, out_file):
 
     # Regexp patterns
-    statrex = re.compile('[ \t]*statistics[ \t]*\{(.*)')
-    simrex = re.compile('[ \t]*simulator[ \t]+([^= \t]+)[ \t]*=[ \t]*(.+)')
-    insubrex = re.compile('[ \t]*inline[ \t]+subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
-    cdlsubrex = re.compile('\.?subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
-    endsubrex = re.compile('[ \t]*ends[ \t]+(.+)')
-    endonlysubrex = re.compile('[ \t]*ends[ \t]*')
-    modelrex = re.compile('[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+\{(.*)')
-    cdlmodelrex = re.compile('[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
-    binrex = re.compile('[ \t]*([0-9]+):[ \t]*(.*)')
-    shincrex = re.compile('\.inc[ \t]+')
-    isexprrex = re.compile('[^0-9a-zA-Z_]')
-    paramrex = re.compile('\.param[ \t]+(.*)')
+    statrex = re.compile(r'[ \t]*statistics[ \t]*\{(.*)')
+    simrex = re.compile(r'[ \t]*simulator[ \t]+([^= \t]+)[ \t]*=[ \t]*(.+)')
+    insubrex = re.compile(r'[ \t]*inline[ \t]+subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
+    cdlsubrex = re.compile(r'\.?subckt[ \t]+([^ \t\(]+)[ \t]*\(([^)]*)')
+    endsubrex = re.compile(r'[ \t]*ends[ \t]+(.+)')
+    endonlysubrex = re.compile(r'[ \t]*ends[ \t]*')
+    modelrex = re.compile(r'[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+\{(.*)')
+    cdlmodelrex = re.compile(r'[ \t]*model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
+    binrex = re.compile(r'[ \t]*([0-9]+):[ \t]*(.*)')
+    shincrex = re.compile(r'\.inc[ \t]+')
+    isexprrex = re.compile(r'[^0-9a-zA-Z_]')
+    paramrex = re.compile(r'\.param[ \t]+(.*)')
 
-    stdsubrex = re.compile('\.?subckt[ \t]+([^ \t]+)[ \t]+(.*)')
-    stdmodelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
-    stdendsubrex = re.compile('\.ends[ \t]+(.+)')
-    stdendonlysubrex = re.compile('\.ends[ \t]*')
+    stdsubrex = re.compile(r'\.?subckt[ \t]+([^ \t]+)[ \t]+(.*)')
+    stdmodelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)')
+    stdendsubrex = re.compile(r'\.ends[ \t]+(.+)')
+    stdendonlysubrex = re.compile(r'\.ends[ \t]*')
 
     # Devices (resistor, capacitor, subcircuit as resistor or capacitor)
-    caprex = re.compile('c([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*capacitor[ \t]*(.*)', re.IGNORECASE)
-    resrex = re.compile('r([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*resistor[ \t]*(.*)', re.IGNORECASE)
-    cdlrex = re.compile('[ \t]*([npcrdlmqx])([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
-    stddevrex = re.compile('[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
-    stddev2rex = re.compile('[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t\'{]+[\'{][^\'}]+[\'}])[ \t]*(.*)', re.IGNORECASE)
-    stddev3rex = re.compile('[ \t]*([npcrdlmqx])([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
+    caprex = re.compile(r'c([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*capacitor[ \t]*(.*)', re.IGNORECASE)
+    resrex = re.compile(r'r([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*resistor[ \t]*(.*)', re.IGNORECASE)
+    cdlrex = re.compile(r'[ \t]*([npcrdlmqx])([^ \t]+)[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+    stddevrex = re.compile(r'[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+    stddev2rex = re.compile(r'[ \t]*([crd])([^ \t]+)[ \t]+([^ \t]+[ \t]+[^ \t]+)[ \t]+([^ \t\'{]+[\'{][^\'}]+[\'}])[ \t]*(.*)', re.IGNORECASE)
+    stddev3rex = re.compile(r'[ \t]*([npcrdlmqx])([^ \t]+)[ \t]+(.*)', re.IGNORECASE)
 
     with open(in_file, 'r') as ifile:
         try:
@@ -287,7 +287,7 @@
     # because any subcircuit call could be a forward reference.
     #---------------------------------------------------------------
 
-    allsubrex = re.compile('.*subckt[ \t]+([^ \t\(]+)')
+    allsubrex = re.compile(r'.*subckt[ \t]+([^ \t\(]+)')
     subnames = []
     for line in speclines:
         testline = line.strip()
@@ -492,9 +492,9 @@
                 ispassed = True
                 subname = imatch.group(1)
                 if isspectre:
-                    devrex = re.compile('[ \t]*' + subname + '[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+                    devrex = re.compile(r'[ \t]*' + subname + r'[ \t]*\(([^)]*)\)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
                 else:
-                    devrex = re.compile('[ \t]*' + subname + '[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+                    devrex = re.compile(r'[ \t]*' + subname + r'[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
                 # If there is no close-parenthesis then we should expect it on
                 # a continuation line
                 inpinlist = True if ')' not in line else False
@@ -795,20 +795,20 @@
     # (NOTE:  Need more generic handling here, as perimeter parameter
     # could be in a continuation line)
 
-    perimrex = re.compile('perim([ \t]*=[ \t]*)', re.IGNORECASE)
+    perimrex = re.compile(r'perim([ \t]*=[ \t]*)', re.IGNORECASE)
     for j in range(len(spicelines)):
         line = spicelines[j]
         if len(line) > 1 and line[0].lower() == 'd':
-            spicelines[j] = perimrex.sub('pj\g<1>', line)
+            spicelines[j] = perimrex.sub(r'pj\g<1>', line)
 
     # Catching the spectre use of "m" is difficult, so do another pass
     # on "spicelines" to catch which subcircuits use "*m" expressions,
     # then for those subcircuits, add "mult=1" to the subcircuit
     # parameters.  (NOTE:  Need a more generic regular expression here)
 
-    sqrtrex = re.compile('.*(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
-    sqsubrex = re.compile('(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
-    subrex = re.compile('\.subckt[ \t]+([^ \t\(]+)[ \t]*', re.IGNORECASE)
+    sqrtrex = re.compile(r'.*(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
+    sqsubrex = re.compile(r'(sqrt\([ \t]*[^ \t]+[ \t]*\*[ \t]*)m[ \t]*\)', re.IGNORECASE)
+    subrex = re.compile(r'\.subckt[ \t]+([^ \t\(]+)[ \t]*', re.IGNORECASE)
     needmult = []
     for j in range(len(spicelines)):
         line = spicelines[j]
@@ -817,7 +817,7 @@
             cursub = smatch.group(1)
         smatch = sqrtrex.match(line)
         if smatch:
-            spicelines[j] = sqsubrex.sub('\g<1>mult)', line)
+            spicelines[j] = sqsubrex.sub(r'\g<1>mult)', line)
             needmult.append(cursub)
 
     # Now add "mult=1" parameter to any subcircuit in the "needmult" list
@@ -828,12 +828,12 @@
             spicelines[j] = line + ' mult=1'
 
     # Check for resistor models using "tc1r" and "tc2r"
-    rmodrex = re.compile('.*[ \t]+tc[12]r[ \t]+=', re.IGNORECASE)
+    rmodrex = re.compile(r'.*[ \t]+tc[12]r[ \t]+=', re.IGNORECASE)
     for j in range(len(spicelines)):
         line = spicelines[j]
         rmatch = rmodrex.match(line)
         if rmatch:
-            spicelines[j] = re.sub('([ \t]+tc[12])r([ \t])', '\g<1>\g<2>', line)
+            spicelines[j] = re.sub(r'([ \t]+tc[12])r([ \t])', '\g<1>\g<2>', line)
 
     # Output the result to out_file.
     with open(out_file, 'w') as ofile:
diff --git a/common/split_one_spice.py b/common/split_one_spice.py
index be87d7a..723c77d 100755
--- a/common/split_one_spice.py
+++ b/common/split_one_spice.py
@@ -22,11 +22,11 @@
 def convert_file(in_file, out_path):
 
     # Regexp patterns
-    paramrex = re.compile('\.param[ \t]+(.*)')
-    subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
-    modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
-    endsubrex = re.compile('\.ends[ \t]+(.+)')
-    increx = re.compile('\.include[ \t]+')
+    paramrex = re.compile(r'\.param[ \t]+(.*)')
+    subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+    modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+    endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+    increx = re.compile(r'\.include[ \t]+')
 
     with open(in_file, 'r') as ifile:
         inplines = ifile.read().splitlines()
@@ -205,7 +205,7 @@
                             linedest[tline] = fileno
                             tline += 1;
  
-                devrex = re.compile(subname + '[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+                devrex = re.compile(subname + r'[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
                 inpinlist = True
                 linedest[lineno] = fileno
                 continue
diff --git a/common/split_spice.py b/common/split_spice.py
index dedad24..c278252 100755
--- a/common/split_spice.py
+++ b/common/split_spice.py
@@ -26,11 +26,11 @@
 def convert_file(in_file, out_path, out_file):
 
     # Regexp patterns
-    paramrex = re.compile('\.param[ \t]+(.*)')
-    subrex = re.compile('\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
-    modelrex = re.compile('\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
-    endsubrex = re.compile('\.ends[ \t]+(.+)')
-    increx = re.compile('\.include[ \t]+')
+    paramrex = re.compile(r'\.param[ \t]+(.*)')
+    subrex = re.compile(r'\.subckt[ \t]+([^ \t]+)[ \t]+([^ \t]*)')
+    modelrex = re.compile(r'\.model[ \t]+([^ \t]+)[ \t]+([^ \t]+)[ \t]+(.*)')
+    endsubrex = re.compile(r'\.ends[ \t]+(.+)')
+    increx = re.compile(r'\.include[ \t]+')
 
     with open(in_file, 'r') as ifile:
         inplines = ifile.read().splitlines()
@@ -115,7 +115,7 @@
             if imatch:
                 insubckt = True
                 subname = imatch.group(1)
-                devrex = re.compile(subname + '[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
+                devrex = re.compile(subname + r'[ \t]*([^ \t]+)[ \t]*([^ \t]+)[ \t]*(.*)', re.IGNORECASE)
                 inpinlist = True
                 subcktlines.append(line)
                 continue
diff --git a/gf180mcu/Makefile.in b/gf180mcu/Makefile.in
index d2a303e..1d5b4aa 100644
--- a/gf180mcu/Makefile.in
+++ b/gf180mcu/Makefile.in
@@ -171,16 +171,16 @@
 # Path to GF180MCU library sources
 PDK_URL = https://github.com/google
 OSU_URL = https://github.com/stineje
-EF_URL = https://github.com/efabless
+FOSSI_URL = https://github.com/fossi-foundation
 
 # Names of library repositories
 # NOTE:  Switching PDK_LIB_PR and PDK_LIB_SC_7T5V0 to Efabless versions
 # having "quick fixes" under development.
-PDK_LIB_PR =       ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pr
-PDK_LIB_PV =       ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pv
-PDK_LIB_IO =       ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_io
-PDK_LIB_SC_7T5V0 = ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu7t5v0
-PDK_LIB_SC_9T5V0 = ${EF_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu9t5v0
+PDK_LIB_PR =       ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pr
+PDK_LIB_PV =       ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_pv
+PDK_LIB_IO =       ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_io
+PDK_LIB_SC_7T5V0 = ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu7t5v0
+PDK_LIB_SC_9T5V0 = ${FOSSI_URL}/globalfoundries-pdk-libs-gf180mcu_fd_sc_mcu9t5v0
 PDK_LIB_SRAM =     ${PDK_URL}/globalfoundries-pdk-ip-gf180mcu_fd_ip_sram
 PDK_LIB_OSU_SC =   ${OSU_URL}/globalfoundries-pdk-libs-gf180mcu_osu_sc
 
diff --git a/gf180mcu/custom/scripts/convert_io_cdl.py b/gf180mcu/custom/scripts/convert_io_cdl.py
index fcbc9b3..30e3786 100755
--- a/gf180mcu/custom/scripts/convert_io_cdl.py
+++ b/gf180mcu/custom/scripts/convert_io_cdl.py
@@ -28,8 +28,8 @@
     fixedlines = []
     modified = False
 
-    resrex = re.compile('^R', re.IGNORECASE)
-    caprex = re.compile('^C', re.IGNORECASE)
+    resrex = re.compile(r'^R', re.IGNORECASE)
+    caprex = re.compile(r'^C', re.IGNORECASE)
 
     for line in spilines:
         fixedline = line
@@ -40,14 +40,14 @@
         # 1) Lines starting with R, C, or M --> change to X
         fixedline = re.sub('^[RCM]', 'X', fixedline, flags=re.IGNORECASE)
         # 2) Names in $[...] --> remove the delimiter
-        fixedline = re.sub(' \$\[', ' ', fixedline, flags=re.IGNORECASE)
-        fixedline = re.sub('\] ', ' ', fixedline, flags=re.IGNORECASE)
+        fixedline = re.sub(r' \$\[', ' ', fixedline, flags=re.IGNORECASE)
+        fixedline = re.sub(r'\] ', ' ', fixedline, flags=re.IGNORECASE)
         # 3) Remove $SUB=
-        fixedline = re.sub('\$SUB=', '', fixedline, flags=re.IGNORECASE)
+        fixedline = re.sub(r'\$SUB=', '', fixedline, flags=re.IGNORECASE)
         # 4) Handle $W and $L for resistors
         if isres:
-            fixedline = re.sub('\$W', 'r_width', fixedline, flags=re.IGNORECASE)
-            fixedline = re.sub('\$L', 'r_length', fixedline, flags=re.IGNORECASE)
+            fixedline = re.sub(r'\$W', 'r_width', fixedline, flags=re.IGNORECASE)
+            fixedline = re.sub(r'\$L', 'r_length', fixedline, flags=re.IGNORECASE)
         if iscap:
             fixedline = re.sub('w=', 'c_width=', fixedline, flags=re.IGNORECASE)
             fixedline = re.sub('l=', 'c_length=', fixedline, flags=re.IGNORECASE)
diff --git a/gf180mcu/custom/scripts/fix_digital_lef.py b/gf180mcu/custom/scripts/fix_digital_lef.py
index 1bb9ad1..387038b 100755
--- a/gf180mcu/custom/scripts/fix_digital_lef.py
+++ b/gf180mcu/custom/scripts/fix_digital_lef.py
@@ -29,8 +29,8 @@
     fixedlines = []
     modified = False
 
-    endrex = re.compile('[ \t]*END[ \t]+VSS')
-    macrorex = re.compile('^MACRO[ \t]+([^ \t\n]+)')
+    endrex = re.compile(r'[ \t]*END[ \t]+VSS')
+    macrorex = re.compile(r'^MACRO[ \t]+([^ \t\n]+)')
     macroname = None
 
     for line in llines:
diff --git a/gf180mcu/custom/scripts/fix_io_lef.py b/gf180mcu/custom/scripts/fix_io_lef.py
index 661e4f8..402e214 100755
--- a/gf180mcu/custom/scripts/fix_io_lef.py
+++ b/gf180mcu/custom/scripts/fix_io_lef.py
@@ -42,10 +42,10 @@
     fixedlines = []
     modified = False
 
-    macrorex = re.compile('[ \t]*MACRO[ \t]+([^ \t\n]+)')
-    pinrex = re.compile('[ \t]*PIN[ \t]+([^ \t\n]+)')
-    userex = re.compile('[ \t]*USE[ \t]+([^ \t\n]+)')
-    endrex = re.compile('[ \t]*END[ \t]+([^ \t\n]+)')
+    macrorex = re.compile(r'[ \t]*MACRO[ \t]+([^ \t\n]+)')
+    pinrex = re.compile(r'[ \t]*PIN[ \t]+([^ \t\n]+)')
+    userex = re.compile(r'[ \t]*USE[ \t]+([^ \t\n]+)')
+    endrex = re.compile(r'[ \t]*END[ \t]+([^ \t\n]+)')
 
     macroidx = -1
     pinidx = -1
diff --git a/gf180mcu/custom/scripts/fix_related_bias_pins.py b/gf180mcu/custom/scripts/fix_related_bias_pins.py
index 19b4c05..e491778 100755
--- a/gf180mcu/custom/scripts/fix_related_bias_pins.py
+++ b/gf180mcu/custom/scripts/fix_related_bias_pins.py
@@ -37,8 +37,8 @@
     power_types = ['primary_power', 'primary_ground', 'backup_power',
 		   'internal_power', 'internal_ground']
 
-    pg_re = re.compile('\s*pg_pin\s*\(\s*"?([^\s]+)"?\s*\)\s*{')
-    well_re = re.compile('\s*pg_type\s*:\s*"?([^\s]+)"?\s*;')
+    pg_re = re.compile(r'\s*pg_pin\s*\(\s*"?([^\s]+)"?\s*\)\s*{')
+    well_re = re.compile(r'\s*pg_type\s*:\s*"?([^\s]+)"?\s*;')
 
     for line in slines:
         pmatch = pg_re.match(line)
diff --git a/gf180mcu/custom/scripts/fix_techlef.py b/gf180mcu/custom/scripts/fix_techlef.py
index 3874d8e..f704feb 100755
--- a/gf180mcu/custom/scripts/fix_techlef.py
+++ b/gf180mcu/custom/scripts/fix_techlef.py
@@ -27,7 +27,7 @@
     fixedlines = []
     modified = False
 
-    layerrex = re.compile('[ \t]*LAYER ([^ \t\n]+)') 
+    layerrex = re.compile(r'[ \t]*LAYER ([^ \t\n]+)') 
 
     for line in llines:
 
diff --git a/gf180mcu/custom/scripts/inc_verilog.py b/gf180mcu/custom/scripts/inc_verilog.py
index 2ea70be..fc5ad6b 100755
--- a/gf180mcu/custom/scripts/inc_verilog.py
+++ b/gf180mcu/custom/scripts/inc_verilog.py
@@ -44,8 +44,8 @@
 
     fixedlines = []
     modified = False
-    increx = re.compile('[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
-    endrex = re.compile('[ \t]*endmodule')
+    increx = re.compile(r'[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
+    endrex = re.compile(r'[ \t]*endmodule')
     inpath = os.path.split(inname)[0]
 
     for line in vlines:
diff --git a/gf180mcu/custom/scripts/make_minmax_techlef.py b/gf180mcu/custom/scripts/make_minmax_techlef.py
index de106e3..aff01bb 100755
--- a/gf180mcu/custom/scripts/make_minmax_techlef.py
+++ b/gf180mcu/custom/scripts/make_minmax_techlef.py
@@ -54,10 +54,10 @@
 tlefbase = 'gf180mcu_fd_sc_mcu' + lib + '__'
 tlefnom  = tlefbase + 'nom.tlef'
 
-resrex1  = re.compile('^[ \t]*RESISTANCE RPERSQ')
-resrex2  = re.compile('^[ \t]*ARRAYSPACING')
-layerrex = re.compile('^[ \t]*LAYER ([^ \t\n]+)')
-caprex   = re.compile('^[ \t]*CAPACITANCE CPERSQDIST')
+resrex1  = re.compile(r'^[ \t]*RESISTANCE RPERSQ')
+resrex2  = re.compile(r'^[ \t]*ARRAYSPACING')
+layerrex = re.compile(r'^[ \t]*LAYER ([^ \t\n]+)')
+caprex   = re.compile(r'^[ \t]*CAPACITANCE CPERSQDIST')
 
 #--------------------------------------------------------------------
 # Resistance values, by layer
diff --git a/gf180mcu/gf180mcu.json b/gf180mcu/gf180mcu.json
index d6d30a6..625e0b8 100644
--- a/gf180mcu/gf180mcu.json
+++ b/gf180mcu/gf180mcu.json
@@ -89,11 +89,11 @@
         "magic": "MAGIC_COMMIT"
     },
     "reference": {
-        "open_pdks": "c10a581884a4373c1a48b18ea3fc02c19d8d5c88",
-        "magic": "4445663cb1b2de1eb9818cfe89f60ed7659335f3",
+        "open_pdks": "ca4dc508d0b95eb84e4b6d79ae7011b849063a18",
+        "magic": "02669de267fb4b658306946d36323b6601df639d",
         "gf180mcu_pdk": "a897aa30369d3bcec87d9d50ce9b01f320f854ef",
-        "gf180mcu_fd_pr": "a11222d681f2134ab28e97f97b9b99b6af188f88",
-        "gf180mcu_fd_pv": "e9410df04da5b64a1053aa6e5180dc144b8a12a2",
+        "gf180mcu_fd_pr": "aacc04cc30ed119baaa616dff266cca7006dc3d6",
+        "gf180mcu_fd_pv": "10ee7fc75437edafa56f29f2b1872e95c9f22b71",
         "gf180mcu_fd_io": "f84fe10e67a5cb9002e9ae8210f58e570726c366",
         "gf180mcu_fd_sc_mcu7t5v0": "8743b6f9641eb8707179c4e51703380d4dc90f16",
         "gf180mcu_fd_sc_mcu9t5v0": "376ea56fa36ce7702595ce4e0e3c9357ee38c81c",
diff --git a/sky130/Makefile.in b/sky130/Makefile.in
index 44e64ef..45fa6f9 100644
--- a/sky130/Makefile.in
+++ b/sky130/Makefile.in
@@ -302,7 +302,6 @@
     REFERENCE_JSON =
 endif
 
-EF_URL = https://github.com/efabless
 FOSSI_URL = https://github.com/fossi-foundation
 GOOGLE_URL = https://foss-eda-tools.googlesource.com
 
@@ -319,8 +318,8 @@
 
 ALPHA_URL =    https://github.com/PaulSchulz/sky130_pschulz_xx_hd
 XSCHEM_URL =   https://github.com/StefanSchippers/xschem_sky130
-KLAYOUT_URL =  ${EF_URL}/sky130_klayout_pdk
-PRECHECK_URL = ${EF_URL}/mpw_precheck
+KLAYOUT_URL =  ${FOSSI_URL}/sky130_klayout_pdk
+PRECHECK_URL = ${FOSSI_URL}/mpw_precheck
 SRAM_URL =     ${FOSSI_URL}/sky130_sram_macros
 SRAM_SPACE_URL = ${GOOGLE_URL}/skywater-pdk/libs/sky130_fd_bd_sram
 RERAM_URL =    ${GOOGLE_URL}/skywater-pdk/libs/sky130_fd_pr_reram
diff --git a/sky130/custom/scripts/fix_io_lef.py b/sky130/custom/scripts/fix_io_lef.py
index d15b0f2..4cac891 100755
--- a/sky130/custom/scripts/fix_io_lef.py
+++ b/sky130/custom/scripts/fix_io_lef.py
@@ -34,11 +34,11 @@
     modified = False
     inpin = False
 
-    macrorex = re.compile('^MACRO[ \t]+([^ \t\n]+)')
-    pinrex = re.compile('^[ \t]*PIN[ \t]+[PG]_CORE')
-    endrex = re.compile('[ \t]*END[ \t]+[PG]_CORE')
-    rectrex = re.compile('^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
-    rect2rex = re.compile('^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
+    macrorex = re.compile(r'^MACRO[ \t]+([^ \t\n]+)')
+    pinrex = re.compile(r'^[ \t]*PIN[ \t]+[PG]_CORE')
+    endrex = re.compile(r'[ \t]*END[ \t]+[PG]_CORE')
+    rectrex = re.compile(r'^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
+    rect2rex = re.compile(r'^[ \t]*RECT[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+[0-9.]+[ \t]+([0-9.]+)[ \t]+')
     macroname = None
 
     for line in llines:
diff --git a/sky130/custom/scripts/inc_verilog.py b/sky130/custom/scripts/inc_verilog.py
index df3e4af..457469f 100755
--- a/sky130/custom/scripts/inc_verilog.py
+++ b/sky130/custom/scripts/inc_verilog.py
@@ -41,10 +41,10 @@
 
     fixedlines = []
     modified = False
-    increx = re.compile('[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
-    ddotrex = re.compile('[^\.]+\.[^\.]+\.v')
-    tdotrex = re.compile('[^\.]+\.[^\.]+\.[^\.]+\.v')
-    endrex = re.compile('[ \t]*endmodule')
+    increx = re.compile(r'[ \t]*`include[ \t]+"?([^ \t\n"]+)"?')
+    ddotrex = re.compile(r'[^\.]+\.[^\.]+\.v')
+    tdotrex = re.compile(r'[^\.]+\.[^\.]+\.[^\.]+\.v')
+    endrex = re.compile(r'[ \t]*endmodule')
     inpath = os.path.split(inname)[0]
 
     for line in vlines:
diff --git a/sky130/custom/scripts/mismatch_params.py b/sky130/custom/scripts/mismatch_params.py
index 47cb853..2fee7c7 100755
--- a/sky130/custom/scripts/mismatch_params.py
+++ b/sky130/custom/scripts/mismatch_params.py
@@ -36,8 +36,8 @@
 
 mismatch_params = []
 
-mmrex = re.compile('^\*[ \t]*mismatch[ \t]*\{')
-endrex = re.compile('^\*[ \t]*\}')
+mmrex = re.compile(r'^\*[ \t]*mismatch[ \t]*\{')
+endrex = re.compile(r'^\*[ \t]*\}')
 
 filelist = []
 
@@ -70,7 +70,7 @@
                         state = 'after_mismatch'
                     else:
                         # Make sure all "A = B" syntax closes up around the equal sign.
-                        newline = re.sub('[ \t]*=[ \t]*', '=', line)
+                        newline = re.sub(r'[ \t]*=[ \t]*', '=', line)
                         tokens = newline.split()
                         if 'vary' in tokens:
                             if ('dist=gauss' in tokens) or ('gauss' in tokens):
@@ -116,11 +116,11 @@
 # a number of places in the models.
 #--------------------------------------------------------------------
 
-gaussrex = re.compile('\'[ \t]+dev\/gauss=\'', re.IGNORECASE)
+gaussrex = re.compile(r'\'[ \t]+dev\/gauss=\'', re.IGNORECASE)
 
 # Same as above, for parameters that are not already expressions.
 
-gauss2rex = re.compile('=[ \t]*([^ \t]+)[ \t]+dev\/gauss=\'', re.IGNORECASE)
+gauss2rex = re.compile(r'=[ \t]*([^ \t]+)[ \t]+dev\/gauss=\'', re.IGNORECASE)
 
 #--------------------------------------------------------------------
 # Step 2.  Make replacements
@@ -152,7 +152,7 @@
 
         gmatch = gauss2rex.search(newline)
         if gmatch:
-            newline = gauss2rex.sub("='\g<1>+" + mm_switch_param + '*AGAUSS(0,1.0,1)*', newline)
+            newline = gauss2rex.sub(r"='\g<1>+" + mm_switch_param + '*AGAUSS(0,1.0,1)*', newline)
             replaced_something = True
             print("  Line {}: Found PSPICE dev/gauss and replaced.".format(line_number))
 
diff --git a/sky130/custom/scripts/process_params.py b/sky130/custom/scripts/process_params.py
index c822b7e..0026487 100755
--- a/sky130/custom/scripts/process_params.py
+++ b/sky130/custom/scripts/process_params.py
@@ -42,9 +42,9 @@
 
 process_params = []
 
-parmrex = re.compile('^\.param[ \t]+')
-prrex = re.compile('^\*[ \t]*process[ \t]*\{')
-endrex = re.compile('^\*[ \t]*\}')
+parmrex = re.compile(r'^\.param[ \t]+')
+prrex = re.compile(r'^\*[ \t]*process[ \t]*\{')
+endrex = re.compile(r'^\*[ \t]*\}')
 
 filelist = []
 
@@ -77,7 +77,7 @@
                         state = 'after_process'
                     else:
                         # Make sure all "A = B" syntax closes up around the equal sign.
-                        newline = re.sub('[ \t]*=[ \t]*', '=', line)
+                        newline = re.sub(r'[ \t]*=[ \t]*', '=', line)
                         tokens = newline.split()
                         if 'vary' in tokens:
                             if ('dist=gauss' in tokens) or ('gauss' in tokens):
diff --git a/sky130/custom/scripts/sp_to_spice.py b/sky130/custom/scripts/sp_to_spice.py
index b97e7d5..ee8d31c 100755
--- a/sky130/custom/scripts/sp_to_spice.py
+++ b/sky130/custom/scripts/sp_to_spice.py
@@ -46,8 +46,8 @@
     for line in slines:
 
         # remove 'u' suffix from 'l' and 'w' parameters
-        newline = re.sub('([ \t][lL]=[0-9\.]*)u', r'\1', line)
-        newline = re.sub('([ \t][wW]=[0-9\.]*)u', r'\1', newline)
+        newline = re.sub(r'([ \t][lL]=[0-9\.]*)u', r'\1', line)
+        newline = re.sub(r'([ \t][wW]=[0-9\.]*)u', r'\1', newline)
 
         # reverse bus indices - NOTE: Only works if all ports are on the subckt line
         if newline.startswith(".subckt ") or newline.startswith(".SUBCKT "):
diff --git a/sky130/sky130.json b/sky130/sky130.json
index 4800903..ed2e077 100644
--- a/sky130/sky130.json
+++ b/sky130/sky130.json
@@ -94,8 +94,8 @@
         "magic": "MAGIC_COMMIT"
     },
     "reference": {
-        "open_pdks": "c10a581884a4373c1a48b18ea3fc02c19d8d5c88",
-        "magic": "4445663cb1b2de1eb9818cfe89f60ed7659335f3",
+        "open_pdks": "ca4dc508d0b95eb84e4b6d79ae7011b849063a18",
+        "magic": "02669de267fb4b658306946d36323b6601df639d",
         "sky130_fd_pr": "1232782c1b9fab3aacda74d67ce7c92bf7da8105",
         "sky130_fd_io": "b9c10d039816c4026f9a10cf8a200b9b5caa1b63",
         "sky130_fd_sc_hs": "9a855e97aa75f8a14be7eadc365c28d50045d5fc",
@@ -108,12 +108,12 @@
         "sky130_osu_sc_t12": "ac90ef0c622a9377a16b5218d9da3ac4169eeaaf",
         "sky130_osu_sc_t15": "95d1c19abb47e1b2945847acb4e817b1b8417c43",
         "sky130_osu_sc_t18": "aa2b509f3c8f32ea94fdb55ac9768754667c1658",
-        "sky130_sram_macros": "ebfbf5775c8cd433ad38a4d825e46c2275231511",
+        "sky130_sram_macros": "250e0234c456f5da500f0ca90435f1275c5e255d",
         "sky130_fd_bd_sram": "be33adbcf188fdeab5c061699847d9d440f7a084",
         "sky130_fd_pr_reram": "d6d2a3c6960aac0a0b12fc21221c31777bbf284d",
         "sky130_ml_xx_hd": "6eb3b0718552b034f1bf1870285ff135e3fb2dcb",
-        "xschem_sky130": "0597d6cd26ad460d3f4d689f9e6a11f33dc262ff",
-        "klayout_sky130": "68b8aa87c129191f642da662d348e9ca6930581b",
-        "precheck_sky130": "0941bdc1b62b5c3f99c8683bd11199d330af2ef3"
+        "xschem_sky130": "7d19acb9fc9c54f6de86345e454dc59e57418a26",
+        "klayout_sky130": "9861f40ff389c86fbe082122ee868a065cd4cfd4",
+        "precheck_sky130": "7eb869a4b6a5807f49d5ae738c541cce39c41ba5"
     }
 }