From b6ebd598e737d430d9affa1042d8cea91bff78d9 Mon Sep 17 00:00:00 2001 From: Curtis Hard Date: Tue, 19 Apr 2022 18:11:54 +0100 Subject: [PATCH] Initial filters --- .../IJSVG/IJSVG.xcodeproj/project.pbxproj | 48 ++++++ Framework/IJSVG/IJSVG/Source/Core/IJSVG.m | 1 + .../IJSVG/Source/Layers/IJSVGBasicLayer.h | 14 ++ .../IJSVG/Source/Layers/IJSVGBasicLayer.m | 23 +++ .../IJSVG/Source/Layers/IJSVGFilterLayer.h | 23 +++ .../IJSVG/Source/Layers/IJSVGFilterLayer.m | 70 +++++++++ .../IJSVG/Source/Layers/IJSVGGroupLayer.m | 5 + .../IJSVG/Source/Layers/IJSVGImageLayer.h | 3 +- .../IJSVG/Source/Layers/IJSVGImageLayer.m | 2 +- .../IJSVG/IJSVG/Source/Layers/IJSVGLayer.h | 23 ++- .../IJSVG/IJSVG/Source/Layers/IJSVGLayer.m | 64 +++++--- .../IJSVG/Source/Layers/IJSVGRootLayer.m | 2 +- .../IJSVG/Source/Layers/IJSVGShapeLayer.h | 2 + .../IJSVG/Source/Layers/IJSVGShapeLayer.m | 6 + .../IJSVG/Source/Layers/IJSVGTransformLayer.m | 3 + .../IJSVGFilterEffectGaussianBlur.h | 13 ++ .../IJSVGFilterEffectGaussianBlur.m | 22 +++ .../IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h | 1 + .../IJSVG/IJSVG/Source/Nodes/IJSVGFilter.h | 17 ++ .../IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m | 41 +++++ .../IJSVG/Source/Nodes/IJSVGFilterEffect.h | 40 +++++ .../IJSVG/Source/Nodes/IJSVGFilterEffect.m | 86 +++++++++++ .../IJSVG/IJSVG/Source/Nodes/IJSVGNode.h | 4 + .../IJSVG/IJSVG/Source/Nodes/IJSVGNode.m | 10 +- .../IJSVG/IJSVG/Source/Parsing/IJSVGParser.h | 6 + .../IJSVG/IJSVG/Source/Parsing/IJSVGParser.m | 105 ++++++++++++- .../IJSVG/Source/Rendering/IJSVGLayerTree.m | 37 ++++- .../UserInterfaceState.xcuserstate | Bin 113719 -> 185286 bytes .../xcdebugger/Breakpoints_v2.xcbkptlist | 56 ++++++- IJSVGExample/IJSVGExample/NewTux.svg | 145 +++++++++--------- IJSVGExample/IJSVGExample/SVGView.m | 2 +- 31 files changed, 758 insertions(+), 116 deletions(-) create mode 100644 Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.h create mode 100644 Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.m create mode 100644 Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.h create mode 100644 Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m create mode 100644 Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.h create mode 100644 Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.m create mode 100644 Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.h create mode 100644 Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m create mode 100644 Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.h create mode 100644 Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m diff --git a/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj b/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj index b033e22..eb065a3 100644 --- a/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj +++ b/Framework/IJSVG/IJSVG.xcodeproj/project.pbxproj @@ -7,6 +7,12 @@ objects = { /* Begin PBXBuildFile section */ + 590AA08D280DDD90002BBE12 /* IJSVGFilter.h in Headers */ = {isa = PBXBuildFile; fileRef = 590AA08B280DDD90002BBE12 /* IJSVGFilter.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 590AA08E280DDD90002BBE12 /* IJSVGFilter.m in Sources */ = {isa = PBXBuildFile; fileRef = 590AA08C280DDD90002BBE12 /* IJSVGFilter.m */; }; + 590AA091280DDDA3002BBE12 /* IJSVGFilterEffect.h in Headers */ = {isa = PBXBuildFile; fileRef = 590AA08F280DDDA3002BBE12 /* IJSVGFilterEffect.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 590AA092280DDDA3002BBE12 /* IJSVGFilterEffect.m in Sources */ = {isa = PBXBuildFile; fileRef = 590AA090280DDDA3002BBE12 /* IJSVGFilterEffect.m */; }; + 590AA096280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.h in Headers */ = {isa = PBXBuildFile; fileRef = 590AA094280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 590AA097280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.m in Sources */ = {isa = PBXBuildFile; fileRef = 590AA095280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.m */; }; 590EB7A427F637EF0047CECF /* IJSVGTransformLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 590EB7A227F637EF0047CECF /* IJSVGTransformLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 590EB7A527F637EF0047CECF /* IJSVGTransformLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 590EB7A327F637EF0047CECF /* IJSVGTransformLayer.m */; }; 5919E65723F47FF60051873A /* IJSVGUnitRect.h in Headers */ = {isa = PBXBuildFile; fileRef = 5919E65523F47FF60051873A /* IJSVGUnitRect.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -20,6 +26,8 @@ 594CF55F238FF462009B251B /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 594CF55E238FF462009B251B /* AppKit.framework */; }; 594CF561238FF46C009B251B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 594CF560238FF46C009B251B /* Foundation.framework */; }; 594CF563238FF473009B251B /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 594CF562238FF473009B251B /* QuartzCore.framework */; }; + 595BA91C280EB29B00AD1C89 /* IJSVGFilterLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 595BA91A280EB29B00AD1C89 /* IJSVGFilterLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 595BA91D280EB29B00AD1C89 /* IJSVGFilterLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 595BA91B280EB29B00AD1C89 /* IJSVGFilterLayer.m */; }; 5978C46A280A241200D25296 /* IJSVGRootLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 5978C468280A241200D25296 /* IJSVGRootLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; 5978C46B280A241200D25296 /* IJSVGRootLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 5978C469280A241200D25296 /* IJSVGRootLayer.m */; }; 599EB4D3238FF570004CB6BC /* libobjc.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 599EB4D2238FF535004CB6BC /* libobjc.tbd */; }; @@ -136,6 +144,8 @@ 59EB764623905F7300F5AE63 /* IJSVGRendering.m in Sources */ = {isa = PBXBuildFile; fileRef = 59EB75D523905F7300F5AE63 /* IJSVGRendering.m */; }; 59F36508262F1ABB00BCE3FD /* IJSVGColorType.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F36506262F1ABB00BCE3FD /* IJSVGColorType.h */; settings = {ATTRIBUTES = (Public, ); }; }; 59F36509262F1ABB00BCE3FD /* IJSVGColorType.m in Sources */ = {isa = PBXBuildFile; fileRef = 59F36507262F1ABB00BCE3FD /* IJSVGColorType.m */; }; + 59F38A63280ED99200804FE4 /* IJSVGBasicLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F38A61280ED99200804FE4 /* IJSVGBasicLayer.h */; settings = {ATTRIBUTES = (Public, ); }; }; + 59F38A64280ED99200804FE4 /* IJSVGBasicLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 59F38A62280ED99200804FE4 /* IJSVGBasicLayer.m */; }; 59F9EAF82808BB5F00188ACB /* IJSVGViewBox.h in Headers */ = {isa = PBXBuildFile; fileRef = 59F9EAF62808BB5F00188ACB /* IJSVGViewBox.h */; settings = {ATTRIBUTES = (Public, ); }; }; 59F9EAF92808BB5F00188ACB /* IJSVGViewBox.m in Sources */ = {isa = PBXBuildFile; fileRef = 59F9EAF72808BB5F00188ACB /* IJSVGViewBox.m */; }; 59FCC09427F2394D00BB924E /* IJSVGRootNode.h in Headers */ = {isa = PBXBuildFile; fileRef = 59FCC09227F2394D00BB924E /* IJSVGRootNode.h */; settings = {ATTRIBUTES = (Public, ); }; }; @@ -145,6 +155,12 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 590AA08B280DDD90002BBE12 /* IJSVGFilter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGFilter.h; sourceTree = ""; }; + 590AA08C280DDD90002BBE12 /* IJSVGFilter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGFilter.m; sourceTree = ""; }; + 590AA08F280DDDA3002BBE12 /* IJSVGFilterEffect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGFilterEffect.h; sourceTree = ""; }; + 590AA090280DDDA3002BBE12 /* IJSVGFilterEffect.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGFilterEffect.m; sourceTree = ""; }; + 590AA094280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGFilterEffectGaussianBlur.h; sourceTree = ""; }; + 590AA095280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGFilterEffectGaussianBlur.m; sourceTree = ""; }; 590EB7A227F637EF0047CECF /* IJSVGTransformLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGTransformLayer.h; sourceTree = ""; }; 590EB7A327F637EF0047CECF /* IJSVGTransformLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGTransformLayer.m; sourceTree = ""; }; 5919E65523F47FF60051873A /* IJSVGUnitRect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGUnitRect.h; sourceTree = ""; }; @@ -160,6 +176,8 @@ 594CF55E238FF462009B251B /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 594CF560238FF46C009B251B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 594CF562238FF473009B251B /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; + 595BA91A280EB29B00AD1C89 /* IJSVGFilterLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGFilterLayer.h; sourceTree = ""; }; + 595BA91B280EB29B00AD1C89 /* IJSVGFilterLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGFilterLayer.m; sourceTree = ""; }; 5978C468280A241200D25296 /* IJSVGRootLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGRootLayer.h; sourceTree = ""; }; 5978C469280A241200D25296 /* IJSVGRootLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGRootLayer.m; sourceTree = ""; }; 599EB4D2238FF535004CB6BC /* libobjc.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libobjc.tbd; path = usr/lib/libobjc.tbd; sourceTree = SDKROOT; }; @@ -276,6 +294,8 @@ 59EB75D523905F7300F5AE63 /* IJSVGRendering.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = IJSVGRendering.m; sourceTree = ""; }; 59F36506262F1ABB00BCE3FD /* IJSVGColorType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGColorType.h; sourceTree = ""; }; 59F36507262F1ABB00BCE3FD /* IJSVGColorType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGColorType.m; sourceTree = ""; }; + 59F38A61280ED99200804FE4 /* IJSVGBasicLayer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGBasicLayer.h; sourceTree = ""; }; + 59F38A62280ED99200804FE4 /* IJSVGBasicLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGBasicLayer.m; sourceTree = ""; }; 59F9EAF62808BB5F00188ACB /* IJSVGViewBox.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGViewBox.h; sourceTree = ""; }; 59F9EAF72808BB5F00188ACB /* IJSVGViewBox.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IJSVGViewBox.m; sourceTree = ""; }; 59FCC09227F2394D00BB924E /* IJSVGRootNode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IJSVGRootNode.h; sourceTree = ""; }; @@ -299,6 +319,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 590AA093280DE648002BBE12 /* Filter Effects */ = { + isa = PBXGroup; + children = ( + 590AA094280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.h */, + 590AA095280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.m */, + ); + path = "Filter Effects"; + sourceTree = ""; + }; 592ABBE223979F9B00F44380 /* Commands */ = { isa = PBXGroup; children = ( @@ -379,6 +408,10 @@ 590EB7A327F637EF0047CECF /* IJSVGTransformLayer.m */, 5978C468280A241200D25296 /* IJSVGRootLayer.h */, 5978C469280A241200D25296 /* IJSVGRootLayer.m */, + 595BA91A280EB29B00AD1C89 /* IJSVGFilterLayer.h */, + 595BA91B280EB29B00AD1C89 /* IJSVGFilterLayer.m */, + 59F38A61280ED99200804FE4 /* IJSVGBasicLayer.h */, + 59F38A62280ED99200804FE4 /* IJSVGBasicLayer.m */, ); path = Layers; sourceTree = ""; @@ -397,6 +430,7 @@ 592ABBE72397A02900F44380 /* Nodes */ = { isa = PBXGroup; children = ( + 590AA093280DE648002BBE12 /* Filter Effects */, 59EB75CE23905F7200F5AE63 /* IJSVGForeignObject.h */, 59EB75C923905F7200F5AE63 /* IJSVGForeignObject.m */, 59EB758623905F6C00F5AE63 /* IJSVGDef.h */, @@ -423,6 +457,10 @@ 59FCC09327F2394D00BB924E /* IJSVGRootNode.m */, 59FDBEFE27F3454800AF7038 /* IJSVGColorNode.h */, 59FDBEFF27F3454800AF7038 /* IJSVGColorNode.m */, + 590AA08B280DDD90002BBE12 /* IJSVGFilter.h */, + 590AA08C280DDD90002BBE12 /* IJSVGFilter.m */, + 590AA08F280DDDA3002BBE12 /* IJSVGFilterEffect.h */, + 590AA090280DDDA3002BBE12 /* IJSVGFilterEffect.m */, ); path = Nodes; sourceTree = ""; @@ -631,6 +669,11 @@ 594A10DA248D7C90001A3181 /* NSImage+IJSVGAdditions.h in Headers */, 59EB762D23905F7300F5AE63 /* IJSVGLayerTree.h in Headers */, 59FDBF0027F3454800AF7038 /* IJSVGColorNode.h in Headers */, + 590AA091280DDDA3002BBE12 /* IJSVGFilterEffect.h in Headers */, + 590AA08D280DDD90002BBE12 /* IJSVGFilter.h in Headers */, + 59F38A63280ED99200804FE4 /* IJSVGBasicLayer.h in Headers */, + 595BA91C280EB29B00AD1C89 /* IJSVGFilterLayer.h in Headers */, + 590AA096280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.h in Headers */, 590EB7A427F637EF0047CECF /* IJSVGTransformLayer.h in Headers */, 5978C46A280A241200D25296 /* IJSVGRootLayer.h in Headers */, 59F9EAF82808BB5F00188ACB /* IJSVGViewBox.h in Headers */, @@ -712,7 +755,9 @@ 59EB75FD23905F7300F5AE63 /* IJSVGPatternLayer.m in Sources */, 59EB763923905F7300F5AE63 /* IJSVGCommandSmoothQuadraticCurve.m in Sources */, 59EB75D823905F7300F5AE63 /* IJSVGStyleSheetRule.m in Sources */, + 590AA092280DDDA3002BBE12 /* IJSVGFilterEffect.m in Sources */, 59EB75FB23905F7300F5AE63 /* IJSVGPath.m in Sources */, + 590AA097280DE668002BBE12 /* IJSVGFilterEffectGaussianBlur.m in Sources */, 59F36509262F1ABB00BCE3FD /* IJSVGColorType.m in Sources */, 59EB760123905F7300F5AE63 /* IJSVGLayerTree.m in Sources */, 59EB763A23905F7300F5AE63 /* IJSVGForeignObject.m in Sources */, @@ -727,6 +772,7 @@ 59EB75E523905F7300F5AE63 /* IJSVGStrokeLayer.m in Sources */, 59EB763223905F7300F5AE63 /* IJSVGView.m in Sources */, 59EB763523905F7300F5AE63 /* IJSVGStyleSheetSelector.m in Sources */, + 590AA08E280DDD90002BBE12 /* IJSVGFilter.m in Sources */, 59E7CFB023B148600077D599 /* IJSVGCommandParser.m in Sources */, 59EB760723905F7300F5AE63 /* IJSVGNode.m in Sources */, 5919E65C23F480330051873A /* IJSVGUnitPoint.m in Sources */, @@ -735,9 +781,11 @@ 59EB761723905F7300F5AE63 /* IJSVGRadialGradient.m in Sources */, 59EB75E223905F7300F5AE63 /* IJSVGColorList.m in Sources */, 59EB75ED23905F7300F5AE63 /* IJSVGFontConverter.m in Sources */, + 595BA91D280EB29B00AD1C89 /* IJSVGFilterLayer.m in Sources */, 59EB763C23905F7300F5AE63 /* IJSVGCommandEllipticalArc.m in Sources */, 59EB75E723905F7300F5AE63 /* IJSVGImage.m in Sources */, 59EB75E623905F7300F5AE63 /* IJSVGStyle.m in Sources */, + 59F38A64280ED99200804FE4 /* IJSVGBasicLayer.m in Sources */, 59EB75EB23905F7300F5AE63 /* IJSVGShapeLayer.m in Sources */, 59EB75F623905F7300F5AE63 /* IJSVGColor.m in Sources */, 59EB75F323905F7300F5AE63 /* IJSVGGroupLayer.m in Sources */, diff --git a/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m b/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m index 56abbcf..9286b11 100644 --- a/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m +++ b/Framework/IJSVG/IJSVG/Source/Core/IJSVG.m @@ -750,6 +750,7 @@ CGContextSaveGState(ref); // make sure we setup a transaction CGFloat backingScale = [self backingScaleFactor]; + [IJSVGLayer logLayer:self.rootLayer]; [self.rootLayer renderInContext:ref viewPort:rect backingScale:backingScale diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.h b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.h new file mode 100644 index 0000000..3a04122 --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.h @@ -0,0 +1,14 @@ +// +// IJSVGBasicLayer.h +// IJSVG +// +// Created by Curtis Hard on 19/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import +#import + +@interface IJSVGBasicLayer : CALayer + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.m new file mode 100644 index 0000000..ed65810 --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGBasicLayer.m @@ -0,0 +1,23 @@ +// +// IJSVGBasicLayer.m +// IJSVG +// +// Created by Curtis Hard on 19/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import "IJSVGBasicLayer.h" + +@implementation IJSVGBasicLayer + +@synthesize backingScaleFactor; +@synthesize renderQuality; +@synthesize debugLayers; + + +- (void)performRenderInContext:(CGContextRef)ctx { +} + + + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.h b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.h new file mode 100644 index 0000000..6e81fb1 --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.h @@ -0,0 +1,23 @@ +// +// IJSVGFilterLayer.h +// IJSVG +// +// Created by Curtis Hard on 19/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import +#import +#import + +@interface IJSVGFilterLayer : IJSVGLayer { + +@private + IJSVGBasicLayer* _hostingLayer; + CGImageRef _image; + +} + +@property (nonatomic, retain) CALayer* sublayer; + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m new file mode 100644 index 0000000..1d96221 --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGFilterLayer.m @@ -0,0 +1,70 @@ +// +// IJSVGFilterLayer.m +// IJSVG +// +// Created by Curtis Hard on 19/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import "IJSVGFilterLayer.h" +#import + +@implementation IJSVGFilterLayer + +- (void)dealloc +{ + (void)[_sublayer release], _sublayer = nil; + (void)CGImageRelease(_image), _image = nil; + [super dealloc]; +} + +- (instancetype)init +{ + if((self = [super init]) != nil) { + _hostingLayer = [IJSVGBasicLayer layer]; + [self addSublayer:_hostingLayer]; + } + return self; +} + +- (void)setBackingScaleFactor:(CGFloat)backingScaleFactor +{ + // we are responsible for recursively calling the sublayer + // with the new backing scale factor + [IJSVGLayer recursivelyWalkLayer:_sublayer + withBlock:^(CALayer* layer, BOOL *stop) { + layer.backingScaleFactor = backingScaleFactor; + }]; + BOOL needsChange = self.backingScaleFactor != backingScaleFactor; + [super setBackingScaleFactor:backingScaleFactor]; + if(needsChange == YES) { + [self updateImage]; + } +} + +- (void)updateImage +{ + if(_image != nil) { + (void)CGImageRelease(_image), _image = nil; + } + _image = [self.filter newImageByApplyFilterToLayer:_sublayer + scale:1.f]; +} + +- (void)layoutSublayers +{ + CGFloat width = CGImageGetWidth(_image); + CGFloat height = CGImageGetHeight(_image); + CGRect frame = _sublayer.innerBoundingBox; + _hostingLayer.frame = CGRectMake(frame.origin.x + (frame.size.width / 2.f - width / 2.f), + frame.origin.y + (frame.size.height / 2.f - height / 2.f), + width, height); + _hostingLayer.contents = (id)_image; +} + +- (NSArray*>*)debugLayers +{ + return @[_sublayer]; +} + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m index 7cc4723..33a7e28 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGGroupLayer.m @@ -19,4 +19,9 @@ [super dealloc]; } +- (CGRect)innerBoundingBox +{ + return self.outerBoundingBox; +} + @end diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.h b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.h index a9ebe24..884ab43 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.h +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.h @@ -9,13 +9,14 @@ #import #import #import +#import #import #import @interface IJSVGImageLayer : IJSVGLayer { @private - IJSVGLayer* _imageLayer; + CALayer* _imageLayer; } @property (nonatomic, retain) IJSVGImage* image; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m index 0cac549..2cd89d2 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGImageLayer.m @@ -40,7 +40,7 @@ - (void)reloadContent { if(_imageLayer == nil) { - _imageLayer = [IJSVGLayer layer].retain; + _imageLayer = [IJSVGBasicLayer layer].retain; _imageLayer.contentsGravity = kCAGravityResize; _imageLayer.affineTransform = CGAffineTransformMakeScale(1.f, -1.f); _imageLayer.contents = (id)_image.CGImage; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.h b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.h index a87ae0d..169f8e3 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.h +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.h @@ -16,6 +16,7 @@ @class IJSVGStrokeLayer; @class IJSVGGroupLayer; @class IJSVGLayer; +@class IJSVGFilter; typedef NS_ENUM(NSUInteger, IJSVGLayerFillType) { IJSVGLayerFillTypeColor, @@ -35,7 +36,15 @@ typedef NS_OPTIONS(NSUInteger, IJSVGLayerTraits) { @end -@protocol IJSVGDrawableLayer +@protocol IJSVGBasicLayer +@required +@property (nonatomic, assign) CGFloat backingScaleFactor; +@property (nonatomic, assign) IJSVGRenderQuality renderQuality; +@property (nonatomic, readonly) NSArray*>* debugLayers; + +@end + +@protocol IJSVGDrawableLayer @required @property (nonatomic, assign) CGBlendMode blendingMode; @@ -44,8 +53,6 @@ typedef NS_OPTIONS(NSUInteger, IJSVGLayerTraits) { @property (nonatomic, copy) CAShapeLayerFillRule clipRule; @property (nonatomic, copy) CAShapeLayerFillRule fillRule; @property (nonatomic, readonly) CGPoint absoluteOrigin; -@property (nonatomic, assign) IJSVGRenderQuality renderQuality; -@property (nonatomic, assign) CGFloat backingScaleFactor; @property (nonatomic, readonly) BOOL requiresBackingScaleHelp; @property (nonatomic, readonly) CALayer* rootLayer; @property (nonatomic, readonly) CGRect absoluteFrame; @@ -53,8 +60,9 @@ typedef NS_OPTIONS(NSUInteger, IJSVGLayerTraits) { @property (nonatomic, readonly) CGRect strokeBoundingBox; @property (nonatomic, readonly) CGRect boundingBoxBounds; @property (nonatomic, assign) CGRect outerBoundingBox; +@property (nonatomic, readonly) CGRect innerBoundingBox; @property (nonatomic, assign) CALayer* referencingLayer; -@property (nonatomic, readonly) NSArray*>* debugLayers; +@property (nonatomic, retain) IJSVGFilter* filter; - (void)performRenderInContext:(CGContextRef)ctx; @@ -81,20 +89,21 @@ typedef NS_OPTIONS(NSUInteger, IJSVGLayerTraits) { @property (nonatomic, copy) CAShapeLayerFillRule clipRule; @property (nonatomic, copy) CAShapeLayerFillRule fillRule; @property (nonatomic, retain) CALayer* maskLayer; +@property (nonatomic, retain) IJSVGFilter* filter; @property (nonatomic, readonly) CALayer* rootLayer; @property (nonatomic, readonly) CGRect absoluteFrame; @property (nonatomic, assign) CGRect boundingBox; @property (nonatomic, readonly) CGRect boundingBoxBounds; @property (nonatomic, readonly) CGRect strokeBoundingBox; @property (nonatomic, assign) CGRect outerBoundingBox; -@property (nonatomic, readonly) CGRect outerBoundingBoxBounds; +@property (nonatomic, readonly) CGRect innerBoundingBox; @property (nonatomic, assign) CALayer* referencingLayer; + (IJSVGLayerFillType)fillTypeForFill:(id)fill; + (NSArray*)deepestSublayersOfLayer:(CALayer*)layer; -+ (void)recursivelyWalkLayer:(CALayer*)layer - withBlock:(void (^)(CALayer* layer, BOOL* stop))block; ++ (void)recursivelyWalkLayer:(CALayer*)layer + withBlock:(void (^)(CALayer* layer, BOOL* stop))block; - (void)applySublayerMaskToContext:(CGContextRef)context forSublayer:(IJSVGLayer*)sublayer diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m index 19be8ec..a037e88 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGLayer.m @@ -17,6 +17,7 @@ - (void)dealloc { + (void)([_filter release]), _filter = nil; (void)([_clipLayer release]), _clipLayer = nil; (void)([_maskLayer release]), _maskLayer = nil; (void)([_clipRule release]), _clipRule = nil; @@ -61,6 +62,22 @@ return IJSVGLayerFillTypeUnknown; } ++ (void)applyAbsoluteTransformForLayer:(CALayer*)layer + toContext:(CGContextRef)ctx +{ + CALayer* parentLayer = layer; + while((parentLayer = parentLayer.referencingLayer) != nil) { + CGContextConcatCTM(ctx, parentLayer.affineTransform); + + // only go up until we find a root layer, at that point, we know + // we can stop looking + if([parentLayer isKindOfClass:IJSVGRootLayer.class] == YES) { + break; + } + } + CGContextConcatCTM(ctx, layer.affineTransform); +} + + (CGAffineTransform)absoluteTransformForLayer:(CALayer*)layer { CGAffineTransform identity = CGAffineTransformIdentity; @@ -72,8 +89,7 @@ // we can stop looking if([parentLayer isKindOfClass:IJSVGRootLayer.class] == YES) { break; - } - + } } return CGAffineTransformConcat(identity, layer.affineTransform); } @@ -88,8 +104,8 @@ return parentLayer; } -+ (void)renderLayer:(CALayer*)layer - inContext:(CGContextRef)ctx ++ (void)performBasicRenderOfLayer:(CALayer*)layer + inContext:(CGContextRef)ctx { dispatch_block_t drawingBlock = ^{ [layer performRenderInContext:ctx]; @@ -109,6 +125,13 @@ }]; } ++ (void)renderLayer:(CALayer*)layer + inContext:(CGContextRef)ctx +{ + [self performBasicRenderOfLayer:layer + inContext:ctx]; +} + + (void)applyBlendingMode:(CGBlendMode)blendMode toContext:(CGContextRef)ctx drawingBlock:(dispatch_block_t)drawingBlock @@ -224,17 +247,20 @@ bitmapInfo:(uint32_t)bitmapInfo scale:(CGFloat)scale { + CGRect frame = layer.outerBoundingBox; CGContextRef offscreenContext = CGBitmapContextCreate(NULL, ceilf(frame.size.width * scale), ceilf(frame.size.height * scale), 8, 0, colorSpace, bitmapInfo); - - CGContextSaveGState(offscreenContext); + CGContextConcatCTM(offscreenContext, [self absoluteTransformForLayer:layer]); CGContextScaleCTM(offscreenContext, scale, scale); - CGContextTranslateCTM(offscreenContext, -frame.origin.x, -frame.origin.y); - [layer renderInContext:offscreenContext]; + [IJSVGLayer renderLayer:layer + inContext:offscreenContext]; CGImageRef image = CGBitmapContextCreateImage(offscreenContext); + NSImage* prev = [[[NSImage alloc] initWithCGImage:image + size:NSMakeSize(CGImageGetWidth(image), CGImageGetHeight(image))] autorelease]; + CGContextRelease(offscreenContext); return image; } @@ -273,8 +299,8 @@ return arr; } -+ (void)recursivelyWalkLayer:(CALayer*)layer - withBlock:(void (^)(CALayer* layer, BOOL* stop))block ++ (void)recursivelyWalkLayer:(CALayer*)layer + withBlock:(void (^)(CALayer* layer, BOOL* stop))block { // call for layer and mask if there is one BOOL stop = NO; @@ -284,7 +310,7 @@ } // sublayers!! - for (CALayer* aLayer in layer.sublayers) { + for (CALayer* aLayer in layer.sublayers) { [self recursivelyWalkLayer:aLayer withBlock:block]; } @@ -466,14 +492,6 @@ return CGRectIsNull(_outerBoundingBox) == NO ? _outerBoundingBox : self.frame; } -- (CGRect)outerBoundingBoxBounds -{ - return (CGRect) { - .origin = CGPointZero, - .size = self.outerBoundingBox.size - }; -} - - (CGRect)boundingBoxBounds { return (CGRect) { @@ -482,6 +500,14 @@ }; } +- (CGRect)innerBoundingBox +{ + return (CGRect) { + .origin = CGPointZero, + .size = self.outerBoundingBox.size + }; +} + - (CGRect)strokeBoundingBox { return self.boundingBox; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m index 5fb46c5..63934e0 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGRootLayer.m @@ -18,7 +18,7 @@ IJSVGViewBoxDrawingBlock drawingBlock = ^(CGSize size) { // we have to make sure we set the backing scale factor once // we know how scale this will be drawn at - weakSelf.backingScaleFactor *= MAX(size.width, size.height); + weakSelf.backingScaleFactor *= MIN(size.width, size.height); [super performRenderInContext:ctx]; }; [IJSVGViewBox drawViewBox:viewBox diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.h b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.h index f65fbd0..e4860d3 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.h +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.h @@ -36,7 +36,9 @@ @property (nonatomic, readonly) CGRect absoluteFrame; @property (nonatomic, assign) CGRect boundingBox; @property (nonatomic, assign) CGRect outerBoundingBox; +@property (nonatomic, readonly) CGRect innerBoundingBox; @property (nonatomic, readonly) CGRect boundingBoxBounds; +@property (nonatomic, retain) IJSVGFilter* filter; @property (nonatomic, assign) CALayer* referencingLayer; @property (nonatomic, assign) CGRect strokeBoundingBox; @property (nonatomic, copy) CAShapeLayerFillRule clipRule; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m index 02fa904..b1ae5ad 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGShapeLayer.m @@ -13,6 +13,7 @@ - (void)dealloc { + (void)([_filter release]), _filter = nil; (void)([_clipLayer release]), _clipLayer = nil; (void)([_maskLayer release]), _maskLayer = nil; (void)([_maskingLayer release]), _maskingLayer = nil; @@ -48,6 +49,11 @@ }; } +- (CGRect)innerBoundingBox +{ + return self.bounds; +} + - (BOOL)requiresBackingScaleHelp { return _maskLayer != nil || _clipLayer != nil; diff --git a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m index ae79b49..c375302 100644 --- a/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m +++ b/Framework/IJSVG/IJSVG/Source/Layers/IJSVGTransformLayer.m @@ -21,9 +21,12 @@ @synthesize boundingBoxBounds; @synthesize strokeBoundingBox; @synthesize outerBoundingBox; +@synthesize filter = _filter; +@synthesize innerBoundingBox; - (void)dealloc { + (void)[_filter release], _filter = nil; (void)[_maskLayer release], _maskLayer = nil; (void)[_fillRule release], _fillRule = nil; (void)[_clipRule release], _clipRule = nil; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.h b/Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.h new file mode 100644 index 0000000..dcb405f --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.h @@ -0,0 +1,13 @@ +// +// IJSVGFilterEffectGaussianBlur.h +// IJSVG +// +// Created by Curtis Hard on 18/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import + +@interface IJSVGFilterEffectGaussianBlur : IJSVGFilterEffect + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.m b/Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.m new file mode 100644 index 0000000..21ff927 --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Nodes/Filter Effects/IJSVGFilterEffectGaussianBlur.m @@ -0,0 +1,22 @@ +// +// IJSVGFilterEffectGaussianBlur.m +// IJSVG +// +// Created by Curtis Hard on 18/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import "IJSVGFilterEffectGaussianBlur.h" + +@implementation IJSVGFilterEffectGaussianBlur + +- (CIImage*)processImage:(CIImage*)image +{ + CIFilter* filter = [CIFilter filterWithName:@"CIGaussianBlur"]; + [filter setDefaults]; + [filter setValue:image forKey:kCIInputImageKey]; + [filter setValue:@(self.stdDeviation.value) forKey:kCIInputRadiusKey]; + return [filter valueForKey:kCIOutputImageKey]; +} + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h index a958419..341fd54 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGColorNode.h @@ -13,6 +13,7 @@ } @property (nonatomic, retain) NSColor* color; +@property (nonatomic, assign) BOOL isNoneOrTransparent; + (IJSVGNode*)colorNodeWithColor:(NSColor*)color; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.h b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.h new file mode 100644 index 0000000..598d4b8 --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.h @@ -0,0 +1,17 @@ +// +// IJSVGFilter.h +// IJSVG +// +// Created by Curtis Hard on 18/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import +#import + +@interface IJSVGFilter : IJSVGGroup + +- (CGImageRef)newImageByApplyFilterToLayer:(CALayer*)layer + scale:(CGFloat)scale; + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m new file mode 100644 index 0000000..d71791a --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilter.m @@ -0,0 +1,41 @@ +// +// IJSVGFilter.m +// IJSVG +// +// Created by Curtis Hard on 18/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import "IJSVGFilter.h" +#import "IJSVGFilterEffect.h" +#import "IJSVGLayer.h" + +@implementation IJSVGFilter + +- (CGImageRef)newImageByApplyFilterToLayer:(CALayer*)layer + scale:(CGFloat)scale +{ + IJSVGFilter* filter = layer.filter; + layer.filter = nil; + CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); + CGImageRef originalImage = [IJSVGLayer newImageForLayer:layer + colorSpace:colorSpace + bitmapInfo:kCGImageAlphaPremultipliedFirst | kCGBitmapByteOrder32Little + scale:1.f]; + CIImage* image = [CIImage imageWithCGImage:originalImage]; + CGColorSpaceRelease(colorSpace); + CGImageRelease(originalImage); + for(IJSVGFilterEffect* effect in self.children) { + image = [effect processImage:image]; + } + CIContext* context = [CIContext context]; + CGImageRef outputImage = [context createCGImage:image + fromRect:image.extent]; + NSImage* nimage = [[[NSImage alloc] initWithCGImage:outputImage + size:NSMakeSize(CGImageGetWidth(outputImage), + CGImageGetHeight(outputImage))] autorelease]; + layer.filter = filter; + return outputImage; +} + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.h b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.h new file mode 100644 index 0000000..1d2f1d6 --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.h @@ -0,0 +1,40 @@ +// +// IJSVGFilterEffect.h +// IJSVG +// +// Created by Curtis Hard on 18/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, IJSVGFilterEffectSource) { + IJSVGFilterEffectSourceGraphic, + IJSVGFilterEffectSourceAlpha, + IJSVGFilterEffectSourceBackgroundImage, + IJSVGFilterEffectSourceBackgroundAlpha, + IJSVGFilterEffectSourceFillPaint, + IJSVGFilterEffectSourceStrokePaint, + IJSVGFilterEffectSourcePrimitiveReference, +}; + +typedef NS_ENUM(NSInteger, IJSVGFilterEffectEdgeMode) { + IJSVGFilterEffectEdgeModeNone, + IJSVGFilterEffectEdgeModeWrap, + IJSVGFilterEffectEdgeModeDuplicate, +}; + +@interface IJSVGFilterEffect : IJSVGGroup + +@property (nonatomic, assign) IJSVGFilterEffectSource source; +@property (nonatomic, retain) IJSVGUnitLength* stdDeviation; +@property (nonatomic, assign) IJSVGFilterEffectEdgeMode edgeMode; +@property (nonatomic, copy) NSString* primitiveReference; + ++ (Class)effectClassForElementName:(NSString*)name; ++ (IJSVGFilterEffectSource)sourceForString:(NSString*)string; ++ (IJSVGFilterEffectEdgeMode)edgeModeForString:(NSString*)string; + +- (CIImage*)processImage:(CIImage*)image; + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m new file mode 100644 index 0000000..7a643ba --- /dev/null +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGFilterEffect.m @@ -0,0 +1,86 @@ +// +// IJSVGFilterEffect.m +// IJSVG +// +// Created by Curtis Hard on 18/04/2022. +// Copyright © 2022 Curtis Hard. All rights reserved. +// + +#import "IJSVGFilterEffect.h" +#import "IJSVGFilterEffectGaussianBlur.h" + +@implementation IJSVGFilterEffect + +static NSDictionary* _elementClassMap = nil; + ++ (void)load +{ + _elementClassMap = [@{ + @"fegaussianblur": IJSVGFilterEffectGaussianBlur.class + } retain]; +} + ++ (Class)effectClassForElementName:(NSString*)name +{ + NSString* key = name.lowercaseString; + return _elementClassMap[key] ?: IJSVGFilterEffect.class; +} + ++ (IJSVGFilterEffectSource)sourceForString:(NSString*)string +{ + const char* name = string.lowercaseString.UTF8String; + if(name == NULL) { + return IJSVGFilterEffectSourceGraphic; + } + if(strcmp(name, "sourcegraphic") == 0) { + return IJSVGFilterEffectSourceGraphic; + } + if(strcmp(name, "sourcealpha") == 0) { + return IJSVGFilterEffectSourceAlpha; + } + if(strcmp(name, "backgroundimage") == 0) { + return IJSVGFilterEffectSourceBackgroundImage; + } + if(strcmp(name, "backgroundalpha") == 0) { + return IJSVGFilterEffectSourceBackgroundAlpha; + } + if(strcmp(name, "fillpaint") == 0) { + return IJSVGFilterEffectSourceFillPaint; + } + if(strcmp(name, "strokepain") == 0) { + return IJSVGFilterEffectSourceStrokePaint; + } + return IJSVGFilterEffectSourcePrimitiveReference; +} + ++ (IJSVGFilterEffectEdgeMode)edgeModeForString:(NSString*)string +{ + const char* name = string.lowercaseString.UTF8String; + if(name == NULL) { + return IJSVGFilterEffectEdgeModeNone; + } + if(strcmp(name, "none") == 0) { + return IJSVGFilterEffectEdgeModeNone; + } + if(strcmp(name, "wrap") == 0) { + return IJSVGFilterEffectEdgeModeWrap; + } + if(strcmp(name, "duplicate") == 0) { + return IJSVGFilterEffectEdgeModeDuplicate; + } + return IJSVGFilterEffectEdgeModeNone; +} + +- (void)dealloc +{ + (void)[_primitiveReference release], _primitiveReference = nil; + (void)[_stdDeviation release], _stdDeviation = nil; + [super dealloc]; +} + +- (CIImage*)processImage:(CIImage*)image +{ + return image; +} + +@end diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.h b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.h index 4dad276..74b73c9 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.h +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.h @@ -21,6 +21,7 @@ @class IJSVGTransform; @class IJSVGRootNode; @class IJSVGUnitRect; +@class IJSVGFilter; typedef void (^IJSVGNodeWalkHandler)(IJSVGNode* node, BOOL* allowChildNodes, BOOL* stop); @@ -58,6 +59,8 @@ typedef NS_ENUM(NSInteger, IJSVGNodeType) { IJSVGNodeTypeDesc, IJSVGNodeTypeStop, IJSVGNodeTypeNotFound, + IJSVGNodeTypeFilter, + IJSVGNodeTypeFilterEffect, IJSVGNodeTypeUnknown, }; @@ -151,6 +154,7 @@ void IJSVGAssertPaintableObject(id object); @property (nonatomic, assign) IJSVGLineCapStyle lineCapStyle; @property (nonatomic, assign) IJSVGLineJoinStyle lineJoinStyle; @property (nonatomic, retain) NSArray* transforms; +@property (nonatomic, retain) IJSVGFilter* filter; @property (nonatomic, assign) CGFloat* strokeDashArray; @property (nonatomic, assign) NSInteger strokeDashArrayCount; @property (nonatomic, readonly) NSArray* lineDashPattern; diff --git a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m index 8628675..4b07657 100644 --- a/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m +++ b/Framework/IJSVG/IJSVG/Source/Nodes/IJSVGNode.m @@ -43,6 +43,7 @@ (void)([_svg release]), _svg = nil; (void)([_mask release]), _mask = nil; (void)([_viewBox release]), _viewBox = nil; + (void)([_filter release]), _filter = nil; [super dealloc]; } @@ -136,6 +137,12 @@ if(strcmp(name, "desc") == 0) { return IJSVGNodeTypeDesc; } + if(strcmp(name, "filter") == 0) { + return IJSVGNodeTypeFilter; + } + if(strcmp(name, "fegaussianblur") == 0) { + return IJSVGNodeTypeFilterEffect; + } return IJSVGNodeTypeUnknown; } @@ -442,7 +449,8 @@ - (NSString *)description { - return [NSString stringWithFormat:@"%@ %@ %@",self.name,self.classNameList,self.identifier]; + return [NSString stringWithFormat:@"%@ %@ %@ %@",NSStringFromClass(self.class), + self.name,self.classNameList,self.identifier]; } @end diff --git a/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.h b/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.h index ae24bee..2da48b1 100644 --- a/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.h +++ b/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.h @@ -23,6 +23,8 @@ #import #import #import +#import +#import #import #import @@ -77,6 +79,10 @@ extern NSString* const IJSVGAttributeStopColor; extern NSString* const IJSVGAttributeStopOpacity; extern NSString* const IJSVGAttributeHref; extern NSString* const IJSVGAttributeOverflow; +extern NSString* const IJSVGAttributeFilter; +extern NSString* const IJSVGAttributeStdDeviation; +extern NSString* const IJSVGAttributeIn; +extern NSString* const IJSVGAttributeEdgeMode; @class IJSVGParser; diff --git a/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m b/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m index 2c06b79..dda672f 100644 --- a/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m +++ b/Framework/IJSVG/IJSVG/Source/Parsing/IJSVGParser.m @@ -64,6 +64,10 @@ NSString* const IJSVGAttributeStopColor = @"stop-color"; NSString* const IJSVGAttributeStopOpacity = @"stop-opacity"; NSString* const IJSVGAttributeHref = @"href"; NSString* const IJSVGAttributeOverflow = @"overflow"; +NSString* const IJSVGAttributeFilter = @"filter"; +NSString* const IJSVGAttributeStdDeviation = @"stdDeviation"; +NSString* const IJSVGAttributeIn = @"in"; +NSString* const IJSVGAttributeEdgeMode = @"edgeMode"; @implementation IJSVGParser @@ -466,7 +470,11 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; return; } NSColor* color = [IJSVGColor colorFromString:value]; - node.stroke = [IJSVGColorNode colorNodeWithColor:color]; + IJSVGColorNode* colorNode = (IJSVGColorNode*)[IJSVGColorNode colorNodeWithColor:color]; + if(color == nil) { + colorNode.isNoneOrTransparent = [IJSVGColor isNoneOrTransparent:value]; + } + node.stroke = colorNode; }); // stroke dash array @@ -495,7 +503,11 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; return; } NSColor* color = [IJSVGColor colorFromString:value]; - node.fill = [IJSVGColorNode colorNodeWithColor:color]; + IJSVGColorNode* colorNode = (IJSVGColorNode*)[IJSVGColorNode colorNodeWithColor:color]; + if(color == nil) { + colorNode.isNoneOrTransparent = [IJSVGColor isNoneOrTransparent:value]; + } + node.fill = colorNode; }); // fill opacity @@ -537,11 +549,15 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; // stop-color IJSVGAttributeParse(IJSVGAttributeStopColor, ^(NSString* value) { NSColor* color = [IJSVGColor colorFromString:value]; - if(node.fillOpacity.value != 1.f) { + IJSVGColorNode* colorNode = (IJSVGColorNode*)[IJSVGColorNode colorNodeWithColor:color]; + if(color == nil) { + colorNode.isNoneOrTransparent = [IJSVGColor isNoneOrTransparent:value]; + } else if(node.fillOpacity.value != 1.f) { color = [IJSVGColor changeAlphaOnColor:color to:node.fillOpacity.value]; + colorNode.color = color; } - node.fill = [IJSVGColorNode colorNodeWithColor:color]; + node.fill = colorNode; }); // overflow @@ -571,6 +587,39 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; node.viewBoxAlignment = alignment; node.viewBoxMeetOrSlice = meetOrSlice; }); + + // filters + IJSVGAttributeParse(IJSVGAttributeFilter, ^(NSString* value) { + NSString* filterIdentifier = [IJSVGUtils defURL:value]; + if(filterIdentifier != nil) { + IJSVGNode* filter = [self computeDetachedNodeWithIdentifier:filterIdentifier + referencingElement:element + referencingNode:node]; + node.filter = (IJSVGFilter*)filter; + } + }); + + if(node.type == IJSVGNodeTypeFilterEffect) { + IJSVGFilterEffect* effect = (IJSVGFilterEffect*)node; + + // in + IJSVGAttributeParse(IJSVGAttributeIn, ^(NSString* value) { + effect.source = [IJSVGFilterEffect sourceForString:value]; + if(effect.source == IJSVGFilterEffectSourcePrimitiveReference) { + effect.primitiveReference = value; + } + }); + + // edge mode + IJSVGAttributeParse(IJSVGAttributeEdgeMode, ^(NSString* value) { + effect.edgeMode = [IJSVGFilterEffect edgeModeForString:value]; + }); + + // deviation + IJSVGAttributeParse(IJSVGAttributeStdDeviation, ^(NSString* value) { + effect.stdDeviation = [IJSVGUnitLength unitWithString:value]; + }); + } } - (IJSVGNode*)parseElement:(NSXMLElement*)element @@ -693,6 +742,16 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; parentNode:node]; break; } + case IJSVGNodeTypeFilter: { + computedNode = [self parseFilterElement:element + parentNode:node]; + break; + } + case IJSVGNodeTypeFilterEffect: { + computedNode = [self parseFilterEffectElement:element + parentNode:node]; + break; + } default: break; } @@ -787,6 +846,44 @@ static NSDictionary* _IJSVGAttributeDictionaryTransforms = nil; [_styleSheet parseStyleBlock:element.stringValue]; } +- (IJSVGNode*)parseFilterElement:(NSXMLElement*)element + parentNode:(IJSVGNode*)parentNode +{ + IJSVGFilter* node = [[[IJSVGFilter alloc] init] autorelease]; + node.type = IJSVGNodeTypeFilter; + node.name = element.localName; + + [self computeAttributesFromElement:element + onNode:node + ignoredAttributes:nil]; + + [self computeElement:element + parentNode:node]; + return node; +} + +- (IJSVGNode*)parseFilterEffectElement:(NSXMLElement*)element + parentNode:(IJSVGNode*)parentNode +{ + Class effectClass = [IJSVGFilterEffect effectClassForElementName:element.localName]; + IJSVGFilterEffect* node = [[[effectClass alloc] init] autorelease]; + node.type = IJSVGNodeTypeFilterEffect; + node.name = element.localName; + + if([parentNode isKindOfClass:IJSVGGroup.class] == YES) { + IJSVGGroup* group = (IJSVGGroup*)parentNode; + [group addChild:node]; + } + + [self computeAttributesFromElement:element + onNode:node + ignoredAttributes:nil]; + + [self computeElement:element + parentNode:node]; + return node; +} + - (IJSVGNode*)parseLinearGradientElement:(NSXMLElement*)element parentNode:(IJSVGNode*)parentNode { diff --git a/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m b/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m index 5ddb8c7..0419200 100644 --- a/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m +++ b/Framework/IJSVG/IJSVG/Source/Rendering/IJSVGLayerTree.m @@ -25,6 +25,7 @@ #import #import #import +#import @implementation IJSVGLayerTree @@ -91,6 +92,9 @@ if(layer != nil) { [self applyDefaultsToLayer:layer fromNode:node]; + layer = [self applyFilter:node.filter + toLayer:layer + fromNode:node]; return [self applyTransforms:node.transforms toLayer:layer fromNode:node]; @@ -164,10 +168,14 @@ IJSVGColorNode* colorNode = (IJSVGColorNode*)fill; NSColor* color = colorNode.color; - // change the fill color opacity if required - if(node.fillOpacity.value != 1.f) { - color = [IJSVGColor changeAlphaOnColor:color - to:node.fillOpacity.value]; + if(colorNode.isNoneOrTransparent == YES) { + color = nil; + } else { + // change the fill color opacity if required + if(node.fillOpacity.value != 1.f) { + color = [IJSVGColor changeAlphaOnColor:color + to:node.fillOpacity.value]; + } } // set the color against the layer — we cant just use fill layer due to how @@ -410,8 +418,8 @@ } - (CALayer*)drawableGradientLayerForPathNode:(IJSVGPath*)node - gradient:(IJSVGGradient*)gradient - layer:(CALayer*)layer + gradient:(IJSVGGradient*)gradient + layer:(CALayer*)layer { // gradient fill IJSVGGradientLayer* gradientLayer = [self drawableBasicGradientLayerForLayer:layer @@ -494,6 +502,23 @@ } } +#pragma mark Filters + +- (CALayer*)applyFilter:(IJSVGFilter*)filter + toLayer:(CALayer*)layer + fromNode:(IJSVGNode*)node +{ + if(filter == nil) { + return layer; + } + IJSVGFilterLayer* filterLayer = [IJSVGFilterLayer layer]; + filterLayer.filter = filter; + filterLayer.frame = layer.frame; + filterLayer.sublayer = layer; + layer.referencingLayer = filterLayer; + return filterLayer; +} + #pragma mark Transforms - (CALayer*)applyTransforms:(NSArray*)transforms diff --git a/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate b/IJSVGExample/IJSVGExample.xcodeproj/project.xcworkspace/xcuserdata/curtishard.xcuserdatad/UserInterfaceState.xcuserstate index 45abb4ba8444b59d8deb9715381048d76aedbfea..06765cf0752ce5c046e3a7dc7e437f84328251de 100644 GIT binary patch literal 185286 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

#o zNkP?Q1IRlVkZW9bvIFKRFi+La1Z3LbG3>q0bw5M$KA5LvT@S!Ky^ct(cRi*dNo$eF z|IJ`*J)t5wvpSNK_c{xV*|)9@uIDu>H>y;!VdDdqG-|oYwT)5vs_Qk^>#ohNEv`3Q zTU~Fu-g3PS^IVwc!AxzT1u&ljGc_3&!VH)f!Mr%<+OAXiz7~+VK4w%dF{r$tG9bIO zK_w4@N`A+nq^QamHg^5Upxl$cj2$qa&jKfc>7$vW%$1Lg~}uD@WusBS>I z^V}xF%AHSrE9Q%d$(3%7`c}-B)YP})_)Wi?TXNe}7~NJC#>=QL#m%w46!Rt3FgD7# z-7$jE?QwhEKDXZ;a0lHXci0_qM`6AK<||>QZ*?`y*T8%&%-6wuJGG})SNzM>jd&cZRN z&YmjKq`S;LM8k5hisfy!l{e}-(tSF^@)Y-}?sE4i_h|PR_gMEhcZHk0^=g=@rF{p? zYhWg4kc0UynD2)99+>aVxoJi=`*BZnPjXMDKc_M**BTm0PT>)lA7xxNtSCMRp4)v6 zCl208sW$esJ6_fQWfzD4iraHINJNXK_8n<5V&T4$B35d*Wf$;%9 z!YFfx`+mmf8uy*j&_uKC6jLmH@Z_2vgf%(-sviX7gV*<G$`%Pq`}f1ONjJ79>M0@~Ju#R+$$H{2e_A&lJ!wxPRVzIiRV&$Wu;*x1 zD?h6SmNP%!xLq?(OO;1Y3zbK<8u@_5j56&!ovEA8)85m;)6sLB=XlQvo=%<EZYREmzkYiQ*|5V-noRM0=Gu|_uw8b;QbB5%x9|xZRp9G%*p9W9p z(U)!n{wVNA=e%ak|9LIW2#C zn_kL8w8|Tox3B|zQDKl(@=_Ydtd|VfEbDCyzIol)^fvRdc*@(Hi6w

%hrUXmvTXpT(+zRwNa*vw;v(t?dt93 zE%A2u_VD)f_VV`j_VM-wPX*h7Zx6l$_>SP|Baa79jCBHkV$R!NlS^-@=DfW_7?Pb0 zx$IKuyn8edc@T&k$B3)|Uu+OLo`|fev)M586fX^{WxZ3ucg=dIf$vsF8fSUus7mRb zttw>+gKC}%RrhL8ISY8>b_>0WReAI-Qd#U-TQQ@|Mc!)}ix+z@@m}h^%zL@_3h$NP ztGrixuL0j1d>`-xWk2x!!4CjG5d2BtOTm}ryw~aSxYV6?G$DDsg|RrukjJ6a*Gx+j zm^`x8#SN~zo?W;1E(YV>;0GHpu4VGLE`J$2zz?C$W_BWRR190M_dd#Sd<6WktoJeS z!|RCSQ{HDa9G_8fJehIzoQmU!>NuJzrST>2CJo0|R2)yKt(Z~8H@qJ(9JhMk^uFbN z+q=!X-TRLBUGIC|_raHg9|e9i_%Yzef+zK-ckwjvr-L7#^M0t~_^I=FHuT~Bg5fy9 z!0}A-*6Pp)&sG;V&{*Fz{={h93;qm)#$SoX17=(B{^QGIB>oG2V%C=rep1~?^qGC4 zN}^9tNt{eb`6QLZDb-0VXrWW(EA+Wk5`9jU#ItHEW|Rr|QbeLJ=nMJ6zKAdCi}{Lt zabLnm;o@}gGr-RTKMVZX;AexM1AZ>}dEn>gd})nD-%*;A_BCZBE-*-3Sm~tCYap@y zowTnbk?5na=^ULzUne5bccOhhJHXR&qgL9Pl+kS%yStCptYv-F*g@9U3;d!w^4QNe zkihcwXJO-F7B>1$VqxPFLb3)PcN@1G>Z7eXs2$@QuJU+3T{8D-*?0=Uv0C^CAq`|hVZ!!353?R=ZAZ?1H2|HNsR9e8P zo-4b2e3$vIU^tQyugm(#h}YK<$7_AmRYWap-}S0I-oUt8s&aK>HLjc-pX#hNu=5PY zZuPCyxXh|t-c(z8qs$r~+w;SBr!VKb%Xhc$9^bvbwZ3(}`+WCY5h0F{On9Zxy-QkHXp5C%lfv1zbor|7yR9IB=bYxCrl_mVnTV3DwLlx zp=5~{s*~wE&vC7B!>@g`w4O=jE)~i97?Pi=NZ(tnpi$;W9}T>%@$K>b5{H zEmN0GhPu2~8HH_a5SRKF7k@W~M+x{>4Lo`h9`crg_t?SmrBbGPI#s$n{{a6N>QLpVpyKu=r+e z#f&l&{4*GfXZX+bPxMdnPxepoPxYVWpXR6Lz}w)rfhSpf2RzB*d*G?T`T_V4!GDzV z&(tC?{~Vpg1&l?Sh{t}we_F}nmklf)1Qsu0EK*qfiNPZ6k5=25tp9pH<%!JtZvej| z>t7007gB* zUsOZbD6`K0IAifX|NZ_4{15sc@;~ff?|;PqsGquZc7opp{u}V$g8vTuZt&lO{{j4u z;P>SG6lJj=|1JR{{}=eb8J7Pvz<3Z~+{$2l6Z~ES#%;`RZuh^# z4)8yN|3y2K=Zrbp8TS6z|0zR~M%#YN`gef;y^ctJ=~w41Nq(BQ)EfLBj4j$UjoA9L z8e2|Zf7)qHYZ5q&wB`OiesvvM$WQCgNGboV?GudJ{u$sIoqzfN_W$GmH;@;|4-^DU z0WM&MkPo2%f(Zf#f&R)v5Fm&UED)qzK+xz6$T9*n-WDh%It5v$Q?Ro(fk4B<5IhZZ z)<2zrDA5^+L9ps{258mVszB1(lN}If6OJpiGtqgOZtcL)fhNRepfQBPY@jIwN8Q*A zvgw5QY$e5QRWbp$I}e7Z|7o zl7T^*^9~GSNG9|^Qb-xjTR5tL$b&%SX^hCzAtVhV&rkzNBQGE&-mjV$FmP62I-_wK zgmgAA1A6avLQ4p(ARG&!buMs& zE{`|qEZ)jkY-7k{yGj<1Z(#8tuy_w+@m>gR4HoYs7KO$3`RqUeWn*ilohzF)fky(g ziY*&>6hixK;Bg4FcDpX2WZ>z*28NXscvhv6r790>RB1e}I*m?apSZxwfmbyeH>ot9 zP+KvB#;t+(skbEXX5g*B+ktI??SXd!?*`t3a3X}x5Q-smfzTB~HwYyVx~~a*pzGl$ zfltXne+Hq4p@n@Q^ku%eUqg4ve)B>DyBRv)L+ELsvxhm>p8|W?0ihR!-rAWh!T8Z} zOsaDuEf8}Sd~6u%?;s7DQCC>tU)8w%$+*D+m5Bk>nV5LAUMwgC9c1627_41zEi!Vm~UAq-m+bne?579__wylQWlFrvY{`iN&7F=Ukvwg5D`HohcF7lXb58>BK;`Ho;; z<~xi5a^cKM-_bBYeh}7R1y5##jDTPakOxmCLJl}U9;^t`=Cj!#8E;}XI37YB2grjH zgDg2xa1x8DDL+!{mBFdh1tCl!uxg;Hk3rR}pgQ3w6r>496veOs@*t%Gpx~$axVlm1 z+~CEG#Dzfw7X=pwmjurXo*%p*cwz7&2-6`@=rt3qmAi4f={b7 zo=5Gw;Ci)vx40U_Mwu6aZ!j8P489b6IrvI&Q}ET`Yr)rpn}b^*Tma!h2!!Ru5H5jm zDTK=)Tn^z12v_EUTXh<@1-A#^$y0*wF&b&#JoW?OS_n%a(8xH1n;LMe|DZbfHN$Zy zgsTnL`7PlX{4RePJ0M&`4Lo*YanX&2vG)dlVLbi};ks;)n*DVg9}oT+{D*-h1^-r~ zYBoL|%2Q>ohVk*$f22A)j3CTNc@h#rlFDYtqOy5&Z6BdmH{=L~iOrBR z3;9EVP%uRO4a*_i3Sk9=EChNfZ-cN3!fFV&L%1UsifBGN6xWn8lxA$MG2-o9rBbrB z)D22m&q^6;MQDbo;eDr$W~eQp$@U{Sz@7x56GA5vm!VD&?#hO!@l?mr@ldx=50%SM zca_U~7*xGfE~^i6JM$w3SN%gYW=0Ky&_I>Nb+r{U$_x#SVJr>{4G*0h8W9>9Iwf>! zs5~?(L}BCo5FUW=AcTh?JPctyghwDy)Acb3kLN;Tbrw(8Sv-@m_=LgYQ3Bs!oUW4#@E_A1k;ypTw_c0VV8z{a}iQ={f6b}N5Pcsysfw09u z@wxv&7GDWbuT(Zf7TlT*kp?%2MiY94}GM` z;)g1W+iNRkl=(dLJ!A2U(3hdFLSKh=hIWO%34I&-F0>oMyAa-k@IHhOAbbenBM2Wu z_yoeI5O(B3KWO1&Xs^!VZ;Zvy2s|}>{GyV@T@5VOKZ{|WSPTmgXeNo8W-%-gi+-2& z19qs*7@F}#jhP248#7^N*iAHsT@b#^hCL9zsvC{rKsc<@7!Ij4vaP(sQI*D>)oCm+ zHs=i|!&)-!a9XADo7#%$G=`gmSu*W#)9^9jX5r@H7U7oRR^emAt;1~~dC%*(^jCHLOLp-n*goQqQfI@U;xa>mV9q`QaN0 zM(;Y)pX{KuVaRWxo&S@@TfG{xaF;JPpTpa$dv3`o(#fXp$DMQ1gRjWUmgpJzZm9)2SHWcaD@)8S{r&xSXI zp9^n<=!58o7=Rdr7=jpv7=ajt7=u`p3%{U+jp0|^lf3H)$k!Q=aXoAlQ!EV`Etw-A z8;0@^hB|)0fcy|*!cfOg2uRPi@D6scGy`H%JJaNn;|*(n9p1%|+zBzA4Sxf%j>Gxk z@56gEh5V5zq{xQz!!(15$f{vD-&%RQ-@|`tK>n!$$%gX}SWK^Cq#$A=AS0#-7cocp zh!7DYmWULQBUXq_AU1_~48&#-n?q~?u_eS-5RZk}Iv25P3K?+;iz1#pCE{a18pHWw zd$xI%$ihgmQ-ea*fAAPd6Oa*l;>LJ>8c8dt* z;m$_Lj2*HOGGoWOX=J2bq@xOCq=O3Nanz|DIi7WDi^o@!I;Swi;WuvBB~qdy8R@1X zd17q^jWT^ALl}~MBmE-%BLgA>BPT^lBW006k--p)A$Eb-6=FAtB@nwq>;bVS#9k14 z=ORNjjf{+ljEtN@NR~4s`xqM8A7UBAK@7>k4M-jYBquQ>CqwM3Yh>gsLNYSV$+H7u zKel0zdS<(^TyB_qPK4$zWg~MT4#-9*E*n@!CKpCn!hi^v-#&@??Z^`5w@YjC+pfI) zZkMJyH`RN@^A{R7zcfON)u;tStATBlxh}GT@p*mZhRBVPrIBTk zn<6(yZiy_9+zN3R#NiN6hByM^NQkFEJQZRD7O=OS5MGFNL2oXDMw&oO!fN31X! zIN})%cpd~i*E2jHfjHK{^Krsc-V%9|9kikY;yCS0iaEeA_Hz-+$DNH(cy?Mg@&d%u z>qzG-k=HcEd{tG<@eC|=r!;XwHL#rdCm6STE3#eVk-CZ~raZH@Vn&${BVRKfKZ<-D z`6TjbWJlz)$mfwSB40+nf;b5xy^vENPK9_D#Ay(xL!1F|Cd65}$WEQd?{pr2WIVD2 z^s3*UQ_15w4LlwM9{(jCqj?Z#>pVtH#G|kyFUt-}8oIEPda7*UM5U;eSd7XL=VqfM zb@S@RV$>P+s4Pa^DvR^U2}gaZ_g+u~i;wDDMZ?jU%3_o{iipK?Yb$1yNk^L#i%}(- zi8hKJ6+JrIINBuIG)KJrc&+vAC4zQ z%NUNO5HHV02SL1|jyMjBjv%h0!ZW^I^RwGKhbj;j%>$r6-Vk`pmgE)GaT16;8_3K7`=?)csWGc+fnTr zk6uMMMz79a#tw*CnpnY3&iQ!29dRsP1c3f3Q99Kkd)6{XLs*bD4i%RxN=%Mv8aA4njy@0Z0liV9FY*@G9~qK(1TFH8 zZea+$0g*;eG=$zFgq-H+Hacjp;~yZ>-tTmNm>@dQ(Zev!hf%iJpUg?y;*vSp4&c!p zDh`iU$6?%Bqu5u`Jxpo7j_!=^ihdLQHu_z3cl7({578eXJ`Ry=`y|AtAU+N88Hmq9 z+yL=8h#Pa!pETP>e|4vQG~yAZ{MitnHyW)kvYuxCT&6U%6Znx~<^N4dZDSU~Bu1X- z1s#)^jWCfHNz=F$$-sQ;%%` z9*e7B)vy7$&B%)vQ({M{JjNQSJib<2F&)NOvsed$G1ffRBGxk2Dt2tFb*xRSZLD3a zJ;corw?L%#Vk^WqA-)CiZHU_-Zio0zF4j?Vd$CTj6Jwq8lvo!A(~MDeU{clJ(Ff#U|4%(>{JHiDG)!*#;C8M zj(dQ|#>P%l9bc?M1@dD?)_4`j>YI5xCnr*!8*AMsj#hj5IZM!Zfs!;F=`up36a{YUqhrG^IZ_B$NXD}-$C3B@%vni!Z7v| zyU=%5>|*-!QpV;F2Ae;DQbCEoF*X~v13w5OAhBhPO$w2JG}v5DZ2C6GR`@o1D4WTh z5cjY%WxQVMa2nRWJ+_9ic?ZP3*%)2&bKQcn*gdgz8k@9-Es5nXjI8@rHh-<|g#%`X zF~v3ZNbGS9$;VVA*_!bK7BnjPZ0r?^#$p>{&&4*zo{zl{dolJ>>}805LHrxyKM?7LgfqH>1E}sZN3EJ)_u9v45Dv?2Y{#`z7{k?6=tOu|Hye z#{P=^4T}tm6&4#Tc328walqn)#RZES7EdnruO=}?CN0t~q80tHcy)=f_>B%R3uSdb zGEDrxDHJQBtxB>*K3IG@BSk@Cq}FMoMe(8}=}S=pmO!>B1xv7Q`cl-Ws4L9g9kc#-ihj zjxRc)s8i92MV*U^i@FqbE$RkK5iD_7sP;)%sP<`Ch_?(ZjbJ${SJYjnvA0emCD4ZD zXoJQkl{B_!pt1hDAc{sZ8c%_xu|eY~qS5++u!9{mDUUj5wR2_Dpy>3X35>?^ur$pU zodL@+b)<1}5vAH*Su};w*i5By8l$m!%`}cQ$eLX=Por_JN@Gh#<204V<_Dw^MQjJ# zqD4iEiBP>Mv@wuYQbQ-S` z78TK=x1#G9jcR`w#ax!oY`ou6!v42=1C9p)N4A4)(JELv891^XY>U?9W!VACi8NZk zPHbp(g8|6eqWc(+>tHF)7Tpg^mpbzJa1rI&URkuB@z_=6@iE3Djp5gzjxG8*^Y1q9 z_-xTe4M|F|P1y8cNKzz5KvDYm{T2orWnL+In<2TW=+&avie4|;T(qU=jiRkZZx+1; zOD|Y@!_o(qzOeLzr9UhKU>OL@NwAdWini%UzNZW1M-0g_Lm-D#3gn0eA`b$QwAL+K z^c^gN3?hFZB8A2I%Zh%Yo|A$m)N^7PtoG4{4O9PC^alg-cUXpIi~fXVSRH}c)C|E|rG6t5hu#AJH0+!QYIXxGTX*9-@!lF2>b&F>hjpGd( zX^lDwB&|<}<*WuA>mSE>Yr-*3&TE2>W4t}#81G<@vICYg*zlElW~(td!`z+YU5Lnd zF)S0a@vgAcajkm1N4&R2BrSC#A}7;mRJ<=6jj~i?woYuKz zYZ&^%_{9vzi(o-EP9a$xbGgT_h+j=m#jj)@Tg~MjzlM2iHkGNmK<3|L+-_<7W{t(0 zR2Eq-_xLrct{yO#dwga59>(Hr@m2BF@!R8f#Mi{{jOXHa#qWmYLRhHk7sEnTzZ90s zV7VNYD`2@2maB5{dvzA?H+^pUf&}tm#v&WeS6QU}cH1Mr1HALDyq zxe1n=VYvmC<*?ie%L-U1OkN4gZLqA$#rNtg{uck8&0dcG#aLWzuy_Y7G!Cm`c~1k2 z_3x|`w9+k`kYTx97siC0ShU^e-_8!0_Odjh>ba7|gg4L0BGwZm6x8LGam$MU2MTi8+b6iFt|ni3N#s66YosCIHJuSjZ*30LzQ8yadb3 zu)G4xCRkpD<+WU5u}?ro`P$CErw4axDuW->NZy zv^Q}W^Ai#eCsaS!`XkIxiX1w6T2CW)JgPZHt{_ybzH8V z_$fg-l9)LDtcoLBuAcZ!g=%LtsGRxV8C?CH)RIgl)FhJ@wp{&y#q=^sKItSDlR{EV zT9Q&yPFj<;q&-=fbihLO-VF=Y`v+KlgoT32pJ3Sw%g?aG-v9$Ig_OIZrS9~uo&yrlT8W6qHFS(#pz%}5!C&-WFHul z$0pklj7jRP`6HVoeX8Sn^<>B72`Y@q<5d{hdiCUqDvUL(S3hT-Ge2jrRg$Eg*+?6c zJ(xC1d9{@^%JfeTXFLu_4oseuEKQar2PFq5ha`t4he0ZUWP-#&GDG4a36Mlc7Dy5# zIhQI!EE z<;Nu+*{RZ1C+8&>FdpYaD$FL&fmFxT^T|cY^E4i*cc(QZC!^{D#-mg{gS>OfQO<%- z47M&yUa9eTh03G1wvtAf>yx+A(i1v`$ zGkKvdyd%TH|C=VqBzH1Ic0p=kAo3j{lH8sAo*j@{LTaU*X#&;nj_!uNe@XtvMCMmW zt+UDBA+@Pndm#CDN)4r?B!yBWGHt2XBUQk9J*4VAc+N9q$7lKtQ({V1H6|sgTz0Ij zpi#z|iV&13SIV98q`WC#%AX3Pf~io7gynch#8f9pCqn8BsTfihNL?XygH)1BMKvf> z33uARJx@syppe)E1lC<5^;9R%|IGfkUjvl&-(QkCmY_@#9zAp@Q|$;!YtM*>9c;f9 z@dWK$savT|v~i~|n<8uW%BIMgz3T>KswAbxQc{XyDY|1H##L_>$iCI}&iSW-)__#0 zh9fNzrx2`vZN-c-!%|}zj>A(Yr$(ekrcOznnkr9?N{vp9fiw`(Nsvk*l|dQ=X)vTA zkcL8{=xlf{HBNJWsqtF#G)24DLONM@fYL~#_f8t!K;uE6aW12A9;6Wljpq=Jwq3N8 zV+%!K98VFLiS}IikHzy+7cdsjhjdCdbs?lv>&W7zDV8-Lbs2S*Nacj%%G8zASt5-h z_gkIC{Idm;`nB2 z8^iG}hU0V<$L%!2AIX=(AHNCU zm=2|*3@a%eQ62RKgjKpo#p=RpSUL0UI*sXcx{*p_I-}Bfac#wnGRLIb6OHL+>E`Jc z>6YnM>0{Ha({0ji)9oN#3h6RPmqWS&(v^^|f^;>cYam?<>AGCHgGOWe1k>kEK2J#( zGa9cqXe51ZPswVSINs8L<3Yf20K<_&sT&L&%Lqq#U|yCTFm@agqw-a`M#a3e{8J zT#aF)%#8Hed5u@5XQpRCS^;V0%Jl3s>ES9^Pg>acP1AXKg{JfKzBXN$K4&4N?RP-R zmOG}LHeq5#$L7tO51w8zZF=*uGpEg%Fn#>!Y2%uAn=*Fhq>9NirZ+!*!i?s<#!i`h z#^`CsOd375`GB%v>fd{hp4NO;#pH2QrZw-?yKG1g?OZZ@^rWd1E2{jZ+3c~j=g-t> zQ_k488jJO6+*a;5vp%cQecI?r6=zSGcILj-+NTP6wmf@YVfy^^C3%fkr7uWdn7$}| zF{IUyZihtuMQc{2FHK*TzC2AYE(JO3VI2VLK-QzsWElG%#}1?~QZaUh)`wTF{jST* z2@}T+96x$`#dQ7mj;1wST~;xXN>+?Bo^IbMV@J=JFlF-ea>p?>T)yvzmsQM|F=6uQ zwSN4-X%(|3Oqn@-(CBHWSLhY&I&t*$=>{X$r6_EHK*~Y7 z3)0$UYWivy(+zWAvHMegLFS6>Lhv)(nF9QW=|x3fN$S@ z!o(RB)B04*seEYF9#FRl)5lJnGQDD4e=^r}y0lfZ7UhmWn+|Q-wr$hCZOaZ_+P3Q6 zx?PJF-P*Tk)4ltD|J44#|J32Y|J1JfKV{B5K<&%MPMb1u;=m~rCeNUHsf+j1YxAF2 zvG8K!Io_XsAg}R?74%-|G(DVNU-cJ{r5~^Qi>K00YrhyWuSL^%iv`-pQugm`dLyJq z7A}1&{bIpC1-}uRFQs2jzmncGe7Z^t;Q{G!NRL5!6xRNS{-sS7ZxkloFzB8qj4!)6 z{bpX{+tORoZ=|7PHpUvXDb`|@rj1N#mb-mj$ppz=Y*r9DapZOvPfcOG?h<(E4O`NMiArasSm~m4Rk|r9N_VA)(o^ZB^j7*PeU*Mn ze`SC&P&r8{Rmzk>%3x)PGE^C+3|CH8MkphdQza;~yafwD+htSnK^ zQ_fc|P%cz1QZ805Q7%<3Q!ZDoP_9(2Qm$66QLa_4Q?6HTP;OL~D$A6cl$(`Xl;z5; z$_gc`tW<7ORw=8M+m$<%HOiezPPt3DTe(NMS6Qp9Q|?plR~}FvR31_uR@N(zD32%VFO)BpuavKqoysod8|7Q&J7u@> zz4C+dqq0Z&N!hFXto)+uKc0=sr;qo5{=MX9_Z=43{xy_>7PdGnR~$ zku%neEo09VW*ix3#+7krJQ;7sm+@x;nP4WA31=diXeO2^%EU8?Ofr+oq%%q;lWCMW zDsyzEai&S8Y37(rvrO|$i%iQ*tIV;P)|ob$wwZRB_L&Zuj+x^!$7fE+bjqBV>6|If zbjfthbjy@vx@UT1dS-fMdT07%`eyoN`ez1Y24+smlxE5@gEE6NLo!1%!!pA&Cuc@v zMrKaQoSG@mjLMA8jLD46jLTGHPRpF08K0SuIU{psW@2ViW^!gqW@_fF%(Tq(%#6&; z%&g4Wnc0~+nYo#HnfaLonR7DdW)^0US(I6vS&}&q(rb`jhqM{e7D#VEA_099(p!+; zhD74I9nw3H-i7oYr1v3x0O>H1q}`Cdhx7xaA0h35^b@4LkbZ{r3#4Bm{RW9N;15WDLi!8R-;n-+^e^N*$oY^9 zAe$g_kj;>J$O2>$vIVjP+ErY(LbgG+LoS5ufb4|qg6xLuf$W9sgY1VKfE2@33*_aHZ-u-9au)JR$hSdW1$i~( z+accpc@5+{A?G091^I5s_dvcE@>Cy+mdyaV!QkUxj~1>`Rwe+Bt# z$U7nLg8U8SZy|pNc{k+mA^!mRN6331{{(q28v|I9_I%P-0=o;G&;gc;N@nK`Xu`uzFD-MaM} z)N4Th;=bi&-TIX2p+bf_G$=suR=c{iYtPDSsL4dv`1iktKBjcQ016w_pd)j&dR1)y zt4fA-?K`+zNw@OieLwO#_2Sh27ncnlIB-DeAi8>B-{L{t2bA`!ti+9KiAMRw)2CO= zVBe>#tYlF6z~Zib%KH`f@72AeY*6{&(!S*bOG~=<8fH}LCbd-4%2Fl$y0EHLmMtsq z)t`zC=r*|PpzNKW%*TV`6jiNXJ4;mP}iR214_GT%J;GjnOG*ib zZY9I$I}Io;Dc3MFo(OgIQ^}(JOX@6=8HV&K8CqE*Y75cT$pc(Hh+dK6F1`Bp8Z_Ma z_?K#~nEvssK(GEi%F9aFyG!rdp#L;slUlNIwObi)yY_07cc<@H-oLotfA*m;iR##B z|AIYA`j?az4=Q0VBNbw|?K+@a<;zGh6_u)XyI%cuaXH}aCCdcRUOccD$wlAF zr%llx6>hbEUCO!^)3u}p`+Nzi2qCIhuF}2~HPQ#f_y2$)^dfcBpB)o2!@3k((&g1~ zsJwjWfYLr?q@a~gnPN~X(BXieUs<5MtWU3j14#(T2hbxU`>OwB+?YaG`W%0iRwsMe z26peekK9pwOIJmzTvgn6P)TWj_Fa0E4j4Sp_&|z)Yq@m5P-4fplwxGMG<<+h?Y9q8 z6hzaNM;+kGfhDE={y*OC11^f|Tj2Ozu%NDqiP6|aMJa0mD`KTAu!?{z#g3?`D1uV# z3TrgR*i%d~#ukmnXkrqLU1N>C_pY(GXzVTTH+OfIT?9q*|Gf9!_a)JpGv}UrXLjb! z?2f^x^do)2D7JP2r`)Vo$!<0FWIscwJ~r48K%X00`37Yz&zU*PJKHU9bL|}xW*#?c z{+z$Fc(vRX4-Yd&GBEknF|v=SD{-#RN-o(}iq?mOh06SE(phDP@=g^RpsJU?4p`yigIhBn_R=yZVf|ta9F55 zjHBp_^G)UlFU%f6fgmDQ;#CM3;4c#w|6QP8V{L>Wjs zF~NMh#Mm`HDZUkr=^me&78}HWq{!PSYScg(wce|v`Um=@Cv{6yCtQ_DUNwe6#%Pv@ z7$Gf{(yFJHGyz!z&3z5-$UL7se7@XcGE-8Xxq)e*%C-)tclF*}Pni?of z25R)`Kp{q(f>~yY2SpC*Yi(deUL$de6PKRUwI{bl;^UKYD0h^MxZTz@-aoEyT$hBz zgfu4N)ozND!Sb+kSc9borY9zvORNUzCWF+;OGd`DxU}?Czqpj(gl_EcY6SD7zF(dq zr1$NcoWi|HLlU>{y2o{m597{45^!wESBcmGrdzwV; znVe)D;(cY@JnSq{21~Z7>YZ7?l;i>26IU}#m62NHB}1FtP7TVDnBmej&5+bLJx$L| z^E7Kg`^&(2IHrdf)o5WH)VW`yX3B9sJdy5FQynBD=4t5Veq0`!_aMrn1J*HPOdFJS zaLhP< z_F%(IJRdw|H7(;)lHwDcxk;9u7|$Iq&Xz3Kp=v!pl1rA$Wl1iSBdjNVV_zDSt9JD= z#dU&QvO+FF?I#6XC(DK3*MuY_^`_&84mD3d#fF3_SE6d3pUI`FW-S%amMIUejazXp zYcOBUXPa(t{X(u&@r8AwA|jN#ecAH(S}tAQW@#>k<;6EM5?r%|XI*EwPLs>JW-ZHw zdP^oSm`h>8jyW18#)3jPJ+!^#cby^Es-CqLSKmf`M6{lBLUmKh>9#RenO5Th&^qhq zI$N&llC>(6IOYn-c_ld`=O1FAS=RHZxpEbo)>~ImuL6|h)cVesOIOO;fH}JDqOpFy zM(grFW{<9KW0|pJs!ch2mKTd^^q=I?#j~Q5OK4bZxWO9l7r8{qtR<8}#B%M+%!_rQ zC32x^Sqmv;kBu=z2IoEz=DJL-R3d97&Z(I;jE!s?ZVkLrF7sa2GICbYt_f@8BIRrr zi43O48HABxVIj5`^sax%MQuiOn0e6vyQMbDrEEsDb?T>;uaVA=WiC?BY^-w8t=4gi zT*szLj38M9(y(^?Hn~uRtV~<#_2JCo7^0Q=1Z7$#BGkI@PPuS{tcB^B)=^~IJ*pD%8nzEctlPH1B zFblUET-;b?VGd6`ww0JLSe_aU9jeUBsPoed9%UzwwcegktHG^UR@LRaDu+Sk07`c3 zc@bguy~@2?)~xlaHRWt~ltJCHx?OJgvNrpWUCQREaeXTeAY^aZxOK#HZF~8)}GGV zn9ae&t&m*J*>*L38@+!NljEEuSf_8*t!U-q<#Sn_;h%N8$?a{qtj>1XtQ;6b%IBN; zP6Rivl(}`acii5UYgV#d)7p&imO)As+d=DA;>E184mkFo@NT8#vQ=`7ot2(#iOR|~ z?7AT51uMt}?K(PZLG$6C3RxyBnbEdAO1M>eF)y2yqawqj_!QtCps#xLadUau=Il0< zHG^j@vFpn=XYNPK)Q;Nq9&!!4GMGnTD_^@qh+7T0pxuzlYDrdJYFtmbcs1J&QT8F_ zP{G3T)W{ec9LSuRZ=|ofQXRRHtL;kaXPforMOX-@j`Bv0x>kL;R%P3@vYMc-Z`<_^ zU))SiySrtR>Sh|twW``~Mx9HwoYoow_%JmD8mycv47ELXAXjqoTx?&nx1`T}39YfHJ3-Lc2+XlmJ#K9svy z^s8E@P`R4j!6YVv`qFDJ9C%vGWnDGK_&9FmJBP=m^;GVAhsc|umV0th3>Lc^b8eAx zt*Y79$~rdWa5K*>My^vi+dAeh&gqoFt({z(T3$vB`l*9a_n9(d@%T4v?2@AVsd_tT86^P^KT0 z8E$U57!5(8+=-4fM26_)NwB(+bTywB7dP+V)_cot1LdMrD~Clxnyde19T@7qdE+mthg2*HC_~tM099kJkPBDJJr#NWoOKqlS}xyGnV*e!W?DX8;ZO4bFKUWOCj5_8W$SIJAmDEhu$;gfE zBm48*y>r&RDK&0@-Y+UhcARp$s$ABDD2F07)P~mx)yBI%Q*_GZGVwU4;DHX}S$BcW zGE~DnWo0>Z$peeO(mb9^P*d6}c~!SdGD6c=L@@8{Vc~pGTOKi_d(0n{w%0mWWw7e62&S|qkf}+gajZ{| zxZRMe*2}}Hk->bd1{i$L~-vS%4iqoUl}L+ILkSXI)&(O8^PTnr5?ATgF8w}r}%S97;7-{ z2#9jJ%t@Z|2bM~>=a=i(wC@x9_0@AwV=LwH4j!NjP*--6D`)Fa`<4A;mCv&%4(Q6L zlF!1bYZsAgyT5GH{v1}=tg$Vhed?L7`&)87kC&}y2$h%5oN(IQMR0#duGrvZE6T}w zdBZ|I>a{-is5L6rY#kf54cC&%EXL z07Cgdmy>(Sq0`)J@)m;iQqMBQZ*8lu+)7Yhw_=_+R36zj%GrGN1JiPlS91@LQFA$9 z(DrP(Tk2?;m9(D4s?maEwEB6?(Jq>`p)F((@4N<48|oVs8KxXu)m&Q1FwJuf6V^rf zm4k%-@iqL-pJJA5xarDxd0~)*%W&CF4s3QHyKv@?mWO&7&VHuE-6&%<%3EsYShmS= z9;`MpT1Lut8vOFCY$L_!eXaFsD??@5m-xknzA4FFxq_6J@|JZi*Fmyrt&BlNeW>*V zyMv4pYTvYMQIs8$!!+li%EQ~r7f`GZ85_9(;oD0_&LQO2k<4GNQCk};gGbv3kKzf? z?g>fC*T>^~#_{_QDKB2^@^vO<6GZjX2m3}F*k;ysFCTyUAnRqcdl$KpcK_pzghqvg z*nj23Jzj1o+lY#ZOHpP`oWqlO;F1UK%tKSzX(>oBkGUw9pCPf9z1X_X^pvr(9l~A` zi*GFO1s;QS9QBs#XB$U3uOBJr#?%CqDKULSgv~KINruWc0xY3YIimO`CORitP9Lqu zMA<-jeG}{N8y?BrTCB1^^K1hr7d9Vb{bcZ9`_9QdxH8gYX#Ze6UytLqu=0g5<@3aD zGS@v#h7HMUSo1Dv4$R|6oC7NJ9Kn1BE8k&a+K>UPj@bb+bhcTUJY?+a$Bh&A4CR!F zbeTBKenv7_MwZVFXU+HI9@!@8fG~ggM2C5PM!CAQd2Gmin2ekAxO{mB>RW|JwvF`* z3$T9RXTDyJ*8U3Q`-Ji;!k0;7IW?u6+gl%Pa{oZa&33TLz3tYxoRS7u=e68Flu`WN zpxga;;zyYzCl1@$rk1ibes(O`eVL+-Pp*m*gCa&s30OND(49{y!>kcHp z45T~`#9paQ~ans}tjrYzR@3uXK~AD^?;K#k8?Qe>Di$6$^7 zvy7YPgG?@QL-jGrEhe?Yew9J9%_in)SK}LX=6j@3>P<%Xr83x??6>Mwiut5oO>X&r zs-&FYV7Qv+rnrq~t>h{hw@qG0fXyzOb(N-GajTijug#jDno!eUD>oDM2Ah%3VJf4` zd{wW^OQ>Hl%{DW#UT!1o4YpzAF**OR5M_Q@&of5)*jD<;;4sdVZ9c{~$>@1LC9n=T z%K?oiv?Ht|?N1pi&wH{>(Jhx9FYXcBWyow-jCmTo%DIpFT#@@O879vM1l!D*dF2Qm z7R4pJdN6H9jrdC5ed*zIly75e{G6D1AhK|V%wRoLY$Dwq}a+xO{__2&=Zu@7uh&vIs+i!$7soR)EqM9-7*=C2lH-Q;(_^2Q0u z3ww1as3ZBh4EOp6m#9z~jvlezUUt7FW99ji$EG`EEaho$4u4sb0eAjeZv4PNl=Z-O z@4uBz{^$nJ<*H?SD8psD?`AVhY-V)j@QBv8k<L*Pro?}qkS5$_{eJ8iCmH7RZS9TOYCVC@#ZgyZ`W#p}|cE&o)_4f?DfUQpU;sVa-XZpPZJ$ za@NDMv5{G~2|X&lVb(IddNKRLS&B#H|B|)MRg02sTX|!ZtFEj8U-fmew(gPgJ8sH( zuz9*ox!uTR5vQ%{aCMVmbH7G@d99fNjtJ!EUt;-&l=beChfc=K{lg@;m}(J1!}Qz< z47cv2HQ%tZHj{wXp&{ol&1X?+3A|+Z+)qX9(zRCBa#C%6K9hNIyAfPhhRppkKIf3i zY`b!j$0?HA3%J5vrn-;glnH?1r``IYrUM?8bfm1wBl*TXyvGJ5cvMi232+B{hP z4v~zj4#W@{*5@_DnxE9MeLTh^Oa^ND>Oks!H+}{ymRW7(nSCC>wENvWj|ds8ah`*5 zK#VXS2{;ksyB&rQ>j5!Jh6;amDEW&>FZ4=KNSGgIcfS7qOq+(68K-9Xltk8HojXx&ODxs^8_yJ|D2JoBICM`)>+I>_Q= z^nf>QgYENWYRGQ?Eu>m&+pg>(L)L%IESdb}mz}JI>?MOVc+DWnsTmg~)+l{sl-92q z#d;`_KO!Z+$)MaiRBoPGe%D*AUSApijdu#=4ov_@FP_Yo2P*YuvKl^BhL3*Z^ev-E z{*-6dx5Sitj!I{3F# zeg%!MdA@k?7;0{U^;b2_Km5)Ek!=iqIeu~&{CLRF`hme@iTMbse2vyWir<~!0bw3q zw+^EW8Ncr9#kZSs_81{U_`F^SJ{ThT$-~&ttncD`jFN#GzFwdlK4(69lQ!AinfDkg zL)3e{RI=^o6J(6~uNNcxZa!HC@d`8gS{{Yvn%Pfz!${V-g1G|966S8V`^^1Ju3zV+ z>s#04B2xKEv+{ej)}NsB_(Dc#to*D{LRV+sq`1UEsR{Dtw)(H~0gORIhblj9WwY2y-(*cO-66>pQ5Xo&XBQuUyLQc z#X%hmsj2D8BPZrW)rOjHc=B~xes7nXXx1Oe^q4KJ=UP2lt zPuWf+_@SGq2!3>3`8uC(r1Hrs_tmU(shcvk;U#<4t7G#GBJNo-$CmXqW{=x4ZkzuU zmv1F1>FbrRRx5K#JW#6VE40d!N@~UL%FXa*sO)Ez*1_@W^ldl8g;aP9KjM>hW%EF8 zA^d-~g;p(#n*3YD8GWN@M_17y76W9LX>Vu{_A)~+S)9Ll1 zM{|%?AC1>J%HS{ibc#w!SHASGd?)&aQLp^8pZwyn@-On$2I_^Xu7C_2@{;b%A+Y>J z;U0tX&C&oauz4<)YaAvCbuUj}fnY7Mfq3B43cEE27iJ z7PGvVjrY4LU#C!iv{QZY#%x_t-CJVJs}_qbRy-g&GW*Jw_wnh9>E1EFTJU8r%u^RG zp)13CFLfndK6d#?$BSy1Qk|!~`ciBBPFGe}PFG&X>uMrR+9;DY+NABQybmv@S5vC5 znzXdb{E9#ME1T9=KHB}2?W-*9-;?>i`OS5frIp{dR^JzB`5SrVYrBqor<|@T@BY*A z3Y{36S10P+bsjpM%XX8tok`o)q-`T#nE3zsdQthZ#LeSMtXJ#psjI8JEOD={wyuuy zrbKOfleWWbT|I{@I$q|}G4rZP+bPo{+WgAS+~26F4jA4p`0}zeQOd#_fnu$%MAZ4} z{LJG+%}K8d6&~|kzR(5ff?dAUwa~THg_vIis*N*gyC|;%)pj*$yP34{ybE-m_){0I zYpsjW8Fi7mDET%}ZFiHlhe_Mhr0s3eCYrQNOfFT13h(c%>mOLRzF+M+-hqL2y!D=* z4gG4@^YY93tAO19%0KtN(&zqHzS;juZDuE3tbMz?=(?K!z&wJwYgWzD_0Z9X1e3N` z=Eog)_o4i~bmfaBF_vF)SA+G@CD{k-r%SQ_gLK^h;W1O!-=s~NsT*k0CMyMTHIHsf zu&kkMef_EOEA0d0QxE8dinn#cbi*}gbs6H1f|2b)jcT8F2sK9Vg%ExWJUuCmH!Ft3 zC-q1p>%Qj0j7c|wg=HMx{5VVZff!@+-)jD&bfcB*J~U}lX6imNY14RlY1T`Db>q!% z?#YB=s=AvRC`J` znx&@2rKItzxA9H9YJ1kJCjXPSVK(uqUyXjs`V0O;`QzGN)l%iFTg`vtpqr-qRySQYLpM`5OE+8hoox@ru6)V3|P;HAFG zYgCH8Xa0Bd&yVxt&uQJ0Q~I<^NYy7M^hn@W<711Jv|YlG8pF>|C-Nn=*kZ-3VWQ(w z65^85vPDzJTx_v-%}d(89L)NM<}C-t^+`zN6~85HH>SL9G*S7Se<2C~rZwRDQ3L5!i=c%#Kg-k^k8F7gHEGA1wBt?>TZp9ucqn1bSpbno`12FZ_k&M|*PmE6Y9H*kYb9 ztR-I#5U>1-x-q>^pSYAk=HX9VL$m(Oz}@y*xdOT{Rz>j)*0*bw_o_bjMBF zPfgk{P1>oMK58RR>CW+qqC2fSqdRNTerD1#W~a<9*-!VEZo8?#S0*i^ccRj?YA@ts zw`qO`KUuj9;RE~S3;OXppvL&ValB+9IfWkvefiSnZO9i>w02f=zOMT_hn$^8>h9?N zF*ziew50uYrbk!d%-ds~_vK6FVE7bpYo;SBj|T3+8A-%XBS7TW7nC^98EIW1H3Q?b%T zw8h^mSKigFdi@68l^ZtE2L=Tj_{FO>?W0_h_#yuNMc;b6*gNl9Ut=5X(p7nnHb-LL zG~RRDg+ZB`>A-&J*w&cdwQGEQxA<=ROO$-;{nBM)c%yFb_(7>0gKJt6npr9{-^?tF3F`Ib-PnT;~v%6w1Rc2nQ7vzj%}d^@w)EIB%WszX8u#kM(brmsn)|O)*idz`hnOLt3>ncTp1cYGeM_c%{Dr64<$uli2TO zg@jV&FgZq8BfNDd>${76Q&Qpv%?^(UrSs&!GkVNzRcb1m!WvQ096z%cb{0<*zxbyt z-L{>jvuCvpLRPU0O=Mz{!fQCl<+1`#4!3!_LD>0+oD zCB})b#8fd&Oc(RT&tjR_AU26DVyoCLc8UYyw74j4iKiMzjaKuv<{eFOO$kj+O&v|R zCPEXbX|IXZ#A&)};x!4H-kLs|WKBQKXw46rO`2_*9hzO5J(|OsW1171Q<}4y^O_5q zOAh%RDmqkhsN&$}P{*OMgTW!hA11Ck>PQ54e#sbX!cb1Om|lIZ*|_o$uaF4lXe=1HIw#R zlXm*tV(*EW)$>))FJ_9FrhH3yWw&;QNjodEDgVoXuJX%|NXmeDrcTu9?jl`DkFqXUn2F==PY6S(T{R#%P-O6*zH z-xXszMJ9KP8{{09=IrI|<5^dJB2+KQX}x%dL(W&0!c{L*y&NZW%Ad`wUf!gglj&hz z(wVn>%O!cqx3Xy$v1Eqw&QImvT{TC4aBS^#!|8$3sp{49mv=hn^w{Z%(?gTyZIdJa zSIOjX+oYXm(o8WqJTf`DnjGCtj#b!Z)|q1U`j#`r`LV?kyYn+WKDBE7PtFf*-~4Vq z545}nzE&SzA5^msgU1P_Q5n_Y1s^m+Yeb_1I@uB^jDAQ(ItF4ehGIA}F%f(4NQkm72t*eQ!x#7t%drxx zu@-+|12$m`$iM7%?8G_zg^QpaWobuQ+EMl<{>B~L1??$Id&(6-1$ZF{?a>o#yW9_0 zgB>7txnsD3Yq)`1pg!fOPq}+|AVm2BpbyFyh8Az37~aKuCVAg9_BP!VFNC3iM$`@~B8XE3!;QZ}=hxozNR; zFyU)_gKxq56=#8(SDcG^pavCx#3KBRU$7n2qvCGt#eN*bVI0MAoCNKucos@N7jRby zXKLc?3?D?HFUDa3R$v!c-kDlfdK zq)%&hLwEE-( zh*K*Tw6RuK(9T*TFbbpbF&KZf$g$Q`%)?Ju4En9s608Eb*II}5*oY&z0BT?B0UqIr z5HwAAIv^hkfd25T1|8TJJ?R(Ex~LCt_<**1lCvjc*)t5SVFYdWBxg@*=t;XhX}2fs z_8f$v7!DIY0PXSo1k~B{3w(`l@GWSQC++a0KRs7~@$R`6e}HlBxf^@152tY*H$h)} z(mqf2ThIHTzrFH<@#$3vj8CtkcpLAaIBFsoT`&yP*6T+s2X*tJue|=mHtYb~_c{vp zF|U(g`(9^p9@N+CnGm(BqAdnv1{kBY7vX38g5N+}Y9GWYTmyO6rax*w7orY*QindN zQx@b`rwO7!P3w%rhxiDLg*xP0X96aHeCzDQA<*A-j^PB@Mx8Ub0cui*ZP2BnF59R} zzt;^wAn41wNl3*fn2wp4jX9tVb!kK0)u2D>(uTSlum}5a0BpPNBO&S$yB>9~R}7`W zHtMmz)Jwx~OaXE0&BZ({z(V|l{UGmp)U+Not#=7mK%MHlpgpKT{ZH{F7(4YDJN3!6 zJ~8W)YyIy*j`h#tDj4(iALA+h6{3L#j;I7`+`tPIzCnF>!v~>=K__$uW28YhbO$wR zFc?EYdm3b7G{#^o#$zI;;RjH&2GpqmW2eDI&=(DE;WqvOxiuiS2J{V^7v9v*o7#C( zJMU_!fm$F>Z}RjeKkvq9istYGW5kk3nrasiv=P{_M4>fH>O&d|uM%1)Xd3eGH{s;&C+=x6Ikwc@7Am2va(G$Ip zh~c0Oji_BCYS(B17-NkX`;8d;ji^T>+TZ9V*mmQBa6%yz0kvpc4Q}v2b<_m8H12}l z7z(!2I1?i<5+C9td<^=vG5y+jDyCsNW`Z0VlS5* zjP;taUNhR<>?WvvGuqs|2xw>X_fZ;byE(OQUJnh>5RE{4o73Lrw`3X?_=H$`*GOmGkH@}Amc!VcH_!a|o_azVCreM3i z0SH77e1Pw<9EU+1U)J|4f%j1cWuoH%&C<(^6p&TlrGT63(Z5tS`25M@ki~5K}KYWITpx+E^%di&I z+Q7C9Td)W0Ylb7B9}Oo#zZq`hAKU}=FgzEcg$9nG9xa^k4yZ>9#$St?@B}%uAcq!> z!1!y?9RARQG1#IF;?Wbmkp%j%1%23perrLkT1>@krfsNaYueJf8CrohwQdjAZ9N3T z!MJVBxNSWeA7eZw;Zsb(d{Fb&)Vwt{Z~Yq>$E~SHYwFRO+P9|mt*J-r6L=&<1nr9` zk8pHB1}5W2EC>A)u@iehKSdnEQLui*X`BPKi?|OZ-c$T5gwX-{LG6r1P!tVd#4wPP z@rDqQY&$Xr)FYC1M1F(mn1wl*2ig)zTOw&oBL>hyOSp>%c#LP}X|!nC5lx(E#$Gi29_@v?pe@l25rs~O z1N&=qchFza6YwRbg6&0ri<$Tiv?uykEWsKa#woDv80r*L2Ib+5DyRlGu4u1r~fDo{Mw21)qYr~3d z+M^SwV;kz&hBmb6g+AzuRP@In3`GWLPaEpoW)f&mn<+xHeH-Oa0hQo_&oC3SF&FcN zXvZ?`+(Ey#s|jk`jxpDc@z8EDe#7rVwCC^JdxN&Lr!DPiOZ%U(8jQjA>#>RH)_U+m z0D{m0)V9L`P|pt3vjg?)NPl&togF))E4oAZ^DCgX9jR?cYTGFpLopn*v(rdW>)3pt zzOjX%#V~w~ahM2>DV_Pd&LvR_WkD@Ee-7H$`8#}%AB2eW1Z|3I26B(nV>veCPi)67 zA-d4!F0Bv-`m76m)@3hF;SA2>q7Ypfe_gwQHg!!vB3Py??dp01f8!q^y3x1Y(m;Q9 zqd&XR&Ui-@LkW;~JbA}EqYA2l@gE-mwja+}iSLBY=mKgLPrUd67!1Zn{0NM~XiNg* zBc2+>e*tO`KOaBhC(zgNzhebff&PrA{qftd1N2=y?T9~%zisc5@L0|QJ7i_m@RnR{@*;jhj!~#&$o_~Pt^<;ZJsbf#J*OTq_JPc~u^PUh1j?m(5 zyaVc%K))vtGl7^1#7yu+9Z;(T_QeEW1b~_)1S1OVK${a76AAI?iQb@w3Dhuw8YT?E zFnkQ^nD7Z06A52q8fIV?s8s^_CLF{O9K#9F?+G_?8+So%5~xiAwdqA|dQqER)TS40 z=|x+5(eJ&ePp@il2es+tg}R_Ey_&%fw51nq>19M4Fur?rLRWN00%%LGG%&_{(UxAc zrPoIoiwT&F&oBkQU?pfrFZ!U@1{}a4Q1@Q6r5F9(n>zJQ05V*_Igvl-WPBcH}E&^;US*jnGlHuPzXgp z{SwQdA}WJ%km!LLU>qc}-y}9dQ#1$lOAJFKV!${^j71mFzC?~SiG7iZbWp#qb;x5O{NI7p-Jq?BjE}^Vpr(muaTB+37Z30l zjFUdJu@7zR^A_F#dGwi#FEJJ0f*SW>+kF;b5f zdvpVBPwIs}paw~do1~%0zzB>2$HyevpTxLH`Uk9?46v3@e4` z%l7(G|GohTLJMrfUR=Z#T*ock0r~f(-}^qnb0PX^kPoF%4i(^x%Anu-xq-g#$M*Zx zf){9Kzi=euQ;<);qxe^dlqw*flsF6rZAY^bUqZtAagcb+^{gc`g9E(!f?^4&IQfPFZK!=R=EPJlKHID;Gb8~@-wsP}*;LJTYgYCX^cHNdt8lJ`JwG(rL?j~xX<*z8oP;@;2gdS1ju`_N<2U?{6<7^&9=HKVa2zLb8q|9r z^&WT$S8xqCLGA=AbV@4F;VPVz36zAm_n>Fo4_#hav`@(G~GvybtaL z+Auf?LogiFfAC0*#u&`SuULkaU|WO9d+=sZ^TCYm!PI&%`47H|TOiND_wX3cgdnsS z!nhgo4l1A$T;K}oKBPJtq7j@pai!=4H;T!VZl zh(dS|6+x|rGfs!I&EbsI;Y~oDhg0Vaa?Ef<0kBSn7L1pScR_73$UCDfDu6!7Z~=Xg zK_6rgGlO^;bxz~H4vftV#%2a%Gh+vK zV;>IU2#(_v&f+gz!d1}k8SG;j)IWpcLk8n1gMP^PSBOmdJu^R?K>ugHg?F$EdvO4V zaSSJM2Ip}RS8yG-a0mDB5Kr)22owEmqMuC#Q5Z#048>6rrBMzQQ5jX?2F9JKCcID= z4d8<&Xbyh_!hjHjAp%iogZAizICMh~^gMJoDZ5QZWHBQOddVJs$KGCso>_!`qN z1G6y~^YJ5o!Y^2YWmt(d_yZfU1>3L_d$1pea1>N2J#q5jFF6;k&K;DbwC|Q`9Y6h zklQHwcog}JBA-#@^I<$vkcI&mEX3$$pys1P(HfCptc+&tjb?m|K7;c@eAEi<&;haN z0_D&D#vL$LK4Pql83JlP=3|Tp?fSSF%A+D^)5ldY6N~UOe#KHD#x?@Ek8J_AH#Qv9 zbu8N%djXemO^9){V;t=mM?1#Rj&ZbO++88YYv70iC)N2ZD znZkCau$?dH?=Q&l3u1qfh-A>uUpgQk3ZgJ*`Ge%N3p2@e<{;4DGc$yk#h=eAinsAD zO5iKZ#XKy)A|Yn?0o$3)db3$?_6R%`;=4j90&4r+I~a>E@il1kceHs<8Mwk7)lmzJ z!EtTQI&1)aKeq*9&=wsKi?g_izd@Vl(&q1n;bYL&?`iAzp9nGUeYl_+*v>q*Gw)}t z##&I@d7FfoAAr^{g4)h!Tk}uiDz4)e*dKrBhJHvze^9d@9tg1@9}0kWFVKQz77Rxw zKEQ`U{P+$kz!_CQPCuRlv46acyCBv=)>}xu7LLaxd@95u;xA(TMa5APrSTQ!g8o=U ze=MRueyWXT@C9x9DF_>}7yEGtM}_#g6MBRG`?)V@&(Dv9SWFuhGd>p=0e!dlb1)bd ze~0h!gAl*e1pC4-P0$?vxB%+&3vKv?HvGc)`gI^ifid_i{qigA`HkFvqwT*{1>^lU z9Ts8*R)IeGjXqi819D$tKnTLXzOY33JKD2k3$_Wdl)qmZ4fchl>fm$z{0ouH54yf(&8X%wL%Er&;z~D2P44tmb1O(V=xvIFd3g=3h2M(Q!x#+e>wfK{Fx9dDuSA> zNC0`R_z~N28MJ8yZCXK_R?uH79Y9~Lq_0*M1LI>Q`|8T~LEBc+ww2U*C3Rj&zpeB_ zUDSsWoe__o=nclgO2)#<{-9^Buat2SCt2KU)2`FFddt4MTpf-aD^x8fcC8R zhAB~bXeG}@pYIDV|Ay{mg54TCTg85oJtpuMYU?`ryHHSJx!0JLrO25iPw?7(j9 z!$BOuanSbFv~e|UT>TJ_@f80Gv4*}{lOMEw4Q*dT+t<+cHT2CIa$b{!N%#%N@LY(s z)L?C6P=mEyK<;bltF^t53UXgd?rRxuYe(TDkpEipUpoP`VJ&S~OP{T!&(?kq`fV-k zSi2wOy_US!lK0y4xCrXI_8Q22?K2_PaZFfO9Hmee6~I2ct{U7y{_A`Ygbs)WxvnGE zb>zCPH)z|sexT;-24FBI;uCy^DfklPyN-OzH`oY!3t;*UaLn}4uB z{*eyGjfNBRzB|Z$ zJ-M$Z_x1fT2-JN2aIkN#r@z)u1G%mz*Y)$T5I^HrEWt+X#W|4w`pdY6o45^fUjG2p zdqWYB?}lP{7w>`GHH&MW(}Ot4CKE#9z8+s zoBM!%+MEGuvzh!ikHTn-0po1*SNI0BV>9j8%zm-?59|WDZzlK6R-o|IhjO6Blq3w{aKu z@vjhDsrA+(cnj2dEBS9NiBhNvH_(Qy)PJiN>VS4^WxQ=A@2%v$mAto7>#co}3iiXT zBSG$4KLa)1N{zQt-YEpKVl`wZ!3Md^$gB~`fj~~>$rtGpx#>_;)xL3ilI14 zfLd=W4cfh}A}YfLu5bsrZwp2bjKxCi1%0=j{eQa;=!@fN z?%QW!4#~KJSIDs*~gWPwJ`;Mw0 z=N)y?5RK6c0SH11grGfoVi*`FI~XTBKExO>Ms_epc5ocs@i`bDJEr1i{E8)Dtn65h zRagtg`VMm5LC!nKdB-+f5@Kfocz|v0q+fSV0qxv*6!gO`YQL)jDuH_Ms)kzd1~uJ9 z{=1rjvAD|*VTeE!+JJWK>WIM@4RYT_?z_l+*BAI2(?H#KEdp)WwHoWO3FNwKC-z`J z4&pB`zIRjO-PCxu6N-Sby_>PUo3Xw7eUt&?VmD)YwjwIE zFXL)&cYKT=K`r;*7h)gv+1C*C(?0UwHykFA`@RoBKkfSxQ$Zi?qc;0yfi~=$3&z^M zrC5$tV4Usy1E+8ef8!r0+am9M&xP2pfg|1p`R}g`SCHra8laE%*Mm2FU_dl_BMJSG z25P;3Foq!$AAp?qvw!UW7Bev$b3ncK|A2+~8NXl&eh0blKZJWi9H5Q|8X*>=Kp!2T zZw_1%;$S`$1+_m&?GKXs!3rSvgXDg&I%>fSbwC>q`azFiv_vSv!MHg{?guk40&MFb zeRFU;CgBs1|3T_}kUAfv&IgxaCDvdAHe)Nc;~112pW@2zega ziQU+TgCOrC$8Zv-LGDMM3vskOe9;x7u@HMf&5ped#>%mJ@J1t$`>{Zf`?1zAg8Yxg zfZ87Gjszqk87W{NI5rvIVm9VtKFIqRc^~@?OR))mg6$vMk2AP{%eV$5r+;uC4}~~h z5R8-K?jX1Q6&Pj4U$yhnr3e@~$Cy@KeB&32IPY%Lxm@pC_;&U)gPX3M+SdDeqfX!f> zoMhiPxf|qr@*v3bBzc~^h1;OkC#m(xM|gr~LYxvH_fz>$3C+H`ktZB&$7+4_0a*Dn2t3d=d+BFvy73m&yRvA1jh6Ex9|=a z2j@$m6v+L2IWz?IJx`yXXPf8O-CkqUDEYamSc7~?S!pMWv)7j5`! zHs)eJe#B2$j9no2zs}%1F5(();x_&f;sW_!ApZ;W(*r42Qw~b@7=HmjoO^?w6?dC33$+?w82@k~6A+{4cq}9rZyQ zE;U9o_#pta<5CjH`x1FyBJWGXLA@`H#D^gFOJ8CpX5(ip0Xbb-iFMcj^1sABdWk$Q zF-|T$!c+V!#AWJynOrY3o-Z>-E|c?R#>nOOK<<~TqZYhS2le2MMrexW@P{5jp!SzP z0JXck6^z9z#nAxKpl(+fBUh$^adw5=uaNr{#>W+Mze4U;$o{Q+yS9veZeuTtx)+p!CKK<-z`{VMgpdKCACxJI7W z8iH+J%fK8^uWOfuxLy!0r~yw<_v`i06x8^73xt4ic)c}f!}ZSSitb22B9br`pN9ol1jfvD^1n|0*LULp$n*L!oW?m^z$K9P4M&thSyVtJkn0Uscz~R5kn;_4 zzCpcjQ0E)e`9?S*5Q!MHLr27-3%Y^aZ+w7RppG}F#Z4`0gFd>Mj?b_dE3g{tK<+oG z_f2xYN$xkv{pLxW0r}q~|C{80^DZ9XF`fx=OTYmYQ5}qvTXoR@?2osa!4CnT#<$4f z7Wv-lj4p^r3I<>>hG7Io;Uj#EuP_%Yu?CFkTN|+j+prURupfuO__%cwxA70|ft+uV z^DT1zo1Fh9=fCr#APS)x^q}AWroaFG2?y~=h}-nlZQ64?5* za6~bb0QuZu?A&oi6_EQKH<05U>U^gyI)FOgp~iQ}^G;9n2KnCUhcuA)opG3m$@moH zdxw1Qknf#on2uTa4)npD4LB#nKLx-x{|N#8_sq2zR$S6KOW?M{}WK}`_%aU_n40#u?V!`{x4XI z_1J_zu^o(``&aP*Pw}r157^cN@_tYlMe#N`#ylYZ2Q^U#n!*jQ(9WyZ-b3ol6Q1=H5LEaC@`@wG96yo8#phgedVK^9D4_ATq zJfuAjY0pF2^Y9Q(;~XyFGOpnU=&y&2t%r=QN3`*g7PRjXu^%z69x<*SF|Hm}1Z{o9 zn0iDTAJHd|qQQRgr~_g_J0HcPCwe0ZjIT!@VhqM&JSO53d=B=DM_+^7AJO(lwEfW< zoD|}*28@r#LFj|Ypazd=|6|75W5(EH#@J)V*yCqHJYoNNLhet<{YeRwLRpai6Y_sj z9koy!_23O3#DFpMgni;kB9g&A@nir7gZ_F#?oTFwG4+If;tBopWG)t95f-S!FQxo^{4BQ1@rl{n`?D`V?$5~m8M!~3j~_w)FOU$7Rm;TdD- z8Dr?#cI*W0c=iC~{fxYyllODR%X9XL=SA^0$o+XGxPWo;ygt|`o;L=0J!hYIPG3GZ zpbZ!+&#CWoa($kO4?xb($@w`sKc5KN_?&U_{7WnZc|Ir4=d}CzQY^kg;5m6P#h&u8s$(Cl~EPssv%bm zxoXH&L#~=Y7|;@}K<=6dM4}(aQ}Y|xrslEGI5;B!T`>aFF%Ju{2tQ*v)?*X4U>kOT zHaP6TNu0rXT*MVz6BxY{*J+jLOXOsXT+l?dZQ19VhpIQ z<4k;q@9_f`f?OSc#Zr*7<0?>NM{4XydmWG97|7R=d>zTx@d7U6Dy|DnzCs|sd?84} zCs>9Pcp^0UX-obFXb$R~pL*vf_x!Cv?)k|*Ke^|pp830j{PUB4e)7*h7{ic>5AY#A z!W{g9-?0L#LA~>D!k?ht`HzAe@{@1=%U~?$e~f2BQ$Qd;oKOTsQ4a2C3dTkO`nW(4 zTA&re!I&-(jkf3j#z%oP^v6JuZvpZxK)wYS8wEyUH0Xl@V=)hmhXU7xrXbra=!F=t zUljZr^g%)DUhp)|f!qsT!ryp=r}$TBoE$*@P6a{zol2rKXoFKlRE7&^hf^rX+ljoL z$lIwC;?ND$+bJF7?lcM?V>~9|b9@Q*O{Z!25#;B@7q3P=y9*V=yLb=pgWL<1g*T{2A?i_xZ5H|iw7)QYRM-OskaOW=q=4KD z4*>NpOpObV!$dF!3zL80FYp!SVm@d?VU90_89Rl41MMh$3glgwybF_e;hVUPySOhj zMW}NTaxYQ>Wl$c@s0ugePy>xYenr}$BRYdIU4(p#Bp?ywU4*=gFqVsah>t+ci;#B_ z@-8wNpJEEAeUT-g&P5&yjh1a|n}dGSvc7f}7GMz;gZ)^$3Y+jJwqYlBgLZ0Zrx>G{BJEU7eIwhoI9C`q06i`Y)N>Eaf1{IVB z6-C+vgmdq6&c3dD`^U_0eb4v2?;7{sUVBL4zA4-{h5M#>n|{2*Aj~So9Ar)LJ^uz_ zN`0oRN;h~kd=!NK)*7aIfy5*wIVmxlRCX#=d32Y` zIjLk$RhxP=pgppuGMiKbkulY9#xRcen1q?6TFDM}vlsiB>L5qZcPf3SI)%KczC+Gb za;Cb^Lv)?$Zyxg>&x0^^1m2OlQ?Fh^R(XI zw2SzFWvpNymxC}}1i3KNbZ-;SW=?Sjy`{5b>10nQd-^2Eo?iC!vZs$C8u`;_$IhoO zOi@ZunzFQ@3q9#WKkRe*p^QM^>19vv9Zs+7^s=V6E9uv;mJP_2ek zBJ`E9DjgYvJTTr<9H95BV~@1Ia1$|dXCg{k}_9z`k zmBfxjmBk&RYEhR4G^QCXuq#orM@?cX&Weg>E(=IN{wO_1?L@~>az^PmO21LZILT?Q zawiBgM_?~9zl44>rz8#OiA3L-WzKA`GZ&{6y3SmV3RLC|s^k61TpQUl*QYo7&Abt3 zX8tn>v*;j8Ma(A4C}hsE65VH!J&W$MY~^$G?04XXeg|%tgtT8oeJ~M<3=ZzTpIRA^Hs8B75`&{tCiZGGOknIP;Y;cvoIAr&n$TVb&zb zoHdrh$ey)0I?q}IJCaq;S?x$x`Li~qIi2Z-J7n!cKL+3)Sr;RBR=Kmvo%LhPChHb- zo>k9TWzTw+^ZdwVZtyd|a+}9Nm`%QH`pu@_Z2HZXn|u`DHD0F}C9yBr>eGlO=sH^q z+&h~+$ku^Qbfr78XPd+tj`DjDW>1aTWpBkW%p&_X_F_k}>pi>d*-s*ScG@yn6gx$GWI1#_81+aSgH|7k#@Eh(LbC>(b8zXOwyfIIB7Wl8AM4^Wu6smq)rkw53V%pi{0%wr*o*nxL2 zr+MT&&MCe{*ExU0yO>k2)fNxoj0k2J;~JwUFT{+ zYkJd{{>Ytc5JMS`?77CE`&=KO=UmrVG zch2L^dD_w*_sg@0eK<33BJ65jJ>`8H^UAvp`SZ%3cPG2?KIAp0yylem3}%)0d)y(f zcOmbu{Em6$eaIg{m@f^o=gUbR^q227UZ)r(kUyXN`OGI@E9A`g7G3b}=JRgk>x10+ zreG%dma~cvku~2ZY(nOIGUt;ypT6_yIiH^MeaCrz;1XB4&P}{0`DD*`I|yHW3H`oW z8)v@yKHj%if8=ox=8r<={1vH!?D=cZfR?nO9UbU|JLDgL{mMU-5sb!rk$(xY=ikT{ zwqZ~5f6f=|NB;cs=QpSPI?gX=ejVq3fPVA;&A&ldK<)w=$WJWxqCin(El`?r$Xr0? z0x}oScL6;Y&~t%~bfzmku-gT^8wL6^kip1aU@lwHV*y{m^yn7$zW7>{MnEkNmOT)mS-W?Mduce8UO!94l+AeU7ywu`D}v=QAFvWRi>ze>o7u{CNB%tiHGRL@2ATr?Xo&RHVB;}|`72cpRZ_%HD=(xC!i|e@fyNqWdQ%GP5OR*b%2X|Op=f!niT<+p> z7ni&EaqMx4)aa)~3r4btUARvP_bK5%CETaPIWBRP8~n_#+~zL#F{2V@R5B?kNke+< zR7rO&>8>Tssbpb_QVBCD*@Wh_qAl)PvJ+kDfxDJ;*OFrx%XlVYP9>)@gIRoxtbXry zSjyR@bXm%~R?6o~nPDk2EM`11ufKS+juFHDo%I-wxWp!Rw z=Vf(XR_A5St*oqNZ}1cPF8eFLqwlg0c*I}GUiNVimW!kWt#D?!WgNzw$|ofsGMBH1 zJu5GJ`DW<6e0O@G=kooLzx-gvW4FprVLG#TpAG1_{1+U+Ipt+8e}dDTMbG7BFK-%2omuUFXMfvkcYC^iwgFlg7>^a4Qf%B1~f+A3ihRfoE7A(@D78}bp>5l z@Lp7SmvOwuBxJ9!hC}GEVlwPx#ik6yTq=IXIWD31ih8dod&RrRUQzanPkA1MmF!2Q z7f4JxGU5)EqRB=K?op{Wa#xbOlH8SA(~b^wVgRyN8qHW{GMjlU^);vLBUnUg^&utgPS4DM&>ceN<4F!PXdc^hbrsYz-G3h>nc0>4%w^R;x@Xj@`%6q zmnT73RsO2-SIvxWtIAn5H~ERBFh!8NYCZH?wJSaFE>@Mb>HzdyRpzQPSCzS{zN_lF zs-CMZVhKxG!D>EaEgvI$)lD2nzi*_*nQt`1d-ldM_Hh}RtG!4PWUrQ-3}ht+9aqbX z{M8ClnsQX63e~7VXY6;i!3@JW)nu+_F4ZQX?`rn8nyl5<@d+|k+r|!d^Et=3fNrZj z;1BF`HTzuczra8Keqs>hWpnjKrPIo#zbZjj~%HoAHCJkagC4BaSi)X<5S$B#(oa*72j}zQ`|xJ8qb5U zW(0|NnG~2y&9um0Q~sK-Qvx|_>bPcQ-ax-K-$d@3T^P~YQU$Xas>(~-HR%r#}M zsqdP4uBqpmTd>PDx3iNy?Bxp%AbZUt+zi4u_4{UCocU%SX7d@}@n;a$lDSqE>_{!y zYvrUM#VLi3{f_Femi)D<(tyS^qa|%<#|S1fgE*X1OXgbUQtJcsU27w<*Rrp*4kBZ% zqnzXn-|{^_^C$>wzeF-pl7{p|;(e_B3fYmjwq2<$XKguaSHdpW)^%-N*R}(->rjt| z$X>fC19+cpIJ5SXAgts5b*j;s@yJ}qj?}Rub!4xznOz*^R z*^TV=bzEP^^>tkT8aMfc-?_&_{s_VbFCbro+~lJGukkv?C`lR0V^_zVlWp5~ZL)jaiNA`xYH9>)78|`5q`#Ho{e8UM&bB4EG`WN#vSlM#$Y{w8{DGK+ZTvVcV_!8_SR*M6^i z*hJ4w&fuMH@&lK+g6vIn+~iRZHkGw$B3>dH_NA#@O*4{-yx5hd`faM;rm{9|L{nsL zDsxkrn|8n*n|5O)V;GCBo9ephWTr6_JJWPFvN!eKHr>iu{tm)s_NQ5S>`${vc!!&r zMYHSNM)qd1HF%icUCX^_9U{LOQchgT^`Azr5*ayQp=bLTYgN-y4~ zKkuO9=FV>}YxCJGV>KVKo=tp;-D$pqBiN7T_M^G|Xnv1}{K-E&;aL#22(cF}k`PTc z>_`h)TjVAm1&Br77Ddp1ixMXt|0H zv41T;LH?Fo(0$7=^A zO`0QLt6|uWR`#Qnj$6IQWTr8b_nCveX!S80*^I7RZNt4=?dEg#u^-u69p*+5w$?{$ zeYAFF>)yD3Ycp#7Eq?@I8=2c=<`rablLLLX(Q%uSl%^aNaECT^X@KtAG@~W08H(&} zblpbRZFJpcE(_3inG4$K!4Cj!$&HW&3n~0Z4hFxweYuofh zB6C}r+sfQl-);5WR?ltAQ<2KNK@DnAhx#-`_O|_)g&y1LqOG~MvwQ8#s9i_K@&R_F zogHasN7~8WPT%chZzp>@+1uHVcJ`y4{O#;tyDMDhCvNdu5VlW(-0h=?#yRbCk(c}w zME3SNZeJVywwJNJe%tG|eLFhPi2;mZ4tAn_0=jL#jFqfmExK+mZ+ko4Ue5M%w%2p} z6P)5K-*JH-xy)5$Z~r_9-^xlAI%6N-+JO1I^&kj4q$ZXUl*WE^kiA0V^b4!wAr{tRRY!~L>lC9TWw0k5?Q=)_(6I^4khi0}9oy0#op*Hqj$Ikg3cObxo!u!VMezAf z{cw*?BQcv!cBj)+W;2h4EM_Uoao0|(F`G`Gv5U{y&mq3TeLG#?B7TN;dKQG8Ltex_ zb#}+jDKLx9>BvYF(YR}8ckNsP??q?#?d-mt-M4d9s!@|#crQBlU@~^5^9ddXVV6vl z!~S&{&V1}x7umbmu`VC68QHtY-en*1cR7fTx}4=Z+@Xs*bh*Mc+@otU^)`g`2(`|l)b0yJ%8sO^7nicguMb@ zATdcvPD;Gjz3g@`d)=!NRk72(YEut=_maI=M|9mw)?Rj{*Dyvh7P)#&VhRf|*IwJ% z$sYExpF@1bH=N)K*SU$@z3f4++uT9+UJucI?=tmLn=q%oviCj7Ib`f> zulnk_?{$9S7yb&uelMWse)h9pR`lIZ-~II6Pv8CY-OtSW$=k04a`uz6UjrJU>weAg ze)MZYJ31hHzb=epIfrm&|75s-|E3INHZu3OWBvCad;c#v%2~eS0vD0L|26LN0KNDB zo5ws2!U0j_p#ZPpoB=WqC`~!+%YeGbKA8PJD*yn}riFoE}3!&*LOBU{+U z4tBE_c?Z~&0dfwIbHHV;qU!;=9&n4>+~GdnhXJy`lZL|R@SVXVVDH|!8H5APWnc~} zVm}7zeW2b4%093qvJaGfU^jYVKL)-{e?~JFcNjPcyFYL`?lEvXau1YypxgrwW48w$ z;{=zGec%mb9r!2z@FWNa1;{lhF)tBGF7!J{zk_5QRE28DJV@q2G7oBqJNh#X!a;Hl z>WiF%bUjGdgN8B!@6Dhwj6?Q86IscAeh$LH&Kz72dpB5LgXgl9)7bC9vJaMh@OAV( zSjU6y$KZdlAA_F-;ShHi56u&TU84|G3F_rqi#HXPZ9$v#Z>Vbhs~{KMoQwwzUb z$T~h@Bgc??*k%5A&P{&hckb~Z2#4!onGjAxV*y$G6cDY%Q-wAIfv_c_yQL30n1o{?uW}hd@YC3?TDl}b3}dgHDVz< z_?|z|`$*YG%05zmBXvD8lFUStjTqcvr1y4YQA$vna#Wx-vXAuhWMn_yVJIUQ&AZ4y zQvQ)k(eX$*N9uUwM(oSTZG48@BhPXR`#kb4`W-3j$iI1v%>Hk8;V79$>3fu(N9lP~ zc5+|`M&%_xu@u72j4FogqZ%^+J&w}FDEl}%0y7$2jn0f^Dl>>f_R;ztE&FKMN6S9i zevICP{G<1=pF@1bHyr0T|@MmjDE-HcZ`f<%A(sbm8nW2 z+B1+L*oiTt(CwJPF>;Rim<`A}=2Nz_lilp)3uGU2g=azdZVukS zOy8Y}`@MUb`$0HX=CK)x!hVdEeXOp>%05>1v9gb~8)NOpSoz1+rXCGxLUUR&7`ewz zW*W{JJDYhdMAu_wAFJcB+c|(<$Le+L3C{8z7x)o9kJa19U#FDKd|fd7RAS=CTuKjx*2kxp@;^jh}@57%%g9 zU60rGczZp5FGo1aaZVxs_;0z+Pu$`*cex*g6ZAa6J2)X5<}txJ6J(wcOJRy&HzvqF zLAMi{A>)KLbf7cc=z(`}!h0mJgk`K`4QsI<6E=WD55&0+f z$G%S-f_+7bz-F8?(M%@pVIN;2`$Qd2)bT_ePyB`7xWhyKm)x@jAsQNg2vhiK^I>NpI2)Jx}UH7j!+zy(jgdFS1XPebQj`KWQ#doo4# zDY~9g5nWHIK`rz>r9Sdck$=kDyn~!mhB2D4Okg5%Pg%id?Ba9$yqF^El*4?D%u{5Z zBJ&h|Pto%fJx{sE10L}g|MHY)K{z$!1!SL^gUaY}sxGFk=QL(CEj{*TS_ACJv^KOy z_G$W_Ci^tmr|Edw2<*tTF-&I`@wmgZ1tj1e(+(o{G`XkAJx$NkzUK!nqUULPo+kS= zS*Oc6Juyj1NgCvuo{`)XLBG@WJ6*riWu4xbX2?8U=IJs|?}$52AC8>U<(#hT>EqG$ z^eM@)4hO#3m@ ze#}foG}+MoOm~=>kNmjD%qGY^Q|_5^&+JS$^gXjTdY)-dX39QO)|qn7oX0{wU^#Nl zT*Ef@bC&P8fR1Ng;W|HY3!Tq=%JU$c6(aYnM94i$?pborN=;e{QI7%4VHcPAF9_q@ zE6#o5+$XL8v6P@9Rj5WyYGYP$t#HSZq3_u;&-QN2Ziei$ zWu4uhcNoMFhU5L1{VwBp57}pXKW3Z3>_gb~ImxgKbDA;?@A#b0IL9SqpCkJm+2`Cv z_Bpc8k$rA}Ugyd`H!T^+L>97=o$|;%w?2(<&fHeCZ=7wCC`o)^p{j(Fx`2No=13Cmc4>Syo>DgA~_eyxk%58vJpcr z^71MLcn#SX6`?-5T@;Tq7oErb7w5oS7QcneizlM@#j-Ef`(nGjco{2M!&>BDyn)^9 zMemCba)ht3Ba0vL4^ME;5}B7ICMn6tjOpxe{Gck`n89Yu<%4@c zxHLKTW2xSk>V2u~OYDTb+oPNJdK1pv%?SF_YD~(dX*?n9J(d z(AjF|uC_C)?a1ouLAb`V)_BGm&sgIbYtj*onXWO@HTG~#D`Z~t4kLLl2-oUmtxndy z&m8Q>+60!c40B$qpS9+)_G31(g>AUs+TH9$cWZUGR(ET4w^ny+PjQy-xWGlOAn#f| zti8o;?(%>?_#1Oy`(F^Q3wVLVBqcd^ZJnK7mw`-VL0{|a-nv}qYMrju*}ZjkZ(UJJ zP?~a7qzctA*LAh2hkn*Ip*eb5*Os^FL|5$BI^C_)`#SSpXWr|EV#n5vW-Jq!#8hSw z$85}L-9i?#lohPzBi6Hl&1~f}cJVo1aDc;n%`r}LhHp8~k6h*&H~EF%xWj!O@fZK{ z6nnScuB=aly<4A*l%yd&k!0o-vXhfMyh=d|QH0`@qAV4t%p2687IkSrW17*DHngWB zUFc3P-ljhT8NzTz@h;<;$P}hCi+JX;fJJ=3a#ryn>-dCCe9CrqvWI=_=MZ1<4JSCw zIlkuyE^(C`{LHWX&OILTC;#w-XF>RJ$crT5Wm1rubYvuoXtI%m+~lJGukkv?C`lR0 zQ;Din=S}KRpGGvL1+8gE2RhS@p7fy~?=YBQjARVsc#p|UV}NNq&D?vNE4dVinhE(C%V#u-t=VvgBZ#PMl+TP zOkyfCh+{VMSjb|QvVzro#CkTcnXP=rEwvgyGD` z=eO%=`xn@=?Z& z*rl^wX0@vx&GBCE()q5%=zNzw*!2+S?2bjQ-K8191SWA1S$4aVKR++r6N!25X@T9| z(;3g&BBUf@#TDWU^ZXs|FVSjJz#(ulu&uk0#uV(}L z*)QvU{TxV56wy?`oetE(ejd=%0sDEttPbelfPN3`Y(y7_c5@Z?I3&m6 zG}w#7uTUBHI9wNZIqWWn-Q}<@51ZFv^E&M8!-x2a|9##L9{wi?{TXNB5zjc19nU%9 zIY&I_hzv($I3mN5?U?0}{rtgyLFm_^hF|65b&By8Juru_ocon?zjE$Zr}=?PJPyLI zy`Ntv#^=5+LwS7mYoGnvXTP4#To!Pclbqo%o(JL42y#$>*JwgpJmcsnCNhOx9KbV< zy6;ig!}r-ocqCSF?f5_}-I0^J@^EdWkfo$2)SW z2C|;&gU_8BhS{82&MMAwkt;k2!qYF3gj~c@7+Fv2>a?y-yX)!6OheYwyYZf#mi4sr zPn*>lJ)Ox;PD)dSY7A#QW_-qs&Y01eef;k;=6mL!AUqpQZru57W7^OjpF2C9S?Ktz z&z&`=vp4Yhv-g7VoO91P_ndRjy@C0hYk2&Yk2uKk_^Xzt!Eh$!JMO zx}c+P&Gp+&IOAIxztz)sC8_o~ym_7fm~HIfE`Rel2rrbyJujH?1>bwY{Vt5dyK~_H-kl#JaHk*a z?+>2+!<*D$I&)dTF}~$|5dLUyetZQz{@9H6=;FtDEM*0D=EsX%3BrqZ?V@+$qR(9P z?2GPsu_x0Fc%QH8@#;{_@#+LF^9#QP z;k9CvM}ODc>zaFAbFXVhFz0K|zn&8NcU|7=a$cA7x}4YLyS@eUyZ(r$JP*Pf6)?9O z-pw1%yD@_}uHnoZcY^R{b?T$jn;Y4|Ze;)IMUr3#evV$9?hbNJ;C?A)!_@vK|AxTS|%dbp*BTit1)|z3X0gJ>#x! z?ykbD?j_#Al9LLv{G$!+G0Q(b zVm){Ho5w-;XA$)Gr+xf$Eavd1UHns~KhN`H5dM{gT;!z(0~o|sKF8UAJqg0UUnB{2 z@w4OamMms9&i>n6|JKFdX7f*Js!)wM7UFyVxyL_v-oN(s-}*GdGydJcW}XJ&<3zkf z1Dx~NJs<1*vCbds{PFW3eB$d*lHv1DTGNh|`1+HLJj6Lqo(17kd7tX(X-D+=)SaH{ z^S?~k*ZLcrPOCiUr(un zl+H@&St*^B%H31Ro66l&b)_!@kU5pisbo&=8L4xU2Ro2@Dl@pj@7xO_(o~@~^)TBs zAF__8K}6a_=q|0^(&{a(-qM<9S~=31L%I~`Bc1!Cb9TBBEMf(6q&v?~*pqa>Uz(uZbjfdE)^#AaLXF)`U-V9qc z5lv}9YueEPbIsU|9!y{nhzv=InMbBZf06o&v}cj#8)?3g`6y0# zYGJ04buiaR=SH@nE$z`wq|1u(O-6%vg1#oWSOW85{yU1M~fL)SSXa9$35=g5J*%aM-) vyvFP3Jcqx(^e}64l>i_-q|NnbLj>G>4L>JJl literal 113719 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 Yi=!d%K+rVLP0lvE{6NmnwIOeIUnR&tbq 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 Px9tD^{{MdsO^*B@id_g- diff --git a/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 1695a6a..9414b3b 100644 --- a/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/IJSVGExample/IJSVGExample.xcodeproj/xcuserdata/curtishard.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -23,17 +23,65 @@ + + + + + + + + + + diff --git a/IJSVGExample/IJSVGExample/NewTux.svg b/IJSVGExample/IJSVGExample/NewTux.svg index 291fc56..0718b1a 100644 --- a/IJSVGExample/IJSVGExample/NewTux.svg +++ b/IJSVGExample/IJSVGExample/NewTux.svg @@ -1,72 +1,75 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/IJSVGExample/IJSVGExample/SVGView.m b/IJSVGExample/IJSVGExample/SVGView.m index c023732..0a027ca 100644 --- a/IJSVGExample/IJSVGExample/SVGView.m +++ b/IJSVGExample/IJSVGExample/SVGView.m @@ -31,7 +31,7 @@ - (IJSVG *)svg { - return [IJSVG svgNamed:@"AJ_Digital_Camera"]; + return [IJSVG svgNamed:@"heart"]; } - (void)drawRect:(NSRect)dirtyRect