/*
 * Copyright 2022 GlobalFoundries PDK Authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

  cell(gf180mcu_fd_sc_mcu7t5v0__latq_1) {
    area : 43.904000 ;

    latch(IQ1,IQN1) {
      enable : "E" ;
      data_in : "(!D)" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!D&!E" ;
      value : "0.0016167492" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "!D&E" ;
      value : "0.0019780002" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "D&!E" ;
      value : "0.00206019" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      when : "D&E" ;
      value : "0.002291454" ;
    }

    leakage_power() {
      related_pg_pin : "VDD" ;
      value : "0.002291454" ;
    }

    pg_pin(VDD) {
      voltage_name : VDD ;
      pg_type : primary_power ;
    }

    pg_pin(VSS) {
      voltage_name : VSS ;
      pg_type : primary_ground ;
    }

    pin(D) {
      capacitance : 0.002934 ;
      direction : input ;
      driver_waveform_rise : driver_waveform_default_rise ;
      driver_waveform_fall : driver_waveform_default_fall ;
      input_voltage : default ;
      max_transition : 8.9 ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        when : "!E" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("0.003353, 0.003354, 0.003348, 0.003354, 0.003352, 0.00336, 0.003356, \
                  0.003358, 0.003359, 0.003356");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("-0.003012, -0.003016, -0.00301, -0.003017, -0.003024, -0.003041, \
                  -0.003044, -0.003049, -0.003054, -0.003055");
        }
      }

      timing() {
        related_pin : "E" ;
        timing_type : hold_falling ;

        fall_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("-0.961, -0.947, -0.882, -0.783, -0.679, -0.567, -0.437, -0.286, -0.103, 0.104",\
                 "-0.977, -0.955, -0.893, -0.795, -0.691, -0.584, -0.447, -0.298, -0.115, 0.091",\
                 "-1.026, -1.006, -0.941, -0.846, -0.743, -0.629, -0.502, -0.346, -0.163, 0.044",\
                 "-1.106, -1.092, -1.027, -0.929, -0.827, -0.716, -0.582, -0.426, -0.237, -0.032",\
                 "-1.25, -1.238, -1.171, -1.077, -0.971, -0.855, -0.722, -0.561, -0.373, -0.156",\
                 "-1.473, -1.451, -1.391, -1.291, -1.18, -1.065, -0.924, -0.76, -0.575, -0.355",\
                 "-1.738, -1.72, -1.658, -1.564, -1.452, -1.331, -1.194, -1.032, -0.839, -0.623",\
                 "-2.079, -2.057, -1.996, -1.893, -1.788, -1.66, -1.526, -1.361, -1.169, -0.948",\
                 "-2.471, -2.448, -2.384, -2.283, -2.179, -2.057, -1.916, -1.756, -1.569, -1.353",\
                 "-2.919, -2.903, -2.838, -2.739, -2.629, -2.507, -2.373, -2.212, -2.029, -1.815");
        }

        rise_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("-0.148, -0.129, -0.058, 0.082, 0.247, 0.435, 0.651, 0.891, 1.164, 1.455",\
                 "-0.159, -0.136, -0.067, 0.075, 0.238, 0.424, 0.641, 0.88, 1.146, 1.445",\
                 "-0.186, -0.168, -0.096, 0.04, 0.214, 0.397, 0.611, 0.854, 1.128, 1.419",\
                 "-0.24, -0.223, -0.153, -0.008, 0.157, 0.347, 0.563, 0.809, 1.081, 1.38",\
                 "-0.301, -0.286, -0.214, -0.076, 0.097, 0.293, 0.512, 0.763, 1.045, 1.341",\
                 "-0.346, -0.327, -0.252, -0.114, 0.059, 0.256, 0.482, 0.737, 1.012, 1.323",\
                 "-0.355, -0.34, -0.265, -0.125, 0.048, 0.248, 0.475, 0.728, 1.012, 1.325",\
                 "-0.329, -0.312, -0.237, -0.099, 0.079, 0.281, 0.502, 0.763, 1.044, 1.362",\
                 "-0.258, -0.241, -0.17, -0.025, 0.148, 0.348, 0.577, 0.841, 1.127, 1.442",\
                 "-0.147, -0.129, -0.055, 0.084, 0.266, 0.468, 0.696, 0.964, 1.25, 1.572");
        }
      }

      timing() {
        related_pin : "E" ;
        timing_type : setup_falling ;

        fall_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("1.408, 1.387, 1.323, 1.229, 1.13, 1.048, 1.029, 1.065, 1.18, 1.354",\
                 "1.425, 1.404, 1.339, 1.239, 1.144, 1.064, 1.031, 1.076, 1.194, 1.361",\
                 "1.469, 1.453, 1.384, 1.287, 1.191, 1.109, 1.081, 1.117, 1.224, 1.387",\
                 "1.543, 1.527, 1.462, 1.37, 1.267, 1.183, 1.143, 1.171, 1.258, 1.397",\
                 "1.686, 1.667, 1.601, 1.506, 1.408, 1.325, 1.277, 1.28, 1.351, 1.455",\
                 "1.894, 1.87, 1.812, 1.713, 1.614, 1.527, 1.459, 1.438, 1.469, 1.538",\
                 "2.173, 2.153, 2.088, 1.991, 1.889, 1.79, 1.718, 1.672, 1.664, 1.7",\
                 "2.5, 2.483, 2.42, 2.327, 2.224, 2.121, 2.025, 1.958, 1.93, 1.93",\
                 "2.891, 2.872, 2.812, 2.716, 2.62, 2.512, 2.411, 2.329, 2.277, 2.256",\
                 "3.333, 3.315, 3.254, 3.167, 3.072, 2.961, 2.86, 2.765, 2.7, 2.651");
        }

        rise_constraint(cnst_ctin_rtin_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("0.39, 0.37, 0.288, 0.141, -0.033, -0.227, -0.442, -0.677, -0.933, -1.218",\
                 "0.401, 0.377, 0.302, 0.153, -0.024, -0.218, -0.429, -0.664, -0.922, -1.207",\
                 "0.427, 0.404, 0.33, 0.18, 0.001, -0.193, -0.405, -0.642, -0.896, -1.186",\
                 "0.473, 0.46, 0.379, 0.236, 0.06, -0.137, -0.357, -0.596, -0.856, -1.148",\
                 "0.531, 0.516, 0.438, 0.288, 0.118, -0.077, -0.3, -0.549, -0.82, -1.113",\
                 "0.554, 0.534, 0.456, 0.31, 0.14, -0.062, -0.287, -0.537, -0.812, -1.117",\
                 "0.538, 0.526, 0.443, 0.3, 0.129, -0.075, -0.301, -0.552, -0.835, -1.141",\
                 "0.482, 0.466, 0.392, 0.25, 0.074, -0.125, -0.356, -0.61, -0.891, -1.197",\
                 "0.391, 0.366, 0.298, 0.151, -0.031, -0.228, -0.461, -0.715, -1.006, -1.321",\
                 "0.244, 0.226, 0.155, 0.009, -0.174, -0.375, -0.608, -0.874, -1.166, -1.482");
        }
      }
    }

    pin(E) {
      capacitance : 0.003581 ;
      clock : true ;
      direction : input ;
      driver_waveform_rise : driver_waveform_default_rise ;
      driver_waveform_fall : driver_waveform_default_fall ;
      input_voltage : default ;
      max_transition : 8.9 ;
      min_pulse_width_high : 1.447 ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        when : "!D" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("0.03477, 0.03457, 0.03446, 0.03533, 0.03752, 0.04113, 0.04634, \
                  0.05326, 0.06201, 0.07267");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("0.01997, 0.01985, 0.01976, 0.02039, 0.02212, 0.02522, 0.02979, \
                  0.03589, 0.0436, 0.05302");
        }
      }

      internal_power() {
        when : "D" ;

        fall_power(pwr_tin_10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("0.03547, 0.03525, 0.03514, 0.03605, 0.03827, 0.04193, 0.04716, \
                  0.05409, 0.06287, 0.07352");
        }

        rise_power(pwr_tin_10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          values("0.01959, 0.01947, 0.01938, 0.02001, 0.02171, 0.02478, 0.02932, \
                  0.03542, 0.04311, 0.05248");
        }
      }

      timing() {
        related_pin : "E" ;
        sdf_cond : "ENABLE_NOT_D === 1'b1" ;
        timing_type : min_pulse_width ;
        when : "!D" ;

        rise_constraint(scalar) {
          values("1.447");
        }
      }

      timing() {
        related_pin : "E" ;
        sdf_cond : "ENABLE_D === 1'b1" ;
        timing_type : min_pulse_width ;
        when : "D" ;

        rise_constraint(scalar) {
          values("0.904");
        }
      }
    }

    pin(Q) {
      direction : output ;
      function : "IQN1" ;
      max_capacitance : 0.2324 ;
      max_transition : 8.9 ;
      min_capacitance : 0.001 ;
      output_voltage : default ;
      related_ground_pin : VSS ;
      related_power_pin : VDD ;

      internal_power() {
        related_pin : "D" ;
        when : "E" ;

        fall_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.05882, 0.05811, 0.05657, 0.05532, 0.05449, 0.05394, 0.05356, 0.0533, 0.05313, 0.053",\
                 "0.05868, 0.05798, 0.05645, 0.05519, 0.05436, 0.05381, 0.05344, 0.05319, 0.053, 0.05287",\
                 "0.05852, 0.05782, 0.05627, 0.05502, 0.05419, 0.05364, 0.05328, 0.05302, 0.05283, 0.0527",\
                 "0.05852, 0.05783, 0.05627, 0.05499, 0.05418, 0.05363, 0.05326, 0.05302, 0.05282, 0.0527",\
                 "0.0595, 0.05879, 0.05719, 0.05587, 0.055, 0.05444, 0.05407, 0.05381, 0.05362, 0.05349",\
                 "0.06254, 0.06177, 0.06002, 0.05849, 0.05751, 0.05684, 0.0564, 0.0561, 0.05587, 0.05571",\
                 "0.06724, 0.06638, 0.06447, 0.06274, 0.06154, 0.06076, 0.06021, 0.05984, 0.05958, 0.05939",\
                 "0.0736, 0.0727, 0.07056, 0.06855, 0.06715, 0.06618, 0.06552, 0.06506, 0.06474, 0.0645",\
                 "0.08175, 0.0808, 0.07843, 0.0761, 0.07443, 0.07326, 0.07245, 0.0719, 0.07148, 0.07119",\
                 "0.09175, 0.09073, 0.0881, 0.08546, 0.08347, 0.08206, 0.08106, 0.08035, 0.07984, 0.07948");
        }

        rise_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.03994, 0.03978, 0.03944, 0.03935, 0.03943, 0.03957, 0.03975, 0.03992, 0.04015, 0.04174",\
                 "0.0398, 0.0396, 0.03929, 0.0392, 0.03928, 0.03943, 0.03959, 0.03974, 0.04001, 0.04163",\
                 "0.03965, 0.03943, 0.03911, 0.03902, 0.03911, 0.03925, 0.03947, 0.0396, 0.03985, 0.04165",\
                 "0.03993, 0.03971, 0.03935, 0.03919, 0.03924, 0.03937, 0.03955, 0.03966, 0.04006, 0.04173",\
                 "0.04126, 0.04101, 0.04057, 0.04026, 0.04021, 0.0403, 0.04046, 0.04059, 0.04096, 0.04299",\
                 "0.04366, 0.04335, 0.04268, 0.0423, 0.04217, 0.04212, 0.04218, 0.04233, 0.04264, 0.04523",\
                 "0.04736, 0.04694, 0.04612, 0.04551, 0.04519, 0.04523, 0.04515, 0.0452, 0.04549, 0.04859",\
                 "0.05247, 0.05198, 0.051, 0.05008, 0.04953, 0.04935, 0.04947, 0.04946, 0.04989, 0.05379",\
                 "0.05909, 0.0585, 0.0573, 0.05621, 0.05538, 0.05487, 0.05478, 0.05509, 0.05558, 0.06096",\
                 "0.06715, 0.06646, 0.06503, 0.06369, 0.06261, 0.0619, 0.06157, 0.06154, 0.06274, 0.07072");
        }
      }

      internal_power() {
        related_pin : "E" ;

        fall_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.05277, 0.0521, 0.0506, 0.04938, 0.04859, 0.04807, 0.04771, 0.04747, 0.04729, 0.04716",\
                 "0.05276, 0.0521, 0.0506, 0.04938, 0.04859, 0.04806, 0.04771, 0.04747, 0.04729, 0.04716",\
                 "0.0527, 0.05203, 0.05052, 0.04931, 0.04852, 0.04799, 0.04764, 0.0474, 0.04722, 0.04709",\
                 "0.05263, 0.05195, 0.05045, 0.04924, 0.04845, 0.04793, 0.04757, 0.04733, 0.04715, 0.04702",\
                 "0.05261, 0.05194, 0.05045, 0.04923, 0.04844, 0.04791, 0.04755, 0.04731, 0.04713, 0.04702",\
                 "0.05266, 0.05196, 0.05047, 0.04927, 0.04847, 0.04794, 0.0476, 0.04735, 0.04718, 0.04705",\
                 "0.05279, 0.05213, 0.0506, 0.04939, 0.04859, 0.04806, 0.0477, 0.04745, 0.04728, 0.04715",\
                 "0.05307, 0.05239, 0.05086, 0.04962, 0.04882, 0.0483, 0.04794, 0.04769, 0.04751, 0.04738",\
                 "0.05352, 0.05282, 0.05128, 0.05001, 0.04919, 0.04864, 0.04828, 0.04804, 0.04786, 0.04772",\
                 "0.05406, 0.05335, 0.05176, 0.05046, 0.0496, 0.04904, 0.04867, 0.04841, 0.04822, 0.04809");
        }

        rise_power(pwr_tin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.04213, 0.04194, 0.0416, 0.04146, 0.04153, 0.04163, 0.04179, 0.04205, 0.04235, 0.04407",\
                 "0.04214, 0.04193, 0.04159, 0.04146, 0.04149, 0.04164, 0.04176, 0.04195, 0.04233, 0.04425",\
                 "0.04212, 0.04192, 0.04159, 0.04146, 0.0415, 0.04162, 0.04185, 0.04196, 0.04232, 0.04424",\
                 "0.04218, 0.042, 0.04164, 0.0415, 0.04154, 0.04167, 0.04189, 0.04202, 0.04233, 0.0446",\
                 "0.04222, 0.04205, 0.04169, 0.04155, 0.04158, 0.04173, 0.04189, 0.04203, 0.04242, 0.04504",\
                 "0.04228, 0.0421, 0.04176, 0.04162, 0.04167, 0.04177, 0.04195, 0.04217, 0.04252, 0.04559",\
                 "0.04234, 0.04215, 0.04179, 0.04163, 0.04178, 0.04191, 0.04205, 0.04219, 0.04268, 0.04635",\
                 "0.04241, 0.04222, 0.04183, 0.04169, 0.04169, 0.04194, 0.0423, 0.04236, 0.0429, 0.04752",\
                 "0.04246, 0.04229, 0.0419, 0.04173, 0.04175, 0.0419, 0.04214, 0.04253, 0.04349, 0.04978",\
                 "0.04254, 0.04236, 0.04202, 0.04182, 0.04186, 0.04189, 0.04211, 0.04255, 0.04431, 0.05348");
        }
      }

      timing() {
        related_pin : "D" ;
        timing_sense : positive_unate ;
        timing_type : combinational ;

        cell_fall(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("1.112, 1.164, 1.312, 1.529, 1.792, 2.094, 2.445, 2.857, 3.343, 3.913",\
                 "1.127, 1.179, 1.327, 1.544, 1.807, 2.109, 2.46, 2.872, 3.358, 3.928",\
                 "1.177, 1.229, 1.377, 1.594, 1.857, 2.159, 2.51, 2.922, 3.408, 3.978",\
                 "1.26, 1.312, 1.46, 1.677, 1.94, 2.242, 2.593, 3.006, 3.491, 4.061",\
                 "1.404, 1.456, 1.604, 1.82, 2.083, 2.385, 2.736, 3.149, 3.634, 4.204",\
                 "1.614, 1.668, 1.818, 2.038, 2.302, 2.605, 2.956, 3.369, 3.854, 4.425",\
                 "1.879, 1.934, 2.09, 2.317, 2.589, 2.897, 3.252, 3.666, 4.152, 4.722",\
                 "2.203, 2.26, 2.422, 2.656, 2.936, 3.252, 3.612, 4.03, 4.518, 5.089",\
                 "2.583, 2.644, 2.812, 3.054, 3.343, 3.667, 4.035, 4.457, 4.948, 5.52",\
                 "3.019, 3.081, 3.257, 3.509, 3.809, 4.144, 4.52, 4.949, 5.444, 6.018");
        }

        cell_rise(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.6695, 0.7191, 0.8693, 1.121, 1.483, 1.979, 2.628, 3.445, 4.442, 5.628",\
                 "0.6808, 0.7301, 0.8806, 1.132, 1.495, 1.99, 2.639, 3.456, 4.452, 5.64",\
                 "0.7085, 0.7576, 0.908, 1.16, 1.522, 2.018, 2.667, 3.483, 4.48, 5.67",\
                 "0.7612, 0.8103, 0.9604, 1.212, 1.574, 2.069, 2.718, 3.535, 4.53, 5.72",\
                 "0.8238, 0.8744, 1.027, 1.279, 1.641, 2.136, 2.785, 3.6, 4.597, 5.785",\
                 "0.8685, 0.9205, 1.077, 1.334, 1.698, 2.192, 2.841, 3.658, 4.654, 5.843",\
                 "0.887, 0.9405, 1.102, 1.364, 1.729, 2.225, 2.873, 3.689, 4.684, 5.872",\
                 "0.8715, 0.9273, 1.095, 1.362, 1.732, 2.228, 2.876, 3.692, 4.687, 5.873",\
                 "0.8166, 0.8749, 1.049, 1.326, 1.701, 2.2, 2.848, 3.663, 4.659, 5.845",\
                 "0.7182, 0.7799, 0.9609, 1.247, 1.632, 2.137, 2.788, 3.603, 4.599, 5.785");
        }

        fall_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.3454, 0.3942, 0.5354, 0.7482, 1.015, 1.364, 1.837, 2.454, 3.237, 4.195",\
                 "0.3456, 0.3942, 0.5348, 0.7478, 1.015, 1.365, 1.837, 2.453, 3.237, 4.195",\
                 "0.3454, 0.394, 0.5346, 0.748, 1.014, 1.365, 1.837, 2.455, 3.237, 4.195",\
                 "0.3454, 0.395, 0.5346, 0.7478, 1.015, 1.364, 1.834, 2.455, 3.237, 4.195",\
                 "0.3464, 0.3954, 0.5364, 0.7492, 1.016, 1.366, 1.838, 2.454, 3.232, 4.187",\
                 "0.3658, 0.4148, 0.5534, 0.7628, 1.025, 1.371, 1.838, 2.455, 3.237, 4.195",\
                 "0.3888, 0.4386, 0.583, 0.7952, 1.055, 1.393, 1.853, 2.467, 3.239, 4.192",\
                 "0.4146, 0.4666, 0.6138, 0.829, 1.091, 1.428, 1.883, 2.483, 3.257, 4.203",\
                 "0.4452, 0.5, 0.6524, 0.8704, 1.133, 1.468, 1.92, 2.515, 3.275, 4.218",\
                 "0.4814, 0.5392, 0.6972, 0.9198, 1.185, 1.519, 1.96, 2.548, 3.299, 4.23");
        }

        rise_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.2607, 0.3223, 0.526, 0.9037, 1.499, 2.366, 3.533, 4.991, 6.776, 8.898",\
                 "0.2607, 0.323, 0.5262, 0.9039, 1.499, 2.366, 3.534, 4.988, 6.774, 8.903",\
                 "0.2607, 0.3229, 0.5259, 0.9034, 1.5, 2.365, 3.532, 4.984, 6.773, 8.927",\
                 "0.261, 0.3236, 0.5272, 0.904, 1.5, 2.365, 3.532, 4.988, 6.77, 8.907",\
                 "0.2728, 0.3348, 0.5376, 0.9098, 1.503, 2.367, 3.523, 4.985, 6.771, 8.903",\
                 "0.287, 0.3506, 0.5552, 0.9248, 1.51, 2.373, 3.524, 4.989, 6.776, 8.905",\
                 "0.3044, 0.3696, 0.5758, 0.943, 1.524, 2.375, 3.526, 4.984, 6.769, 8.901",\
                 "0.3266, 0.3916, 0.6014, 0.968, 1.538, 2.385, 3.531, 4.992, 6.784, 8.901",\
                 "0.3522, 0.4192, 0.6316, 1, 1.563, 2.398, 3.539, 4.996, 6.777, 8.918",\
                 "0.381, 0.4484, 0.6664, 1.037, 1.599, 2.427, 3.557, 5.002, 6.788, 8.902");
        }
      }

      timing() {
        related_pin : "E" ;
        timing_type : rising_edge ;

        cell_fall(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("1.158, 1.21, 1.359, 1.575, 1.838, 2.14, 2.491, 2.903, 3.389, 3.959",\
                 "1.174, 1.226, 1.374, 1.591, 1.853, 2.155, 2.507, 2.919, 3.405, 3.975",\
                 "1.227, 1.279, 1.428, 1.644, 1.907, 2.209, 2.56, 2.972, 3.458, 4.028",\
                 "1.302, 1.354, 1.502, 1.719, 1.981, 2.284, 2.635, 3.047, 3.533, 4.103",\
                 "1.362, 1.415, 1.563, 1.779, 2.041, 2.343, 2.695, 3.107, 3.593, 4.163",\
                 "1.402, 1.454, 1.603, 1.819, 2.082, 2.384, 2.735, 3.148, 3.633, 4.203",\
                 "1.423, 1.475, 1.623, 1.84, 2.103, 2.405, 2.756, 3.168, 3.654, 4.224",\
                 "1.422, 1.475, 1.623, 1.839, 2.102, 2.404, 2.756, 3.168, 3.654, 4.224",\
                 "1.396, 1.448, 1.597, 1.814, 2.077, 2.38, 2.731, 3.144, 3.63, 4.2",\
                 "1.341, 1.393, 1.542, 1.76, 2.024, 2.327, 2.679, 3.092, 3.578, 4.148");
        }

        cell_rise(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("1.15, 1.199, 1.35, 1.601, 1.963, 2.458, 3.107, 3.925, 4.923, 6.108",\
                 "1.166, 1.215, 1.365, 1.617, 1.979, 2.474, 3.123, 3.94, 4.938, 6.123",\
                 "1.221, 1.271, 1.421, 1.673, 2.034, 2.53, 3.179, 3.996, 4.994, 6.182",\
                 "1.303, 1.353, 1.503, 1.754, 2.116, 2.612, 3.261, 4.077, 5.074, 6.264",\
                 "1.368, 1.417, 1.568, 1.819, 2.181, 2.676, 3.326, 4.141, 5.139, 6.328",\
                 "1.412, 1.461, 1.611, 1.863, 2.225, 2.72, 3.369, 4.185, 5.184, 6.373",\
                 "1.434, 1.483, 1.633, 1.885, 2.247, 2.742, 3.39, 4.208, 5.205, 6.39",\
                 "1.43, 1.48, 1.629, 1.881, 2.244, 2.738, 3.387, 4.203, 5.199, 6.387",\
                 "1.397, 1.446, 1.596, 1.848, 2.21, 2.706, 3.355, 4.171, 5.166, 6.353",\
                 "1.333, 1.383, 1.533, 1.785, 2.146, 2.641, 3.291, 4.106, 5.102, 6.29");
        }

        fall_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.3432, 0.3916, 0.532, 0.7456, 1.012, 1.363, 1.834, 2.45, 3.236, 4.193",\
                 "0.3432, 0.3918, 0.5318, 0.7456, 1.012, 1.363, 1.834, 2.45, 3.236, 4.192",\
                 "0.3428, 0.3918, 0.5322, 0.7456, 1.013, 1.362, 1.835, 2.451, 3.231, 4.195",\
                 "0.3426, 0.3916, 0.5318, 0.7454, 1.012, 1.362, 1.834, 2.452, 3.233, 4.187",\
                 "0.3428, 0.3916, 0.5318, 0.7454, 1.012, 1.363, 1.835, 2.453, 3.237, 4.191",\
                 "0.3434, 0.3922, 0.5324, 0.746, 1.014, 1.363, 1.833, 2.453, 3.236, 4.192",\
                 "0.3432, 0.3922, 0.5324, 0.746, 1.013, 1.362, 1.833, 2.452, 3.231, 4.188",\
                 "0.3444, 0.3932, 0.5334, 0.747, 1.014, 1.364, 1.833, 2.45, 3.23, 4.191",\
                 "0.3464, 0.3958, 0.536, 0.7492, 1.016, 1.365, 1.835, 2.452, 3.232, 4.186",\
                 "0.3504, 0.3992, 0.5394, 0.7526, 1.019, 1.367, 1.837, 2.454, 3.233, 4.191");
        }

        rise_transition(tmg_ntin_oload_10x10) {
          index_1("0.02, 0.08129, 0.2964, 0.7073, 1.347, 2.245, 3.427, 4.916, 6.734, 8.9");
          index_2("0.001, 0.002597, 0.008205, 0.01891, 0.0356, 0.059, 0.08981, 0.1286, 0.176, 0.2324");
          values("0.2612, 0.3236, 0.5268, 0.9032, 1.501, 2.367, 3.523, 4.995, 6.778, 8.902",\
                 "0.2612, 0.3236, 0.527, 0.9042, 1.502, 2.368, 3.525, 4.988, 6.778, 8.902",\
                 "0.2616, 0.3238, 0.5262, 0.9036, 1.502, 2.368, 3.531, 5, 6.792, 8.913",\
                 "0.2614, 0.3234, 0.5266, 0.9042, 1.501, 2.365, 3.532, 4.984, 6.773, 8.926",\
                 "0.2618, 0.3234, 0.5268, 0.904, 1.502, 2.368, 3.533, 4.985, 6.773, 8.926",\
                 "0.2616, 0.3234, 0.5262, 0.9042, 1.502, 2.37, 3.522, 4.984, 6.777, 8.922",\
                 "0.261, 0.3238, 0.527, 0.9036, 1.499, 2.366, 3.523, 4.986, 6.776, 8.897",\
                 "0.2614, 0.3236, 0.5268, 0.9046, 1.502, 2.366, 3.522, 4.993, 6.77, 8.92",\
                 "0.2618, 0.3234, 0.527, 0.9038, 1.501, 2.368, 3.529, 4.984, 6.772, 8.915",\
                 "0.262, 0.3238, 0.5266, 0.904, 1.5, 2.369, 3.525, 4.989, 6.768, 8.898");
        }
      }
    }
  }

