<mxfile host="app.diagrams.net" agent="Claude Code">
  <diagram id="calloc-flow" name="calloc流程">
    <mxGraphModel dx="2271" dy="1178" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1080" pageHeight="2360" background="light-dark(#ffffff, #121212)" math="0" shadow="0">
      <root>
        <mxCell id="0" />
        <mxCell id="1" parent="0" />
        <mxCell id="TITLE" parent="1" style="text;html=1;align=center;verticalAlign=middle;fontStyle=1;fontSize=17;" value="calloc（__libc_calloc）源码执行流程总览（分配并清零内存）" vertex="1">
          <mxGeometry height="30" width="900" x="20" as="geometry" />
        </mxCell>
        <mxCell id="NOTET" parent="1" style="text;html=1;align=left;verticalAlign=middle;fontStyle=2;fontColor=#666666;" value="注：calloc 与 malloc 的区别在于返回的内存已清零；本图覆盖溢出检测、__malloc_hook、arena 获取、MORECORE_CLEARS 清空范围优化、mmap 免清零、逐字清零展开。" vertex="1">
          <mxGeometry height="24" width="1000" x="20" y="30" as="geometry" />
        </mxCell>
        <mxCell id="CALLOC_ENTRY" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="进入 __libc_calloc(n, elem_size)" vertex="1">
          <mxGeometry height="40" width="260" x="40" y="70" as="geometry" />
        </mxCell>
        <mxCell id="C1" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="bytes = n * elem_size" vertex="1">
          <mxGeometry height="40" width="260" x="40" y="140" as="geometry" />
        </mxCell>
        <mxCell id="C2" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="(n | elem_size) &gt;= HALF_INTERNAL_SIZE_T ?&lt;br&gt;（64 位下 HALF = 2^32，检查是否可能溢出）" vertex="1">
          <mxGeometry height="80" width="260" x="40" y="220" as="geometry" />
        </mxCell>
        <mxCell id="C3" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="elem_size != 0 且&lt;br&gt;bytes / elem_size != n ?&lt;br&gt;（乘法溢出检测）" vertex="1">
          <mxGeometry height="90" width="280" x="420" y="220" as="geometry" />
        </mxCell>
        <mxCell id="C4" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="__set_errno(ENOMEM)&lt;br&gt;return 0" vertex="1">
          <mxGeometry height="40" width="280" x="420" y="380" as="geometry" />
        </mxCell>
        <mxCell id="C5" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="sz = bytes&lt;br&gt;读 __malloc_hook" vertex="1">
          <mxGeometry height="50" width="260" x="40" y="360" as="geometry" />
        </mxCell>
        <mxCell id="C6" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="__malloc_hook != NULL ?" vertex="1">
          <mxGeometry height="70" width="260" x="40" y="450" as="geometry" />
        </mxCell>
        <mxCell id="C7" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="sz = bytes&lt;br&gt;mem = (*hook)(sz, RETURN_ADDRESS(0))" vertex="1">
          <mxGeometry height="70" width="280" x="420" y="450" as="geometry" />
        </mxCell>
        <mxCell id="C8" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="mem == 0 ?" vertex="1">
          <mxGeometry height="70" width="280" x="420" y="560" as="geometry" />
        </mxCell>
        <mxCell id="C9" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="return 0" vertex="1">
          <mxGeometry height="40" width="280" x="420" y="680" as="geometry" />
        </mxCell>
        <mxCell id="C10" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return memset(mem, 0, sz)&lt;br&gt;（hook 分配后清零返回）" vertex="1">
          <mxGeometry height="50" width="280" x="740" y="680" as="geometry" />
        </mxCell>
        <mxCell id="C11" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="sz = bytes&lt;br&gt;arena_get(av, sz)" vertex="1">
          <mxGeometry height="50" width="260" x="40" y="560" as="geometry" />
        </mxCell>
        <mxCell id="C12" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="av != NULL ?&lt;br&gt;（有可用 arena）" vertex="1">
          <mxGeometry height="70" width="260" x="40" y="650" as="geometry" />
        </mxCell>
        <mxCell id="C13" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="MORECORE_CLEARS 优化：&lt;br&gt;oldtop = top(av)&lt;br&gt;oldtopsize = chunksize(top(av))&lt;br&gt;（新扩展内存初始为 0，无需清空）" vertex="1">
          <mxGeometry height="80" width="260" x="40" y="770" as="geometry" />
        </mxCell>
        <mxCell id="C14" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="av == &amp;main_arena ?&lt;br&gt;（决定按哪种方式计算需清空上限）" vertex="1">
          <mxGeometry height="70" width="260" x="40" y="900" as="geometry" />
        </mxCell>
        <mxCell id="C15" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="MORECORE_CLEARS &lt; 2 且&lt;br&gt;oldtopsize &lt; sbrk_base +&lt;br&gt;max_system_mem - oldtop ?&lt;br&gt;（top 后存在更早 sbrk 的脏内存）" vertex="1">
          <mxGeometry height="100" width="280" x="420" y="900" as="geometry" />
        </mxCell>
        <mxCell id="C16" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="oldtopsize = sbrk_base +&lt;br&gt;max_system_mem - oldtop&lt;br&gt;（需清到 heap 区域末尾）" vertex="1">
          <mxGeometry height="80" width="280" x="740" y="1000" as="geometry" />
        </mxCell>
        <mxCell id="C17" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="heap = heap_for_ptr(oldtop)&lt;br&gt;oldtopsize = heap +&lt;br&gt;heap-&gt;mprotect_size - oldtop&lt;br&gt;（需清到 heap_info 受保护区域末尾）" vertex="1">
          <mxGeometry height="80" width="280" x="740" y="910" as="geometry" />
        </mxCell>
        <mxCell id="C18" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="oldtop = 0&lt;br&gt;oldtopsize = 0&lt;br&gt;（无 arena → _int_malloc 将 mmap，&lt;br&gt;mmap 页初始为 0 不需清零）" vertex="1">
          <mxGeometry height="70" width="280" x="420" y="770" as="geometry" />
        </mxCell>
        <mxCell id="C19" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="mem = _int_malloc(av, sz)" vertex="1">
          <mxGeometry height="40" width="260" x="40" y="1060" as="geometry" />
        </mxCell>
        <mxCell id="C20" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="assert(!mem ||&lt;br&gt;chunk_is_mmapped(mem2chunk(mem)) ||&lt;br&gt;av == arena_for_chunk(mem2chunk(mem)))" vertex="1">
          <mxGeometry height="70" width="300" x="40" y="1130" as="geometry" />
        </mxCell>
        <mxCell id="C21" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="mem == 0 且 av != NULL ?&lt;br&gt;（换 arena 重试）" vertex="1">
          <mxGeometry height="70" width="260" x="40" y="1240" as="geometry" />
        </mxCell>
        <mxCell id="C22" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#ffe6cc;strokeColor=#d79b00;" value="LIBC_PROBE(memory_calloc_retry)&lt;br&gt;av = arena_get_retry(av, sz)&lt;br&gt;mem = _int_malloc(av, sz)" vertex="1">
          <mxGeometry height="80" width="280" x="420" y="1240" as="geometry" />
        </mxCell>
        <mxCell id="C23" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="if (av != NULL)&lt;br&gt;mutex_unlock(&amp;av-&gt;mutex)" vertex="1">
          <mxGeometry height="50" width="260" x="40" y="1350" as="geometry" />
        </mxCell>
        <mxCell id="C24" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="mem == 0 ?&lt;br&gt;（重试后仍失败）" vertex="1">
          <mxGeometry height="70" width="260" x="40" y="1440" as="geometry" />
        </mxCell>
        <mxCell id="C25" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" value="return 0" vertex="1">
          <mxGeometry height="40" width="280" x="420" y="1440" as="geometry" />
        </mxCell>
        <mxCell id="C26" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="p = mem2chunk(mem)" vertex="1">
          <mxGeometry height="40" width="260" x="40" y="1550" as="geometry" />
        </mxCell>
        <mxCell id="C27" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="chunk_is_mmapped(p) ?&lt;br&gt;（mmap 页初始为 0，无需清零）" vertex="1">
          <mxGeometry height="70" width="260" x="40" y="1630" as="geometry" />
        </mxCell>
        <mxCell id="C28" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="perturb_byte ?&lt;br&gt;（开启了扰动测试）" vertex="1">
          <mxGeometry height="70" width="280" x="420" y="1630" as="geometry" />
        </mxCell>
        <mxCell id="C29" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return memset(mem, 0, sz)" vertex="1">
          <mxGeometry height="40" width="280" x="420" y="1740" as="geometry" />
        </mxCell>
        <mxCell id="C30" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return mem&lt;br&gt;（mmap 内存无需清零）" vertex="1">
          <mxGeometry height="50" width="280" x="740" y="1740" as="geometry" />
        </mxCell>
        <mxCell id="C31" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="csz = chunksize(p)" vertex="1">
          <mxGeometry height="40" width="260" x="40" y="1740" as="geometry" />
        </mxCell>
        <mxCell id="C32" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="perturb_byte == 0 且 p == oldtop&lt;br&gt;且 csz &gt; oldtopsize ?&lt;br&gt;（top 切下且含新扩展内存）" vertex="1">
          <mxGeometry height="90" width="260" x="40" y="1820" as="geometry" />
        </mxCell>
        <mxCell id="C33" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="csz = oldtopsize&lt;br&gt;（只清非新扩展的旧内存）" vertex="1">
          <mxGeometry height="60" width="280" x="420" y="1820" as="geometry" />
        </mxCell>
        <mxCell id="C34" parent="1" style="rounded=0;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" value="d = mem&lt;br&gt;clearsize = csz - SIZE_SZ&lt;br&gt;nclears = clearsize / 8&lt;br&gt;assert(nclears &gt;= 3)" vertex="1">
          <mxGeometry height="90" width="300" x="40" y="1950" as="geometry" />
        </mxCell>
        <mxCell id="C35" parent="1" style="rhombus;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" value="nclears &gt; 9 ?" vertex="1">
          <mxGeometry height="70" width="260" x="40" y="2090" as="geometry" />
        </mxCell>
        <mxCell id="C36" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="return memset(d, 0, clearsize)&lt;br&gt;（memset 快速路径）" vertex="1">
          <mxGeometry height="60" width="300" x="40" y="2210" as="geometry" />
        </mxCell>
        <mxCell id="C37" parent="1" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#d5e8d4;strokeColor=#82b366;" value="逐字展开清零（d+0 .. d+8）&lt;br&gt;按 nclears 分层（&gt;4 / &gt;6 / &gt;8）&lt;br&gt;return mem" vertex="1">
          <mxGeometry height="70" width="300" x="420" y="2210" as="geometry" />
        </mxCell>
        <mxCell id="e1" edge="1" parent="1" source="CALLOC_ENTRY" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C1">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e2" edge="1" parent="1" source="C1" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C2">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e3" edge="1" parent="1" source="C2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C3" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e4" edge="1" parent="1" source="C2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C5" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e5" edge="1" parent="1" source="C3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C4" value="是（溢出）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e6" edge="1" parent="1" source="C3" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0;exitY=1;entryX=1;entryY=0.5;fontSize=10;" target="C5" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e7" edge="1" parent="1" source="C5" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C6">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e8" edge="1" parent="1" source="C6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C7" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e9" edge="1" parent="1" source="C6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C11" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e10" edge="1" parent="1" source="C7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C8">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e11" edge="1" parent="1" source="C8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C9" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e12" edge="1" parent="1" source="C8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C10" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e13" edge="1" parent="1" source="C11" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C12">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e14" edge="1" parent="1" source="C12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C13" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e15" edge="1" parent="1" source="C12" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C18" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e16" edge="1" parent="1" source="C13" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C14">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e17" edge="1" parent="1" source="C14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C15" value="是（main）">
          <mxGeometry relative="1" as="geometry">
            <Array as="points">
              <mxPoint x="410" y="935.05" />
              <mxPoint x="410" y="950" />
            </Array>
          </mxGeometry>
        </mxCell>
        <mxCell id="e18" edge="1" parent="1" source="C14" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.53;exitY=1.018;entryX=0;entryY=0.5;fontSize=10;exitDx=0;exitDy=0;exitPerimeter=0;" target="C17" value="否（非 main）">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e19" edge="1" parent="1" source="C15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C16" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e20" edge="1" parent="1" source="C15" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;fontSize=10;" target="C19" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e21" edge="1" parent="1" source="C16" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="C19">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e22" edge="1" parent="1" source="C17" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0;exitY=1;entryX=1;entryY=0.5;" target="C19">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e23" edge="1" parent="1" source="C18" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="C19">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e24" edge="1" parent="1" source="C19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C20">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e25" edge="1" parent="1" source="C20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C21">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e26" edge="1" parent="1" source="C21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C22" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e27" edge="1" parent="1" source="C21" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C23" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e28" edge="1" parent="1" source="C22" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="C23">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e29" edge="1" parent="1" source="C23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C24">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e30" edge="1" parent="1" source="C24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C25" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e31" edge="1" parent="1" source="C24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C26" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e32" edge="1" parent="1" source="C26" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C27">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e33" edge="1" parent="1" source="C27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C28" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e34" edge="1" parent="1" source="C27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C31" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e35" edge="1" parent="1" source="C28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C29" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e36" edge="1" parent="1" source="C28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C30" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e37" edge="1" parent="1" source="C31" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C32">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e38" edge="1" parent="1" source="C32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C33" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e39" edge="1" parent="1" source="C32" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C34" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e40" edge="1" parent="1" source="C33" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=1;entryY=0.5;" target="C34">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e41" edge="1" parent="1" source="C34" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;" target="C35">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e42" edge="1" parent="1" source="C35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=0.5;exitY=1;entryX=0.5;entryY=0;fontSize=10;" target="C36" value="是">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
        <mxCell id="e43" edge="1" parent="1" source="C35" style="edgeStyle=orthogonalEdgeStyle;rounded=0;html=1;endArrow=block;exitX=1;exitY=0.5;entryX=0;entryY=0.5;fontSize=10;" target="C37" value="否">
          <mxGeometry relative="1" as="geometry" />
        </mxCell>
      </root>
    </mxGraphModel>
  </diagram>
</mxfile>
