Description
Some text here.
Description
Some text here.
Description
Some text here.
(GraphicsLayer
  (anchor 0.00 0.00)
  (bounds 785.00 615.00)
  (visible rect 0.00, 0.00 785.00 x 600.00)
  (coverage rect 0.00, 0.00 785.00 x 600.00)
  (intersects coverage rect 1)
  (contentsScale 1.00)
  (children 1
    (GraphicsLayer
      (bounds 785.00 615.00)
      (contentsOpaque 1)
      (visible rect 0.00, 0.00 785.00 x 600.00)
      (coverage rect 0.00, 0.00 785.00 x 600.00)
      (intersects coverage rect 1)
      (contentsScale 1.00)
      (children 1
        (GraphicsLayer
          (position 0.00 13.00)
          (bounds 602.00 602.00)
          (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
          (visible rect 0.00, 0.00 602.00 x 587.00)
          (coverage rect 0.00, -13.00 785.00 x 600.00)
          (intersects coverage rect 1)
          (contentsScale 1.00)
          (children 1
            (GraphicsLayer
              (position 101.00 101.00)
              (anchor 0.57 0.50)
              (bounds 440.00 440.00)
              (preserves3D 1)
              (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
              (visible rect 0.00, 0.00 440.00 x 440.00)
              (coverage rect -184.00, -114.00 785.00 x 600.00)
              (intersects coverage rect 1)
              (contentsScale 1.00)
              (children 1
                (GraphicsLayer
                  (bounds 420.00 420.00)
                  (contentsOpaque 1)
                  (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
                  (visible rect 0.00, 0.00 420.00 x 420.00)
                  (coverage rect -181.00, -114.00 785.00 x 600.00)
                  (intersects coverage rect 1)
                  (contentsScale 1.00)
                  (children 1
                    (GraphicsLayer
                      (bounds 420.00 420.00)
                      (visible rect 0.00, 0.00 420.00 x 420.00)
                      (coverage rect 0.00, 0.00 420.00 x 420.00)
                      (intersects coverage rect 1)
                      (contentsScale 1.00)
                      (children 1
                        (GraphicsLayer
                          (position 0.00 -90.00)
                          (bounds 418.00 510.00)
                          (contentsOpaque 1)
                          (visible rect 0.00, 90.00 418.00 x 420.00)
                          (coverage rect 0.00, 90.00 420.00 x 420.00)
                          (intersects coverage rect 1)
                          (contentsScale 1.00)
                          (children 1
                            (GraphicsLayer
                              (bounds 418.00 510.00)
                              (visible rect 0.00, 90.00 418.00 x 420.00)
                              (coverage rect 0.00, 90.00 418.00 x 420.00)
                              (intersects coverage rect 1)
                              (contentsScale 1.00)
                              (children 3
                                (GraphicsLayer
                                  (offsetFromRenderer width=-3000 height=0)
                                  (position -3000.00 0.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                  (visible rect 3000.00, 90.00 418.00 x 30.00)
                                  (coverage rect 3000.00, 90.00 418.00 x 420.00)
                                  (intersects coverage rect 1)
                                  (contentsScale 1.00)
                                )
                                (GraphicsLayer
                                  (offsetFromRenderer width=-3000 height=0)
                                  (position -3000.00 120.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                  (visible rect 3000.00, 0.00 418.00 x 120.00)
                                  (coverage rect 3000.00, -30.00 418.00 x 420.00)
                                  (intersects coverage rect 1)
                                  (contentsScale 1.00)
                                )
                                (GraphicsLayer
                                  (offsetFromRenderer width=-3000 height=0)
                                  (position -3000.00 240.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                  (visible rect 3000.00, 0.00 418.00 x 120.00)
                                  (coverage rect 3000.00, -150.00 418.00 x 420.00)
                                  (intersects coverage rect 1)
                                  (contentsScale 1.00)
                                )
                              )
                            )
                          )
                        )
                      )
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)

