diff --git a/VERSION b/VERSION
index a9d3998..9203b1d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.513
+1.0.514
diff --git a/common/foundry_install.py b/common/foundry_install.py
index 34e3a46..ddbf5f7 100755
--- a/common/foundry_install.py
+++ b/common/foundry_install.py
@@ -394,7 +394,7 @@
 #----------------------------------------------------------------------------
 
 def get_gds_properties(magfile):
-    proprex = re.compile('^[ \t]*string[ \t]+(GDS_[^ \t]+)[ \t]+([^ \t]+)$')
+    proprex = re.compile(r'^[ \t]*string[ \t]+(GDS_[^ \t]+)[ \t]+([^ \t]+)$')
     proplines = []
     if os.path.isfile(magfile):
         with open(magfile, 'r') as ifile:
@@ -415,10 +415,10 @@
 def get_subckt_ports(cdlfile, subname):
     portdict = {}
     pidx = 1
-    portrex = re.compile('^\.subckt[ \t]+([^ \t]+)[ \t]+(.*)$', flags=re.IGNORECASE)
+    portrex = re.compile(r'^\.subckt[ \t]+([^ \t]+)[ \t]+(.*)$', flags=re.IGNORECASE)
     with open(cdlfile, 'r') as ifile:
         cdltext = ifile.read()
-        cdllines = cdltext.replace('\n+', ' ').splitlines()
+        cdllines = cdltext.replace(r'\n+', ' ').splitlines()
         for line in cdllines:
             lmatch = portrex.match(line)
             if lmatch:
@@ -449,7 +449,7 @@
     # 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)
 
     if vlines != vtext:
         # File contents have been modified, so if this file was a symbolic
@@ -1026,7 +1026,7 @@
 
                 # Regular expression catches filename "a.b.c", handling any
                 # leading dots (such as "../") and returns string "a.b"
-                basenamerex = re.compile('(\.?\.?[^.]+\..+)\.+')
+                basenamerex = re.compile(r'(\.?\.?[^.]+\..+)\.+')
                 baseliblist = []
                 splitfiles = {}
                 for libfile in liblist:
@@ -1549,9 +1549,9 @@
                 print('Searching for supported devices in PDK script ' + pdkscript + '.')
 
                 if os.path.isfile(pdkscript):
-                    librex = re.compile('^[ \t]*set[ \t]+PDKNAMESPACE[ \t]+([^ \t]+)$')
-                    devrex = re.compile('^[ \t]*proc[ \t]+([^ :\t]+)::([^ \t_]+)_defaults')
-                    fixrex = re.compile('^[ \t]*return[ \t]+\[([^ :\t]+)::fixed_draw[ \t]+([^ \t]+)[ \t]+')
+                    librex = re.compile(r'^[ \t]*set[ \t]+PDKNAMESPACE[ \t]+([^ \t]+)$')
+                    devrex = re.compile(r'^[ \t]*proc[ \t]+([^ :\t]+)::([^ \t_]+)_defaults')
+                    fixrex = re.compile(r'^[ \t]*return[ \t]+\[([^ :\t]+)::fixed_draw[ \t]+([^ \t]+)[ \t]+')
                     devlist = []
                     fixedlist = []
                     with open(pdkscript, 'r') as ifile:
@@ -1702,7 +1702,7 @@
                                     print('catch {readspice ' + netdir + '/' + netfile
 						+ '}', file=ofile)
 
-                    # print('cellname delete \(UNNAMED\)', file=ofile)
+                    # print(r'cellname delete \(UNNAMED\)', file=ofile)
                     print('puts stdout "Writing all magic database files"', file=ofile)
                     print('writeall force', file=ofile)
 
@@ -1741,7 +1741,7 @@
                                 ltext = ifile.read()
                                 llines = ltext.splitlines()
                                 for lline in llines:
-                                    ltok = re.split(' |\t|\(', lline)
+                                    ltok = re.split(r' |\t|\(', lline)
                                     if ltok[0] == 'MACRO':
                                         lefmacros.append(ltok[1])
                     elif have_lef:
@@ -1770,7 +1770,7 @@
                                 vtext = ifile.read()
                                 vlines = vtext.splitlines()
                                 for vline in vlines:
-                                    vtok = re.split(' |\t|\(', vline)
+                                    vtok = re.split(r' |\t|\(', vline)
                                     try:
                                         if vtok[0] == 'module':
                                             if vtok[1] not in lefmacros:
@@ -1974,7 +1974,7 @@
                         ltext = ifile.read()
                         llines = ltext.splitlines()
                         for lline in llines:
-                            ltok = re.split(' |\t|\(', lline)
+                            ltok = re.split(r' |\t|\(', lline)
                             if ltok[0] == 'MACRO':
                                 lefmacros.append(ltok[1])
 
@@ -2063,7 +2063,7 @@
                     # an error message.
                     if len(lefmacros) > 0:
                         print('load ' + lefmacros[0], file=ofile)
-                        # print('cellname delete \(UNNAMED\)', file=ofile)
+                        # print(r'cellname delete \(UNNAMED\)', file=ofile)
                     else:
                         err_no_macros = True
                     print('writeall force', file=ofile)
@@ -2143,9 +2143,9 @@
 
                     proprex = re.compile('<< properties >>')
                     endrex = re.compile('<< end >>')
-                    rlabrex = re.compile('rlabel[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+([^ \t]+)')
-                    flabrex = re.compile('flabel[ \t]+.*[ \t]+([^ \t]+)[ \t]*')
-                    portrex = re.compile('port[ \t]+([^ \t]+)[ \t]+(.*)')
+                    rlabrex = re.compile(r'rlabel[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+[^ \t]+[ \t]+([^ \t]+)')
+                    flabrex = re.compile(r'flabel[ \t]+.*[ \t]+([^ \t]+)[ \t]*')
+                    portrex = re.compile(r'port[ \t]+([^ \t]+)[ \t]+(.*)')
                     gcellrex = re.compile('string gencell')
                     portnum = -1
 
@@ -2414,7 +2414,7 @@
                 else:
                     gdslibroot = os.path.split(allgdslibname)[1]
                     print('load ' + os.path.splitext(gdslibroot)[0], file=ofile)
-                print('catch {cellname delete \(UNNAMED\)}', file=ofile)
+                print(r'catch {cellname delete \(UNNAMED\)}', file=ofile)
 
                 print('ext2spice lvs', file=ofile)
 
diff --git a/common/preproc.py b/common/preproc.py
index 15f0ecf..e82edbc 100755
--- a/common/preproc.py
+++ b/common/preproc.py
@@ -60,13 +60,13 @@
 
 def solve_statement(condition):
 
-    defrex = re.compile('defined[ \t]*\(([^\)]+)\)')
-    orrex = re.compile('(.+)\|\|(.+)')
-    andrex = re.compile('(.+)&&(.+)')
-    notrex = re.compile('!([^&\|]+)')
-    parenrex = re.compile('\(([^\)]+)\)')
-    leadspacerex = re.compile('^[ \t]+(.*)')
-    endspacerex = re.compile('(.*)[ \t]+$')
+    defrex = re.compile(r'defined[ \t]*\(([^\)]+)\)')
+    orrex = re.compile(r'(.+)\|\|(.+)')
+    andrex = re.compile(r'(.+)&&(.+)')
+    notrex = re.compile(r'!([^&\|]+)')
+    parenrex = re.compile(r'\(([^\)]+)\)')
+    leadspacerex = re.compile(r'^[ \t]+(.*)')
+    endspacerex = re.compile(r'(.*)[ \t]+$')
 
     matchfound = True
     while matchfound:
@@ -166,24 +166,24 @@
 
 def runpp(keys, keyrex, defines, ccomm, utf, incdirs, inputfile, ofile):
 
-    includerex = re.compile('^[ \t]*#include[ \t]+"*([^ \t\n\r"]+)')
-    definerex = re.compile('^[ \t]*#define[ \t]+([^ \t]+)[ \t]+(.+)')
-    paramrex = re.compile('^([^\(]+)\(([^\)]+)\)')
-    defrex = re.compile('^[ \t]*#define[ \t]+([^ \t\n\r]+)')
-    undefrex = re.compile('^[ \t]*#undef[ \t]+([^ \t\n\r]+)')
-    ifdefrex = re.compile('^[ \t]*#ifdef[ \t]+(.+)')
-    ifndefrex = re.compile('^[ \t]*#ifndef[ \t]+(.+)')
-    ifrex = re.compile('^[ \t]*#if[ \t]+(.+)')
-    elseifrex = re.compile('^[ \t]*#elseif[ \t]+(.+)')
-    elserex = re.compile('^[ \t]*#else')
-    endifrex = re.compile('^[ \t]*#endif')
-    commentrex = re.compile('^###[^#]*$')
-    ccstartrex = re.compile('/\*')		# C-style comment start
-    ccendrex = re.compile('\*/')		# C-style comment end
-    contrex = re.compile('.*\\\\$')		# Backslash continuation line
+    includerex = re.compile(r'^[ \t]*#include[ \t]+"*([^ \t\n\r"]+)')
+    definerex = re.compile(r'^[ \t]*#define[ \t]+([^ \t]+)[ \t]+(.+)')
+    paramrex = re.compile(r'^([^\(]+)\(([^\)]+)\)')
+    defrex = re.compile(r'^[ \t]*#define[ \t]+([^ \t\n\r]+)')
+    undefrex = re.compile(r'^[ \t]*#undef[ \t]+([^ \t\n\r]+)')
+    ifdefrex = re.compile(r'^[ \t]*#ifdef[ \t]+(.+)')
+    ifndefrex = re.compile(r'^[ \t]*#ifndef[ \t]+(.+)')
+    ifrex = re.compile(r'^[ \t]*#if[ \t]+(.+)')
+    elseifrex = re.compile(r'^[ \t]*#elseif[ \t]+(.+)')
+    elserex = re.compile(r'^[ \t]*#else')
+    endifrex = re.compile(r'^[ \t]*#endif')
+    commentrex = re.compile(r'^###[^#]*$')
+    ccstartrex = re.compile(r'/\*')		# C-style comment start
+    ccendrex = re.compile(r'\*/')		# C-style comment end
+    contrex = re.compile(r'.*\\\\$')		# Backslash continuation line
 
-    badifrex = re.compile('^[ \t]*#if[ \t]*.*')
-    badelserex = re.compile('^[ \t]*#else[ \t]*.*')
+    badifrex = re.compile(r'^[ \t]*#if[ \t]*.*')
+    badelserex = re.compile(r'^[ \t]*#else[ \t]*.*')
 
     # This code is not designed to operate on huge files.  Neither is it designed to be
     # efficient.
@@ -418,16 +418,16 @@
                 # parentheses;  e.g., "def(a, b, (c1,c2))".  This is NOT
                 # handled.
 
-                pcondition = condition + '\('
+                pcondition = condition + r'\('
                 for param in parameters[0:-1]:
-                    pcondition += '(.*),'
-                pcondition += '(.*)\)'
+                    pcondition += r'(.*),'
+                pcondition += r'(.*)\)'
 
                 # Generate the substitution string with group substitutions
                 pvalue = pmatch.group(2)
                 idx = 1
                 for param in parameters:
-                    pvalue = pvalue.replace(param, '\g<' + str(idx) + '>')
+                    pvalue = pvalue.replace(param, r'\g<' + str(idx) + '>')
                     idx = idx + 1
 
                 defines[condition] = pvalue
diff --git a/gf180mcu/Makefile.in b/gf180mcu/Makefile.in
index e6655ad..d2a303e 100644
--- a/gf180mcu/Makefile.in
+++ b/gf180mcu/Makefile.in
@@ -1119,8 +1119,8 @@
 	# NOTE: Work in progress (to be completed)
 	${STAGE} -source ${GF180MCU_OSU_SC_PATH}/gf180mcu_osu_sc_gp9t3v3 \
 		-target ${STAGING_PATH}/${GF180MCU$*} \
-		-techlef ../tlef/gf180mcu_5LM_1TM_9K_9t.tlef \
-			rename=gf180mcu_fd_sc_mcu7t5v0__nom.tlef \
+		-techlef tlef/gf180mcu_osu_sc_gp9t3v3.tlef \
+			rename=gf180mcu_osu_sc_gp9t3v3__nom.tlef \
 		-lib lib/gf180mcu_osu_sc_gp9t3v3_TT_3P3_25C.ccs.lib \
 			rename=gf180mcu_osu_sc_gp9t3v3__tt_025C_3v30 \
 		-verilog cells/*/*.v compile-only \
@@ -1133,8 +1133,8 @@
 
 	${STAGE} -source ${GF180MCU_OSU_SC_PATH}/gf180mcu_osu_sc_gp12t3v3 \
 		-target ${STAGING_PATH}/${GF180MCU$*} \
-		-techlef ../tlef/gf180mcu_5LM_1TM_9K_12t.tlef \
-			rename=gf180mcu_fd_sc_mcu7t5v0__nom.tlef \
+		-techlef tlef/gf180mcu_osu_sc_gp12t3v3.tlef \
+			rename=gf180mcu_osu_sc_gp12t3v3__nom.tlef \
 		-lib lib/gf180mcu_osu_sc_gp12t3v3_TT_25C.ccs.lib \
 			rename=gf180mcu_osu_sc_gp12t3v3__tt_025C_3v30 \
 		-verilog cells/*/*.v compile-only \
