anchor.diff:                  p.ReplaceChild(n, el) |> ignore
           FakeRoot [| el |]
   
  -    let rec PrepareTemplateStrict (baseName: string) (name: option<string>) (els: Node[]) (root: option<Element>) (prepareLocalTemplate: option<string -> unit>) =
  +    module private Prepare =
  +
           let convertAttrs (el: Dom.Element) =
               let attrs = el.Attributes
               let toRemove = [||]
  
positive.code:                 if n.NodeType = Dom.NodeType.Element then
                      let n = n :?> Dom.Element
                      if not (usedHoles.Add(n.NodeName.ToLower())) then
                          Console.Warn("Hole filled twice", name)
              // 2. If single text hole, apply it.
              let singleTextFill = el.ChildNodes.Length = 1 && el.FirstChild.NodeType = Dom.NodeType.Text
              if singleTextFill then
                  fillTextHole instance el.FirstChild.TextContent
                  |> Option.iter (usedHoles.Add >> ignore)
              // 3. eliminate non-mapped/filled holes.
              removeHolesExcept instance usedHoles
              // 4. apply mappings/fillings.
              if not singleTextFill then
                  for i = 0 to el.ChildNodes.Length - 1 do
  
negative.code:                     if n.NodeType = Dom.NodeType.Element then
                          let n = n :?> Dom.Element
                          if n.HasAttributes() then
                              Prepare.fillInstanceAttrs instance n
                          else
                              fillDocHole instance n
              Prepare.mapHoles instance mappings
              // 5. insert result.
              Prepare.fill instance el.ParentNode el
              el.ParentNode.RemoveChild(el) |> ignore
  
          let rec convertNestedTemplates (el: Element) =
  