From 12ff4816896ff87adc9ab90d774f4caad90aa574 Mon Sep 17 00:00:00 2001 From: Wilson Snyder Date: Wed, 17 Dec 2025 17:37:35 -0500 Subject: [PATCH] REVERT 612237b7: Optimize trace code for faster compiles on repeated types (#6707) (#6832 partial). --- Changes | 1 - src/V3AstAttr.h | 10 - src/V3AstNodeDType.h | 32 - src/V3AstNodeExpr.h | 1 - src/V3AstNodeOther.h | 7 +- src/V3AstNodeStmt.h | 34 +- src/V3AstNodes.cpp | 33 +- src/V3Dead.cpp | 2 +- src/V3DfgOptimizer.cpp | 3 +- src/V3EmitCImp.cpp | 57 +- src/V3Gate.cpp | 3 +- src/V3Trace.cpp | 215 +- src/V3TraceDecl.cpp | 210 +- test_regress/t/t_flag_csplit_groups.py | 2 +- test_regress/t/t_mem_trace_split.py | 2 +- test_regress/t/t_trace_type_dupes.out | 1622 ------- test_regress/t/t_trace_type_dupes.py | 20 - test_regress/t/t_trace_type_dupes.v | 185 - test_regress/t/t_trace_type_dupes_structs.out | 3811 ----------------- test_regress/t/t_trace_type_dupes_structs.py | 24 - 20 files changed, 105 insertions(+), 6169 deletions(-) delete mode 100644 test_regress/t/t_trace_type_dupes.out delete mode 100755 test_regress/t/t_trace_type_dupes.py delete mode 100644 test_regress/t/t_trace_type_dupes.v delete mode 100644 test_regress/t/t_trace_type_dupes_structs.out delete mode 100755 test_regress/t/t_trace_type_dupes_structs.py diff --git a/Changes b/Changes index 9368760d1..d117285b3 100644 --- a/Changes +++ b/Changes @@ -49,7 +49,6 @@ Verilator 5.043 devel * Optimize repeated function call during symbol table initialization (#6665). [Geza Lore, Fractile Ltd.] * Optimize functions reading external parameters as pure (#6684). [Geza Lore, Fractile Ltd.] * Optimize `$past` delayed variable reuse (#6689). [Geza Lore, Fractile Ltd.] -* Optimize trace code for faster compiles on repeated types (#6707). [Todd Strader] * Optimize combinational loops through sign extension (#6724). [Geza Lore] * Optimize trace initialization code size (#6749). [Geza Lore] * Optimize combinational cycles in DFG (#6744) (#6746) (#6744). [Geza Lore] diff --git a/src/V3AstAttr.h b/src/V3AstAttr.h index a7326bae4..fecf234f0 100644 --- a/src/V3AstAttr.h +++ b/src/V3AstAttr.h @@ -1035,16 +1035,6 @@ public: bool isWritable() const VL_MT_SAFE { return m_e == OUTPUT || m_e == INOUT || m_e == REF; } bool isRef() const VL_MT_SAFE { return m_e == REF; } bool isConstRef() const VL_MT_SAFE { return m_e == CONSTREF; } - string traceSigDirection() const { - if (isInout()) { - return "VerilatedTraceSigDirection::INOUT"; - } else if (isWritable()) { - return "VerilatedTraceSigDirection::OUTPUT"; - } else if (isNonOutput()) { - return "VerilatedTraceSigDirection::INPUT"; - } - return "VerilatedTraceSigDirection::NONE"; - } }; constexpr bool operator==(const VDirection& lhs, const VDirection& rhs) VL_MT_SAFE { return lhs.m_e == rhs.m_e; diff --git a/src/V3AstNodeDType.h b/src/V3AstNodeDType.h index cb4a1594f..4eafbbeae 100644 --- a/src/V3AstNodeDType.h +++ b/src/V3AstNodeDType.h @@ -129,7 +129,6 @@ public: // Ideally an IEEE $typename virtual string prettyDTypeName(bool) const { return prettyTypeName(); } string prettyDTypeNameQ() const { return "'" + prettyDTypeName(false) + "'"; } - virtual string cDTypeName() const { return ""; } // // Changing the width may confuse the data type resolution, so must clear // TypeTable cache after use. @@ -221,19 +220,7 @@ public: return elementsConst() * subDTypep()->widthTotalBytes(); } inline int left() const VL_MT_STABLE; - string cLeft() const { - std::ostringstream os; - if (left() < 0) os << "__02D"; - os << abs(left()); - return os.str(); - } inline int right() const VL_MT_STABLE; - string cRight() const { - std::ostringstream os; - if (right() < 0) os << "__02D"; - os << abs(right()); - return os.str(); - } inline int hi() const VL_MT_STABLE; inline int lo() const VL_MT_STABLE; inline int elementsConst() const VL_MT_STABLE; @@ -272,7 +259,6 @@ public: void dump(std::ostream& str) const override; void dumpJson(std::ostream& str) const override; string prettyDTypeName(bool) const override; - string cDTypeName() const override; bool isCompound() const override { return !packed(); } // For basicp() we reuse the size to indicate a "fake" basic type of same size AstBasicDType* basicp() const override VL_MT_STABLE { @@ -447,7 +433,6 @@ public: bool similarDTypeNode(const AstNodeDType* samep) const override; string name() const override VL_MT_STABLE { return m.m_keyword.ascii(); } string prettyDTypeName(bool full) const override; - string cDTypeName() const override; const char* broken() const override { BROKEN_RTN(dtypep() != this); BROKEN_RTN(v3Global.widthMinUsage() == VWidthMinUsage::VERILOG_WIDTH @@ -511,19 +496,7 @@ public: inline int lo() const; inline int elements() const; int left() const { return ascending() ? lo() : hi(); } // How to show a declaration - string cLeft() const { - std::ostringstream os; - if (left() < 0) os << "__02D"; - os << abs(left()); - return os.str(); - } int right() const { return ascending() ? hi() : lo(); } - string cRight() const { - std::ostringstream os; - if (right() < 0) os << "__02D"; - os << abs(right()); - return os.str(); - } inline bool ascending() const; bool implicit() const { return keyword() == VBasicDTypeKwd::LOGIC_IMPLICIT; } bool untyped() const { return keyword() == VBasicDTypeKwd::UNTYPED; } @@ -1237,9 +1210,6 @@ public: string prettyDTypeName(bool full) const override { return subDTypep() ? prettyName(subDTypep()->prettyDTypeName(full)) : prettyName(); } - string cDTypeName() const override { - return subDTypep() ? subDTypep()->cDTypeName() : cDTypeName(); - } AstBasicDType* basicp() const override VL_MT_STABLE { return subDTypep() ? subDTypep()->basicp() : nullptr; } @@ -1451,7 +1421,6 @@ public: inline AstPackArrayDType(FileLine* fl, AstNodeDType* dtp, AstRange* rangep); ASTGEN_MEMBERS_AstPackArrayDType; string prettyDTypeName(bool full) const override; - string cDTypeName() const override; bool isCompound() const override { return false; } }; class AstUnpackArrayDType final : public AstNodeArrayDType { @@ -1479,7 +1448,6 @@ public: } ASTGEN_MEMBERS_AstUnpackArrayDType; string prettyDTypeName(bool full) const override; - string cDTypeName() const override; bool sameNode(const AstNode* samep) const override { const AstUnpackArrayDType* const sp = VN_DBG_AS(samep, UnpackArrayDType); return m_isCompound == sp->m_isCompound; diff --git a/src/V3AstNodeExpr.h b/src/V3AstNodeExpr.h index 9d76b92d5..cd6d9c71d 100644 --- a/src/V3AstNodeExpr.h +++ b/src/V3AstNodeExpr.h @@ -4344,7 +4344,6 @@ public: string selfPointerProtect(bool useSelfForThis) const { return selfPointer().protect(useSelfForThis, protect()); } - bool maybePointedTo() const override VL_MT_SAFE { return true; } }; class AstCMethodCall final : public AstNodeCCall { // C++ method call diff --git a/src/V3AstNodeOther.h b/src/V3AstNodeOther.h index e39a891bb..96ae9ee88 100644 --- a/src/V3AstNodeOther.h +++ b/src/V3AstNodeOther.h @@ -2048,7 +2048,7 @@ public: string dpiTmpVarType(const string& varName) const; // Return Verilator internal type for argument: CData, SData, IData, WData string vlArgType(bool named, bool forReturn, bool forFunc, const string& namespc = "", - bool asRef = false, bool constRef = false) const; + bool asRef = false) const; string vlEnumType() const; // Return VerilatorVarType: VLVT_UINT32, etc string vlEnumDir() const; // Return VerilatorVarDir: VLVD_INOUT, etc string vlPropDecl(const string& propName) const; // Return VerilatorVarProps declaration @@ -2262,8 +2262,6 @@ class AstVarScope final : public AstNode { // @astgen ptr := m_varp : Optional[AstVar] // [AfterLink] Pointer to variable itself bool m_trace : 1; // Tracing is turned on for this scope bool m_optimizeLifePost : 1; // One half of an NBA pair using ShadowVariable scheme. Optimize. - // NOCOMMIT -- is this the right way? - bool m_tracePreserve : 1; // Preserve for trace logic public: AstVarScope(FileLine* fl, AstScope* scopep, AstVar* varp) : ASTGEN_SUPER_VarScope(fl) @@ -2273,7 +2271,6 @@ public: UASSERT_OBJ(varp, fl, "Var must be non-null"); m_trace = true; m_optimizeLifePost = false; - m_tracePreserve = false; dtypeFrom(varp); } ASTGEN_MEMBERS_AstVarScope; @@ -2296,8 +2293,6 @@ public: void trace(bool flag) { m_trace = flag; } bool optimizeLifePost() const { return m_optimizeLifePost; } void optimizeLifePost(bool flag) { m_optimizeLifePost = flag; } - bool tracePreserve() const { return m_tracePreserve; } - void tracePreserve(bool tracePreserve) { m_tracePreserve = tracePreserve; } }; // === AstNodeCoverDecl === diff --git a/src/V3AstNodeStmt.h b/src/V3AstNodeStmt.h index 3bb3cf7d3..2309a879d 100644 --- a/src/V3AstNodeStmt.h +++ b/src/V3AstNodeStmt.h @@ -1196,9 +1196,6 @@ class AstTraceDecl final : public AstNodeStmt { // Parents: {statement list} // Expression being traced - Moved to AstTraceInc by V3Trace // @astgen op1 := valuep : Optional[AstNodeExpr] - // - // @astgen ptr := m_dtypeVscp: Optional[AstVarScope] // Var scope for type tracing - // @astgen ptr := m_dtypeCallp: Optional[AstCCall] // Type init function call uint32_t m_code{0}; // Trace identifier code uint32_t m_fidx{0}; // Trace function index const string m_showname; // Name of variable @@ -1206,26 +1203,18 @@ class AstTraceDecl final : public AstNodeStmt { const VNumRange m_arrayRange; // Property of var the trace details const VVarType m_varType; // Type of variable (for localparam vs. param) const VDirection m_declDirection; // Declared direction input/output etc - // NOCOMMIT -- pretty sure something isn't needed here - const bool m_inDtypeFunc; // Trace decl inside type init function - string m_dtypeParamName; // Parameter name for type functions - int m_codeInc{0}; // Code increment for type public: AstTraceDecl(FileLine* fl, const string& showname, AstVar* varp, // For input/output state etc - AstNodeExpr* valuep, const VNumRange& bitRange, const VNumRange& arrayRange, - AstCCall* const dtypeCallp, AstVarScope* const dtypeVscp, const bool inDtypeFunc) + AstNodeExpr* valuep, const VNumRange& bitRange, const VNumRange& arrayRange) : ASTGEN_SUPER_TraceDecl(fl) , m_showname{showname} , m_bitRange{bitRange} , m_arrayRange{arrayRange} , m_varType{varp->varType()} - , m_declDirection{varp->declDirection()} - , m_inDtypeFunc{inDtypeFunc} { + , m_declDirection{varp->declDirection()} { dtypeFrom(valuep); this->valuep(valuep); - this->dtypeCallp(dtypeCallp); - this->dtypeVscp(dtypeVscp); } void dump(std::ostream& str) const override; void dumpJson(std::ostream& str) const override; @@ -1234,16 +1223,14 @@ public: string name() const override VL_MT_STABLE { return m_showname; } bool maybePointedTo() const override VL_MT_SAFE { return true; } bool hasDType() const override VL_MT_SAFE { return true; } - bool sameNode(const AstNode* samep) const override { return true; } + bool sameNode(const AstNode* samep) const override { return false; } string showname() const { return m_showname; } // * = Var name // Details on what we're tracing uint32_t code() const { return m_code; } void code(uint32_t code) { m_code = code; } uint32_t fidx() const { return m_fidx; } void fidx(uint32_t fidx) { m_fidx = fidx; } - void codeInc(uint32_t codeInc) { m_codeInc = codeInc; } uint32_t codeInc() const { - if (m_codeInc) { return m_codeInc; } return (m_arrayRange.ranged() ? m_arrayRange.elements() : 1) * valuep()->dtypep()->widthWords() * (VL_EDATASIZE / 32); // A code is always 32-bits @@ -1252,13 +1239,6 @@ public: const VNumRange& arrayRange() const { return m_arrayRange; } VVarType varType() const { return m_varType; } VDirection declDirection() const { return m_declDirection; } - AstCCall* dtypeCallp() const { return m_dtypeCallp; } - void dtypeCallp(AstCCall* const callp) { m_dtypeCallp = callp; } - AstVarScope* dtypeVscp() const { return m_dtypeVscp; } - void dtypeVscp(AstVarScope* const dtypeVscp) { m_dtypeVscp = dtypeVscp; } - bool inDtypeFunc() const { return m_inDtypeFunc; } - void dtypeParamName(string dtypeParamName) { m_dtypeParamName = dtypeParamName; } - string dtypeParamName() const { return m_dtypeParamName; } }; class AstTraceInc final : public AstNodeStmt { // Trace point dump @@ -1305,19 +1285,15 @@ public: class AstTracePushPrefix final : public AstNodeStmt { const string m_prefix; // Prefix to add to signal names const VTracePrefixType m_prefixType; // Type of prefix being pushed - const bool m_quotedPrefix; // Quote prefix name public: - AstTracePushPrefix(FileLine* fl, const string& prefix, VTracePrefixType prefixType, - bool quotedPrefix = true) + AstTracePushPrefix(FileLine* fl, const string& prefix, VTracePrefixType prefixType) : ASTGEN_SUPER_TracePushPrefix(fl) , m_prefix{prefix} - , m_prefixType{prefixType} - , m_quotedPrefix{quotedPrefix} {} + , m_prefixType{prefixType} {} ASTGEN_MEMBERS_AstTracePushPrefix; bool sameNode(const AstNode* samep) const override { return false; } string prefix() const { return m_prefix; } VTracePrefixType prefixType() const { return m_prefixType; } - bool quotedPrefix() const { return m_quotedPrefix; } }; class AstWait final : public AstNodeStmt { // @astgen op1 := condp : AstNodeExpr diff --git a/src/V3AstNodes.cpp b/src/V3AstNodes.cpp index 35d0ec859..6492fed29 100644 --- a/src/V3AstNodes.cpp +++ b/src/V3AstNodes.cpp @@ -568,7 +568,7 @@ string AstVar::verilogKwd() const { } string AstVar::vlArgType(bool named, bool forReturn, bool forFunc, const string& namespc, - bool asRef, bool constRef) const { + bool asRef) const { UASSERT_OBJ(!forReturn, this, "Internal data is never passed as return, but as first argument"); string ostatic; @@ -576,7 +576,7 @@ string AstVar::vlArgType(bool named, bool forReturn, bool forFunc, const string& asRef = asRef || isDpiOpenArray() || (forFunc && (isWritable() || isRef() || isConstRef())); - if (forFunc && (isReadOnly() || constRef) && asRef) ostatic = ostatic + "const "; + if (forFunc && isReadOnly() && asRef) ostatic = ostatic + "const "; string oname; if (named) { @@ -1706,14 +1706,6 @@ string AstBasicDType::prettyDTypeName(bool) const { } return os.str(); } -string AstBasicDType::cDTypeName() const { - std::ostringstream os; - os << keyword().ascii(); - if (isRanged() && !rangep() && keyword().width() <= 1) { - os << "__BRA__" << cLeft() << "__" << cRight() << "__KET__"; - } - return os.str(); -} void AstNodeExpr::dump(std::ostream& str) const { this->AstNode::dump(str); } void AstNodeExpr::dumpJson(std::ostream& str) const { dumpJsonGen(str); } @@ -2376,7 +2368,6 @@ string AstNodeUOrStructDType::prettyDTypeName(bool full) const { result += "}" + prettyName(); return result; } -string AstNodeUOrStructDType::cDTypeName() const { return verilogKwd() + "__" + name(); } void AstNodeDType::dump(std::ostream& str) const { this->AstNode::dump(str); if (generic()) str << " [GENERIC]"; @@ -2435,25 +2426,6 @@ string AstUnpackArrayDType::prettyDTypeName(bool full) const { os << subp->prettyDTypeName(full) << "$" << ranges; return os.str(); } -// NOCOMMIT -- copypastaed from prettyDTypeName() -- is there a better way? encodeName()? name()? -string AstPackArrayDType::cDTypeName() const { - std::ostringstream os; - if (const auto subp = subDTypep()) os << subp->cDTypeName(); - os << "__BRA__" + cLeft() + "__" + cRight() + "__KET__"; - return os.str(); -} -string AstUnpackArrayDType::cDTypeName() const { - std::ostringstream os; - string ranges = "__BRA__" + cLeft() + "__" + cRight() + "__KET__"; - // See above re: $ - AstNodeDType* subp = subDTypep()->skipRefp(); - while (AstUnpackArrayDType* adtypep = VN_CAST(subp, UnpackArrayDType)) { - ranges += "__BRA__" + adtypep->cLeft() + "__" + adtypep->cRight() + "__KET__"; - subp = adtypep->subDTypep()->skipRefp(); - } - os << subp->cDTypeName() << "__024__" << ranges; - return os.str(); -} std::vector AstUnpackArrayDType::unpackDimensions() { std::vector dims; for (AstUnpackArrayDType* unpackp = this; unpackp;) { @@ -3120,7 +3092,6 @@ void AstStop::dumpJson(std::ostream& str) const { void AstTraceDecl::dump(std::ostream& str) const { this->AstNodeStmt::dump(str); if (code()) str << " [code=" << code() << "]"; - if (dtypeCallp()) str << " [dtypeCallp=" << dtypeCallp() << "]"; } void AstTraceDecl::dumpJson(std::ostream& str) const { dumpJsonNumFunc(str, code); diff --git a/src/V3Dead.cpp b/src/V3Dead.cpp index 744694e46..d6edab26b 100644 --- a/src/V3Dead.cpp +++ b/src/V3Dead.cpp @@ -287,7 +287,7 @@ class DeadVisitor final : public VNVisitor { iterateChildren(nodep); checkAll(nodep); if (nodep->scopep()) nodep->scopep()->user1Inc(); - if (!nodep->tracePreserve() && mightElimVar(nodep->varp())) m_vscsp.push_back(nodep); + if (mightElimVar(nodep->varp())) m_vscsp.push_back(nodep); } void visit(AstVar* nodep) override { iterateChildren(nodep); diff --git a/src/V3DfgOptimizer.cpp b/src/V3DfgOptimizer.cpp index de79abcae..bd3a89578 100644 --- a/src/V3DfgOptimizer.cpp +++ b/src/V3DfgOptimizer.cpp @@ -261,8 +261,7 @@ class DataflowOptimize final { if (AstVarScope* const vscp = VN_CAST(nodep, VarScope)) { const AstVar* const varp = vscp->varp(); // Force and trace have already been processed - const bool hasExtRd = varp->isPrimaryIO() || varp->isSigUserRdPublic() - || vscp->tracePreserve(); + const bool hasExtRd = varp->isPrimaryIO() || varp->isSigUserRdPublic(); const bool hasExtWr = varp->isPrimaryIO() || varp->isSigUserRWPublic(); if (hasExtRd) DfgVertexVar::setHasExtRdRefs(vscp); if (hasExtWr) DfgVertexVar::setHasExtWrRefs(vscp); diff --git a/src/V3EmitCImp.cpp b/src/V3EmitCImp.cpp index 62f3c8a30..c6b213240 100644 --- a/src/V3EmitCImp.cpp +++ b/src/V3EmitCImp.cpp @@ -624,16 +624,6 @@ class EmitCTrace final : public EmitCFunc { } void emitTraceInitOne(const AstTraceDecl* nodep, int enumNum) { - std::string direction; - direction = nodep->declDirection().traceSigDirection(); - - AstCCall* const callp = nodep->dtypeCallp(); - if (callp) { - callp->argTypes(callp->argTypes() + ", " + cvtToStr(nodep->fidx()) + ", c+" - + cvtToStr(nodep->code()) + "-1, " + direction); - return; - } - if (nodep->dtypep()->basicp()->isDouble()) { puts("tracep->declDouble("); } else if (nodep->isWide()) { @@ -654,11 +644,7 @@ class EmitCTrace final : public EmitCFunc { // Function index puts(","); - if (nodep->inDtypeFunc()) { - puts("fidx"); - } else { - puts(cvtToStr(nodep->fidx())); - } + puts(cvtToStr(nodep->fidx())); // Name puts(","); @@ -668,10 +654,14 @@ class EmitCTrace final : public EmitCFunc { puts("," + cvtToStr(enumNum)); // Direction - if (nodep->inDtypeFunc()) { - puts(", direction"); + if (nodep->declDirection().isInout()) { + puts(", VerilatedTraceSigDirection::INOUT"); + } else if (nodep->declDirection().isWritable()) { + puts(", VerilatedTraceSigDirection::OUTPUT"); + } else if (nodep->declDirection().isNonOutput()) { + puts(", VerilatedTraceSigDirection::INPUT"); } else { - puts(", " + direction); + puts(", VerilatedTraceSigDirection::NONE"); } // Kind @@ -762,7 +752,16 @@ class EmitCTrace final : public EmitCFunc { puts("VL_SC_BV_DATAP("); } iterateConst(varrefp); // Put var name out - emitTraceIndex(nodep, arrayindex); + // Tracing only supports 1D arrays + if (nodep->declp()->arrayRange().ranged()) { + if (arrayindex == -2) { + puts("[i]"); + } else if (arrayindex == -1) { + puts("[0]"); + } else { + puts("[" + cvtToStr(arrayindex) + "]"); + } + } if (varp->isSc()) puts(".read()"); if (emitTraceIsScUint(nodep)) { puts(nodep->isQuad() ? ".to_uint64()" : ".to_uint()"); @@ -775,24 +774,10 @@ class EmitCTrace final : public EmitCFunc { } else { puts("("); iterateConst(nodep->valuep()); - emitTraceIndex(nodep, arrayindex); puts(")"); } } - void emitTraceIndex(const AstTraceInc* const nodep, int arrayindex) { - // Tracing only supports 1D arrays - if (nodep->declp()->arrayRange().ranged()) { - if (arrayindex == -2) { - puts("[i]"); - } else if (arrayindex == -1) { - puts("[0]"); - } else { - puts("[" + cvtToStr(arrayindex) + "]"); - } - } - } - // VISITORS using EmitCFunc::visit; // Suppress hidden overloaded virtual function warning void visit(AstCFunc* nodep) override { @@ -812,11 +797,7 @@ class EmitCTrace final : public EmitCFunc { } void visit(AstTracePushPrefix* nodep) override { putns(nodep, "tracep->pushPrefix("); - if (nodep->quotedPrefix()) { - putsQuoted(VIdProtect::protectWordsIf(nodep->prefix(), nodep->protect())); - } else { - puts(nodep->prefix()); - } + putsQuoted(VIdProtect::protectWordsIf(nodep->prefix(), nodep->protect())); puts(", VerilatedTracePrefixType::"); puts(nodep->prefixType().ascii()); puts(");\n"); diff --git a/src/V3Gate.cpp b/src/V3Gate.cpp index a2d821c0b..f6e5a9198 100644 --- a/src/V3Gate.cpp +++ b/src/V3Gate.cpp @@ -429,12 +429,11 @@ class GateOkVisitor final : public VNVisitorConst { // We only allow a LHS ref for the var being set, and a RHS ref for // something else being read. - AstVarScope* const vscp = nodep->varScopep(); if (nodep->access().isWriteOnly()) { - if (vscp->tracePreserve()) clearSimple("Needed for tracing"); if (m_lhsVarRef) clearSimple(">1 write refs"); m_lhsVarRef = nodep; } else { + AstVarScope* const vscp = nodep->varScopep(); // TODO: possible bug, should it be >= 1 as add is below? if (m_readVscps.size() > 1) { if (m_buffersOnly) clearSimple(">1 rhs varRefs"); diff --git a/src/V3Trace.cpp b/src/V3Trace.cpp index ca7cbfae0..41901cb32 100644 --- a/src/V3Trace.cpp +++ b/src/V3Trace.cpp @@ -39,20 +39,16 @@ #include "V3Trace.h" -#include "V3Ast.h" #include "V3DupFinder.h" #include "V3EmitCBase.h" #include "V3Graph.h" #include "V3Stats.h" -#include "V3UniqueNames.h" #include #include -#include VL_DEFINE_DEBUG_FUNCTIONS; -// NOCOMMIT -- do runtime bake off //###################################################################### // Graph vertexes @@ -187,15 +183,6 @@ class TraceVisitor final : public VNVisitor { V3Graph m_graph; // Var/CFunc tracking TraceActivityVertex* const m_alwaysVtxp; // "Always trace" vertex bool m_finding = false; // Pass one of algorithm? - struct DtypeFuncs final { - public: - AstCFunc* fullFuncp = nullptr; - AstCFunc* chgFuncp = nullptr; - }; - std::unordered_map - m_dtypeNonConstFuncs; // Full / Chg funcs per type - std::unordered_map m_dtypeConstFuncs; // Const func per type - V3UniqueNames m_dtypeNames{""}; // Unique type func names // Trace parallelism. Only VCD tracing can be parallelized at this time. const uint32_t m_parallelism @@ -220,13 +207,13 @@ class TraceVisitor final : public VNVisitor { // Hash all of the traced values and find if there are any duplicates for (V3GraphVertex& vtx : m_graph.vertices()) { if (TraceTraceVertex* const vvertexp = vtx.cast()) { - AstTraceDecl* const nodep = vvertexp->nodep(); + const AstTraceDecl* const nodep = vvertexp->nodep(); UASSERT_OBJ(!vvertexp->duplicatep(), nodep, "Should not be a duplicate"); - const auto dupit = dupFinder.findDuplicate(nodep); + const auto dupit = dupFinder.findDuplicate(nodep->valuep()); if (dupit == dupFinder.end()) { - dupFinder.insert(nodep); + dupFinder.insert(nodep->valuep()); } else { - const AstTraceDecl* const dupDeclp = VN_AS(dupit->second, TraceDecl); + const AstTraceDecl* const dupDeclp = VN_AS(dupit->second->backp(), TraceDecl); UASSERT_OBJ(dupDeclp, nodep, "Trace duplicate of wrong type"); TraceTraceVertex* const dupvertexp = dupDeclp->user1u().toGraphVertex()->cast(); @@ -497,11 +484,11 @@ class TraceVisitor final : public VNVisitor { } AstCFunc* newCFunc(VTraceType traceType, AstCFunc* topFuncp, uint32_t funcNum, - uint32_t baseCode = 0, const AstTraceDecl* const declp = nullptr) { + uint32_t baseCode = 0) { // Create new function - const bool isTopFunc = !declp && topFuncp == nullptr; + const bool isTopFunc = topFuncp == nullptr; std::string funcName; - if (isTopFunc || declp) { + if (isTopFunc) { if (traceType == VTraceType::CONSTANT) { funcName = "trace_const"; } else if (traceType == VTraceType::FULL) { @@ -513,14 +500,8 @@ class TraceVisitor final : public VNVisitor { funcName = topFuncp->name(); funcName += "_sub"; } - if (declp) { - funcName += "_dtype_"; - funcName += declp->valuep()->dtypep()->cDTypeName(); - funcName = m_dtypeNames.get(funcName); - } else { - funcName += "_"; - funcName += cvtToStr(funcNum); - } + funcName += "_"; + funcName += cvtToStr(funcNum); FileLine* const flp = m_topScopep->fileline(); AstCFunc* const funcp = new AstCFunc{flp, funcName, m_topScopep}; @@ -533,8 +514,7 @@ class TraceVisitor final : public VNVisitor { m_topScopep->addBlocksp(funcp); const std::string bufArg = v3Global.opt.traceClassBase() - + "::" + (v3Global.opt.useTraceOffload() ? "OffloadBuffer" : "Buffer") + "* bufp" - + (declp ? (", uint32_t offset, " + declp->dtypeParamName()) : ""); + + "::" + (v3Global.opt.useTraceOffload() ? "OffloadBuffer" : "Buffer") + "* bufp"; if (isTopFunc) { // Top functions funcp->argTypes("void* voidSelf, " + bufArg); @@ -569,62 +549,35 @@ class TraceVisitor final : public VNVisitor { if (traceType != VTraceType::CHANGE) { // Full dump sub function funcp->addStmtsp(new AstCStmt{flp, // - string("uint32_t* const oldp VL_ATTR_UNUSED = " - "bufp->oldp(vlSymsp->__Vm_baseCode") - + (declp ? " + offset - 1" : "") + ");\n"}); + "uint32_t* const oldp VL_ATTR_UNUSED = " + "bufp->oldp(vlSymsp->__Vm_baseCode);\n"}); } else { // Change dump sub function if (v3Global.opt.useTraceOffload()) { - funcp->addStmtsp( - new AstCStmt{flp, // - "const uint32_t base VL_ATTR_UNUSED = " - "vlSymsp->__Vm_baseCode + " - + (declp ? " offset - 1" : cvtToStr(baseCode)) + ";\n"}); + funcp->addStmtsp(new AstCStmt{flp, // + "const uint32_t base VL_ATTR_UNUSED = " + "vlSymsp->__Vm_baseCode + " + + cvtToStr(baseCode) + ";\n"}); funcp->addStmtsp( new AstCStmt{flp, "(void)bufp; // Prevent unused variable warning\n"}); } else { - funcp->addStmtsp( - new AstCStmt{flp, // - "uint32_t* const oldp VL_ATTR_UNUSED = " - "bufp->oldp(vlSymsp->__Vm_baseCode + " - + (declp ? " offset - 1" : cvtToStr(baseCode)) + ");\n"}); + funcp->addStmtsp(new AstCStmt{flp, // + "uint32_t* const oldp VL_ATTR_UNUSED = " + "bufp->oldp(vlSymsp->__Vm_baseCode + " + + cvtToStr(baseCode) + ");\n"}); } } - if (!declp) { - // Add call to top function - AstCCall* const callp = new AstCCall{funcp->fileline(), funcp}; - callp->dtypeSetVoid(); - callp->argTypes("bufp"); - topFuncp->addStmtsp(callp->makeStmt()); - } + // Add call to top function + AstCCall* const callp = new AstCCall{funcp->fileline(), funcp}; + callp->dtypeSetVoid(); + callp->argTypes("bufp"); + topFuncp->addStmtsp(callp->makeStmt()); } // Done UINFO(5, " newCFunc " << funcp); return funcp; } - AstCFunc* createConstDtypeTraceFunctions(const AstTraceDecl* declp) { - const AstNodeDType* const dtypep = declp->valuep()->dtypep()->skipRefp(); - auto pair = m_dtypeConstFuncs.emplace(dtypep, nullptr); - if (pair.second) { - FileLine* const flp = declp->fileline(); - AstCFunc* const funcp = newCFunc(VTraceType::CONSTANT, nullptr, 0, 0, declp); - - for (AstNode* stmtp = declp->dtypeCallp()->funcp()->stmtsp(); stmtp; - stmtp = stmtp->nextp()) { - if (AstTraceDecl* const fieldDeclp = VN_CAST(stmtp, TraceDecl)) { - AstTraceInc* const incp - = new AstTraceInc{flp, fieldDeclp, VTraceType::CONSTANT}; - funcp->addStmtsp(incp); - } - } - - pair.first->second = funcp; - } - - return pair.first->second; - } - void createConstTraceFunctions(const TraceVec& traces) { const int splitLimit = v3Global.opt.outputSplitCTrace() ? v3Global.opt.outputSplitCTrace() : std::numeric_limits::max(); @@ -645,7 +598,6 @@ class TraceVisitor final : public VNVisitor { UASSERT_OBJ(canonDeclp->code() != 0, canonDeclp, "Canonical node should have code assigned already"); declp->code(canonDeclp->code()); - declp->dtypeVscp(nullptr); continue; } @@ -668,55 +620,13 @@ class TraceVisitor final : public VNVisitor { ++subFuncNum; } FileLine* const flp = declp->fileline(); - if (declp->dtypeCallp()) { - AstCFunc* const funcp = createConstDtypeTraceFunctions(declp); - AstVarRef* argsp = nullptr; - argsp = AstNode::addNext( - argsp, new AstVarRef{flp, declp->dtypeVscp(), VAccess::READ}); - AstCCall* const callp = new AstCCall{flp, funcp, argsp}; - callp->dtypeSetVoid(); - callp->argTypes(callp->argTypes() + "bufp, " + std::to_string(declp->code())); - subFuncp->addStmtsp(callp->makeStmt()); - - declp->dtypeVscp(nullptr); - - // NOCOMMIT -- ???? - subStmts += 1; - } else { - AstTraceInc* const incp = new AstTraceInc{flp, declp, VTraceType::CONSTANT}; - subFuncp->addStmtsp(incp); - subStmts += incp->nodeCount(); - } + AstTraceInc* const incp = new AstTraceInc{flp, declp, VTraceType::CONSTANT}; + subFuncp->addStmtsp(incp); + subStmts += incp->nodeCount(); } } } - DtypeFuncs createNonConstDtypeTraceFunctions(const AstTraceDecl* declp) { - AstNodeDType* dtypep = declp->valuep()->dtypep()->skipRefp(); - auto pair = m_dtypeNonConstFuncs.emplace(dtypep, DtypeFuncs{}); - if (pair.second) { - FileLine* const flp = declp->fileline(); - AstCFunc* const fullFuncp = newCFunc(VTraceType::FULL, nullptr, 0, 0, declp); - AstCFunc* const chgFuncp = newCFunc(VTraceType::CHANGE, nullptr, 0, 0, declp); - - for (AstNode* stmtp = declp->dtypeCallp()->funcp()->stmtsp(); stmtp; - stmtp = stmtp->nextp()) { - if (AstTraceDecl* const fieldDeclp = VN_CAST(stmtp, TraceDecl)) { - AstTraceInc* const incFullp - = new AstTraceInc{flp, fieldDeclp, VTraceType::FULL}; - fullFuncp->addStmtsp(incFullp); - AstTraceInc* const incChgp - = new AstTraceInc{flp, fieldDeclp, VTraceType::CHANGE}; - chgFuncp->addStmtsp(incChgp); - } - } - - pair.first->second = {.fullFuncp = fullFuncp, .chgFuncp = chgFuncp}; - } - - return pair.first->second; - } - void createNonConstTraceFunctions(const TraceVec& traces, uint32_t nAllCodes, uint32_t parallelism) { const int splitLimit = v3Global.opt.outputSplitCTrace() ? v3Global.opt.outputSplitCTrace() @@ -749,7 +659,6 @@ class TraceVisitor final : public VNVisitor { // function index to the same as the canonical node. if (const TraceTraceVertex* const canonVtxp = vtxp->duplicatep()) { declp->fidx(canonVtxp->nodep()->fidx()); - declp->dtypeVscp(nullptr); continue; } @@ -771,7 +680,6 @@ class TraceVisitor final : public VNVisitor { ifp = nullptr; } - // NOCOMMIT -- is it OK to do this only on the aggregate signal? // If required, create the conditional node checking the activity flags if (!prevActSet || actSet != *prevActSet) { FileLine* const flp = m_topScopep->fileline(); @@ -794,53 +702,24 @@ class TraceVisitor final : public VNVisitor { // Add TraceInc nodes FileLine* const flp = declp->fileline(); - if (declp->dtypeCallp()) { - DtypeFuncs funcs = createNonConstDtypeTraceFunctions(declp); - AstVarRef* argsp = nullptr; - argsp = AstNode::addNext( - argsp, new AstVarRef{flp, declp->dtypeVscp(), VAccess::READ}); - AstCCall* const callFullp = new AstCCall{flp, funcs.fullFuncp, argsp}; - callFullp->dtypeSetVoid(); - callFullp->argTypes(callFullp->argTypes() + "bufp, " - + std::to_string(declp->code())); - subFulFuncp->addStmtsp(callFullp->makeStmt()); - argsp = nullptr; - argsp = AstNode::addNext( - argsp, new AstVarRef{flp, declp->dtypeVscp(), VAccess::READ}); - AstCCall* const callChgp = new AstCCall{flp, funcs.chgFuncp, argsp}; - callChgp->dtypeSetVoid(); - callChgp->argTypes(callChgp->argTypes() - + "bufp, " - // NOCOMMIT -- some kind of two-wrongs off-by-one error - // somewhere: really seems like it should be code() - 1 for - // the chg func (see old chg func) - + std::to_string(declp->code())); - ifp->addThensp(callChgp->makeStmt()); + AstTraceInc* const incFulp = new AstTraceInc{flp, declp, VTraceType::FULL}; + subFulFuncp->addStmtsp(incFulp); + AstTraceInc* const incChgp + = new AstTraceInc{flp, declp, VTraceType::CHANGE, baseCode}; + ifp->addThensp(incChgp); - declp->dtypeVscp(nullptr); + // Set the function index of the decl + declp->fidx(topFuncNum); - // NOCOMMIT -- ???? - subStmts += 2; + // Track splitting due to size + UASSERT_OBJ(incFulp->nodeCount() == incChgp->nodeCount(), declp, + "Should have equal cost"); + const VNumRange range = declp->arrayRange(); + if (range.ranged()) { + // 2x because each element is a TraceInc and a VarRef + subStmts += range.elements() * 2; } else { - AstTraceInc* const incFulp = new AstTraceInc{flp, declp, VTraceType::FULL}; - subFulFuncp->addStmtsp(incFulp); - AstTraceInc* const incChgp - = new AstTraceInc{flp, declp, VTraceType::CHANGE, baseCode}; - ifp->addThensp(incChgp); - - // Set the function index of the decl - declp->fidx(topFuncNum); - - // Track splitting due to size - UASSERT_OBJ(incFulp->nodeCount() == incChgp->nodeCount(), declp, - "Should have equal cost"); - const VNumRange range = declp->arrayRange(); - if (range.ranged()) { - // 2x because each element is a TraceInc and a VarRef - subStmts += range.elements() * 2; - } else { - subStmts += incChgp->nodeCount(); - } + subStmts += incChgp->nodeCount(); } // Track partitioning @@ -1020,7 +899,7 @@ class TraceVisitor final : public VNVisitor { } void visit(AstTraceDecl* nodep) override { UINFO(8, " TRACE " << nodep); - if (!m_finding && !nodep->inDtypeFunc()) { + if (!m_finding) { V3GraphVertex* const vertexp = new TraceTraceVertex{&m_graph, nodep}; nodep->user1p(vertexp); @@ -1062,12 +941,6 @@ public: explicit TraceVisitor(AstNetlist* nodep) : m_alwaysVtxp{new TraceActivityVertex{&m_graph, TraceActivityVertex::ACTIVITY_ALWAYS}} { iterate(nodep); - nodep->foreach([](AstTraceDecl* const declp) { - if (declp->inDtypeFunc()) { - declp->valuep()->unlinkFrBack()->deleteTree(); - declp->valuep(nullptr); - } - }); } ~TraceVisitor() override { V3Stats::addStat("Tracing, Activity setters", m_statSetters); diff --git a/src/V3TraceDecl.cpp b/src/V3TraceDecl.cpp index 3e862fedb..86959fc5b 100644 --- a/src/V3TraceDecl.cpp +++ b/src/V3TraceDecl.cpp @@ -24,20 +24,13 @@ #include "V3TraceDecl.h" -#include "V3Ast.h" #include "V3Control.h" #include "V3EmitCBase.h" -#include "V3Error.h" -#include "V3File.h" -#include "V3Global.h" -#include "V3Number.h" #include "V3Stats.h" -#include "V3UniqueNames.h" #include #include #include -#include #include VL_DEFINE_DEBUG_FUNCTIONS; @@ -97,8 +90,6 @@ public: class TraceDeclVisitor final : public VNVisitor { // NODE STATE - // AstCFunc::user1() // code offset for current type - // AstCFunc::user2() // VarScope for dtype functions // STATE AstTopScope* const m_topScopep; // The singleton AstTopScope @@ -107,11 +98,6 @@ class TraceDeclVisitor final : public VNVisitor { std::vector m_topFuncps; // Top level trace initialization functions std::vector m_subFuncps; // Trace sub functions for this scope std::set m_declUncalledps; // Declarations not called - std::unordered_map m_dtypeFuncs; // Functions per type - AstCFunc* m_dtypeFunc = nullptr; // Current type func - V3UniqueNames m_dtypeNames{""}; // Unique names for dtype funcs - bool m_skipDtypeFunc = false; // Don't create a type func - int m_offset = 0; // Offset for types int m_topFuncSize = 0; // Size of the top function currently being built int m_subFuncSize = 0; // Size of the sub function currently being built const int m_funcSizeLimit // Maximum size of a function @@ -236,11 +222,6 @@ class TraceDeclVisitor final : public VNVisitor { } void addToSubFunc(AstNodeStmt* stmtp) { - // TODO -- sub funcs for dtype components - if (m_dtypeFunc) { - m_dtypeFunc->addStmtsp(stmtp); - return; - } if (m_subFuncSize > m_funcSizeLimit || m_subFuncps.empty()) { m_subFuncSize = 0; // @@ -255,49 +236,20 @@ class TraceDeclVisitor final : public VNVisitor { m_subFuncSize += stmtp->nodeCount(); } - AstTraceDecl* addTraceDecl(const VNumRange& arrayRange, - int widthOverride, // If !=0, is packed struct/array where basicp - // size misreflects one element - AstCCall* const dtypeCallp = nullptr) { + void addTraceDecl(const VNumRange& arrayRange, + int widthOverride) { // If !=0, is packed struct/array where basicp size + // misreflects one element VNumRange bitRange; if (widthOverride) { bitRange = VNumRange{widthOverride - 1, 0}; } else if (const AstBasicDType* const bdtypep = m_traValuep->dtypep()->basicp()) { bitRange = bdtypep->nrange(); } - FileLine* const flp = m_traVscp->fileline(); - AstNodeExpr* valuep = m_traValuep->cloneTree(false); - AstTraceDecl* const newp = new AstTraceDecl{ - flp, m_traName, m_traVscp->varp(), valuep, - bitRange, arrayRange, dtypeCallp, dtypeCallp ? m_traVscp : nullptr, - m_offset != 0}; - // NOCOMMIT -- m_offset and may be redundant with something else here ^ - if (m_offset) { - newp->code(m_offset); - if (!dtypeCallp) { m_offset += newp->codeInc(); } - valuep->foreach([&](AstVarRef* const refp) { - UASSERT_OBJ(refp->varScopep() == m_traVscp, refp, - "Trace decl expression references unexpected var"); - refp->replaceWith(new AstCExpr{flp, VIdProtect::protect(m_traVscp->varp()->name()), - m_traVscp->width()}); - VL_DO_DANGLING(refp->deleteTree(), refp); - }); - } - if (dtypeCallp) { - // NOCOMMIT -- are both necessary? - m_traVscp->tracePreserve(true); - m_traVscp->varp()->trace(true); - m_traVscp->varp()->sigPublic(true); // NOCOMMIT -- this is a lie -- FIX - // NOCOMMIT -- adding this because const and non-const func param names conflict -- - // probably a better way - newp->dtypeParamName(VN_AS(dtypeCallp->funcp()->user2p(), VarScope) - ->varp() - ->vlArgType(true, false, true, "", true, true)); - } + AstTraceDecl* const newp + = new AstTraceDecl{m_traVscp->fileline(), m_traName, m_traVscp->varp(), + m_traValuep->cloneTree(false), bitRange, arrayRange}; m_declUncalledps.emplace(newp); addToSubFunc(newp); - - return newp; } void addIgnore(const string& why) { @@ -469,7 +421,6 @@ class TraceDeclVisitor final : public VNVisitor { = new AstVarRef{m_traVscp->fileline(), m_traVscp, VAccess::READ}; // Recurse into data type of the signal. The visit methods will add // AstTraceDecls. - VL_RESTORER(m_offset); iterate(m_traVscp->varp()->dtypep()->skipRefToEnump()); // Delete reference created above. Traversal cloned it as required. if (m_traValuep) { @@ -552,14 +503,10 @@ class TraceDeclVisitor final : public VNVisitor { // VISITORS - Data types when tracing void visit(AstConstDType* nodep) override { if (!m_traVscp) return; - VL_RESTORER(m_offset); - VL_RESTORER(m_skipDtypeFunc); - m_skipDtypeFunc = true; iterate(nodep->subDTypep()->skipRefToEnump()); } void visit(AstRefDType* nodep) override { if (!m_traVscp) return; - VL_RESTORER(m_offset); iterate(nodep->subDTypep()->skipRefToEnump()); } void visit(AstIfaceRefDType* nodep) override { @@ -571,63 +518,20 @@ class TraceDeclVisitor final : public VNVisitor { addToSubFunc(stmtp); m_ifaceRefInitPlaceholders.emplace_back(m_traVscp, stmtp); } - void newDeclFunc(AstNodeDType* nodep) { - AstNodeDType* const skipTypep = nodep->skipRefp(); - // offset and direction args added in EmitCImp - std::string callArgs{"tracep, \"" + VIdProtect::protect(m_traName) + "\""}; - VL_RESTORER(m_traName); - FileLine* const flp = skipTypep->fileline(); + void visit(AstUnpackArrayDType* nodep) override { + // Note more specific dtypes above + if (!m_traVscp) return; - auto pair = m_dtypeFuncs.emplace(skipTypep, nullptr); - AstCFunc** funcpp = &pair.first->second; - if (pair.second) { - string dtypeName = skipTypep->cDTypeName(); - const string name{"trace_init_dtype__" + dtypeName}; - // NOCOMMIT -- should we only use V3UniqueNames instead of worrying about cDTypeName()? - *funcpp = newCFunc(flp, m_dtypeNames.get(name)); - (*funcpp)->user2p(m_traVscp); + if (v3Global.opt.traceMaxArray() + && static_cast(nodep->arrayUnpackedElements()) > v3Global.opt.traceMaxArray()) { + addIgnore("Wide memory > --trace-max-array ents"); + return; } - AstCCall* const callp = new AstCCall{flp, *funcpp}; - callp->dtypeSetVoid(); - callp->argTypes(callArgs); - AstTraceDecl* const declp = addTraceDecl(VNumRange{}, skipTypep->width(), callp); - addToSubFunc(callp->makeStmt()); - - if (pair.second) { - VL_RESTORER(m_offset); - m_offset = 1; - - VL_RESTORER(m_dtypeFunc); - m_dtypeFunc = *funcpp; - m_dtypeFunc->argTypes(m_dtypeFunc->argTypes() - + ", const char* name, uint32_t fidx, uint32_t c, " - "VerilatedTraceSigDirection direction"); - if (AstStructDType* const dtypep = VN_CAST(skipTypep, StructDType)) { - declStruct(dtypep, true); - } else if (AstUnpackArrayDType* const dtypep = VN_CAST(skipTypep, UnpackArrayDType)) { - declUnpackedArray(dtypep, true); - } else if (AstPackArrayDType* const dtypep = VN_CAST(skipTypep, PackArrayDType)) { - declPackedArray(dtypep, true); - } else { - UASSERT_OBJ(false, skipTypep, "Creating a trace function for an unexpected type"); - } - // Code 0 is a sentinel value - // NOCOMMIT -- handle that ^ so we don't need the -1's?' - m_dtypeFunc->user1(m_offset - 1); - } - - declp->codeInc((*funcpp)->user1()); - m_offset += declp->codeInc(); - } - void declUnpackedArray(AstUnpackArrayDType* const nodep, bool newFunc) { - string prefixName(newFunc ? "name" : m_traName); - VL_RESTORER(m_traName); FileLine* const flp = nodep->fileline(); - addToSubFunc( - new AstTracePushPrefix{flp, prefixName, VTracePrefixType::ARRAY_UNPACKED, !newFunc}); + addToSubFunc(new AstTracePushPrefix{flp, m_traName, VTracePrefixType::ARRAY_UNPACKED}); if (VN_IS(nodep->subDTypep()->skipRefToEnump(), BasicDType) // Nothing lower than this array @@ -655,39 +559,20 @@ class TraceDeclVisitor final : public VNVisitor { addToSubFunc(new AstTracePopPrefix{flp}); } - // NOCOMMIT -- how to handle VL_* macro'ed types? - bool isBasicIO() { - const AstVar* varp = m_traVscp->varp(); - const AstBasicDType* basicp = varp->basicp(); - // NOCOMMIT -- lifted from V3EmitCBase -- AstVar method? - return varp->isIO() && basicp && !basicp->isOpaque(); - } - void visit(AstUnpackArrayDType* nodep) override { - // Note more specific dtypes above + void visit(AstPackArrayDType* nodep) override { if (!m_traVscp) return; - if (v3Global.opt.traceMaxArray() - && static_cast(nodep->arrayUnpackedElements()) > v3Global.opt.traceMaxArray()) { - addIgnore("Wide memory > --trace-max-array ents"); + if (!v3Global.opt.traceStructs()) { + // Everything downstream is packed, so deal with as one trace unit. + // This may not be the nicest for user presentation, but is + // a much faster way to trace + addTraceDecl(VNumRange{}, nodep->width()); return; } - VL_RESTORER(m_skipDtypeFunc); - if (isBasicIO()) m_skipDtypeFunc = true; - - if (m_skipDtypeFunc || m_dtypeFunc) { - declUnpackedArray(nodep, false); - } else { - newDeclFunc(nodep); - } - } - void declPackedArray(AstPackArrayDType* const nodep, bool newFunc) { - string prefixName(newFunc ? "name" : m_traName); - VL_RESTORER(m_traName); FileLine* const flp = nodep->fileline(); - addToSubFunc( - new AstTracePushPrefix{flp, prefixName, VTracePrefixType::ARRAY_PACKED, !newFunc}); + addToSubFunc(new AstTracePushPrefix{flp, m_traName, VTracePrefixType::ARRAY_PACKED}); AstNodeDType* const subtypep = nodep->subDTypep()->skipRefToEnump(); for (int i = nodep->lo(); i <= nodep->hi(); ++i) { @@ -703,32 +588,23 @@ class TraceDeclVisitor final : public VNVisitor { addToSubFunc(new AstTracePopPrefix{flp}); } - void visit(AstPackArrayDType* nodep) override { + void visit(AstStructDType* nodep) override { if (!m_traVscp) return; - if (!v3Global.opt.traceStructs()) { - // Everything downstream is packed, so deal with as one trace unit. + if (nodep->packed() && !v3Global.opt.traceStructs()) { + // Everything downstream is packed, so deal with as one trace unit // This may not be the nicest for user presentation, but is // a much faster way to trace addTraceDecl(VNumRange{}, nodep->width()); return; } - VL_RESTORER(m_skipDtypeFunc); - if (isBasicIO()) m_skipDtypeFunc = true; - - if (m_skipDtypeFunc || m_dtypeFunc) { - declPackedArray(nodep, false); - } else { - newDeclFunc(nodep); - } - } - void declStruct(AstStructDType* const nodep, bool newFunc) { + VL_RESTORER(m_traName); FileLine* const flp = nodep->fileline(); - string prefixName(newFunc ? "name" : m_traName); + if (!nodep->packed()) { - addToSubFunc(new AstTracePushPrefix{flp, prefixName, VTracePrefixType::STRUCT_UNPACKED, - !newFunc}); + addToSubFunc( + new AstTracePushPrefix{flp, m_traName, VTracePrefixType::STRUCT_UNPACKED}); for (const AstMemberDType *itemp = nodep->membersp(), *nextp; itemp; itemp = nextp) { nextp = VN_AS(itemp->nextp(), MemberDType); AstNodeDType* const subtypep = itemp->subDTypep()->skipRefToEnump(); @@ -742,8 +618,7 @@ class TraceDeclVisitor final : public VNVisitor { } addToSubFunc(new AstTracePopPrefix{flp}); } else { - addToSubFunc(new AstTracePushPrefix{flp, prefixName, VTracePrefixType::STRUCT_PACKED, - !newFunc}); + addToSubFunc(new AstTracePushPrefix{flp, m_traName, VTracePrefixType::STRUCT_PACKED}); for (const AstMemberDType *itemp = nodep->membersp(), *nextp; itemp; itemp = nextp) { nextp = VN_AS(itemp->nextp(), MemberDType); AstNodeDType* const subtypep = itemp->subDTypep()->skipRefToEnump(); @@ -758,36 +633,9 @@ class TraceDeclVisitor final : public VNVisitor { addToSubFunc(new AstTracePopPrefix{flp}); } } - void visit(AstStructDType* nodep) override { - if (!m_traVscp) return; - - if (nodep->packed() && !v3Global.opt.traceStructs()) { - // Everything downstream is packed, so deal with as one trace unit - // This may not be the nicest for user presentation, but is - // a much faster way to trace - addTraceDecl(VNumRange{}, nodep->width()); - return; - } - - VL_RESTORER(m_skipDtypeFunc); - if (isBasicIO()) m_skipDtypeFunc = true; - - // Only create sub functions for top-level structs, i.e. don't have struct funcs - // call other struct funcs for child types. This could easily be done for decl funcs - // but full / chg funcs would require copying / aligning data for child types or more - // complicated / wonky / generalized data access. - if (m_skipDtypeFunc || m_dtypeFunc) { - declStruct(nodep, false); - } else { - newDeclFunc(nodep); - } - } void visit(AstUnionDType* nodep) override { if (!m_traVscp) return; - VL_RESTORER(m_skipDtypeFunc); - m_skipDtypeFunc = true; - if (nodep->packed() && !v3Global.opt.traceStructs()) { // Everything downstream is packed, so deal with as one trace unit // This may not be the nicest for user presentation, but is diff --git a/test_regress/t/t_flag_csplit_groups.py b/test_regress/t/t_flag_csplit_groups.py index ea7025ed3..1530bf537 100755 --- a/test_regress/t/t_flag_csplit_groups.py +++ b/test_regress/t/t_flag_csplit_groups.py @@ -125,7 +125,7 @@ test.file_grep_not(test.obj_dir + "/" + test.vm_prefix + "_classes.mk", "vm_clas test.file_grep_not(test.obj_dir + "/" + test.vm_prefix + "_classes.mk", "vm_classes_2") # Check combine count -test.file_grep(test.stats, r'Node count, CFILE + (\d+)', (276 if test.vltmt else 257)) +test.file_grep(test.stats, r'Node count, CFILE + (\d+)', (272 if test.vltmt else 255)) test.file_grep(test.stats, r'Makefile targets, VM_CLASSES_FAST + (\d+)', 2) test.file_grep(test.stats, r'Makefile targets, VM_CLASSES_SLOW + (\d+)', 2) diff --git a/test_regress/t/t_mem_trace_split.py b/test_regress/t/t_mem_trace_split.py index d5c5a9ecf..14fc22b86 100755 --- a/test_regress/t/t_mem_trace_split.py +++ b/test_regress/t/t_mem_trace_split.py @@ -15,7 +15,7 @@ test.compile(verilator_flags2=["--trace-vcd", "--trace-structs", "--output-split if test.vlt_all: test.file_grep_count(test.obj_dir + "/V" + test.name + "__Trace__0.cpp", - r'void Vt.*trace_chg_.*sub.*{', 3 if test.vltmt else 1) + r'void Vt.*trace_chg_.*sub.*{', 3) test.execute() diff --git a/test_regress/t/t_trace_type_dupes.out b/test_regress/t/t_trace_type_dupes.out deleted file mode 100644 index 0da154e43..000000000 --- a/test_regress/t/t_trace_type_dupes.out +++ /dev/null @@ -1,1622 +0,0 @@ -$version Generated by VerilatedVcd $end -$timescale 1ps $end - $scope module top $end - $var wire 1 6$ clk $end - $scope module pkg $end - $var wire 17 O% SUB_ONES [16:0] $end - $var wire 17 P% SUB_ZEROS [16:0] $end - $upscope $end - $scope module t $end - $var wire 1 6$ clk $end - $var wire 32 # cyc [31:0] $end - $var wire 4 $ x [3:0] $end - $scope module the_intf_a $end - $var wire 1 6$ clk $end - $var wire 32 4$ data [31:0] $end - $var wire 32 4$ data_typed [31:0] $end - $upscope $end - $scope module the_intf_b $end - $var wire 1 6$ clk $end - $var wire 32 5$ data [31:0] $end - $var wire 32 5$ data_typed [31:0] $end - $upscope $end - $scope module gen_loop[0] $end - $var wire 32 # loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 % a $end - $var wire 1 & b $end - $var wire 1 ' x $end - $var wire 1 ( out_2d_unpacked[0][0] $end - $var wire 1 ) out_2d_unpacked[0][1] $end - $var wire 1 * out_2d_unpacked[0][2] $end - $var wire 1 + out_2d_unpacked[0][3] $end - $var wire 1 , out_2d_unpacked[1][0] $end - $var wire 1 - out_2d_unpacked[1][1] $end - $var wire 1 . out_2d_unpacked[1][2] $end - $var wire 1 / out_2d_unpacked[1][3] $end - $var wire 1 0 out_2d_unpacked[2][0] $end - $var wire 1 1 out_2d_unpacked[2][1] $end - $var wire 1 2 out_2d_unpacked[2][2] $end - $var wire 1 3 out_2d_unpacked[2][3] $end - $var wire 290 4 data [289:0] $end - $var wire 32 # cyc [31:0] $end - $var wire 1 6$ clk $end - $var wire 290 4 the_struct [289:0] $end - $var wire 290 > the_structs[0] [289:0] $end - $var wire 290 H the_structs[1] [289:0] $end - $var wire 290 R the_structs[2] [289:0] $end - $var wire 290 \ the_structs[3] [289:0] $end - $var wire 870 7$ the_packed_structs [869:0] $end - $var wire 3 f the_local_struct [2:0] $end - $var wire 3 S$ const_struct [2:0] $end - $var wire 3 g the_typedefed_struct [2:0] $end - $scope module the_local_unpacked_struct $end - $var wire 1 h field_a $end - $var wire 1 i field_b $end - $var wire 1 j field_c $end - $upscope $end - $var wire 8 k the_local_union [7:0] $end - $var wire 64 l the_logic_array [63:0] $end - $var wire 64 n the_other_logic_array [63:0] $end - $var wire 16 p the_unpacked_array[0] [15:0] $end - $var wire 16 q the_unpacked_array[1] [15:0] $end - $var wire 16 r the_unpacked_array[2] [15:0] $end - $var wire 16 s the_unpacked_array[3] [15:0] $end - $var wire 16 t the_unpacked_array[4] [15:0] $end - $var wire 1 u the_2d_unpacked[0][0] $end - $var wire 1 v the_2d_unpacked[0][1] $end - $var wire 1 w the_2d_unpacked[0][2] $end - $var wire 1 x the_2d_unpacked[0][3] $end - $var wire 1 y the_2d_unpacked[1][0] $end - $var wire 1 z the_2d_unpacked[1][1] $end - $var wire 1 { the_2d_unpacked[1][2] $end - $var wire 1 | the_2d_unpacked[1][3] $end - $var wire 1 } the_2d_unpacked[2][0] $end - $var wire 1 ~ the_2d_unpacked[2][1] $end - $var wire 1 !! the_2d_unpacked[2][2] $end - $var wire 1 "! the_2d_unpacked[2][3] $end - $var wire 8 T$ two_fours [7:0] $end - $var wire 8 U$ two_fours_var [7:0] $end - $scope module unnamedblk1 $end - $var wire 32 #! i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 $! i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 %! i [31:0] $end - $upscope $end - $scope module unnamedblk4 $end - $var wire 32 &! i [31:0] $end - $scope module unnamedblk5 $end - $var wire 32 '! j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module gen_loop[1] $end - $var wire 32 (! loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 )! a $end - $var wire 1 *! b $end - $var wire 1 +! x $end - $var wire 1 ,! out_2d_unpacked[0][0] $end - $var wire 1 -! out_2d_unpacked[0][1] $end - $var wire 1 .! out_2d_unpacked[0][2] $end - $var wire 1 /! out_2d_unpacked[0][3] $end - $var wire 1 0! out_2d_unpacked[1][0] $end - $var wire 1 1! out_2d_unpacked[1][1] $end - $var wire 1 2! out_2d_unpacked[1][2] $end - $var wire 1 3! out_2d_unpacked[1][3] $end - $var wire 1 4! out_2d_unpacked[2][0] $end - $var wire 1 5! out_2d_unpacked[2][1] $end - $var wire 1 6! out_2d_unpacked[2][2] $end - $var wire 1 7! out_2d_unpacked[2][3] $end - $var wire 290 8! data [289:0] $end - $var wire 32 (! cyc [31:0] $end - $var wire 1 6$ clk $end - $var wire 290 8! the_struct [289:0] $end - $var wire 290 B! the_structs[0] [289:0] $end - $var wire 290 L! the_structs[1] [289:0] $end - $var wire 290 V! the_structs[2] [289:0] $end - $var wire 290 `! the_structs[3] [289:0] $end - $var wire 870 V$ the_packed_structs [869:0] $end - $var wire 3 j! the_local_struct [2:0] $end - $var wire 3 S$ const_struct [2:0] $end - $var wire 3 k! the_typedefed_struct [2:0] $end - $scope module the_local_unpacked_struct $end - $var wire 1 l! field_a $end - $var wire 1 m! field_b $end - $var wire 1 n! field_c $end - $upscope $end - $var wire 8 o! the_local_union [7:0] $end - $var wire 64 p! the_logic_array [63:0] $end - $var wire 64 r! the_other_logic_array [63:0] $end - $var wire 16 t! the_unpacked_array[0] [15:0] $end - $var wire 16 u! the_unpacked_array[1] [15:0] $end - $var wire 16 v! the_unpacked_array[2] [15:0] $end - $var wire 16 w! the_unpacked_array[3] [15:0] $end - $var wire 16 x! the_unpacked_array[4] [15:0] $end - $var wire 1 y! the_2d_unpacked[0][0] $end - $var wire 1 z! the_2d_unpacked[0][1] $end - $var wire 1 {! the_2d_unpacked[0][2] $end - $var wire 1 |! the_2d_unpacked[0][3] $end - $var wire 1 }! the_2d_unpacked[1][0] $end - $var wire 1 ~! the_2d_unpacked[1][1] $end - $var wire 1 !" the_2d_unpacked[1][2] $end - $var wire 1 "" the_2d_unpacked[1][3] $end - $var wire 1 #" the_2d_unpacked[2][0] $end - $var wire 1 $" the_2d_unpacked[2][1] $end - $var wire 1 %" the_2d_unpacked[2][2] $end - $var wire 1 &" the_2d_unpacked[2][3] $end - $var wire 8 T$ two_fours [7:0] $end - $var wire 8 r$ two_fours_var [7:0] $end - $scope module unnamedblk1 $end - $var wire 32 '" i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 (" i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 )" i [31:0] $end - $upscope $end - $scope module unnamedblk4 $end - $var wire 32 *" i [31:0] $end - $scope module unnamedblk5 $end - $var wire 32 +" j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module gen_loop[2] $end - $var wire 32 ," loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 -" a $end - $var wire 1 ." b $end - $var wire 1 /" x $end - $var wire 1 0" out_2d_unpacked[0][0] $end - $var wire 1 1" out_2d_unpacked[0][1] $end - $var wire 1 2" out_2d_unpacked[0][2] $end - $var wire 1 3" out_2d_unpacked[0][3] $end - $var wire 1 4" out_2d_unpacked[1][0] $end - $var wire 1 5" out_2d_unpacked[1][1] $end - $var wire 1 6" out_2d_unpacked[1][2] $end - $var wire 1 7" out_2d_unpacked[1][3] $end - $var wire 1 8" out_2d_unpacked[2][0] $end - $var wire 1 9" out_2d_unpacked[2][1] $end - $var wire 1 :" out_2d_unpacked[2][2] $end - $var wire 1 ;" out_2d_unpacked[2][3] $end - $var wire 290 <" data [289:0] $end - $var wire 32 ," cyc [31:0] $end - $var wire 1 6$ clk $end - $var wire 290 <" the_struct [289:0] $end - $var wire 290 F" the_structs[0] [289:0] $end - $var wire 290 P" the_structs[1] [289:0] $end - $var wire 290 Z" the_structs[2] [289:0] $end - $var wire 290 d" the_structs[3] [289:0] $end - $var wire 870 s$ the_packed_structs [869:0] $end - $var wire 3 n" the_local_struct [2:0] $end - $var wire 3 S$ const_struct [2:0] $end - $var wire 3 o" the_typedefed_struct [2:0] $end - $scope module the_local_unpacked_struct $end - $var wire 1 p" field_a $end - $var wire 1 q" field_b $end - $var wire 1 r" field_c $end - $upscope $end - $var wire 8 s" the_local_union [7:0] $end - $var wire 64 t" the_logic_array [63:0] $end - $var wire 64 v" the_other_logic_array [63:0] $end - $var wire 16 x" the_unpacked_array[0] [15:0] $end - $var wire 16 y" the_unpacked_array[1] [15:0] $end - $var wire 16 z" the_unpacked_array[2] [15:0] $end - $var wire 16 {" the_unpacked_array[3] [15:0] $end - $var wire 16 |" the_unpacked_array[4] [15:0] $end - $var wire 1 }" the_2d_unpacked[0][0] $end - $var wire 1 ~" the_2d_unpacked[0][1] $end - $var wire 1 !# the_2d_unpacked[0][2] $end - $var wire 1 "# the_2d_unpacked[0][3] $end - $var wire 1 ## the_2d_unpacked[1][0] $end - $var wire 1 $# the_2d_unpacked[1][1] $end - $var wire 1 %# the_2d_unpacked[1][2] $end - $var wire 1 &# the_2d_unpacked[1][3] $end - $var wire 1 '# the_2d_unpacked[2][0] $end - $var wire 1 (# the_2d_unpacked[2][1] $end - $var wire 1 )# the_2d_unpacked[2][2] $end - $var wire 1 *# the_2d_unpacked[2][3] $end - $var wire 8 T$ two_fours [7:0] $end - $var wire 8 1% two_fours_var [7:0] $end - $scope module unnamedblk1 $end - $var wire 32 +# i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 ,# i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 -# i [31:0] $end - $upscope $end - $scope module unnamedblk4 $end - $var wire 32 .# i [31:0] $end - $scope module unnamedblk5 $end - $var wire 32 /# j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module gen_loop[3] $end - $var wire 32 0# loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 1# a $end - $var wire 1 2# b $end - $var wire 1 3# x $end - $var wire 1 4# out_2d_unpacked[0][0] $end - $var wire 1 5# out_2d_unpacked[0][1] $end - $var wire 1 6# out_2d_unpacked[0][2] $end - $var wire 1 7# out_2d_unpacked[0][3] $end - $var wire 1 8# out_2d_unpacked[1][0] $end - $var wire 1 9# out_2d_unpacked[1][1] $end - $var wire 1 :# out_2d_unpacked[1][2] $end - $var wire 1 ;# out_2d_unpacked[1][3] $end - $var wire 1 <# out_2d_unpacked[2][0] $end - $var wire 1 =# out_2d_unpacked[2][1] $end - $var wire 1 ># out_2d_unpacked[2][2] $end - $var wire 1 ?# out_2d_unpacked[2][3] $end - $var wire 290 @# data [289:0] $end - $var wire 32 0# cyc [31:0] $end - $var wire 1 6$ clk $end - $var wire 290 @# the_struct [289:0] $end - $var wire 290 J# the_structs[0] [289:0] $end - $var wire 290 T# the_structs[1] [289:0] $end - $var wire 290 ^# the_structs[2] [289:0] $end - $var wire 290 h# the_structs[3] [289:0] $end - $var wire 870 2% the_packed_structs [869:0] $end - $var wire 3 r# the_local_struct [2:0] $end - $var wire 3 S$ const_struct [2:0] $end - $var wire 3 s# the_typedefed_struct [2:0] $end - $scope module the_local_unpacked_struct $end - $var wire 1 t# field_a $end - $var wire 1 u# field_b $end - $var wire 1 v# field_c $end - $upscope $end - $var wire 8 w# the_local_union [7:0] $end - $var wire 64 x# the_logic_array [63:0] $end - $var wire 64 z# the_other_logic_array [63:0] $end - $var wire 16 |# the_unpacked_array[0] [15:0] $end - $var wire 16 }# the_unpacked_array[1] [15:0] $end - $var wire 16 ~# the_unpacked_array[2] [15:0] $end - $var wire 16 !$ the_unpacked_array[3] [15:0] $end - $var wire 16 "$ the_unpacked_array[4] [15:0] $end - $var wire 1 #$ the_2d_unpacked[0][0] $end - $var wire 1 $$ the_2d_unpacked[0][1] $end - $var wire 1 %$ the_2d_unpacked[0][2] $end - $var wire 1 &$ the_2d_unpacked[0][3] $end - $var wire 1 '$ the_2d_unpacked[1][0] $end - $var wire 1 ($ the_2d_unpacked[1][1] $end - $var wire 1 )$ the_2d_unpacked[1][2] $end - $var wire 1 *$ the_2d_unpacked[1][3] $end - $var wire 1 +$ the_2d_unpacked[2][0] $end - $var wire 1 ,$ the_2d_unpacked[2][1] $end - $var wire 1 -$ the_2d_unpacked[2][2] $end - $var wire 1 .$ the_2d_unpacked[2][3] $end - $var wire 8 T$ two_fours [7:0] $end - $var wire 8 N% two_fours_var [7:0] $end - $scope module unnamedblk1 $end - $var wire 32 /$ i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 0$ i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 1$ i [31:0] $end - $upscope $end - $scope module unnamedblk4 $end - $var wire 32 2$ i [31:0] $end - $scope module unnamedblk5 $end - $var wire 32 3$ j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end -$enddefinitions $end - - -#0 -b00000000000000000000000000000000 # -b0000 $ -0% -0& -0' -0( -0) -0* -0+ -0, -0- -0. -0/ -00 -01 -02 -03 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 H -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 R -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 \ -b000 f -b000 g -0h -0i -0j -b00000000 k -b0000000000000000000000000000000000000000000000000000000000000000 l -b0000000000000000000000000000000000000000000000000000000000000000 n -b0000000000000000 p -b0000000000000000 q -b0000000000000000 r -b0000000000000000 s -b0000000000000000 t -0u -0v -0w -0x -0y -0z -0{ -0| -0} -0~ -0!! -0"! -b00000000000000000000000000000000 #! -b00000000000000000000000000000000 $! -b00000000000000000000000000000000 %! -b00000000000000000000000000000000 &! -b00000000000000000000000000000000 '! -b00000000000000000000000000000001 (! -0)! -0*! -0+! -0,! -0-! -0.! -0/! -00! -01! -02! -03! -04! -05! -06! -07! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 8! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 L! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 V! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 `! -b000 j! -b000 k! -0l! -0m! -0n! -b00000000 o! -b0000000000000000000000000000000000000000000000000000000000000000 p! -b0000000000000000000000000000000000000000000000000000000000000000 r! -b0000000000000000 t! -b0000000000000000 u! -b0000000000000000 v! -b0000000000000000 w! -b0000000000000000 x! -0y! -0z! -0{! -0|! -0}! -0~! -0!" -0"" -0#" -0$" -0%" -0&" -b00000000000000000000000000000000 '" -b00000000000000000000000000000000 (" -b00000000000000000000000000000000 )" -b00000000000000000000000000000000 *" -b00000000000000000000000000000000 +" -b00000000000000000000000000000010 ," -0-" -0." -0/" -00" -01" -02" -03" -04" -05" -06" -07" -08" -09" -0:" -0;" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 <" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 F" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 P" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Z" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 d" -b000 n" -b000 o" -0p" -0q" -0r" -b00000000 s" -b0000000000000000000000000000000000000000000000000000000000000000 t" -b0000000000000000000000000000000000000000000000000000000000000000 v" -b0000000000000000 x" -b0000000000000000 y" -b0000000000000000 z" -b0000000000000000 {" -b0000000000000000 |" -0}" -0~" -0!# -0"# -0## -0$# -0%# -0&# -0'# -0(# -0)# -0*# -b00000000000000000000000000000000 +# -b00000000000000000000000000000000 ,# -b00000000000000000000000000000000 -# -b00000000000000000000000000000000 .# -b00000000000000000000000000000000 /# -b00000000000000000000000000000011 0# -01# -02# -03# -04# -05# -06# -07# -08# -09# -0:# -0;# -0<# -0=# -0># -0?# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 J# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ^# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 h# -b000 r# -b000 s# -0t# -0u# -0v# -b00000000 w# -b0000000000000000000000000000000000000000000000000000000000000000 x# -b0000000000000000000000000000000000000000000000000000000000000000 z# -b0000000000000000 |# -b0000000000000000 }# -b0000000000000000 ~# -b0000000000000000 !$ -b0000000000000000 "$ -0#$ -0$$ -0%$ -0&$ -0'$ -0($ -0)$ -0*$ -0+$ -0,$ -0-$ -0.$ -b00000000000000000000000000000000 /$ -b00000000000000000000000000000000 0$ -b00000000000000000000000000000000 1$ -b00000000000000000000000000000000 2$ -b00000000000000000000000000000000 3$ -b00000100000000110000001000000001 4$ -b00000101000001000000001100000010 5$ -06$ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 7$ -b101 S$ -b10101011 T$ -b00000000 U$ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 V$ -b00000000 r$ -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 s$ -b00000000 1% -b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 2% -b00000000 N% -b11111111111111111 O% -b00000000000000000 P% -#10 -b00000000000000000000000000000001 # -1% -b00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000100000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 4 -b0000000000000000000000000000000100000000000000000000000000000000 l -b0000000000000000000000000111110000000000000000000000000001111011 n -1u -1v -1w -1x -1y -1z -1{ -1| -1} -1~ -1!! -1"! -b00000000000000000000000000000100 #! -b00000000000000000000000000000010 $! -b00000000000000000000000000000101 %! -b00000000000000000000000000000011 &! -b00000000000000000000000000000100 '! -b00000000000000000000000000000010 (! -1)! -1-! -1.! -1/! -10! -14! -b10000000000000000000000000000000100000000000000000000000000000010000000000000000000000000000000110000000000000000000000000000010000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000010000000001 8! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 B! -b001 j! -1l! -b00000001 o! -b0000000000000000000000000000001000000000000000000000000000000001 p! -b0000000000000000000000000111110100000000000000000000000001111100 r! -b0000000000000001 t! -b0000000000000001 u! -b0000000000000001 v! -b0000000000000001 w! -b0000000000000001 x! -1y! -1~! -1!" -1"" -1$" -1%" -1&" -b00000000000000000000000000000100 '" -b00000000000000000000000000000010 (" -b00000000000000000000000000000101 )" -b00000000000000000000000000000011 *" -b00000000000000000000000000000100 +" -b00000000000000000000000000000011 ," -11" -14" -16" -17" -19" -b00000000000000000000000000000001000000000000000000000000000000011000000000000000000000000000001000000000000000000000000000000010100000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000000010 <" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 P" -b010 n" -b001 o" -1q" -b00000010 s" -b0000000000000000000000000000001100000000000000000000000000000010 t" -b0000000000000000000000000111111000000000000000000000000001111101 v" -b0000000000000010 x" -b0000000000000010 y" -b0000000000000010 z" -b0000000000000010 {" -b0000000000000010 |" -1}" -1!# -1"# -1$# -1'# -1)# -1*# -b00000000000000000000000000000100 +# -b00000000000000000000000000000010 ,# -b00000000000000000000000000000101 -# -b00000000000000000000000000000011 .# -b00000000000000000000000000000100 /# -b00000000000000000000000000000100 0# -16# -17# -1:# -1;# -1<# -1=# -b10000000000000000000000000000001100000000000000000000000000000100000000000000000000000000000001010000000000000000000000000000011000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000110000000011 @# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 J# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 T# -b011 r# -b001 s# -1t# -1u# -b00000011 w# -b0000000000000000000000000000010000000000000000000000000000000011 x# -b0000000000000000000000000111111100000000000000000000000001111110 z# -b0000000000000011 |# -b0000000000000011 }# -b0000000000000011 ~# -b0000000000000011 !$ -b0000000000000011 "$ -1#$ -1$$ -1'$ -1($ -1-$ -1.$ -b00000000000000000000000000000100 /$ -b00000000000000000000000000000010 0$ -b00000000000000000000000000000101 1$ -b00000000000000000000000000000011 2$ -b00000000000000000000000000000100 3$ -b00000101000001000000001100000010 4$ -b00000110000001010000010000000011 5$ -16$ -#15 -06$ -#20 -b00000000000000000000000000000010 # -b0011 $ -0% -1& -1' -1) -1* -1+ -1, -10 -b10000000000000000000000000000000100000000000000000000000000000010000000000000000000000000000000110000000000000000000000000000010000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000010000000001 4 -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 > -b001 f -1h -b00000001 k -b0000000000000000000000000000001000000000000000000000000000000001 l -b0000000000000000000000000111110100000000000000000000000001111100 n -b0000000000000001 p -b0000000000000001 q -b0000000000000001 r -b0000000000000001 s -b0000000000000001 t -0v -0w -0x -0y -0} -b00000000000000000000000000000011 (! -1+! -0.! -0/! -12! -13! -04! -15! -b00000000000000000000000000000001000000000000000000000000000000011000000000000000000000000000001000000000000000000000000000000010100000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000000010 8! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 L! -b010 j! -b001 k! -0l! -1m! -b00000010 o! -b0000000000000000000000000000001100000000000000000000000000000010 p! -b0000000000000000000000000111111000000000000000000000000001111101 r! -b0000000000000010 t! -b0000000000000010 u! -b0000000000000010 v! -b0000000000000010 w! -b0000000000000010 x! -1{! -1|! -0!" -0"" -1#" -0$" -b00000000000000000000000000000100 ," -1-" -01" -12" -13" -04" -18" -b10000000000000000000000000000001100000000000000000000000000000100000000000000000000000000000001010000000000000000000000000000011000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000110000000011 <" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 F" -b011 n" -1p" -b00000011 s" -b0000000000000000000000000000010000000000000000000000000000000011 t" -b0000000000000000000000000111111100000000000000000000000001111110 v" -b0000000000000011 x" -b0000000000000011 y" -b0000000000000011 z" -b0000000000000011 {" -b0000000000000011 |" -1~" -0!# -0"# -1## -0'# -b00000000000000000000000000000101 0# -07# -0;# -1?# -b00000000000000000000000000000010000000000000000000000000000000101000000000000000000000000000001100000000000000000000000000000011100000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000001000000000100 @# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 J# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ^# -b100 r# -b010 s# -0t# -0u# -1v# -b00000100 w# -b0000000000000000000000000000010100000000000000000000000000000100 x# -b0000000000000000000000001000000000000000000000000000000001111111 z# -b0000000000000100 |# -b0000000000000100 }# -b0000000000000100 ~# -b0000000000000100 !$ -b0000000000000100 "$ -1&$ -1*$ -0.$ -b00000110000001010000010000000011 4$ -b00000111000001100000010100000100 5$ -16$ -#25 -06$ -#30 -b00000000000000000000000000000011 # -b0111 $ -1% -0* -0+ -1. -1/ -00 -11 -b00000000000000000000000000000001000000000000000000000000000000011000000000000000000000000000001000000000000000000000000000000010100000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000000010 4 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 H -b010 f -b001 g -0h -1i -b00000010 k -b0000000000000000000000000000001100000000000000000000000000000010 l -b0000000000000000000000000111111000000000000000000000000001111101 n -b0000000000000010 p -b0000000000000010 q -b0000000000000010 r -b0000000000000010 s -b0000000000000010 t -1w -1x -0{ -0| -1} -0~ -b00000000000000000000000000000100 (! -0)! -1*! -0-! -1.! -1/! -00! -14! -b10000000000000000000000000000001100000000000000000000000000000100000000000000000000000000000001010000000000000000000000000000011000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000110000000011 8! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 B! -b011 j! -1l! -b00000011 o! -b0000000000000000000000000000010000000000000000000000000000000011 p! -b0000000000000000000000000111111100000000000000000000000001111110 r! -b0000000000000011 t! -b0000000000000011 u! -b0000000000000011 v! -b0000000000000011 w! -b0000000000000011 x! -1z! -0{! -0|! -1}! -0#" -b00000000000000000000000000000101 ," -1/" -03" -07" -1;" -b00000000000000000000000000000010000000000000000000000000000000101000000000000000000000000000001100000000000000000000000000000011100000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000001000000000100 <" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 F" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 P" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 Z" -b100 n" -b010 o" -0p" -0q" -1r" -b00000100 s" -b0000000000000000000000000000010100000000000000000000000000000100 t" -b0000000000000000000000001000000000000000000000000000000001111111 v" -b0000000000000100 x" -b0000000000000100 y" -b0000000000000100 z" -b0000000000000100 {" -b0000000000000100 |" -1"# -1&# -0*# -b00000000000000000000000000000110 0# -15# -06# -17# -18# -0<# -b10000000000000000000000000000010100000000000000000000000000000110000000000000000000000000000001110000000000000000000000000000100000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010110001010000000101 @# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 J# -b101 r# -1t# -b00000101 w# -b0000000000000000000000000000011000000000000000000000000000000101 x# -b0000000000000000000000001000000100000000000000000000000010000000 z# -b0000000000000101 |# -b0000000000000101 }# -b0000000000000101 ~# -b0000000000000101 !$ -b0000000000000101 "$ -0$$ -1%$ -0&$ -0'$ -1+$ -b00000111000001100000010100000100 4$ -b00001000000001110000011000000101 5$ -16$ -#35 -06$ -#40 -b00000000000000000000000000000100 # -b0110 $ -0% -0& -0' -0) -1* -1+ -0, -10 -b10000000000000000000000000000001100000000000000000000000000000100000000000000000000000000000001010000000000000000000000000000011000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001110000110000000011 4 -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 > -b011 f -1h -b00000011 k -b0000000000000000000000000000010000000000000000000000000000000011 l -b0000000000000000000000000111111100000000000000000000000001111110 n -b0000000000000011 p -b0000000000000011 q -b0000000000000011 r -b0000000000000011 s -b0000000000000011 t -1v -0w -0x -1y -0} -b00000000000000000000000000000101 (! -0/! -03! -17! -b00000000000000000000000000000010000000000000000000000000000000101000000000000000000000000000001100000000000000000000000000000011100000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000001000000000100 8! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 L! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 V! -b100 j! -b010 k! -0l! -0m! -1n! -b00000100 o! -b0000000000000000000000000000010100000000000000000000000000000100 p! -b0000000000000000000000001000000000000000000000000000000001111111 r! -b0000000000000100 t! -b0000000000000100 u! -b0000000000000100 v! -b0000000000000100 w! -b0000000000000100 x! -1|! -1"" -0&" -b00000000000000000000000000000110 ," -11" -02" -13" -14" -08" -b10000000000000000000000000000010100000000000000000000000000000110000000000000000000000000000001110000000000000000000000000000100000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010110001010000000101 <" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 F" -b101 n" -1p" -b00000101 s" -b0000000000000000000000000000011000000000000000000000000000000101 t" -b0000000000000000000000001000000100000000000000000000000010000000 v" -b0000000000000101 x" -b0000000000000101 y" -b0000000000000101 z" -b0000000000000101 {" -b0000000000000101 |" -0~" -1!# -0"# -0## -1'# -b00000000000000000000000000000111 0# -16# -07# -0:# -1;# -1<# -0=# -b00000000000000000000000000000011000000000000000000000000000000111000000000000000000000000000010000000000000000000000000000000100100000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000001100000000110 @# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 J# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 T# -b110 r# -b011 s# -0t# -1u# -b00000110 w# -b0000000000000000000000000000011100000000000000000000000000000110 x# -b0000000000000000000000001000001000000000000000000000000010000001 z# -b0000000000000110 |# -b0000000000000110 }# -b0000000000000110 ~# -b0000000000000110 !$ -b0000000000000110 "$ -0%$ -1&$ -1)$ -0*$ -0+$ -1,$ -b00001000000001110000011000000101 4$ -b00001001000010000000011100000110 5$ -16$ -#45 -06$ -#50 -b00000000000000000000000000000101 # -1% -0+ -0/ -13 -b00000000000000000000000000000010000000000000000000000000000000101000000000000000000000000000001100000000000000000000000000000011100000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000001000000000100 4 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 H -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 R -b100 f -b010 g -0h -0i -1j -b00000100 k -b0000000000000000000000000000010100000000000000000000000000000100 l -b0000000000000000000000001000000000000000000000000000000001111111 n -b0000000000000100 p -b0000000000000100 q -b0000000000000100 r -b0000000000000100 s -b0000000000000100 t -1x -1| -0"! -b00000000000000000000000000000110 (! -1)! -1-! -0.! -1/! -10! -04! -b10000000000000000000000000000010100000000000000000000000000000110000000000000000000000000000001110000000000000000000000000000100000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010110001010000000101 8! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 B! -b101 j! -1l! -b00000101 o! -b0000000000000000000000000000011000000000000000000000000000000101 p! -b0000000000000000000000001000000100000000000000000000000010000000 r! -b0000000000000101 t! -b0000000000000101 u! -b0000000000000101 v! -b0000000000000101 w! -b0000000000000101 x! -0z! -1{! -0|! -0}! -1#" -b00000000000000000000000000000111 ," -12" -03" -06" -17" -18" -09" -b00000000000000000000000000000011000000000000000000000000000000111000000000000000000000000000010000000000000000000000000000000100100000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000001100000000110 <" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 F" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 P" -b110 n" -b011 o" -0p" -1q" -b00000110 s" -b0000000000000000000000000000011100000000000000000000000000000110 t" -b0000000000000000000000001000001000000000000000000000000010000001 v" -b0000000000000110 x" -b0000000000000110 y" -b0000000000000110 z" -b0000000000000110 {" -b0000000000000110 |" -0!# -1"# -1%# -0&# -0'# -1(# -b00000000000000000000000000001000 0# -11# -05# -06# -17# -08# -0<# -b10000000000000000000000000000011100000000000000000000000000001000000000000000000000000000000010010000000000000000000000000000101000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110001110000000111 @# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 J# -b111 r# -1t# -b00000111 w# -b0000000000000000000000000000100000000000000000000000000000000111 x# -b0000000000000000000000001000001100000000000000000000000010000010 z# -b0000000000000111 |# -b0000000000000111 }# -b0000000000000111 ~# -b0000000000000111 !$ -b0000000000000111 "$ -1$$ -1%$ -0&$ -1'$ -1+$ -b00001001000010000000011100000110 4$ -b00001010000010010000100000000111 5$ -16$ -#55 -06$ -#60 -b00000000000000000000000000000110 # -b1101 $ -0% -1& -1' -1) -0* -1+ -1, -00 -b10000000000000000000000000000010100000000000000000000000000000110000000000000000000000000000001110000000000000000000000000000100000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010110001010000000101 4 -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 > -b101 f -1h -b00000101 k -b0000000000000000000000000000011000000000000000000000000000000101 l -b0000000000000000000000001000000100000000000000000000000010000000 n -b0000000000000101 p -b0000000000000101 q -b0000000000000101 r -b0000000000000101 s -b0000000000000101 t -0v -1w -0x -0y -1} -b00000000000000000000000000000111 (! -0+! -1.! -0/! -02! -13! -14! -05! -b00000000000000000000000000000011000000000000000000000000000000111000000000000000000000000000010000000000000000000000000000000100100000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000001100000000110 8! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 L! -b110 j! -b011 k! -0l! -1m! -b00000110 o! -b0000000000000000000000000000011100000000000000000000000000000110 p! -b0000000000000000000000001000001000000000000000000000000010000001 r! -b0000000000000110 t! -b0000000000000110 u! -b0000000000000110 v! -b0000000000000110 w! -b0000000000000110 x! -0{! -1|! -1!" -0"" -0#" -1$" -b00000000000000000000000000001000 ," -0-" -1." -01" -02" -13" -04" -08" -b10000000000000000000000000000011100000000000000000000000000001000000000000000000000000000000010010000000000000000000000000000101000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110001110000000111 <" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 F" -b111 n" -1p" -b00000111 s" -b0000000000000000000000000000100000000000000000000000000000000111 t" -b0000000000000000000000001000001100000000000000000000000010000010 v" -b0000000000000111 x" -b0000000000000111 y" -b0000000000000111 z" -b0000000000000111 {" -b0000000000000111 |" -1~" -1!# -0"# -1## -1'# -b00000000000000000000000000001001 0# -13# -b00000000000000000000000000000100000000000000000000000000000001001000000000000000000000000000010100000000000000000000000000000101100000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000001000 @# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 J# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ^# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 h# -b000 r# -b100 s# -0t# -0u# -0v# -b00001000 w# -b0000000000000000000000000000100100000000000000000000000000001000 x# -b0000000000000000000000001000010000000000000000000000000010000011 z# -b0000000000001000 |# -b0000000000001000 }# -b0000000000001000 ~# -b0000000000001000 !$ -b0000000000001000 "$ -b00001010000010010000100000000111 4$ -b00001011000010100000100100001000 5$ -16$ -#65 -06$ -#70 -b00000000000000000000000000000111 # -1% -1* -0+ -0. -1/ -10 -01 -b00000000000000000000000000000011000000000000000000000000000000111000000000000000000000000000010000000000000000000000000000000100100000000000001100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000001100000000110 4 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 H -b110 f -b011 g -0h -1i -b00000110 k -b0000000000000000000000000000011100000000000000000000000000000110 l -b0000000000000000000000001000001000000000000000000000000010000001 n -b0000000000000110 p -b0000000000000110 q -b0000000000000110 r -b0000000000000110 s -b0000000000000110 t -0w -1x -1{ -0| -0} -1~ -b00000000000000000000000000001000 (! -0)! -0*! -0-! -0.! -1/! -00! -04! -b10000000000000000000000000000011100000000000000000000000000001000000000000000000000000000000010010000000000000000000000000000101000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110001110000000111 8! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 B! -b111 j! -1l! -b00000111 o! -b0000000000000000000000000000100000000000000000000000000000000111 p! -b0000000000000000000000001000001100000000000000000000000010000010 r! -b0000000000000111 t! -b0000000000000111 u! -b0000000000000111 v! -b0000000000000111 w! -b0000000000000111 x! -1z! -1{! -0|! -1}! -1#" -b00000000000000000000000000001001 ," -b00000000000000000000000000000100000000000000000000000000000001001000000000000000000000000000010100000000000000000000000000000101100000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000001000 <" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 F" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 P" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Z" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 d" -b000 n" -b100 o" -0p" -0q" -0r" -b00001000 s" -b0000000000000000000000000000100100000000000000000000000000001000 t" -b0000000000000000000000001000010000000000000000000000000010000011 v" -b0000000000001000 x" -b0000000000001000 y" -b0000000000001000 z" -b0000000000001000 {" -b0000000000001000 |" -b00000000000000000000000000001010 0# -15# -16# -07# -18# -1<# -b10000000000000000000000000000100100000000000000000000000000001010000000000000000000000000000010110000000000000000000000000000110000000000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100110010010000001001 @# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 J# -b001 r# -1t# -b00001001 w# -b0000000000000000000000000000101000000000000000000000000000001001 x# -b0000000000000000000000001000010100000000000000000000000010000100 z# -b0000000000001001 |# -b0000000000001001 }# -b0000000000001001 ~# -b0000000000001001 !$ -b0000000000001001 "$ -0$$ -0%$ -1&$ -0'$ -0+$ -b00001011000010100000100100001000 4$ -b00001100000010110000101000001001 5$ -16$ -#75 -06$ -#80 -b00000000000000000000000000001000 # -b1100 $ -0% -0& -0' -0) -0* -1+ -0, -00 -b10000000000000000000000000000011100000000000000000000000000001000000000000000000000000000000010010000000000000000000000000000101000000000000001110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011110001110000000111 4 -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 > -b111 f -1h -b00000111 k -b0000000000000000000000000000100000000000000000000000000000000111 l -b0000000000000000000000001000001100000000000000000000000010000010 n -b0000000000000111 p -b0000000000000111 q -b0000000000000111 r -b0000000000000111 s -b0000000000000111 t -1v -1w -0x -1y -1} -b00000000000000000000000000001001 (! -b00000000000000000000000000000100000000000000000000000000000001001000000000000000000000000000010100000000000000000000000000000101100000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000001000 8! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 L! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 V! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 `! -b000 j! -b100 k! -0l! -0m! -0n! -b00001000 o! -b0000000000000000000000000000100100000000000000000000000000001000 p! -b0000000000000000000000001000010000000000000000000000000010000011 r! -b0000000000001000 t! -b0000000000001000 u! -b0000000000001000 v! -b0000000000001000 w! -b0000000000001000 x! -b00000000000000000000000000001010 ," -11" -12" -03" -14" -18" -b10000000000000000000000000000100100000000000000000000000000001010000000000000000000000000000010110000000000000000000000000000110000000000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100110010010000001001 <" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 F" -b001 n" -1p" -b00001001 s" -b0000000000000000000000000000101000000000000000000000000000001001 t" -b0000000000000000000000001000010100000000000000000000000010000100 v" -b0000000000001001 x" -b0000000000001001 y" -b0000000000001001 z" -b0000000000001001 {" -b0000000000001001 |" -0~" -0!# -1"# -0## -0'# -b00000000000000000000000000001011 0# -06# -17# -1:# -0;# -0<# -1=# -b00000000000000000000000000000101000000000000000000000000000001011000000000000000000000000000011000000000000000000000000000000110100000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000010100000001010 @# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 J# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 T# -b010 r# -b101 s# -0t# -1u# -b00001010 w# -b0000000000000000000000000000101100000000000000000000000000001010 x# -b0000000000000000000000001000011000000000000000000000000010000101 z# -b0000000000001010 |# -b0000000000001010 }# -b0000000000001010 ~# -b0000000000001010 !$ -b0000000000001010 "$ -1%$ -0&$ -0)$ -1*$ -1+$ -0,$ -b00001100000010110000101000001001 4$ -b00001101000011000000101100001010 5$ -16$ -#85 -06$ -#90 -b00000000000000000000000000001001 # -1% -b00000000000000000000000000000100000000000000000000000000000001001000000000000000000000000000010100000000000000000000000000000101100000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000001000 4 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 > -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 H -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 R -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 \ -b000 f -b100 g -0h -0i -0j -b00001000 k -b0000000000000000000000000000100100000000000000000000000000001000 l -b0000000000000000000000001000010000000000000000000000000010000011 n -b0000000000001000 p -b0000000000001000 q -b0000000000001000 r -b0000000000001000 s -b0000000000001000 t -b00000000000000000000000000001010 (! -1)! -1-! -1.! -0/! -10! -14! -b10000000000000000000000000000100100000000000000000000000000001010000000000000000000000000000010110000000000000000000000000000110000000000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100110010010000001001 8! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 B! -b001 j! -1l! -b00001001 o! -b0000000000000000000000000000101000000000000000000000000000001001 p! -b0000000000000000000000001000010100000000000000000000000010000100 r! -b0000000000001001 t! -b0000000000001001 u! -b0000000000001001 v! -b0000000000001001 w! -b0000000000001001 x! -0z! -0{! -1|! -0}! -0#" -b00000000000000000000000000001011 ," -02" -13" -16" -07" -08" -19" -b00000000000000000000000000000101000000000000000000000000000001011000000000000000000000000000011000000000000000000000000000000110100000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000010100000001010 <" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 F" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 P" -b010 n" -b101 o" -0p" -1q" -b00001010 s" -b0000000000000000000000000000101100000000000000000000000000001010 t" -b0000000000000000000000001000011000000000000000000000000010000101 v" -b0000000000001010 x" -b0000000000001010 y" -b0000000000001010 z" -b0000000000001010 {" -b0000000000001010 |" -1!# -0"# -0%# -1&# -1'# -0(# -b00000000000000000000000000001100 0# -05# -16# -07# -08# -1<# -b10000000000000000000000000000101100000000000000000000000000001100000000000000000000000000000011010000000000000000000000000000111000000000000010110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101110010110000001011 @# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 J# -b011 r# -1t# -b00001011 w# -b0000000000000000000000000000110000000000000000000000000000001011 x# -b0000000000000000000000001000011100000000000000000000000010000110 z# -b0000000000001011 |# -b0000000000001011 }# -b0000000000001011 ~# -b0000000000001011 !$ -b0000000000001011 "$ -1$$ -0%$ -1&$ -1'$ -0+$ -b00001101000011000000101100001010 4$ -b00001110000011010000110000001011 5$ -16$ -#95 -06$ -#100 -b00000000000000000000000000001010 # -b1111 $ -0% -1& -1' -1) -1* -0+ -1, -10 -b10000000000000000000000000000100100000000000000000000000000001010000000000000000000000000000010110000000000000000000000000000110000000000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100110010010000001001 4 -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 > -b001 f -1h -b00001001 k -b0000000000000000000000000000101000000000000000000000000000001001 l -b0000000000000000000000001000010100000000000000000000000010000100 n -b0000000000001001 p -b0000000000001001 q -b0000000000001001 r -b0000000000001001 s -b0000000000001001 t -0v -0w -1x -0y -0} -b00000000000000000000000000001011 (! -1+! -0.! -1/! -12! -03! -04! -15! -b00000000000000000000000000000101000000000000000000000000000001011000000000000000000000000000011000000000000000000000000000000110100000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000010100000001010 8! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 B! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 L! -b010 j! -b101 k! -0l! -1m! -b00001010 o! -b0000000000000000000000000000101100000000000000000000000000001010 p! -b0000000000000000000000001000011000000000000000000000000010000101 r! -b0000000000001010 t! -b0000000000001010 u! -b0000000000001010 v! -b0000000000001010 w! -b0000000000001010 x! -1{! -0|! -0!" -1"" -1#" -0$" -b00000000000000000000000000001100 ," -1-" -01" -12" -03" -04" -18" -b10000000000000000000000000000101100000000000000000000000000001100000000000000000000000000000011010000000000000000000000000000111000000000000010110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101110010110000001011 <" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 F" -b011 n" -1p" -b00001011 s" -b0000000000000000000000000000110000000000000000000000000000001011 t" -b0000000000000000000000001000011100000000000000000000000010000110 v" -b0000000000001011 x" -b0000000000001011 y" -b0000000000001011 z" -b0000000000001011 {" -b0000000000001011 |" -1~" -0!# -1"# -1## -0'# -b00000000000000000000000000001101 0# -17# -1;# -0?# -b00000000000000000000000000000110000000000000000000000000000001101000000000000000000000000000011100000000000000000000000000000111100000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000011000000001100 @# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 J# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ^# -b100 r# -b110 s# -0t# -0u# -1v# -b00001100 w# -b0000000000000000000000000000110100000000000000000000000000001100 x# -b0000000000000000000000001000100000000000000000000000000010000111 z# -b0000000000001100 |# -b0000000000001100 }# -b0000000000001100 ~# -b0000000000001100 !$ -b0000000000001100 "$ -0&$ -0*$ -1.$ -b00001110000011010000110000001011 4$ -b00001111000011100000110100001100 5$ -16$ diff --git a/test_regress/t/t_trace_type_dupes.py b/test_regress/t/t_trace_type_dupes.py deleted file mode 100755 index 5e3edff09..000000000 --- a/test_regress/t/t_trace_type_dupes.py +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env python3 -# DESCRIPTION: Verilator: Verilog Test driver/expect definition -# -# Copyright 2024 by Wilson Snyder. This program is free software; you -# can redistribute it and/or modify it under the terms of either the GNU -# Lesser General Public License Version 3 or the Perl Artistic License -# Version 2.0. -# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 - -import vltest_bootstrap - -test.scenarios("simulator_st") - -test.compile(verilator_flags2=["--trace"]) - -test.execute() - -test.vcd_identical(test.trace_filename, test.golden_filename) - -test.passes() diff --git a/test_regress/t/t_trace_type_dupes.v b/test_regress/t/t_trace_type_dupes.v deleted file mode 100644 index ddc83b1f3..000000000 --- a/test_regress/t/t_trace_type_dupes.v +++ /dev/null @@ -1,185 +0,0 @@ -// DESCRIPTION: Verilator: Verilog Test module -// -// This file ONLY is placed under the Creative Commons Public Domain, for -// any use, without warranty, 2025 by Wilson Snyder. -// SPDX-License-Identifier: CC0-1.0 - -`ifndef LAST_CYC -`define LAST_CYC 9 -`endif - -`ifndef NUM_SUBS -`define NUM_SUBS 4 -`endif - - -module t (/*AUTOARG*/ - // Inputs - clk - ); - input clk; - - int cyc; - logic [`NUM_SUBS - 1:0] x; - initial cyc = 0; - - always_ff @(posedge clk) begin - cyc <= cyc + 1; - if (cyc == `LAST_CYC) begin - if (~|x) $stop; - $write("*-* All Finished *-*\n"); - $finish; - end - end - - for (genvar i = 0; i < `NUM_SUBS; i++) begin : gen_loop - int loop_cyc; - always_comb loop_cyc = cyc + i; - sub #( - .data_t (pkg::some_struct_t) - ) - the_sub ( - .a (loop_cyc[i%32]), - .b (loop_cyc[(i+1)%32]), - .x (x[i]), - .out_2d_unpacked (), - .data (), - .cyc (loop_cyc), - .clk - ); - end - - intf - the_intf_a (.*), - the_intf_b (.*); - - for (genvar m = 0; m < 4; m++) begin : gen_intf_loop - always_comb begin - the_intf_a.data[m] = cyc[7:0] + m + 7'd1; - the_intf_b.data[m] = cyc[7:0] + m + 7'd2; - end - end - -endmodule - -package pkg; - typedef struct packed { - logic field_a; - logic [5:0] field_b; - logic [9:0] field_c; - } some_sub_struct_t; - - typedef struct packed { - logic foo; - logic [3:0] [31:0] bar; - logic [15:0] baz; - logic [127:0] qux; - some_sub_struct_t sub_struct; - } some_struct_t; - - parameter some_sub_struct_t SUB_ONES = '1; - parameter some_sub_struct_t SUB_ZEROS = '0; -endpackage - -module sub #( - parameter type data_t = bit -)( - input a, - input b, - output logic x, - output out_2d_unpacked [3][4], - output data_t data, - input int cyc, - input clk -); - pkg::some_struct_t the_struct; - pkg::some_struct_t the_structs [3:0]; - pkg::some_struct_t [2:0] the_packed_structs; - - typedef struct packed { - logic abc; - logic def; - logic xyz; - } some_struct_t; - some_struct_t the_local_struct; - localparam some_struct_t const_struct = 3'b101; - typedef some_struct_t typedefed_struct_t; - typedefed_struct_t the_typedefed_struct; - - typedef struct { - logic field_a; - logic field_b; - logic field_c; - } some_unpacked_struct_t; - some_unpacked_struct_t the_local_unpacked_struct; - - typedef union packed { - struct packed { - logic [7:0] field_0; - } union_a; - struct packed { - logic [3:0] field_1; - logic [3:0] field_2; - } union_b; - struct packed { - logic [1:0] field_3; - logic [5:0] field_4; - } union_c; - } some_union_t; - some_union_t the_local_union; - - typedef logic [1:0] [31:0] logic_array_t; - typedef logic [1:0] [31:0] logic_array_2_t; - logic_array_t the_logic_array; - logic_array_2_t the_other_logic_array; - logic [15:0] the_unpacked_array [5]; - logic the_2d_unpacked [3][4]; - - typedef logic [3:0] four_bit_t; - typedef four_bit_t [1:0] two_fours_t; - localparam two_fours_t two_fours = 8'hab; - two_fours_t two_fours_var; - - always_ff @(posedge clk) begin - x <= a ^ b; - the_struct <= '{ - foo : cyc[0], - bar : '{cyc, cyc+1, cyc+2, cyc+3}, - baz : cyc[15:0], - qux : 128'(cyc), - sub_struct : '{ - field_a : cyc[0], - field_b : cyc[5:0], - field_c : cyc[9:0] - } - }; - for (int i = 0; i < 4; i++) the_structs[i] <= {$bits(pkg::some_struct_t){cyc[i]}}; - the_local_struct <= cyc[2:0]; - the_typedefed_struct <= cyc[3:1]; - the_local_unpacked_struct <= '{ - field_a : cyc[0], - field_b : cyc[1], - field_c : cyc[2] - }; - the_local_union <= cyc[7:0]; - for (int i = 0; i < 2; i++) begin - the_logic_array[i] <= cyc + i; - the_other_logic_array[i] <= cyc + i + 123; - end - for (int i = 0; i < 5; i++) the_unpacked_array[i] <= cyc[15:0]; - for (int i = 0; i < 3; i++) - for (int j = 0; j < 4; j++) begin - the_2d_unpacked [i][j] <= ~(cyc[i] ^ cyc[j]); - out_2d_unpacked [i][j] <= cyc[i] ^ cyc[j]; - end - end - - always_comb data = the_struct; -endmodule - -interface intf - (input wire clk); - logic [3:0] [7:0] data; - int data_typed; - always_comb data_typed = data; -endinterface diff --git a/test_regress/t/t_trace_type_dupes_structs.out b/test_regress/t/t_trace_type_dupes_structs.out deleted file mode 100644 index 3078870a7..000000000 --- a/test_regress/t/t_trace_type_dupes_structs.out +++ /dev/null @@ -1,3811 +0,0 @@ -$version Generated by VerilatedVcd $end -$timescale 1ps $end - $scope module top $end - $var wire 1 9% clk $end - $scope module pkg $end - $scope module SUB_ONES $end - $var wire 1 a% field_a $end - $var wire 6 &' field_b [5:0] $end - $var wire 10 '' field_c [9:0] $end - $upscope $end - $scope module SUB_ZEROS $end - $var wire 1 b% field_a $end - $var wire 6 (' field_b [5:0] $end - $var wire 10 )' field_c [9:0] $end - $upscope $end - $upscope $end - $scope module t $end - $var wire 1 9% clk $end - $var wire 32 # cyc [31:0] $end - $var wire 4 $ x [3:0] $end - $scope module the_intf_a $end - $var wire 1 9% clk $end - $var wire 8 2% data[0] [7:0] $end - $var wire 8 3% data[1] [7:0] $end - $var wire 8 4% data[2] [7:0] $end - $var wire 8 5% data[3] [7:0] $end - $var wire 32 6% data_typed [31:0] $end - $upscope $end - $scope module the_intf_b $end - $var wire 1 9% clk $end - $var wire 8 3% data[0] [7:0] $end - $var wire 8 4% data[1] [7:0] $end - $var wire 8 5% data[2] [7:0] $end - $var wire 8 7% data[3] [7:0] $end - $var wire 32 8% data_typed [31:0] $end - $upscope $end - $scope module gen_loop[0] $end - $var wire 32 # loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 % a $end - $var wire 1 & b $end - $var wire 1 ' x $end - $var wire 1 ( out_2d_unpacked[0][0] $end - $var wire 1 ) out_2d_unpacked[0][1] $end - $var wire 1 * out_2d_unpacked[0][2] $end - $var wire 1 + out_2d_unpacked[0][3] $end - $var wire 1 , out_2d_unpacked[1][0] $end - $var wire 1 - out_2d_unpacked[1][1] $end - $var wire 1 . out_2d_unpacked[1][2] $end - $var wire 1 / out_2d_unpacked[1][3] $end - $var wire 1 0 out_2d_unpacked[2][0] $end - $var wire 1 1 out_2d_unpacked[2][1] $end - $var wire 1 2 out_2d_unpacked[2][2] $end - $var wire 1 3 out_2d_unpacked[2][3] $end - $scope module data $end - $var wire 1 4 foo $end - $var wire 32 5 bar[0] [31:0] $end - $var wire 32 6 bar[1] [31:0] $end - $var wire 32 7 bar[2] [31:0] $end - $var wire 32 8 bar[3] [31:0] $end - $var wire 16 9 baz [15:0] $end - $var wire 128 : qux [127:0] $end - $scope module sub_struct $end - $var wire 1 > field_a $end - $var wire 6 ? field_b [5:0] $end - $var wire 10 @ field_c [9:0] $end - $upscope $end - $upscope $end - $var wire 32 # cyc [31:0] $end - $var wire 1 9% clk $end - $scope module the_struct $end - $var wire 1 4 foo $end - $var wire 32 5 bar[0] [31:0] $end - $var wire 32 6 bar[1] [31:0] $end - $var wire 32 7 bar[2] [31:0] $end - $var wire 32 8 bar[3] [31:0] $end - $var wire 16 9 baz [15:0] $end - $var wire 128 : qux [127:0] $end - $scope module sub_struct $end - $var wire 1 > field_a $end - $var wire 6 ? field_b [5:0] $end - $var wire 10 @ field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[0] $end - $var wire 1 A foo $end - $var wire 32 B bar[0] [31:0] $end - $var wire 32 C bar[1] [31:0] $end - $var wire 32 D bar[2] [31:0] $end - $var wire 32 E bar[3] [31:0] $end - $var wire 16 F baz [15:0] $end - $var wire 128 G qux [127:0] $end - $scope module sub_struct $end - $var wire 1 K field_a $end - $var wire 6 L field_b [5:0] $end - $var wire 10 M field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[1] $end - $var wire 1 N foo $end - $var wire 32 O bar[0] [31:0] $end - $var wire 32 P bar[1] [31:0] $end - $var wire 32 Q bar[2] [31:0] $end - $var wire 32 R bar[3] [31:0] $end - $var wire 16 S baz [15:0] $end - $var wire 128 T qux [127:0] $end - $scope module sub_struct $end - $var wire 1 X field_a $end - $var wire 6 Y field_b [5:0] $end - $var wire 10 Z field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[2] $end - $var wire 1 [ foo $end - $var wire 32 \ bar[0] [31:0] $end - $var wire 32 ] bar[1] [31:0] $end - $var wire 32 ^ bar[2] [31:0] $end - $var wire 32 _ bar[3] [31:0] $end - $var wire 16 ` baz [15:0] $end - $var wire 128 a qux [127:0] $end - $scope module sub_struct $end - $var wire 1 e field_a $end - $var wire 6 f field_b [5:0] $end - $var wire 10 g field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[3] $end - $var wire 1 h foo $end - $var wire 32 i bar[0] [31:0] $end - $var wire 32 j bar[1] [31:0] $end - $var wire 32 k bar[2] [31:0] $end - $var wire 32 l bar[3] [31:0] $end - $var wire 16 m baz [15:0] $end - $var wire 128 n qux [127:0] $end - $scope module sub_struct $end - $var wire 1 r field_a $end - $var wire 6 s field_b [5:0] $end - $var wire 10 t field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[0] $end - $var wire 1 :% foo $end - $var wire 32 ;% bar[0] [31:0] $end - $var wire 32 <% bar[1] [31:0] $end - $var wire 32 =% bar[2] [31:0] $end - $var wire 32 >% bar[3] [31:0] $end - $var wire 16 ?% baz [15:0] $end - $var wire 128 @% qux [127:0] $end - $scope module sub_struct $end - $var wire 1 D% field_a $end - $var wire 6 E% field_b [5:0] $end - $var wire 10 F% field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[1] $end - $var wire 1 G% foo $end - $var wire 32 H% bar[0] [31:0] $end - $var wire 32 I% bar[1] [31:0] $end - $var wire 32 J% bar[2] [31:0] $end - $var wire 32 K% bar[3] [31:0] $end - $var wire 16 L% baz [15:0] $end - $var wire 128 M% qux [127:0] $end - $scope module sub_struct $end - $var wire 1 Q% field_a $end - $var wire 6 R% field_b [5:0] $end - $var wire 10 S% field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[2] $end - $var wire 1 T% foo $end - $var wire 32 U% bar[0] [31:0] $end - $var wire 32 V% bar[1] [31:0] $end - $var wire 32 W% bar[2] [31:0] $end - $var wire 32 X% bar[3] [31:0] $end - $var wire 16 Y% baz [15:0] $end - $var wire 128 Z% qux [127:0] $end - $scope module sub_struct $end - $var wire 1 ^% field_a $end - $var wire 6 _% field_b [5:0] $end - $var wire 10 `% field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_local_struct $end - $var wire 1 u abc $end - $var wire 1 v def $end - $var wire 1 w xyz $end - $upscope $end - $scope module const_struct $end - $var wire 1 a% abc $end - $var wire 1 b% def $end - $var wire 1 a% xyz $end - $upscope $end - $scope module the_typedefed_struct $end - $var wire 1 x abc $end - $var wire 1 y def $end - $var wire 1 z xyz $end - $upscope $end - $scope module the_local_unpacked_struct $end - $var wire 1 { field_a $end - $var wire 1 | field_b $end - $var wire 1 } field_c $end - $upscope $end - $scope module the_local_union $end - $scope module union_a $end - $var wire 8 ~ field_0 [7:0] $end - $upscope $end - $scope module union_b $end - $var wire 4 !! field_1 [3:0] $end - $var wire 4 "! field_2 [3:0] $end - $upscope $end - $scope module union_c $end - $var wire 2 #! field_3 [1:0] $end - $var wire 6 $! field_4 [5:0] $end - $upscope $end - $upscope $end - $var wire 32 %! the_logic_array[0] [31:0] $end - $var wire 32 &! the_logic_array[1] [31:0] $end - $var wire 32 '! the_other_logic_array[0] [31:0] $end - $var wire 32 (! the_other_logic_array[1] [31:0] $end - $var wire 16 )! the_unpacked_array[0] [15:0] $end - $var wire 16 *! the_unpacked_array[1] [15:0] $end - $var wire 16 +! the_unpacked_array[2] [15:0] $end - $var wire 16 ,! the_unpacked_array[3] [15:0] $end - $var wire 16 -! the_unpacked_array[4] [15:0] $end - $var wire 1 .! the_2d_unpacked[0][0] $end - $var wire 1 /! the_2d_unpacked[0][1] $end - $var wire 1 0! the_2d_unpacked[0][2] $end - $var wire 1 1! the_2d_unpacked[0][3] $end - $var wire 1 2! the_2d_unpacked[1][0] $end - $var wire 1 3! the_2d_unpacked[1][1] $end - $var wire 1 4! the_2d_unpacked[1][2] $end - $var wire 1 5! the_2d_unpacked[1][3] $end - $var wire 1 6! the_2d_unpacked[2][0] $end - $var wire 1 7! the_2d_unpacked[2][1] $end - $var wire 1 8! the_2d_unpacked[2][2] $end - $var wire 1 9! the_2d_unpacked[2][3] $end - $var wire 4 c% two_fours[0] [3:0] $end - $var wire 4 d% two_fours[1] [3:0] $end - $var wire 4 e% two_fours_var[0] [3:0] $end - $var wire 4 f% two_fours_var[1] [3:0] $end - $scope module unnamedblk1 $end - $var wire 32 :! i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 ;! i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 ! j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module gen_loop[1] $end - $var wire 32 ?! loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 @! a $end - $var wire 1 A! b $end - $var wire 1 B! x $end - $var wire 1 C! out_2d_unpacked[0][0] $end - $var wire 1 D! out_2d_unpacked[0][1] $end - $var wire 1 E! out_2d_unpacked[0][2] $end - $var wire 1 F! out_2d_unpacked[0][3] $end - $var wire 1 G! out_2d_unpacked[1][0] $end - $var wire 1 H! out_2d_unpacked[1][1] $end - $var wire 1 I! out_2d_unpacked[1][2] $end - $var wire 1 J! out_2d_unpacked[1][3] $end - $var wire 1 K! out_2d_unpacked[2][0] $end - $var wire 1 L! out_2d_unpacked[2][1] $end - $var wire 1 M! out_2d_unpacked[2][2] $end - $var wire 1 N! out_2d_unpacked[2][3] $end - $scope module data $end - $var wire 1 O! foo $end - $var wire 32 P! bar[0] [31:0] $end - $var wire 32 Q! bar[1] [31:0] $end - $var wire 32 R! bar[2] [31:0] $end - $var wire 32 S! bar[3] [31:0] $end - $var wire 16 T! baz [15:0] $end - $var wire 128 U! qux [127:0] $end - $scope module sub_struct $end - $var wire 1 Y! field_a $end - $var wire 6 Z! field_b [5:0] $end - $var wire 10 [! field_c [9:0] $end - $upscope $end - $upscope $end - $var wire 32 ?! cyc [31:0] $end - $var wire 1 9% clk $end - $scope module the_struct $end - $var wire 1 O! foo $end - $var wire 32 P! bar[0] [31:0] $end - $var wire 32 Q! bar[1] [31:0] $end - $var wire 32 R! bar[2] [31:0] $end - $var wire 32 S! bar[3] [31:0] $end - $var wire 16 T! baz [15:0] $end - $var wire 128 U! qux [127:0] $end - $scope module sub_struct $end - $var wire 1 Y! field_a $end - $var wire 6 Z! field_b [5:0] $end - $var wire 10 [! field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[0] $end - $var wire 1 \! foo $end - $var wire 32 ]! bar[0] [31:0] $end - $var wire 32 ^! bar[1] [31:0] $end - $var wire 32 _! bar[2] [31:0] $end - $var wire 32 `! bar[3] [31:0] $end - $var wire 16 a! baz [15:0] $end - $var wire 128 b! qux [127:0] $end - $scope module sub_struct $end - $var wire 1 f! field_a $end - $var wire 6 g! field_b [5:0] $end - $var wire 10 h! field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[1] $end - $var wire 1 i! foo $end - $var wire 32 j! bar[0] [31:0] $end - $var wire 32 k! bar[1] [31:0] $end - $var wire 32 l! bar[2] [31:0] $end - $var wire 32 m! bar[3] [31:0] $end - $var wire 16 n! baz [15:0] $end - $var wire 128 o! qux [127:0] $end - $scope module sub_struct $end - $var wire 1 s! field_a $end - $var wire 6 t! field_b [5:0] $end - $var wire 10 u! field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[2] $end - $var wire 1 v! foo $end - $var wire 32 w! bar[0] [31:0] $end - $var wire 32 x! bar[1] [31:0] $end - $var wire 32 y! bar[2] [31:0] $end - $var wire 32 z! bar[3] [31:0] $end - $var wire 16 {! baz [15:0] $end - $var wire 128 |! qux [127:0] $end - $scope module sub_struct $end - $var wire 1 "" field_a $end - $var wire 6 #" field_b [5:0] $end - $var wire 10 $" field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[3] $end - $var wire 1 %" foo $end - $var wire 32 &" bar[0] [31:0] $end - $var wire 32 '" bar[1] [31:0] $end - $var wire 32 (" bar[2] [31:0] $end - $var wire 32 )" bar[3] [31:0] $end - $var wire 16 *" baz [15:0] $end - $var wire 128 +" qux [127:0] $end - $scope module sub_struct $end - $var wire 1 /" field_a $end - $var wire 6 0" field_b [5:0] $end - $var wire 10 1" field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[0] $end - $var wire 1 g% foo $end - $var wire 32 h% bar[0] [31:0] $end - $var wire 32 i% bar[1] [31:0] $end - $var wire 32 j% bar[2] [31:0] $end - $var wire 32 k% bar[3] [31:0] $end - $var wire 16 l% baz [15:0] $end - $var wire 128 m% qux [127:0] $end - $scope module sub_struct $end - $var wire 1 q% field_a $end - $var wire 6 r% field_b [5:0] $end - $var wire 10 s% field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[1] $end - $var wire 1 t% foo $end - $var wire 32 u% bar[0] [31:0] $end - $var wire 32 v% bar[1] [31:0] $end - $var wire 32 w% bar[2] [31:0] $end - $var wire 32 x% bar[3] [31:0] $end - $var wire 16 y% baz [15:0] $end - $var wire 128 z% qux [127:0] $end - $scope module sub_struct $end - $var wire 1 ~% field_a $end - $var wire 6 !& field_b [5:0] $end - $var wire 10 "& field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[2] $end - $var wire 1 #& foo $end - $var wire 32 $& bar[0] [31:0] $end - $var wire 32 %& bar[1] [31:0] $end - $var wire 32 && bar[2] [31:0] $end - $var wire 32 '& bar[3] [31:0] $end - $var wire 16 (& baz [15:0] $end - $var wire 128 )& qux [127:0] $end - $scope module sub_struct $end - $var wire 1 -& field_a $end - $var wire 6 .& field_b [5:0] $end - $var wire 10 /& field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_local_struct $end - $var wire 1 2" abc $end - $var wire 1 3" def $end - $var wire 1 4" xyz $end - $upscope $end - $scope module const_struct $end - $var wire 1 a% abc $end - $var wire 1 b% def $end - $var wire 1 a% xyz $end - $upscope $end - $scope module the_typedefed_struct $end - $var wire 1 5" abc $end - $var wire 1 6" def $end - $var wire 1 7" xyz $end - $upscope $end - $scope module the_local_unpacked_struct $end - $var wire 1 8" field_a $end - $var wire 1 9" field_b $end - $var wire 1 :" field_c $end - $upscope $end - $scope module the_local_union $end - $scope module union_a $end - $var wire 8 ;" field_0 [7:0] $end - $upscope $end - $scope module union_b $end - $var wire 4 <" field_1 [3:0] $end - $var wire 4 =" field_2 [3:0] $end - $upscope $end - $scope module union_c $end - $var wire 2 >" field_3 [1:0] $end - $var wire 6 ?" field_4 [5:0] $end - $upscope $end - $upscope $end - $var wire 32 @" the_logic_array[0] [31:0] $end - $var wire 32 A" the_logic_array[1] [31:0] $end - $var wire 32 B" the_other_logic_array[0] [31:0] $end - $var wire 32 C" the_other_logic_array[1] [31:0] $end - $var wire 16 D" the_unpacked_array[0] [15:0] $end - $var wire 16 E" the_unpacked_array[1] [15:0] $end - $var wire 16 F" the_unpacked_array[2] [15:0] $end - $var wire 16 G" the_unpacked_array[3] [15:0] $end - $var wire 16 H" the_unpacked_array[4] [15:0] $end - $var wire 1 I" the_2d_unpacked[0][0] $end - $var wire 1 J" the_2d_unpacked[0][1] $end - $var wire 1 K" the_2d_unpacked[0][2] $end - $var wire 1 L" the_2d_unpacked[0][3] $end - $var wire 1 M" the_2d_unpacked[1][0] $end - $var wire 1 N" the_2d_unpacked[1][1] $end - $var wire 1 O" the_2d_unpacked[1][2] $end - $var wire 1 P" the_2d_unpacked[1][3] $end - $var wire 1 Q" the_2d_unpacked[2][0] $end - $var wire 1 R" the_2d_unpacked[2][1] $end - $var wire 1 S" the_2d_unpacked[2][2] $end - $var wire 1 T" the_2d_unpacked[2][3] $end - $var wire 4 c% two_fours[0] [3:0] $end - $var wire 4 d% two_fours[1] [3:0] $end - $var wire 4 0& two_fours_var[0] [3:0] $end - $var wire 4 1& two_fours_var[1] [3:0] $end - $scope module unnamedblk1 $end - $var wire 32 U" i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 V" i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 W" i [31:0] $end - $upscope $end - $scope module unnamedblk4 $end - $var wire 32 X" i [31:0] $end - $scope module unnamedblk5 $end - $var wire 32 Y" j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module gen_loop[2] $end - $var wire 32 Z" loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 [" a $end - $var wire 1 \" b $end - $var wire 1 ]" x $end - $var wire 1 ^" out_2d_unpacked[0][0] $end - $var wire 1 _" out_2d_unpacked[0][1] $end - $var wire 1 `" out_2d_unpacked[0][2] $end - $var wire 1 a" out_2d_unpacked[0][3] $end - $var wire 1 b" out_2d_unpacked[1][0] $end - $var wire 1 c" out_2d_unpacked[1][1] $end - $var wire 1 d" out_2d_unpacked[1][2] $end - $var wire 1 e" out_2d_unpacked[1][3] $end - $var wire 1 f" out_2d_unpacked[2][0] $end - $var wire 1 g" out_2d_unpacked[2][1] $end - $var wire 1 h" out_2d_unpacked[2][2] $end - $var wire 1 i" out_2d_unpacked[2][3] $end - $scope module data $end - $var wire 1 j" foo $end - $var wire 32 k" bar[0] [31:0] $end - $var wire 32 l" bar[1] [31:0] $end - $var wire 32 m" bar[2] [31:0] $end - $var wire 32 n" bar[3] [31:0] $end - $var wire 16 o" baz [15:0] $end - $var wire 128 p" qux [127:0] $end - $scope module sub_struct $end - $var wire 1 t" field_a $end - $var wire 6 u" field_b [5:0] $end - $var wire 10 v" field_c [9:0] $end - $upscope $end - $upscope $end - $var wire 32 Z" cyc [31:0] $end - $var wire 1 9% clk $end - $scope module the_struct $end - $var wire 1 j" foo $end - $var wire 32 k" bar[0] [31:0] $end - $var wire 32 l" bar[1] [31:0] $end - $var wire 32 m" bar[2] [31:0] $end - $var wire 32 n" bar[3] [31:0] $end - $var wire 16 o" baz [15:0] $end - $var wire 128 p" qux [127:0] $end - $scope module sub_struct $end - $var wire 1 t" field_a $end - $var wire 6 u" field_b [5:0] $end - $var wire 10 v" field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[0] $end - $var wire 1 w" foo $end - $var wire 32 x" bar[0] [31:0] $end - $var wire 32 y" bar[1] [31:0] $end - $var wire 32 z" bar[2] [31:0] $end - $var wire 32 {" bar[3] [31:0] $end - $var wire 16 |" baz [15:0] $end - $var wire 128 }" qux [127:0] $end - $scope module sub_struct $end - $var wire 1 ## field_a $end - $var wire 6 $# field_b [5:0] $end - $var wire 10 %# field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[1] $end - $var wire 1 &# foo $end - $var wire 32 '# bar[0] [31:0] $end - $var wire 32 (# bar[1] [31:0] $end - $var wire 32 )# bar[2] [31:0] $end - $var wire 32 *# bar[3] [31:0] $end - $var wire 16 +# baz [15:0] $end - $var wire 128 ,# qux [127:0] $end - $scope module sub_struct $end - $var wire 1 0# field_a $end - $var wire 6 1# field_b [5:0] $end - $var wire 10 2# field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[2] $end - $var wire 1 3# foo $end - $var wire 32 4# bar[0] [31:0] $end - $var wire 32 5# bar[1] [31:0] $end - $var wire 32 6# bar[2] [31:0] $end - $var wire 32 7# bar[3] [31:0] $end - $var wire 16 8# baz [15:0] $end - $var wire 128 9# qux [127:0] $end - $scope module sub_struct $end - $var wire 1 =# field_a $end - $var wire 6 ># field_b [5:0] $end - $var wire 10 ?# field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[3] $end - $var wire 1 @# foo $end - $var wire 32 A# bar[0] [31:0] $end - $var wire 32 B# bar[1] [31:0] $end - $var wire 32 C# bar[2] [31:0] $end - $var wire 32 D# bar[3] [31:0] $end - $var wire 16 E# baz [15:0] $end - $var wire 128 F# qux [127:0] $end - $scope module sub_struct $end - $var wire 1 J# field_a $end - $var wire 6 K# field_b [5:0] $end - $var wire 10 L# field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[0] $end - $var wire 1 2& foo $end - $var wire 32 3& bar[0] [31:0] $end - $var wire 32 4& bar[1] [31:0] $end - $var wire 32 5& bar[2] [31:0] $end - $var wire 32 6& bar[3] [31:0] $end - $var wire 16 7& baz [15:0] $end - $var wire 128 8& qux [127:0] $end - $scope module sub_struct $end - $var wire 1 <& field_a $end - $var wire 6 =& field_b [5:0] $end - $var wire 10 >& field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[1] $end - $var wire 1 ?& foo $end - $var wire 32 @& bar[0] [31:0] $end - $var wire 32 A& bar[1] [31:0] $end - $var wire 32 B& bar[2] [31:0] $end - $var wire 32 C& bar[3] [31:0] $end - $var wire 16 D& baz [15:0] $end - $var wire 128 E& qux [127:0] $end - $scope module sub_struct $end - $var wire 1 I& field_a $end - $var wire 6 J& field_b [5:0] $end - $var wire 10 K& field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[2] $end - $var wire 1 L& foo $end - $var wire 32 M& bar[0] [31:0] $end - $var wire 32 N& bar[1] [31:0] $end - $var wire 32 O& bar[2] [31:0] $end - $var wire 32 P& bar[3] [31:0] $end - $var wire 16 Q& baz [15:0] $end - $var wire 128 R& qux [127:0] $end - $scope module sub_struct $end - $var wire 1 V& field_a $end - $var wire 6 W& field_b [5:0] $end - $var wire 10 X& field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_local_struct $end - $var wire 1 M# abc $end - $var wire 1 N# def $end - $var wire 1 O# xyz $end - $upscope $end - $scope module const_struct $end - $var wire 1 a% abc $end - $var wire 1 b% def $end - $var wire 1 a% xyz $end - $upscope $end - $scope module the_typedefed_struct $end - $var wire 1 P# abc $end - $var wire 1 Q# def $end - $var wire 1 R# xyz $end - $upscope $end - $scope module the_local_unpacked_struct $end - $var wire 1 S# field_a $end - $var wire 1 T# field_b $end - $var wire 1 U# field_c $end - $upscope $end - $scope module the_local_union $end - $scope module union_a $end - $var wire 8 V# field_0 [7:0] $end - $upscope $end - $scope module union_b $end - $var wire 4 W# field_1 [3:0] $end - $var wire 4 X# field_2 [3:0] $end - $upscope $end - $scope module union_c $end - $var wire 2 Y# field_3 [1:0] $end - $var wire 6 Z# field_4 [5:0] $end - $upscope $end - $upscope $end - $var wire 32 [# the_logic_array[0] [31:0] $end - $var wire 32 \# the_logic_array[1] [31:0] $end - $var wire 32 ]# the_other_logic_array[0] [31:0] $end - $var wire 32 ^# the_other_logic_array[1] [31:0] $end - $var wire 16 _# the_unpacked_array[0] [15:0] $end - $var wire 16 `# the_unpacked_array[1] [15:0] $end - $var wire 16 a# the_unpacked_array[2] [15:0] $end - $var wire 16 b# the_unpacked_array[3] [15:0] $end - $var wire 16 c# the_unpacked_array[4] [15:0] $end - $var wire 1 d# the_2d_unpacked[0][0] $end - $var wire 1 e# the_2d_unpacked[0][1] $end - $var wire 1 f# the_2d_unpacked[0][2] $end - $var wire 1 g# the_2d_unpacked[0][3] $end - $var wire 1 h# the_2d_unpacked[1][0] $end - $var wire 1 i# the_2d_unpacked[1][1] $end - $var wire 1 j# the_2d_unpacked[1][2] $end - $var wire 1 k# the_2d_unpacked[1][3] $end - $var wire 1 l# the_2d_unpacked[2][0] $end - $var wire 1 m# the_2d_unpacked[2][1] $end - $var wire 1 n# the_2d_unpacked[2][2] $end - $var wire 1 o# the_2d_unpacked[2][3] $end - $var wire 4 c% two_fours[0] [3:0] $end - $var wire 4 d% two_fours[1] [3:0] $end - $var wire 4 Y& two_fours_var[0] [3:0] $end - $var wire 4 Z& two_fours_var[1] [3:0] $end - $scope module unnamedblk1 $end - $var wire 32 p# i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 q# i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 r# i [31:0] $end - $upscope $end - $scope module unnamedblk4 $end - $var wire 32 s# i [31:0] $end - $scope module unnamedblk5 $end - $var wire 32 t# j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $scope module gen_loop[3] $end - $var wire 32 u# loop_cyc [31:0] $end - $scope module the_sub $end - $var wire 1 v# a $end - $var wire 1 w# b $end - $var wire 1 x# x $end - $var wire 1 y# out_2d_unpacked[0][0] $end - $var wire 1 z# out_2d_unpacked[0][1] $end - $var wire 1 {# out_2d_unpacked[0][2] $end - $var wire 1 |# out_2d_unpacked[0][3] $end - $var wire 1 }# out_2d_unpacked[1][0] $end - $var wire 1 ~# out_2d_unpacked[1][1] $end - $var wire 1 !$ out_2d_unpacked[1][2] $end - $var wire 1 "$ out_2d_unpacked[1][3] $end - $var wire 1 #$ out_2d_unpacked[2][0] $end - $var wire 1 $$ out_2d_unpacked[2][1] $end - $var wire 1 %$ out_2d_unpacked[2][2] $end - $var wire 1 &$ out_2d_unpacked[2][3] $end - $scope module data $end - $var wire 1 '$ foo $end - $var wire 32 ($ bar[0] [31:0] $end - $var wire 32 )$ bar[1] [31:0] $end - $var wire 32 *$ bar[2] [31:0] $end - $var wire 32 +$ bar[3] [31:0] $end - $var wire 16 ,$ baz [15:0] $end - $var wire 128 -$ qux [127:0] $end - $scope module sub_struct $end - $var wire 1 1$ field_a $end - $var wire 6 2$ field_b [5:0] $end - $var wire 10 3$ field_c [9:0] $end - $upscope $end - $upscope $end - $var wire 32 u# cyc [31:0] $end - $var wire 1 9% clk $end - $scope module the_struct $end - $var wire 1 '$ foo $end - $var wire 32 ($ bar[0] [31:0] $end - $var wire 32 )$ bar[1] [31:0] $end - $var wire 32 *$ bar[2] [31:0] $end - $var wire 32 +$ bar[3] [31:0] $end - $var wire 16 ,$ baz [15:0] $end - $var wire 128 -$ qux [127:0] $end - $scope module sub_struct $end - $var wire 1 1$ field_a $end - $var wire 6 2$ field_b [5:0] $end - $var wire 10 3$ field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[0] $end - $var wire 1 4$ foo $end - $var wire 32 5$ bar[0] [31:0] $end - $var wire 32 6$ bar[1] [31:0] $end - $var wire 32 7$ bar[2] [31:0] $end - $var wire 32 8$ bar[3] [31:0] $end - $var wire 16 9$ baz [15:0] $end - $var wire 128 :$ qux [127:0] $end - $scope module sub_struct $end - $var wire 1 >$ field_a $end - $var wire 6 ?$ field_b [5:0] $end - $var wire 10 @$ field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[1] $end - $var wire 1 A$ foo $end - $var wire 32 B$ bar[0] [31:0] $end - $var wire 32 C$ bar[1] [31:0] $end - $var wire 32 D$ bar[2] [31:0] $end - $var wire 32 E$ bar[3] [31:0] $end - $var wire 16 F$ baz [15:0] $end - $var wire 128 G$ qux [127:0] $end - $scope module sub_struct $end - $var wire 1 K$ field_a $end - $var wire 6 L$ field_b [5:0] $end - $var wire 10 M$ field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[2] $end - $var wire 1 N$ foo $end - $var wire 32 O$ bar[0] [31:0] $end - $var wire 32 P$ bar[1] [31:0] $end - $var wire 32 Q$ bar[2] [31:0] $end - $var wire 32 R$ bar[3] [31:0] $end - $var wire 16 S$ baz [15:0] $end - $var wire 128 T$ qux [127:0] $end - $scope module sub_struct $end - $var wire 1 X$ field_a $end - $var wire 6 Y$ field_b [5:0] $end - $var wire 10 Z$ field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_structs[3] $end - $var wire 1 [$ foo $end - $var wire 32 \$ bar[0] [31:0] $end - $var wire 32 ]$ bar[1] [31:0] $end - $var wire 32 ^$ bar[2] [31:0] $end - $var wire 32 _$ bar[3] [31:0] $end - $var wire 16 `$ baz [15:0] $end - $var wire 128 a$ qux [127:0] $end - $scope module sub_struct $end - $var wire 1 e$ field_a $end - $var wire 6 f$ field_b [5:0] $end - $var wire 10 g$ field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[0] $end - $var wire 1 [& foo $end - $var wire 32 \& bar[0] [31:0] $end - $var wire 32 ]& bar[1] [31:0] $end - $var wire 32 ^& bar[2] [31:0] $end - $var wire 32 _& bar[3] [31:0] $end - $var wire 16 `& baz [15:0] $end - $var wire 128 a& qux [127:0] $end - $scope module sub_struct $end - $var wire 1 e& field_a $end - $var wire 6 f& field_b [5:0] $end - $var wire 10 g& field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[1] $end - $var wire 1 h& foo $end - $var wire 32 i& bar[0] [31:0] $end - $var wire 32 j& bar[1] [31:0] $end - $var wire 32 k& bar[2] [31:0] $end - $var wire 32 l& bar[3] [31:0] $end - $var wire 16 m& baz [15:0] $end - $var wire 128 n& qux [127:0] $end - $scope module sub_struct $end - $var wire 1 r& field_a $end - $var wire 6 s& field_b [5:0] $end - $var wire 10 t& field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_packed_structs[2] $end - $var wire 1 u& foo $end - $var wire 32 v& bar[0] [31:0] $end - $var wire 32 w& bar[1] [31:0] $end - $var wire 32 x& bar[2] [31:0] $end - $var wire 32 y& bar[3] [31:0] $end - $var wire 16 z& baz [15:0] $end - $var wire 128 {& qux [127:0] $end - $scope module sub_struct $end - $var wire 1 !' field_a $end - $var wire 6 "' field_b [5:0] $end - $var wire 10 #' field_c [9:0] $end - $upscope $end - $upscope $end - $scope module the_local_struct $end - $var wire 1 h$ abc $end - $var wire 1 i$ def $end - $var wire 1 j$ xyz $end - $upscope $end - $scope module const_struct $end - $var wire 1 a% abc $end - $var wire 1 b% def $end - $var wire 1 a% xyz $end - $upscope $end - $scope module the_typedefed_struct $end - $var wire 1 k$ abc $end - $var wire 1 l$ def $end - $var wire 1 m$ xyz $end - $upscope $end - $scope module the_local_unpacked_struct $end - $var wire 1 n$ field_a $end - $var wire 1 o$ field_b $end - $var wire 1 p$ field_c $end - $upscope $end - $scope module the_local_union $end - $scope module union_a $end - $var wire 8 q$ field_0 [7:0] $end - $upscope $end - $scope module union_b $end - $var wire 4 r$ field_1 [3:0] $end - $var wire 4 s$ field_2 [3:0] $end - $upscope $end - $scope module union_c $end - $var wire 2 t$ field_3 [1:0] $end - $var wire 6 u$ field_4 [5:0] $end - $upscope $end - $upscope $end - $var wire 32 v$ the_logic_array[0] [31:0] $end - $var wire 32 w$ the_logic_array[1] [31:0] $end - $var wire 32 x$ the_other_logic_array[0] [31:0] $end - $var wire 32 y$ the_other_logic_array[1] [31:0] $end - $var wire 16 z$ the_unpacked_array[0] [15:0] $end - $var wire 16 {$ the_unpacked_array[1] [15:0] $end - $var wire 16 |$ the_unpacked_array[2] [15:0] $end - $var wire 16 }$ the_unpacked_array[3] [15:0] $end - $var wire 16 ~$ the_unpacked_array[4] [15:0] $end - $var wire 1 !% the_2d_unpacked[0][0] $end - $var wire 1 "% the_2d_unpacked[0][1] $end - $var wire 1 #% the_2d_unpacked[0][2] $end - $var wire 1 $% the_2d_unpacked[0][3] $end - $var wire 1 %% the_2d_unpacked[1][0] $end - $var wire 1 &% the_2d_unpacked[1][1] $end - $var wire 1 '% the_2d_unpacked[1][2] $end - $var wire 1 (% the_2d_unpacked[1][3] $end - $var wire 1 )% the_2d_unpacked[2][0] $end - $var wire 1 *% the_2d_unpacked[2][1] $end - $var wire 1 +% the_2d_unpacked[2][2] $end - $var wire 1 ,% the_2d_unpacked[2][3] $end - $var wire 4 c% two_fours[0] [3:0] $end - $var wire 4 d% two_fours[1] [3:0] $end - $var wire 4 $' two_fours_var[0] [3:0] $end - $var wire 4 %' two_fours_var[1] [3:0] $end - $scope module unnamedblk1 $end - $var wire 32 -% i [31:0] $end - $upscope $end - $scope module unnamedblk2 $end - $var wire 32 .% i [31:0] $end - $upscope $end - $scope module unnamedblk3 $end - $var wire 32 /% i [31:0] $end - $upscope $end - $scope module unnamedblk4 $end - $var wire 32 0% i [31:0] $end - $scope module unnamedblk5 $end - $var wire 32 1% j [31:0] $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end - $upscope $end -$enddefinitions $end - - -#0 -b00000000000000000000000000000000 # -b0000 $ -0% -0& -0' -0( -0) -0* -0+ -0, -0- -0. -0/ -00 -01 -02 -03 -04 -b00000000000000000000000000000000 5 -b00000000000000000000000000000000 6 -b00000000000000000000000000000000 7 -b00000000000000000000000000000000 8 -b0000000000000000 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 : -0> -b000000 ? -b0000000000 @ -0A -b00000000000000000000000000000000 B -b00000000000000000000000000000000 C -b00000000000000000000000000000000 D -b00000000000000000000000000000000 E -b0000000000000000 F -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G -0K -b000000 L -b0000000000 M -0N -b00000000000000000000000000000000 O -b00000000000000000000000000000000 P -b00000000000000000000000000000000 Q -b00000000000000000000000000000000 R -b0000000000000000 S -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T -0X -b000000 Y -b0000000000 Z -0[ -b00000000000000000000000000000000 \ -b00000000000000000000000000000000 ] -b00000000000000000000000000000000 ^ -b00000000000000000000000000000000 _ -b0000000000000000 ` -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a -0e -b000000 f -b0000000000 g -0h -b00000000000000000000000000000000 i -b00000000000000000000000000000000 j -b00000000000000000000000000000000 k -b00000000000000000000000000000000 l -b0000000000000000 m -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 n -0r -b000000 s -b0000000000 t -0u -0v -0w -0x -0y -0z -0{ -0| -0} -b00000000 ~ -b0000 !! -b0000 "! -b00 #! -b000000 $! -b00000000000000000000000000000000 %! -b00000000000000000000000000000000 &! -b00000000000000000000000000000000 '! -b00000000000000000000000000000000 (! -b0000000000000000 )! -b0000000000000000 *! -b0000000000000000 +! -b0000000000000000 ,! -b0000000000000000 -! -0.! -0/! -00! -01! -02! -03! -04! -05! -06! -07! -08! -09! -b00000000000000000000000000000000 :! -b00000000000000000000000000000000 ;! -b00000000000000000000000000000000 ! -b00000000000000000000000000000001 ?! -0@! -0A! -0B! -0C! -0D! -0E! -0F! -0G! -0H! -0I! -0J! -0K! -0L! -0M! -0N! -0O! -b00000000000000000000000000000000 P! -b00000000000000000000000000000000 Q! -b00000000000000000000000000000000 R! -b00000000000000000000000000000000 S! -b0000000000000000 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 U! -0Y! -b000000 Z! -b0000000000 [! -0\! -b00000000000000000000000000000000 ]! -b00000000000000000000000000000000 ^! -b00000000000000000000000000000000 _! -b00000000000000000000000000000000 `! -b0000000000000000 a! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 b! -0f! -b000000 g! -b0000000000 h! -0i! -b00000000000000000000000000000000 j! -b00000000000000000000000000000000 k! -b00000000000000000000000000000000 l! -b00000000000000000000000000000000 m! -b0000000000000000 n! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 o! -0s! -b000000 t! -b0000000000 u! -0v! -b00000000000000000000000000000000 w! -b00000000000000000000000000000000 x! -b00000000000000000000000000000000 y! -b00000000000000000000000000000000 z! -b0000000000000000 {! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |! -0"" -b000000 #" -b0000000000 $" -0%" -b00000000000000000000000000000000 &" -b00000000000000000000000000000000 '" -b00000000000000000000000000000000 (" -b00000000000000000000000000000000 )" -b0000000000000000 *" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +" -0/" -b000000 0" -b0000000000 1" -02" -03" -04" -05" -06" -07" -08" -09" -0:" -b00000000 ;" -b0000 <" -b0000 =" -b00 >" -b000000 ?" -b00000000000000000000000000000000 @" -b00000000000000000000000000000000 A" -b00000000000000000000000000000000 B" -b00000000000000000000000000000000 C" -b0000000000000000 D" -b0000000000000000 E" -b0000000000000000 F" -b0000000000000000 G" -b0000000000000000 H" -0I" -0J" -0K" -0L" -0M" -0N" -0O" -0P" -0Q" -0R" -0S" -0T" -b00000000000000000000000000000000 U" -b00000000000000000000000000000000 V" -b00000000000000000000000000000000 W" -b00000000000000000000000000000000 X" -b00000000000000000000000000000000 Y" -b00000000000000000000000000000010 Z" -0[" -0\" -0]" -0^" -0_" -0`" -0a" -0b" -0c" -0d" -0e" -0f" -0g" -0h" -0i" -0j" -b00000000000000000000000000000000 k" -b00000000000000000000000000000000 l" -b00000000000000000000000000000000 m" -b00000000000000000000000000000000 n" -b0000000000000000 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 p" -0t" -b000000 u" -b0000000000 v" -0w" -b00000000000000000000000000000000 x" -b00000000000000000000000000000000 y" -b00000000000000000000000000000000 z" -b00000000000000000000000000000000 {" -b0000000000000000 |" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }" -0## -b000000 $# -b0000000000 %# -0&# -b00000000000000000000000000000000 '# -b00000000000000000000000000000000 (# -b00000000000000000000000000000000 )# -b00000000000000000000000000000000 *# -b0000000000000000 +# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ,# -00# -b000000 1# -b0000000000 2# -03# -b00000000000000000000000000000000 4# -b00000000000000000000000000000000 5# -b00000000000000000000000000000000 6# -b00000000000000000000000000000000 7# -b0000000000000000 8# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 9# -0=# -b000000 ># -b0000000000 ?# -0@# -b00000000000000000000000000000000 A# -b00000000000000000000000000000000 B# -b00000000000000000000000000000000 C# -b00000000000000000000000000000000 D# -b0000000000000000 E# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 F# -0J# -b000000 K# -b0000000000 L# -0M# -0N# -0O# -0P# -0Q# -0R# -0S# -0T# -0U# -b00000000 V# -b0000 W# -b0000 X# -b00 Y# -b000000 Z# -b00000000000000000000000000000000 [# -b00000000000000000000000000000000 \# -b00000000000000000000000000000000 ]# -b00000000000000000000000000000000 ^# -b0000000000000000 _# -b0000000000000000 `# -b0000000000000000 a# -b0000000000000000 b# -b0000000000000000 c# -0d# -0e# -0f# -0g# -0h# -0i# -0j# -0k# -0l# -0m# -0n# -0o# -b00000000000000000000000000000000 p# -b00000000000000000000000000000000 q# -b00000000000000000000000000000000 r# -b00000000000000000000000000000000 s# -b00000000000000000000000000000000 t# -b00000000000000000000000000000011 u# -0v# -0w# -0x# -0y# -0z# -0{# -0|# -0}# -0~# -0!$ -0"$ -0#$ -0$$ -0%$ -0&$ -0'$ -b00000000000000000000000000000000 ($ -b00000000000000000000000000000000 )$ -b00000000000000000000000000000000 *$ -b00000000000000000000000000000000 +$ -b0000000000000000 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -$ -01$ -b000000 2$ -b0000000000 3$ -04$ -b00000000000000000000000000000000 5$ -b00000000000000000000000000000000 6$ -b00000000000000000000000000000000 7$ -b00000000000000000000000000000000 8$ -b0000000000000000 9$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :$ -0>$ -b000000 ?$ -b0000000000 @$ -0A$ -b00000000000000000000000000000000 B$ -b00000000000000000000000000000000 C$ -b00000000000000000000000000000000 D$ -b00000000000000000000000000000000 E$ -b0000000000000000 F$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G$ -0K$ -b000000 L$ -b0000000000 M$ -0N$ -b00000000000000000000000000000000 O$ -b00000000000000000000000000000000 P$ -b00000000000000000000000000000000 Q$ -b00000000000000000000000000000000 R$ -b0000000000000000 S$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T$ -0X$ -b000000 Y$ -b0000000000 Z$ -0[$ -b00000000000000000000000000000000 \$ -b00000000000000000000000000000000 ]$ -b00000000000000000000000000000000 ^$ -b00000000000000000000000000000000 _$ -b0000000000000000 `$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a$ -0e$ -b000000 f$ -b0000000000 g$ -0h$ -0i$ -0j$ -0k$ -0l$ -0m$ -0n$ -0o$ -0p$ -b00000000 q$ -b0000 r$ -b0000 s$ -b00 t$ -b000000 u$ -b00000000000000000000000000000000 v$ -b00000000000000000000000000000000 w$ -b00000000000000000000000000000000 x$ -b00000000000000000000000000000000 y$ -b0000000000000000 z$ -b0000000000000000 {$ -b0000000000000000 |$ -b0000000000000000 }$ -b0000000000000000 ~$ -0!% -0"% -0#% -0$% -0%% -0&% -0'% -0(% -0)% -0*% -0+% -0,% -b00000000000000000000000000000000 -% -b00000000000000000000000000000000 .% -b00000000000000000000000000000000 /% -b00000000000000000000000000000000 0% -b00000000000000000000000000000000 1% -b00000001 2% -b00000010 3% -b00000011 4% -b00000100 5% -b00000100000000110000001000000001 6% -b00000101 7% -b00000101000001000000001100000010 8% -09% -0:% -b00000000000000000000000000000000 ;% -b00000000000000000000000000000000 <% -b00000000000000000000000000000000 =% -b00000000000000000000000000000000 >% -b0000000000000000 ?% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 @% -0D% -b000000 E% -b0000000000 F% -0G% -b00000000000000000000000000000000 H% -b00000000000000000000000000000000 I% -b00000000000000000000000000000000 J% -b00000000000000000000000000000000 K% -b0000000000000000 L% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 M% -0Q% -b000000 R% -b0000000000 S% -0T% -b00000000000000000000000000000000 U% -b00000000000000000000000000000000 V% -b00000000000000000000000000000000 W% -b00000000000000000000000000000000 X% -b0000000000000000 Y% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 Z% -0^% -b000000 _% -b0000000000 `% -1a% -0b% -b1011 c% -b1010 d% -b0000 e% -b0000 f% -0g% -b00000000000000000000000000000000 h% -b00000000000000000000000000000000 i% -b00000000000000000000000000000000 j% -b00000000000000000000000000000000 k% -b0000000000000000 l% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 m% -0q% -b000000 r% -b0000000000 s% -0t% -b00000000000000000000000000000000 u% -b00000000000000000000000000000000 v% -b00000000000000000000000000000000 w% -b00000000000000000000000000000000 x% -b0000000000000000 y% -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 z% -0~% -b000000 !& -b0000000000 "& -0#& -b00000000000000000000000000000000 $& -b00000000000000000000000000000000 %& -b00000000000000000000000000000000 && -b00000000000000000000000000000000 '& -b0000000000000000 (& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 )& -0-& -b000000 .& -b0000000000 /& -b0000 0& -b0000 1& -02& -b00000000000000000000000000000000 3& -b00000000000000000000000000000000 4& -b00000000000000000000000000000000 5& -b00000000000000000000000000000000 6& -b0000000000000000 7& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 8& -0<& -b000000 =& -b0000000000 >& -0?& -b00000000000000000000000000000000 @& -b00000000000000000000000000000000 A& -b00000000000000000000000000000000 B& -b00000000000000000000000000000000 C& -b0000000000000000 D& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 E& -0I& -b000000 J& -b0000000000 K& -0L& -b00000000000000000000000000000000 M& -b00000000000000000000000000000000 N& -b00000000000000000000000000000000 O& -b00000000000000000000000000000000 P& -b0000000000000000 Q& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 R& -0V& -b000000 W& -b0000000000 X& -b0000 Y& -b0000 Z& -0[& -b00000000000000000000000000000000 \& -b00000000000000000000000000000000 ]& -b00000000000000000000000000000000 ^& -b00000000000000000000000000000000 _& -b0000000000000000 `& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a& -0e& -b000000 f& -b0000000000 g& -0h& -b00000000000000000000000000000000 i& -b00000000000000000000000000000000 j& -b00000000000000000000000000000000 k& -b00000000000000000000000000000000 l& -b0000000000000000 m& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 n& -0r& -b000000 s& -b0000000000 t& -0u& -b00000000000000000000000000000000 v& -b00000000000000000000000000000000 w& -b00000000000000000000000000000000 x& -b00000000000000000000000000000000 y& -b0000000000000000 z& -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 {& -0!' -b000000 "' -b0000000000 #' -b0000 $' -b0000 %' -b111111 &' -b1111111111 '' -b000000 (' -b0000000000 )' -#10 -b00000000000000000000000000000001 # -1% -b00000000000000000000000000000011 5 -b00000000000000000000000000000010 6 -b00000000000000000000000000000001 7 -b00000000000000000000000000000001 &! -b00000000000000000000000001111011 '! -b00000000000000000000000001111100 (! -1.! -1/! -10! -11! -12! -13! -14! -15! -16! -17! -18! -19! -b00000000000000000000000000000100 :! -b00000000000000000000000000000010 ;! -b00000000000000000000000000000101 ! -b00000000000000000000000000000010 ?! -1@! -1D! -1E! -1F! -1G! -1K! -1O! -b00000000000000000000000000000100 P! -b00000000000000000000000000000011 Q! -b00000000000000000000000000000010 R! -b00000000000000000000000000000001 S! -b0000000000000001 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 U! -1Y! -b000001 Z! -b0000000001 [! -1\! -b11111111111111111111111111111111 ]! -b11111111111111111111111111111111 ^! -b11111111111111111111111111111111 _! -b11111111111111111111111111111111 `! -b1111111111111111 a! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 b! -1f! -b111111 g! -b1111111111 h! -14" -18" -b00000001 ;" -b0001 =" -b000001 ?" -b00000000000000000000000000000001 @" -b00000000000000000000000000000010 A" -b00000000000000000000000001111100 B" -b00000000000000000000000001111101 C" -b0000000000000001 D" -b0000000000000001 E" -b0000000000000001 F" -b0000000000000001 G" -b0000000000000001 H" -1I" -1N" -1O" -1P" -1R" -1S" -1T" -b00000000000000000000000000000100 U" -b00000000000000000000000000000010 V" -b00000000000000000000000000000101 W" -b00000000000000000000000000000011 X" -b00000000000000000000000000000100 Y" -b00000000000000000000000000000011 Z" -1_" -1b" -1d" -1e" -1g" -b00000000000000000000000000000101 k" -b00000000000000000000000000000100 l" -b00000000000000000000000000000011 m" -b00000000000000000000000000000010 n" -b0000000000000010 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010 p" -b000010 u" -b0000000010 v" -1&# -b11111111111111111111111111111111 '# -b11111111111111111111111111111111 (# -b11111111111111111111111111111111 )# -b11111111111111111111111111111111 *# -b1111111111111111 +# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ,# -10# -b111111 1# -b1111111111 2# -1N# -1R# -1T# -b00000010 V# -b0010 X# -b000010 Z# -b00000000000000000000000000000010 [# -b00000000000000000000000000000011 \# -b00000000000000000000000001111101 ]# -b00000000000000000000000001111110 ^# -b0000000000000010 _# -b0000000000000010 `# -b0000000000000010 a# -b0000000000000010 b# -b0000000000000010 c# -1d# -1f# -1g# -1i# -1l# -1n# -1o# -b00000000000000000000000000000100 p# -b00000000000000000000000000000010 q# -b00000000000000000000000000000101 r# -b00000000000000000000000000000011 s# -b00000000000000000000000000000100 t# -b00000000000000000000000000000100 u# -1{# -1|# -1!$ -1"$ -1#$ -1$$ -1'$ -b00000000000000000000000000000110 ($ -b00000000000000000000000000000101 )$ -b00000000000000000000000000000100 *$ -b00000000000000000000000000000011 +$ -b0000000000000011 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 -$ -11$ -b000011 2$ -b0000000011 3$ -14$ -b11111111111111111111111111111111 5$ -b11111111111111111111111111111111 6$ -b11111111111111111111111111111111 7$ -b11111111111111111111111111111111 8$ -b1111111111111111 9$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 :$ -1>$ -b111111 ?$ -b1111111111 @$ -1A$ -b11111111111111111111111111111111 B$ -b11111111111111111111111111111111 C$ -b11111111111111111111111111111111 D$ -b11111111111111111111111111111111 E$ -b1111111111111111 F$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G$ -1K$ -b111111 L$ -b1111111111 M$ -1i$ -1j$ -1m$ -1n$ -1o$ -b00000011 q$ -b0011 s$ -b000011 u$ -b00000000000000000000000000000011 v$ -b00000000000000000000000000000100 w$ -b00000000000000000000000001111110 x$ -b00000000000000000000000001111111 y$ -b0000000000000011 z$ -b0000000000000011 {$ -b0000000000000011 |$ -b0000000000000011 }$ -b0000000000000011 ~$ -1!% -1"% -1%% -1&% -1+% -1,% -b00000000000000000000000000000100 -% -b00000000000000000000000000000010 .% -b00000000000000000000000000000101 /% -b00000000000000000000000000000011 0% -b00000000000000000000000000000100 1% -b00000010 2% -b00000011 3% -b00000100 4% -b00000101 5% -b00000101000001000000001100000010 6% -b00000110 7% -b00000110000001010000010000000011 8% -19% -#15 -09% -#20 -b00000000000000000000000000000010 # -b0011 $ -0% -1& -1' -1) -1* -1+ -1, -10 -14 -b00000000000000000000000000000100 5 -b00000000000000000000000000000011 6 -b00000000000000000000000000000010 7 -b00000000000000000000000000000001 8 -b0000000000000001 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 : -1> -b000001 ? -b0000000001 @ -1A -b11111111111111111111111111111111 B -b11111111111111111111111111111111 C -b11111111111111111111111111111111 D -b11111111111111111111111111111111 E -b1111111111111111 F -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G -1K -b111111 L -b1111111111 M -1w -1{ -b00000001 ~ -b0001 "! -b000001 $! -b00000000000000000000000000000001 %! -b00000000000000000000000000000010 &! -b00000000000000000000000001111100 '! -b00000000000000000000000001111101 (! -b0000000000000001 )! -b0000000000000001 *! -b0000000000000001 +! -b0000000000000001 ,! -b0000000000000001 -! -0/! -00! -01! -02! -06! -b00000000000000000000000000000011 ?! -1B! -0E! -0F! -1I! -1J! -0K! -1L! -0O! -b00000000000000000000000000000101 P! -b00000000000000000000000000000100 Q! -b00000000000000000000000000000011 R! -b00000000000000000000000000000010 S! -b0000000000000010 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010 U! -0Y! -b000010 Z! -b0000000010 [! -0\! -b00000000000000000000000000000000 ]! -b00000000000000000000000000000000 ^! -b00000000000000000000000000000000 _! -b00000000000000000000000000000000 `! -b0000000000000000 a! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 b! -0f! -b000000 g! -b0000000000 h! -1i! -b11111111111111111111111111111111 j! -b11111111111111111111111111111111 k! -b11111111111111111111111111111111 l! -b11111111111111111111111111111111 m! -b1111111111111111 n! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 o! -1s! -b111111 t! -b1111111111 u! -13" -04" -17" -08" -19" -b00000010 ;" -b0010 =" -b000010 ?" -b00000000000000000000000000000010 @" -b00000000000000000000000000000011 A" -b00000000000000000000000001111101 B" -b00000000000000000000000001111110 C" -b0000000000000010 D" -b0000000000000010 E" -b0000000000000010 F" -b0000000000000010 G" -b0000000000000010 H" -1K" -1L" -0O" -0P" -1Q" -0R" -b00000000000000000000000000000100 Z" -1[" -0_" -1`" -1a" -0b" -1f" -1j" -b00000000000000000000000000000110 k" -b00000000000000000000000000000101 l" -b00000000000000000000000000000100 m" -b00000000000000000000000000000011 n" -b0000000000000011 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 p" -1t" -b000011 u" -b0000000011 v" -1w" -b11111111111111111111111111111111 x" -b11111111111111111111111111111111 y" -b11111111111111111111111111111111 z" -b11111111111111111111111111111111 {" -b1111111111111111 |" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 }" -1## -b111111 $# -b1111111111 %# -1O# -1S# -b00000011 V# -b0011 X# -b000011 Z# -b00000000000000000000000000000011 [# -b00000000000000000000000000000100 \# -b00000000000000000000000001111110 ]# -b00000000000000000000000001111111 ^# -b0000000000000011 _# -b0000000000000011 `# -b0000000000000011 a# -b0000000000000011 b# -b0000000000000011 c# -1e# -0f# -0g# -1h# -0l# -b00000000000000000000000000000101 u# -0|# -0"$ -1&$ -0'$ -b00000000000000000000000000000111 ($ -b00000000000000000000000000000110 )$ -b00000000000000000000000000000101 *$ -b00000000000000000000000000000100 +$ -b0000000000000100 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 -$ -01$ -b000100 2$ -b0000000100 3$ -04$ -b00000000000000000000000000000000 5$ -b00000000000000000000000000000000 6$ -b00000000000000000000000000000000 7$ -b00000000000000000000000000000000 8$ -b0000000000000000 9$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :$ -0>$ -b000000 ?$ -b0000000000 @$ -0A$ -b00000000000000000000000000000000 B$ -b00000000000000000000000000000000 C$ -b00000000000000000000000000000000 D$ -b00000000000000000000000000000000 E$ -b0000000000000000 F$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G$ -0K$ -b000000 L$ -b0000000000 M$ -1N$ -b11111111111111111111111111111111 O$ -b11111111111111111111111111111111 P$ -b11111111111111111111111111111111 Q$ -b11111111111111111111111111111111 R$ -b1111111111111111 S$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 T$ -1X$ -b111111 Y$ -b1111111111 Z$ -1h$ -0i$ -0j$ -1l$ -0m$ -0n$ -0o$ -1p$ -b00000100 q$ -b0100 s$ -b000100 u$ -b00000000000000000000000000000100 v$ -b00000000000000000000000000000101 w$ -b00000000000000000000000001111111 x$ -b00000000000000000000000010000000 y$ -b0000000000000100 z$ -b0000000000000100 {$ -b0000000000000100 |$ -b0000000000000100 }$ -b0000000000000100 ~$ -1$% -1(% -0,% -b00000011 2% -b00000100 3% -b00000101 4% -b00000110 5% -b00000110000001010000010000000011 6% -b00000111 7% -b00000111000001100000010100000100 8% -19% -#25 -09% -#30 -b00000000000000000000000000000011 # -b0111 $ -1% -0* -0+ -1. -1/ -00 -11 -04 -b00000000000000000000000000000101 5 -b00000000000000000000000000000100 6 -b00000000000000000000000000000011 7 -b00000000000000000000000000000010 8 -b0000000000000010 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010 : -0> -b000010 ? -b0000000010 @ -0A -b00000000000000000000000000000000 B -b00000000000000000000000000000000 C -b00000000000000000000000000000000 D -b00000000000000000000000000000000 E -b0000000000000000 F -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G -0K -b000000 L -b0000000000 M -1N -b11111111111111111111111111111111 O -b11111111111111111111111111111111 P -b11111111111111111111111111111111 Q -b11111111111111111111111111111111 R -b1111111111111111 S -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 T -1X -b111111 Y -b1111111111 Z -1v -0w -1z -0{ -1| -b00000010 ~ -b0010 "! -b000010 $! -b00000000000000000000000000000010 %! -b00000000000000000000000000000011 &! -b00000000000000000000000001111101 '! -b00000000000000000000000001111110 (! -b0000000000000010 )! -b0000000000000010 *! -b0000000000000010 +! -b0000000000000010 ,! -b0000000000000010 -! -10! -11! -04! -05! -16! -07! -b00000000000000000000000000000100 ?! -0@! -1A! -0D! -1E! -1F! -0G! -1K! -1O! -b00000000000000000000000000000110 P! -b00000000000000000000000000000101 Q! -b00000000000000000000000000000100 R! -b00000000000000000000000000000011 S! -b0000000000000011 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 U! -1Y! -b000011 Z! -b0000000011 [! -1\! -b11111111111111111111111111111111 ]! -b11111111111111111111111111111111 ^! -b11111111111111111111111111111111 _! -b11111111111111111111111111111111 `! -b1111111111111111 a! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 b! -1f! -b111111 g! -b1111111111 h! -14" -18" -b00000011 ;" -b0011 =" -b000011 ?" -b00000000000000000000000000000011 @" -b00000000000000000000000000000100 A" -b00000000000000000000000001111110 B" -b00000000000000000000000001111111 C" -b0000000000000011 D" -b0000000000000011 E" -b0000000000000011 F" -b0000000000000011 G" -b0000000000000011 H" -1J" -0K" -0L" -1M" -0Q" -b00000000000000000000000000000101 Z" -1]" -0a" -0e" -1i" -0j" -b00000000000000000000000000000111 k" -b00000000000000000000000000000110 l" -b00000000000000000000000000000101 m" -b00000000000000000000000000000100 n" -b0000000000000100 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 p" -0t" -b000100 u" -b0000000100 v" -0w" -b00000000000000000000000000000000 x" -b00000000000000000000000000000000 y" -b00000000000000000000000000000000 z" -b00000000000000000000000000000000 {" -b0000000000000000 |" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }" -0## -b000000 $# -b0000000000 %# -0&# -b00000000000000000000000000000000 '# -b00000000000000000000000000000000 (# -b00000000000000000000000000000000 )# -b00000000000000000000000000000000 *# -b0000000000000000 +# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ,# -00# -b000000 1# -b0000000000 2# -13# -b11111111111111111111111111111111 4# -b11111111111111111111111111111111 5# -b11111111111111111111111111111111 6# -b11111111111111111111111111111111 7# -b1111111111111111 8# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 9# -1=# -b111111 ># -b1111111111 ?# -1M# -0N# -0O# -1Q# -0R# -0S# -0T# -1U# -b00000100 V# -b0100 X# -b000100 Z# -b00000000000000000000000000000100 [# -b00000000000000000000000000000101 \# -b00000000000000000000000001111111 ]# -b00000000000000000000000010000000 ^# -b0000000000000100 _# -b0000000000000100 `# -b0000000000000100 a# -b0000000000000100 b# -b0000000000000100 c# -1g# -1k# -0o# -b00000000000000000000000000000110 u# -1z# -0{# -1|# -1}# -0#$ -1'$ -b00000000000000000000000000001000 ($ -b00000000000000000000000000000111 )$ -b00000000000000000000000000000110 *$ -b00000000000000000000000000000101 +$ -b0000000000000101 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101 -$ -11$ -b000101 2$ -b0000000101 3$ -14$ -b11111111111111111111111111111111 5$ -b11111111111111111111111111111111 6$ -b11111111111111111111111111111111 7$ -b11111111111111111111111111111111 8$ -b1111111111111111 9$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 :$ -1>$ -b111111 ?$ -b1111111111 @$ -1j$ -1n$ -b00000101 q$ -b0101 s$ -b000101 u$ -b00000000000000000000000000000101 v$ -b00000000000000000000000000000110 w$ -b00000000000000000000000010000000 x$ -b00000000000000000000000010000001 y$ -b0000000000000101 z$ -b0000000000000101 {$ -b0000000000000101 |$ -b0000000000000101 }$ -b0000000000000101 ~$ -0"% -1#% -0$% -0%% -1)% -b00000100 2% -b00000101 3% -b00000110 4% -b00000111 5% -b00000111000001100000010100000100 6% -b00001000 7% -b00001000000001110000011000000101 8% -19% -#35 -09% -#40 -b00000000000000000000000000000100 # -b0110 $ -0% -0& -0' -0) -1* -1+ -0, -10 -14 -b00000000000000000000000000000110 5 -b00000000000000000000000000000101 6 -b00000000000000000000000000000100 7 -b00000000000000000000000000000011 8 -b0000000000000011 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011 : -1> -b000011 ? -b0000000011 @ -1A -b11111111111111111111111111111111 B -b11111111111111111111111111111111 C -b11111111111111111111111111111111 D -b11111111111111111111111111111111 E -b1111111111111111 F -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G -1K -b111111 L -b1111111111 M -1w -1{ -b00000011 ~ -b0011 "! -b000011 $! -b00000000000000000000000000000011 %! -b00000000000000000000000000000100 &! -b00000000000000000000000001111110 '! -b00000000000000000000000001111111 (! -b0000000000000011 )! -b0000000000000011 *! -b0000000000000011 +! -b0000000000000011 ,! -b0000000000000011 -! -1/! -00! -01! -12! -06! -b00000000000000000000000000000101 ?! -0F! -0J! -1N! -0O! -b00000000000000000000000000000111 P! -b00000000000000000000000000000110 Q! -b00000000000000000000000000000101 R! -b00000000000000000000000000000100 S! -b0000000000000100 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 U! -0Y! -b000100 Z! -b0000000100 [! -0\! -b00000000000000000000000000000000 ]! -b00000000000000000000000000000000 ^! -b00000000000000000000000000000000 _! -b00000000000000000000000000000000 `! -b0000000000000000 a! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 b! -0f! -b000000 g! -b0000000000 h! -0i! -b00000000000000000000000000000000 j! -b00000000000000000000000000000000 k! -b00000000000000000000000000000000 l! -b00000000000000000000000000000000 m! -b0000000000000000 n! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 o! -0s! -b000000 t! -b0000000000 u! -1v! -b11111111111111111111111111111111 w! -b11111111111111111111111111111111 x! -b11111111111111111111111111111111 y! -b11111111111111111111111111111111 z! -b1111111111111111 {! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 |! -1"" -b111111 #" -b1111111111 $" -12" -03" -04" -16" -07" -08" -09" -1:" -b00000100 ;" -b0100 =" -b000100 ?" -b00000000000000000000000000000100 @" -b00000000000000000000000000000101 A" -b00000000000000000000000001111111 B" -b00000000000000000000000010000000 C" -b0000000000000100 D" -b0000000000000100 E" -b0000000000000100 F" -b0000000000000100 G" -b0000000000000100 H" -1L" -1P" -0T" -b00000000000000000000000000000110 Z" -1_" -0`" -1a" -1b" -0f" -1j" -b00000000000000000000000000001000 k" -b00000000000000000000000000000111 l" -b00000000000000000000000000000110 m" -b00000000000000000000000000000101 n" -b0000000000000101 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101 p" -1t" -b000101 u" -b0000000101 v" -1w" -b11111111111111111111111111111111 x" -b11111111111111111111111111111111 y" -b11111111111111111111111111111111 z" -b11111111111111111111111111111111 {" -b1111111111111111 |" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 }" -1## -b111111 $# -b1111111111 %# -1O# -1S# -b00000101 V# -b0101 X# -b000101 Z# -b00000000000000000000000000000101 [# -b00000000000000000000000000000110 \# -b00000000000000000000000010000000 ]# -b00000000000000000000000010000001 ^# -b0000000000000101 _# -b0000000000000101 `# -b0000000000000101 a# -b0000000000000101 b# -b0000000000000101 c# -0e# -1f# -0g# -0h# -1l# -b00000000000000000000000000000111 u# -1{# -0|# -0!$ -1"$ -1#$ -0$$ -0'$ -b00000000000000000000000000001001 ($ -b00000000000000000000000000001000 )$ -b00000000000000000000000000000111 *$ -b00000000000000000000000000000110 +$ -b0000000000000110 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110 -$ -01$ -b000110 2$ -b0000000110 3$ -04$ -b00000000000000000000000000000000 5$ -b00000000000000000000000000000000 6$ -b00000000000000000000000000000000 7$ -b00000000000000000000000000000000 8$ -b0000000000000000 9$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :$ -0>$ -b000000 ?$ -b0000000000 @$ -1A$ -b11111111111111111111111111111111 B$ -b11111111111111111111111111111111 C$ -b11111111111111111111111111111111 D$ -b11111111111111111111111111111111 E$ -b1111111111111111 F$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G$ -1K$ -b111111 L$ -b1111111111 M$ -1i$ -0j$ -1m$ -0n$ -1o$ -b00000110 q$ -b0110 s$ -b000110 u$ -b00000000000000000000000000000110 v$ -b00000000000000000000000000000111 w$ -b00000000000000000000000010000001 x$ -b00000000000000000000000010000010 y$ -b0000000000000110 z$ -b0000000000000110 {$ -b0000000000000110 |$ -b0000000000000110 }$ -b0000000000000110 ~$ -0#% -1$% -1'% -0(% -0)% -1*% -b00000101 2% -b00000110 3% -b00000111 4% -b00001000 5% -b00001000000001110000011000000101 6% -b00001001 7% -b00001001000010000000011100000110 8% -19% -#45 -09% -#50 -b00000000000000000000000000000101 # -1% -0+ -0/ -13 -04 -b00000000000000000000000000000111 5 -b00000000000000000000000000000110 6 -b00000000000000000000000000000101 7 -b00000000000000000000000000000100 8 -b0000000000000100 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 : -0> -b000100 ? -b0000000100 @ -0A -b00000000000000000000000000000000 B -b00000000000000000000000000000000 C -b00000000000000000000000000000000 D -b00000000000000000000000000000000 E -b0000000000000000 F -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G -0K -b000000 L -b0000000000 M -0N -b00000000000000000000000000000000 O -b00000000000000000000000000000000 P -b00000000000000000000000000000000 Q -b00000000000000000000000000000000 R -b0000000000000000 S -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T -0X -b000000 Y -b0000000000 Z -1[ -b11111111111111111111111111111111 \ -b11111111111111111111111111111111 ] -b11111111111111111111111111111111 ^ -b11111111111111111111111111111111 _ -b1111111111111111 ` -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 a -1e -b111111 f -b1111111111 g -1u -0v -0w -1y -0z -0{ -0| -1} -b00000100 ~ -b0100 "! -b000100 $! -b00000000000000000000000000000100 %! -b00000000000000000000000000000101 &! -b00000000000000000000000001111111 '! -b00000000000000000000000010000000 (! -b0000000000000100 )! -b0000000000000100 *! -b0000000000000100 +! -b0000000000000100 ,! -b0000000000000100 -! -11! -15! -09! -b00000000000000000000000000000110 ?! -1@! -1D! -0E! -1F! -1G! -0K! -1O! -b00000000000000000000000000001000 P! -b00000000000000000000000000000111 Q! -b00000000000000000000000000000110 R! -b00000000000000000000000000000101 S! -b0000000000000101 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101 U! -1Y! -b000101 Z! -b0000000101 [! -1\! -b11111111111111111111111111111111 ]! -b11111111111111111111111111111111 ^! -b11111111111111111111111111111111 _! -b11111111111111111111111111111111 `! -b1111111111111111 a! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 b! -1f! -b111111 g! -b1111111111 h! -14" -18" -b00000101 ;" -b0101 =" -b000101 ?" -b00000000000000000000000000000101 @" -b00000000000000000000000000000110 A" -b00000000000000000000000010000000 B" -b00000000000000000000000010000001 C" -b0000000000000101 D" -b0000000000000101 E" -b0000000000000101 F" -b0000000000000101 G" -b0000000000000101 H" -0J" -1K" -0L" -0M" -1Q" -b00000000000000000000000000000111 Z" -1`" -0a" -0d" -1e" -1f" -0g" -0j" -b00000000000000000000000000001001 k" -b00000000000000000000000000001000 l" -b00000000000000000000000000000111 m" -b00000000000000000000000000000110 n" -b0000000000000110 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110 p" -0t" -b000110 u" -b0000000110 v" -0w" -b00000000000000000000000000000000 x" -b00000000000000000000000000000000 y" -b00000000000000000000000000000000 z" -b00000000000000000000000000000000 {" -b0000000000000000 |" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }" -0## -b000000 $# -b0000000000 %# -1&# -b11111111111111111111111111111111 '# -b11111111111111111111111111111111 (# -b11111111111111111111111111111111 )# -b11111111111111111111111111111111 *# -b1111111111111111 +# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ,# -10# -b111111 1# -b1111111111 2# -1N# -0O# -1R# -0S# -1T# -b00000110 V# -b0110 X# -b000110 Z# -b00000000000000000000000000000110 [# -b00000000000000000000000000000111 \# -b00000000000000000000000010000001 ]# -b00000000000000000000000010000010 ^# -b0000000000000110 _# -b0000000000000110 `# -b0000000000000110 a# -b0000000000000110 b# -b0000000000000110 c# -0f# -1g# -1j# -0k# -0l# -1m# -b00000000000000000000000000001000 u# -1v# -0z# -0{# -1|# -0}# -0#$ -1'$ -b00000000000000000000000000001010 ($ -b00000000000000000000000000001001 )$ -b00000000000000000000000000001000 *$ -b00000000000000000000000000000111 +$ -b0000000000000111 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111 -$ -11$ -b000111 2$ -b0000000111 3$ -14$ -b11111111111111111111111111111111 5$ -b11111111111111111111111111111111 6$ -b11111111111111111111111111111111 7$ -b11111111111111111111111111111111 8$ -b1111111111111111 9$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 :$ -1>$ -b111111 ?$ -b1111111111 @$ -1j$ -1n$ -b00000111 q$ -b0111 s$ -b000111 u$ -b00000000000000000000000000000111 v$ -b00000000000000000000000000001000 w$ -b00000000000000000000000010000010 x$ -b00000000000000000000000010000011 y$ -b0000000000000111 z$ -b0000000000000111 {$ -b0000000000000111 |$ -b0000000000000111 }$ -b0000000000000111 ~$ -1"% -1#% -0$% -1%% -1)% -b00000110 2% -b00000111 3% -b00001000 4% -b00001001 5% -b00001001000010000000011100000110 6% -b00001010 7% -b00001010000010010000100000000111 8% -19% -#55 -09% -#60 -b00000000000000000000000000000110 # -b1101 $ -0% -1& -1' -1) -0* -1+ -1, -00 -14 -b00000000000000000000000000001000 5 -b00000000000000000000000000000111 6 -b00000000000000000000000000000110 7 -b00000000000000000000000000000101 8 -b0000000000000101 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101 : -1> -b000101 ? -b0000000101 @ -1A -b11111111111111111111111111111111 B -b11111111111111111111111111111111 C -b11111111111111111111111111111111 D -b11111111111111111111111111111111 E -b1111111111111111 F -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G -1K -b111111 L -b1111111111 M -1w -1{ -b00000101 ~ -b0101 "! -b000101 $! -b00000000000000000000000000000101 %! -b00000000000000000000000000000110 &! -b00000000000000000000000010000000 '! -b00000000000000000000000010000001 (! -b0000000000000101 )! -b0000000000000101 *! -b0000000000000101 +! -b0000000000000101 ,! -b0000000000000101 -! -0/! -10! -01! -02! -16! -b00000000000000000000000000000111 ?! -0B! -1E! -0F! -0I! -1J! -1K! -0L! -0O! -b00000000000000000000000000001001 P! -b00000000000000000000000000001000 Q! -b00000000000000000000000000000111 R! -b00000000000000000000000000000110 S! -b0000000000000110 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110 U! -0Y! -b000110 Z! -b0000000110 [! -0\! -b00000000000000000000000000000000 ]! -b00000000000000000000000000000000 ^! -b00000000000000000000000000000000 _! -b00000000000000000000000000000000 `! -b0000000000000000 a! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 b! -0f! -b000000 g! -b0000000000 h! -1i! -b11111111111111111111111111111111 j! -b11111111111111111111111111111111 k! -b11111111111111111111111111111111 l! -b11111111111111111111111111111111 m! -b1111111111111111 n! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 o! -1s! -b111111 t! -b1111111111 u! -13" -04" -17" -08" -19" -b00000110 ;" -b0110 =" -b000110 ?" -b00000000000000000000000000000110 @" -b00000000000000000000000000000111 A" -b00000000000000000000000010000001 B" -b00000000000000000000000010000010 C" -b0000000000000110 D" -b0000000000000110 E" -b0000000000000110 F" -b0000000000000110 G" -b0000000000000110 H" -0K" -1L" -1O" -0P" -0Q" -1R" -b00000000000000000000000000001000 Z" -0[" -1\" -0_" -0`" -1a" -0b" -0f" -1j" -b00000000000000000000000000001010 k" -b00000000000000000000000000001001 l" -b00000000000000000000000000001000 m" -b00000000000000000000000000000111 n" -b0000000000000111 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111 p" -1t" -b000111 u" -b0000000111 v" -1w" -b11111111111111111111111111111111 x" -b11111111111111111111111111111111 y" -b11111111111111111111111111111111 z" -b11111111111111111111111111111111 {" -b1111111111111111 |" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 }" -1## -b111111 $# -b1111111111 %# -1O# -1S# -b00000111 V# -b0111 X# -b000111 Z# -b00000000000000000000000000000111 [# -b00000000000000000000000000001000 \# -b00000000000000000000000010000010 ]# -b00000000000000000000000010000011 ^# -b0000000000000111 _# -b0000000000000111 `# -b0000000000000111 a# -b0000000000000111 b# -b0000000000000111 c# -1e# -1f# -0g# -1h# -1l# -b00000000000000000000000000001001 u# -1x# -0'$ -b00000000000000000000000000001011 ($ -b00000000000000000000000000001010 )$ -b00000000000000000000000000001001 *$ -b00000000000000000000000000001000 +$ -b0000000000001000 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000 -$ -01$ -b001000 2$ -b0000001000 3$ -04$ -b00000000000000000000000000000000 5$ -b00000000000000000000000000000000 6$ -b00000000000000000000000000000000 7$ -b00000000000000000000000000000000 8$ -b0000000000000000 9$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :$ -0>$ -b000000 ?$ -b0000000000 @$ -0A$ -b00000000000000000000000000000000 B$ -b00000000000000000000000000000000 C$ -b00000000000000000000000000000000 D$ -b00000000000000000000000000000000 E$ -b0000000000000000 F$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G$ -0K$ -b000000 L$ -b0000000000 M$ -0N$ -b00000000000000000000000000000000 O$ -b00000000000000000000000000000000 P$ -b00000000000000000000000000000000 Q$ -b00000000000000000000000000000000 R$ -b0000000000000000 S$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T$ -0X$ -b000000 Y$ -b0000000000 Z$ -1[$ -b11111111111111111111111111111111 \$ -b11111111111111111111111111111111 ]$ -b11111111111111111111111111111111 ^$ -b11111111111111111111111111111111 _$ -b1111111111111111 `$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 a$ -1e$ -b111111 f$ -b1111111111 g$ -0h$ -0i$ -0j$ -1k$ -0l$ -0m$ -0n$ -0o$ -0p$ -b00001000 q$ -b1000 s$ -b001000 u$ -b00000000000000000000000000001000 v$ -b00000000000000000000000000001001 w$ -b00000000000000000000000010000011 x$ -b00000000000000000000000010000100 y$ -b0000000000001000 z$ -b0000000000001000 {$ -b0000000000001000 |$ -b0000000000001000 }$ -b0000000000001000 ~$ -b00000111 2% -b00001000 3% -b00001001 4% -b00001010 5% -b00001010000010010000100000000111 6% -b00001011 7% -b00001011000010100000100100001000 8% -19% -#65 -09% -#70 -b00000000000000000000000000000111 # -1% -1* -0+ -0. -1/ -10 -01 -04 -b00000000000000000000000000001001 5 -b00000000000000000000000000001000 6 -b00000000000000000000000000000111 7 -b00000000000000000000000000000110 8 -b0000000000000110 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110 : -0> -b000110 ? -b0000000110 @ -0A -b00000000000000000000000000000000 B -b00000000000000000000000000000000 C -b00000000000000000000000000000000 D -b00000000000000000000000000000000 E -b0000000000000000 F -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G -0K -b000000 L -b0000000000 M -1N -b11111111111111111111111111111111 O -b11111111111111111111111111111111 P -b11111111111111111111111111111111 Q -b11111111111111111111111111111111 R -b1111111111111111 S -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 T -1X -b111111 Y -b1111111111 Z -1v -0w -1z -0{ -1| -b00000110 ~ -b0110 "! -b000110 $! -b00000000000000000000000000000110 %! -b00000000000000000000000000000111 &! -b00000000000000000000000010000001 '! -b00000000000000000000000010000010 (! -b0000000000000110 )! -b0000000000000110 *! -b0000000000000110 +! -b0000000000000110 ,! -b0000000000000110 -! -00! -11! -14! -05! -06! -17! -b00000000000000000000000000001000 ?! -0@! -0A! -0D! -0E! -1F! -0G! -0K! -1O! -b00000000000000000000000000001010 P! -b00000000000000000000000000001001 Q! -b00000000000000000000000000001000 R! -b00000000000000000000000000000111 S! -b0000000000000111 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111 U! -1Y! -b000111 Z! -b0000000111 [! -1\! -b11111111111111111111111111111111 ]! -b11111111111111111111111111111111 ^! -b11111111111111111111111111111111 _! -b11111111111111111111111111111111 `! -b1111111111111111 a! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 b! -1f! -b111111 g! -b1111111111 h! -14" -18" -b00000111 ;" -b0111 =" -b000111 ?" -b00000000000000000000000000000111 @" -b00000000000000000000000000001000 A" -b00000000000000000000000010000010 B" -b00000000000000000000000010000011 C" -b0000000000000111 D" -b0000000000000111 E" -b0000000000000111 F" -b0000000000000111 G" -b0000000000000111 H" -1J" -1K" -0L" -1M" -1Q" -b00000000000000000000000000001001 Z" -0j" -b00000000000000000000000000001011 k" -b00000000000000000000000000001010 l" -b00000000000000000000000000001001 m" -b00000000000000000000000000001000 n" -b0000000000001000 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000 p" -0t" -b001000 u" -b0000001000 v" -0w" -b00000000000000000000000000000000 x" -b00000000000000000000000000000000 y" -b00000000000000000000000000000000 z" -b00000000000000000000000000000000 {" -b0000000000000000 |" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }" -0## -b000000 $# -b0000000000 %# -0&# -b00000000000000000000000000000000 '# -b00000000000000000000000000000000 (# -b00000000000000000000000000000000 )# -b00000000000000000000000000000000 *# -b0000000000000000 +# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ,# -00# -b000000 1# -b0000000000 2# -03# -b00000000000000000000000000000000 4# -b00000000000000000000000000000000 5# -b00000000000000000000000000000000 6# -b00000000000000000000000000000000 7# -b0000000000000000 8# -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 9# -0=# -b000000 ># -b0000000000 ?# -1@# -b11111111111111111111111111111111 A# -b11111111111111111111111111111111 B# -b11111111111111111111111111111111 C# -b11111111111111111111111111111111 D# -b1111111111111111 E# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 F# -1J# -b111111 K# -b1111111111 L# -0M# -0N# -0O# -1P# -0Q# -0R# -0S# -0T# -0U# -b00001000 V# -b1000 X# -b001000 Z# -b00000000000000000000000000001000 [# -b00000000000000000000000000001001 \# -b00000000000000000000000010000011 ]# -b00000000000000000000000010000100 ^# -b0000000000001000 _# -b0000000000001000 `# -b0000000000001000 a# -b0000000000001000 b# -b0000000000001000 c# -b00000000000000000000000000001010 u# -1z# -1{# -0|# -1}# -1#$ -1'$ -b00000000000000000000000000001100 ($ -b00000000000000000000000000001011 )$ -b00000000000000000000000000001010 *$ -b00000000000000000000000000001001 +$ -b0000000000001001 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001 -$ -11$ -b001001 2$ -b0000001001 3$ -14$ -b11111111111111111111111111111111 5$ -b11111111111111111111111111111111 6$ -b11111111111111111111111111111111 7$ -b11111111111111111111111111111111 8$ -b1111111111111111 9$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 :$ -1>$ -b111111 ?$ -b1111111111 @$ -1j$ -1n$ -b00001001 q$ -b1001 s$ -b001001 u$ -b00000000000000000000000000001001 v$ -b00000000000000000000000000001010 w$ -b00000000000000000000000010000100 x$ -b00000000000000000000000010000101 y$ -b0000000000001001 z$ -b0000000000001001 {$ -b0000000000001001 |$ -b0000000000001001 }$ -b0000000000001001 ~$ -0"% -0#% -1$% -0%% -0)% -b00001000 2% -b00001001 3% -b00001010 4% -b00001011 5% -b00001011000010100000100100001000 6% -b00001100 7% -b00001100000010110000101000001001 8% -19% -#75 -09% -#80 -b00000000000000000000000000001000 # -b1100 $ -0% -0& -0' -0) -0* -1+ -0, -00 -14 -b00000000000000000000000000001010 5 -b00000000000000000000000000001001 6 -b00000000000000000000000000001000 7 -b00000000000000000000000000000111 8 -b0000000000000111 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000111 : -1> -b000111 ? -b0000000111 @ -1A -b11111111111111111111111111111111 B -b11111111111111111111111111111111 C -b11111111111111111111111111111111 D -b11111111111111111111111111111111 E -b1111111111111111 F -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G -1K -b111111 L -b1111111111 M -1w -1{ -b00000111 ~ -b0111 "! -b000111 $! -b00000000000000000000000000000111 %! -b00000000000000000000000000001000 &! -b00000000000000000000000010000010 '! -b00000000000000000000000010000011 (! -b0000000000000111 )! -b0000000000000111 *! -b0000000000000111 +! -b0000000000000111 ,! -b0000000000000111 -! -1/! -10! -01! -12! -16! -b00000000000000000000000000001001 ?! -0O! -b00000000000000000000000000001011 P! -b00000000000000000000000000001010 Q! -b00000000000000000000000000001001 R! -b00000000000000000000000000001000 S! -b0000000000001000 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000 U! -0Y! -b001000 Z! -b0000001000 [! -0\! -b00000000000000000000000000000000 ]! -b00000000000000000000000000000000 ^! -b00000000000000000000000000000000 _! -b00000000000000000000000000000000 `! -b0000000000000000 a! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 b! -0f! -b000000 g! -b0000000000 h! -0i! -b00000000000000000000000000000000 j! -b00000000000000000000000000000000 k! -b00000000000000000000000000000000 l! -b00000000000000000000000000000000 m! -b0000000000000000 n! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 o! -0s! -b000000 t! -b0000000000 u! -0v! -b00000000000000000000000000000000 w! -b00000000000000000000000000000000 x! -b00000000000000000000000000000000 y! -b00000000000000000000000000000000 z! -b0000000000000000 {! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 |! -0"" -b000000 #" -b0000000000 $" -1%" -b11111111111111111111111111111111 &" -b11111111111111111111111111111111 '" -b11111111111111111111111111111111 (" -b11111111111111111111111111111111 )" -b1111111111111111 *" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 +" -1/" -b111111 0" -b1111111111 1" -02" -03" -04" -15" -06" -07" -08" -09" -0:" -b00001000 ;" -b1000 =" -b001000 ?" -b00000000000000000000000000001000 @" -b00000000000000000000000000001001 A" -b00000000000000000000000010000011 B" -b00000000000000000000000010000100 C" -b0000000000001000 D" -b0000000000001000 E" -b0000000000001000 F" -b0000000000001000 G" -b0000000000001000 H" -b00000000000000000000000000001010 Z" -1_" -1`" -0a" -1b" -1f" -1j" -b00000000000000000000000000001100 k" -b00000000000000000000000000001011 l" -b00000000000000000000000000001010 m" -b00000000000000000000000000001001 n" -b0000000000001001 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001 p" -1t" -b001001 u" -b0000001001 v" -1w" -b11111111111111111111111111111111 x" -b11111111111111111111111111111111 y" -b11111111111111111111111111111111 z" -b11111111111111111111111111111111 {" -b1111111111111111 |" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 }" -1## -b111111 $# -b1111111111 %# -1O# -1S# -b00001001 V# -b1001 X# -b001001 Z# -b00000000000000000000000000001001 [# -b00000000000000000000000000001010 \# -b00000000000000000000000010000100 ]# -b00000000000000000000000010000101 ^# -b0000000000001001 _# -b0000000000001001 `# -b0000000000001001 a# -b0000000000001001 b# -b0000000000001001 c# -0e# -0f# -1g# -0h# -0l# -b00000000000000000000000000001011 u# -0{# -1|# -1!$ -0"$ -0#$ -1$$ -0'$ -b00000000000000000000000000001101 ($ -b00000000000000000000000000001100 )$ -b00000000000000000000000000001011 *$ -b00000000000000000000000000001010 +$ -b0000000000001010 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010 -$ -01$ -b001010 2$ -b0000001010 3$ -04$ -b00000000000000000000000000000000 5$ -b00000000000000000000000000000000 6$ -b00000000000000000000000000000000 7$ -b00000000000000000000000000000000 8$ -b0000000000000000 9$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :$ -0>$ -b000000 ?$ -b0000000000 @$ -1A$ -b11111111111111111111111111111111 B$ -b11111111111111111111111111111111 C$ -b11111111111111111111111111111111 D$ -b11111111111111111111111111111111 E$ -b1111111111111111 F$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G$ -1K$ -b111111 L$ -b1111111111 M$ -1i$ -0j$ -1m$ -0n$ -1o$ -b00001010 q$ -b1010 s$ -b001010 u$ -b00000000000000000000000000001010 v$ -b00000000000000000000000000001011 w$ -b00000000000000000000000010000101 x$ -b00000000000000000000000010000110 y$ -b0000000000001010 z$ -b0000000000001010 {$ -b0000000000001010 |$ -b0000000000001010 }$ -b0000000000001010 ~$ -1#% -0$% -0'% -1(% -1)% -0*% -b00001001 2% -b00001010 3% -b00001011 4% -b00001100 5% -b00001100000010110000101000001001 6% -b00001101 7% -b00001101000011000000101100001010 8% -19% -#85 -09% -#90 -b00000000000000000000000000001001 # -1% -04 -b00000000000000000000000000001011 5 -b00000000000000000000000000001010 6 -b00000000000000000000000000001001 7 -b00000000000000000000000000001000 8 -b0000000000001000 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000 : -0> -b001000 ? -b0000001000 @ -0A -b00000000000000000000000000000000 B -b00000000000000000000000000000000 C -b00000000000000000000000000000000 D -b00000000000000000000000000000000 E -b0000000000000000 F -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G -0K -b000000 L -b0000000000 M -0N -b00000000000000000000000000000000 O -b00000000000000000000000000000000 P -b00000000000000000000000000000000 Q -b00000000000000000000000000000000 R -b0000000000000000 S -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 T -0X -b000000 Y -b0000000000 Z -0[ -b00000000000000000000000000000000 \ -b00000000000000000000000000000000 ] -b00000000000000000000000000000000 ^ -b00000000000000000000000000000000 _ -b0000000000000000 ` -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 a -0e -b000000 f -b0000000000 g -1h -b11111111111111111111111111111111 i -b11111111111111111111111111111111 j -b11111111111111111111111111111111 k -b11111111111111111111111111111111 l -b1111111111111111 m -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 n -1r -b111111 s -b1111111111 t -0u -0v -0w -1x -0y -0z -0{ -0| -0} -b00001000 ~ -b1000 "! -b001000 $! -b00000000000000000000000000001000 %! -b00000000000000000000000000001001 &! -b00000000000000000000000010000011 '! -b00000000000000000000000010000100 (! -b0000000000001000 )! -b0000000000001000 *! -b0000000000001000 +! -b0000000000001000 ,! -b0000000000001000 -! -b00000000000000000000000000001010 ?! -1@! -1D! -1E! -0F! -1G! -1K! -1O! -b00000000000000000000000000001100 P! -b00000000000000000000000000001011 Q! -b00000000000000000000000000001010 R! -b00000000000000000000000000001001 S! -b0000000000001001 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001 U! -1Y! -b001001 Z! -b0000001001 [! -1\! -b11111111111111111111111111111111 ]! -b11111111111111111111111111111111 ^! -b11111111111111111111111111111111 _! -b11111111111111111111111111111111 `! -b1111111111111111 a! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 b! -1f! -b111111 g! -b1111111111 h! -14" -18" -b00001001 ;" -b1001 =" -b001001 ?" -b00000000000000000000000000001001 @" -b00000000000000000000000000001010 A" -b00000000000000000000000010000100 B" -b00000000000000000000000010000101 C" -b0000000000001001 D" -b0000000000001001 E" -b0000000000001001 F" -b0000000000001001 G" -b0000000000001001 H" -0J" -0K" -1L" -0M" -0Q" -b00000000000000000000000000001011 Z" -0`" -1a" -1d" -0e" -0f" -1g" -0j" -b00000000000000000000000000001101 k" -b00000000000000000000000000001100 l" -b00000000000000000000000000001011 m" -b00000000000000000000000000001010 n" -b0000000000001010 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010 p" -0t" -b001010 u" -b0000001010 v" -0w" -b00000000000000000000000000000000 x" -b00000000000000000000000000000000 y" -b00000000000000000000000000000000 z" -b00000000000000000000000000000000 {" -b0000000000000000 |" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 }" -0## -b000000 $# -b0000000000 %# -1&# -b11111111111111111111111111111111 '# -b11111111111111111111111111111111 (# -b11111111111111111111111111111111 )# -b11111111111111111111111111111111 *# -b1111111111111111 +# -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 ,# -10# -b111111 1# -b1111111111 2# -1N# -0O# -1R# -0S# -1T# -b00001010 V# -b1010 X# -b001010 Z# -b00000000000000000000000000001010 [# -b00000000000000000000000000001011 \# -b00000000000000000000000010000101 ]# -b00000000000000000000000010000110 ^# -b0000000000001010 _# -b0000000000001010 `# -b0000000000001010 a# -b0000000000001010 b# -b0000000000001010 c# -1f# -0g# -0j# -1k# -1l# -0m# -b00000000000000000000000000001100 u# -0z# -1{# -0|# -0}# -1#$ -1'$ -b00000000000000000000000000001110 ($ -b00000000000000000000000000001101 )$ -b00000000000000000000000000001100 *$ -b00000000000000000000000000001011 +$ -b0000000000001011 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011 -$ -11$ -b001011 2$ -b0000001011 3$ -14$ -b11111111111111111111111111111111 5$ -b11111111111111111111111111111111 6$ -b11111111111111111111111111111111 7$ -b11111111111111111111111111111111 8$ -b1111111111111111 9$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 :$ -1>$ -b111111 ?$ -b1111111111 @$ -1j$ -1n$ -b00001011 q$ -b1011 s$ -b001011 u$ -b00000000000000000000000000001011 v$ -b00000000000000000000000000001100 w$ -b00000000000000000000000010000110 x$ -b00000000000000000000000010000111 y$ -b0000000000001011 z$ -b0000000000001011 {$ -b0000000000001011 |$ -b0000000000001011 }$ -b0000000000001011 ~$ -1"% -0#% -1$% -1%% -0)% -b00001010 2% -b00001011 3% -b00001100 4% -b00001101 5% -b00001101000011000000101100001010 6% -b00001110 7% -b00001110000011010000110000001011 8% -19% -#95 -09% -#100 -b00000000000000000000000000001010 # -b1111 $ -0% -1& -1' -1) -1* -0+ -1, -10 -14 -b00000000000000000000000000001100 5 -b00000000000000000000000000001011 6 -b00000000000000000000000000001010 7 -b00000000000000000000000000001001 8 -b0000000000001001 9 -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001 : -1> -b001001 ? -b0000001001 @ -1A -b11111111111111111111111111111111 B -b11111111111111111111111111111111 C -b11111111111111111111111111111111 D -b11111111111111111111111111111111 E -b1111111111111111 F -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 G -1K -b111111 L -b1111111111 M -1w -1{ -b00001001 ~ -b1001 "! -b001001 $! -b00000000000000000000000000001001 %! -b00000000000000000000000000001010 &! -b00000000000000000000000010000100 '! -b00000000000000000000000010000101 (! -b0000000000001001 )! -b0000000000001001 *! -b0000000000001001 +! -b0000000000001001 ,! -b0000000000001001 -! -0/! -00! -11! -02! -06! -b00000000000000000000000000001011 ?! -1B! -0E! -1F! -1I! -0J! -0K! -1L! -0O! -b00000000000000000000000000001101 P! -b00000000000000000000000000001100 Q! -b00000000000000000000000000001011 R! -b00000000000000000000000000001010 S! -b0000000000001010 T! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001010 U! -0Y! -b001010 Z! -b0000001010 [! -0\! -b00000000000000000000000000000000 ]! -b00000000000000000000000000000000 ^! -b00000000000000000000000000000000 _! -b00000000000000000000000000000000 `! -b0000000000000000 a! -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 b! -0f! -b000000 g! -b0000000000 h! -1i! -b11111111111111111111111111111111 j! -b11111111111111111111111111111111 k! -b11111111111111111111111111111111 l! -b11111111111111111111111111111111 m! -b1111111111111111 n! -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 o! -1s! -b111111 t! -b1111111111 u! -13" -04" -17" -08" -19" -b00001010 ;" -b1010 =" -b001010 ?" -b00000000000000000000000000001010 @" -b00000000000000000000000000001011 A" -b00000000000000000000000010000101 B" -b00000000000000000000000010000110 C" -b0000000000001010 D" -b0000000000001010 E" -b0000000000001010 F" -b0000000000001010 G" -b0000000000001010 H" -1K" -0L" -0O" -1P" -1Q" -0R" -b00000000000000000000000000001100 Z" -1[" -0_" -1`" -0a" -0b" -1f" -1j" -b00000000000000000000000000001110 k" -b00000000000000000000000000001101 l" -b00000000000000000000000000001100 m" -b00000000000000000000000000001011 n" -b0000000000001011 o" -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001011 p" -1t" -b001011 u" -b0000001011 v" -1w" -b11111111111111111111111111111111 x" -b11111111111111111111111111111111 y" -b11111111111111111111111111111111 z" -b11111111111111111111111111111111 {" -b1111111111111111 |" -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 }" -1## -b111111 $# -b1111111111 %# -1O# -1S# -b00001011 V# -b1011 X# -b001011 Z# -b00000000000000000000000000001011 [# -b00000000000000000000000000001100 \# -b00000000000000000000000010000110 ]# -b00000000000000000000000010000111 ^# -b0000000000001011 _# -b0000000000001011 `# -b0000000000001011 a# -b0000000000001011 b# -b0000000000001011 c# -1e# -0f# -1g# -1h# -0l# -b00000000000000000000000000001101 u# -1|# -1"$ -0&$ -0'$ -b00000000000000000000000000001111 ($ -b00000000000000000000000000001110 )$ -b00000000000000000000000000001101 *$ -b00000000000000000000000000001100 +$ -b0000000000001100 ,$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100 -$ -01$ -b001100 2$ -b0000001100 3$ -04$ -b00000000000000000000000000000000 5$ -b00000000000000000000000000000000 6$ -b00000000000000000000000000000000 7$ -b00000000000000000000000000000000 8$ -b0000000000000000 9$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 :$ -0>$ -b000000 ?$ -b0000000000 @$ -0A$ -b00000000000000000000000000000000 B$ -b00000000000000000000000000000000 C$ -b00000000000000000000000000000000 D$ -b00000000000000000000000000000000 E$ -b0000000000000000 F$ -b00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 G$ -0K$ -b000000 L$ -b0000000000 M$ -1N$ -b11111111111111111111111111111111 O$ -b11111111111111111111111111111111 P$ -b11111111111111111111111111111111 Q$ -b11111111111111111111111111111111 R$ -b1111111111111111 S$ -b11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 T$ -1X$ -b111111 Y$ -b1111111111 Z$ -1h$ -0i$ -0j$ -1l$ -0m$ -0n$ -0o$ -1p$ -b00001100 q$ -b1100 s$ -b001100 u$ -b00000000000000000000000000001100 v$ -b00000000000000000000000000001101 w$ -b00000000000000000000000010000111 x$ -b00000000000000000000000010001000 y$ -b0000000000001100 z$ -b0000000000001100 {$ -b0000000000001100 |$ -b0000000000001100 }$ -b0000000000001100 ~$ -0$% -0(% -1,% -b00001011 2% -b00001100 3% -b00001101 4% -b00001110 5% -b00001110000011010000110000001011 6% -b00001111 7% -b00001111000011100000110100001100 8% -19% diff --git a/test_regress/t/t_trace_type_dupes_structs.py b/test_regress/t/t_trace_type_dupes_structs.py deleted file mode 100755 index bb8b460f3..000000000 --- a/test_regress/t/t_trace_type_dupes_structs.py +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env python3 -# DESCRIPTION: Verilator: Verilog Test driver/expect definition -# -# Copyright 2024 by Wilson Snyder. This program is free software; you -# can redistribute it and/or modify it under the terms of either the GNU -# Lesser General Public License Version 3 or the Perl Artistic License -# Version 2.0. -# SPDX-License-Identifier: LGPL-3.0-only OR Artistic-2.0 - -import vltest_bootstrap - -test.scenarios("simulator_st") -test.top_filename = "t/t_trace_type_dupes.v" -test.sim_time = 2000000 # NOCOMMIT -- for benchmarking, leave in? - -test.compile( - # artificially low trace splitting for force cross-split type function usage - verilator_flags2=["--trace", "--trace-structs", "--output-split-ctrace 10"]) - -test.execute() - -test.vcd_identical(test.trace_filename, test.golden_filename) - -test.passes()