beginCompilationUnit(class)
  beginMetadataStar(class)
  endMetadataStar(0)
  beginClassOrNamedMixinApplicationPrelude(class)
    handleIdentifier(C, classOrMixinDeclaration)
    handleNoTypeVariables({)
    beginClassDeclaration(class, null, C)
      handleNoType(C)
      handleClassExtends(null, 1)
      handleClassNoWithClause()
      handleClassOrMixinImplements(null, 0)
      handleClassHeader(class, class, null)
      beginClassOrMixinBody(DeclarationKind.Class, {)
        beginMetadataStar(int)
        endMetadataStar(0)
        beginMember()
          beginMethod(null, null, null, null, null, With)
            handleIdentifier(int, typeReference)
            handleNoTypeArguments(With)
            handleType(int, null)
            handleIdentifier(With, methodDeclaration)
            handleNoTypeVariables(()
            beginFormalParameters((, MemberKind.NonStaticMethod)
            endFormalParameters(0, (, ), MemberKind.NonStaticMethod)
            handleNoInitializers()
            handleAsyncModifier(null, null)
            handleLiteralInt(7)
            handleExpressionFunctionBody(=>, ;)
          endClassMethod(null, int, (, null, ;)
        endMember()
        beginMetadataStar(int)
        endMetadataStar(0)
        beginMember()
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(With)
          handleType(int, null)
          handleIdentifier(With, fieldDeclaration)
          beginFieldInitializer(=)
            handleLiteralInt(7)
          endFieldInitializer(=, ;)
        endClassFields(null, null, null, null, null, null, 1, int, ;)
      endMember()
      beginMetadataStar(int)
      endMetadataStar(0)
      beginMember()
        beginMethod(null, null, null, null, get, With)
          handleIdentifier(int, typeReference)
          handleNoTypeArguments(get)
          handleType(int, null)
          handleIdentifier(With, methodDeclaration)
          handleNoTypeVariables(=>)
          handleNoFormalParameters(=>, MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          handleLiteralInt(7)
          handleExpressionFunctionBody(=>, ;)
        endClassMethod(get, int, =>, null, ;)
      endMember()
      beginMetadataStar(void)
      endMetadataStar(0)
      beginMember()
        beginMethod(null, null, null, null, set, With)
          handleVoidKeyword(void)
          handleIdentifier(With, methodDeclaration)
          handleNoTypeVariables(()
          beginFormalParameters((, MemberKind.NonStaticMethod)
            beginMetadataStar(int)
            endMetadataStar(0)
            beginFormalParameter(int, MemberKind.NonStaticMethod, null, null, null)
              handleIdentifier(int, typeReference)
              handleNoTypeArguments(x)
              handleType(int, null)
              handleIdentifier(x, formalParameterDeclaration)
              handleFormalParameterWithoutValue())
            endFormalParameter(null, null, x, null, null, FormalParameterKind.mandatory, MemberKind.NonStaticMethod)
          endFormalParameters(1, (, ), MemberKind.NonStaticMethod)
          handleNoInitializers()
          handleAsyncModifier(null, null)
          beginBlockFunctionBody({)
          endBlockFunctionBody(0, {, })
        endClassMethod(set, void, (, null, })
      endMember()
    endClassOrMixinBody(DeclarationKind.Class, 4, {, })
  endClassDeclaration(class, })
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
  beginTopLevelMethod(}, null)
    handleIdentifier(int, typeReference)
    handleNoTypeArguments(With)
    handleType(int, null)
    handleIdentifier(With, topLevelFunctionDeclaration)
    handleNoTypeVariables(()
    beginFormalParameters((, MemberKind.TopLevelMethod)
    endFormalParameters(0, (, ), MemberKind.TopLevelMethod)
    handleAsyncModifier(null, null)
    handleLiteralInt(7)
    handleExpressionFunctionBody(=>, ;)
  endTopLevelMethod(int, null, ;)
endTopLevelDeclaration(int)
beginMetadataStar(int)
endMetadataStar(0)
beginTopLevelMember(int)
  handleIdentifier(int, typeReference)
  handleNoTypeArguments(With)
  handleType(int, null)
  handleIdentifier(With, topLevelVariableDeclaration)
  beginFieldInitializer(=)
    handleLiteralInt(7)
  endFieldInitializer(=, ;)
endTopLevelFields(null, null, null, null, null, 1, int, ;)
endTopLevelDeclaration()
endCompilationUnit(3, )
