From 0310ca83ba84b70d16577b321c2c217b19bccf0a Mon Sep 17 00:00:00 2001
From: dayu <506228475@qq.com>
Date: Wed, 21 Oct 2026 17:17:10 +0800
Subject: [PATCH] Implement and test portrait beauty, face geometry and
persistent tracking
---
beatygril/beatygril.xcodeproj/project.pbxproj | 24 +-
beatygril/beatygril/Plugin/Info.plist | 2 +-
beatygril/beatygril/Plugin/PGBeautyRenderer.h | 19 +
beatygril/beatygril/Plugin/PGBeautyRenderer.m | 242 +++++++++++
beatygril/beatygril/Plugin/PGFaceProcessor.h | 37 ++
beatygril/beatygril/Plugin/PGFaceProcessor.m | 402 ++++++++++++++++++
beatygril/beatygril/Plugin/beatygrilPlugIn.m | 65 ++-
.../Wrapper Application/AppDelegate.m | 45 +-
docs/analysis/rea-host.json | 1 +
docs/analysis/rea-plugin.json | 1 +
scripts/test.sh | 11 +
tests/beauty_render_tests.m | 181 ++++++++
tests/face_tests.m | 209 +++++++++
tests/fixtures/ATTRIBUTION.txt | 6 +
tests/fixtures/astronaut.png | Bin 0 -> 791555 bytes
15 files changed, 1203 insertions(+), 42 deletions(-)
create mode 100644 beatygril/beatygril/Plugin/PGBeautyRenderer.h
create mode 100644 beatygril/beatygril/Plugin/PGBeautyRenderer.m
create mode 100644 beatygril/beatygril/Plugin/PGFaceProcessor.h
create mode 100644 beatygril/beatygril/Plugin/PGFaceProcessor.m
create mode 100644 docs/analysis/rea-host.json
create mode 100644 docs/analysis/rea-plugin.json
create mode 100755 scripts/test.sh
create mode 100644 tests/beauty_render_tests.m
create mode 100644 tests/face_tests.m
create mode 100644 tests/fixtures/ATTRIBUTION.txt
create mode 100644 tests/fixtures/astronaut.png
diff --git a/beatygril/beatygril.xcodeproj/project.pbxproj b/beatygril/beatygril.xcodeproj/project.pbxproj
index d435b38..db5251b 100644
--- a/beatygril/beatygril.xcodeproj/project.pbxproj
+++ b/beatygril/beatygril.xcodeproj/project.pbxproj
@@ -63,10 +63,11 @@
"/Localized: Plugin/InfoPlist.strings",
"/Localized: Plugin/Localizable.strings",
Plugin/beatygrilPlugIn.m,
+ Plugin/PGBeautyRenderer.m,
+ Plugin/PGFaceProcessor.m,
+ Plugin/PGFaceSelectOSC.m,
Plugin/Info.plist,
Plugin/main.m,
- Plugin/MetalDeviceCache.m,
- Plugin/TileableRemoteBrightness.metal,
"Wrapper Application/Info.plist",
);
target = 6945FC8A3088B7220013E108 /* Wrapper Application */;
@@ -248,11 +249,12 @@
/* Begin PBXShellScriptBuildPhase section */
6945FC933088B7220013E108 /* Copy and Code Sign FxPlug.framework */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
name = "Copy and Code Sign FxPlug.framework";
shellPath = /bin/sh;
shellScript = (
"mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"",
- "rsync --archive --links --whole-file --no-owner --no-group --checksum --exclude='Headers' \"/Library/Developer/SDKs/FxPlug.sdk/Library/Frameworks/FxPlug.framework/\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FxPlug.framework/\"",
+ "rsync --archive --links --whole-file --no-owner --no-group --checksum --exclude='Headers' \"/Library/Developer/Frameworks/FxPlug.framework/\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FxPlug.framework/\"",
"if [ \"$?\" -ne 0 ]; then echo \"error: rsync failed; couldn't embed FxPlug.framework\"; exit 1; fi",
"codesign --force --timestamp --options runtime --sign \"${CODE_SIGN_IDENTITY}\" \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/FxPlug.framework\"",
);
@@ -260,11 +262,12 @@
};
6945FC943088B7220013E108 /* Copy and Code Sign PluginManager.framework */ = {
isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
name = "Copy and Code Sign PluginManager.framework";
shellPath = /bin/sh;
shellScript = (
"mkdir -p \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}\"",
- "rsync --archive --links --whole-file --no-owner --no-group --checksum --exclude='Headers' \"/Library/Developer/SDKs/FxPlug.sdk/Library/Frameworks/PluginManager.framework/\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PluginManager.framework/\"",
+ "rsync --archive --links --whole-file --no-owner --no-group --checksum --exclude='Headers' \"/Library/Developer/Frameworks/PluginManager.framework/\" \"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/PluginManager.framework/\"",
"if [ \"$?\" -ne 0 ]; then echo \"error: rsync failed; couldn't embed PluginManager.framework\"; exit 1; fi",
"codesign --force --timestamp --options runtime --sign \"${CODE_SIGN_IDENTITY}\" \"${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}/PluginManager.framework\"",
"",
@@ -304,6 +307,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Manual;
+ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO;
CODE_SIGN_IDENTITY = "Developer ID Application";
ENABLE_HARDENED_RUNTIME = YES;
DEVELOPMENT_TEAM = B3W25FX5H5;
@@ -326,6 +330,7 @@
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_STYLE = Manual;
+ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO;
CODE_SIGN_IDENTITY = "Developer ID Application";
ENABLE_HARDENED_RUNTIME = YES;
DEVELOPMENT_TEAM = B3W25FX5H5;
@@ -349,6 +354,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "beatygril/Wrapper Application/SandboxEntitlements.entitlements";
CODE_SIGN_STYLE = Manual;
+ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO;
CODE_SIGN_IDENTITY = "Developer ID Application";
ENABLE_HARDENED_RUNTIME = YES;
DEVELOPMENT_TEAM = B3W25FX5H5;
@@ -365,6 +371,7 @@
buildSettings = {
CODE_SIGN_ENTITLEMENTS = "beatygril/Wrapper Application/SandboxEntitlements.entitlements";
CODE_SIGN_STYLE = Manual;
+ CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO;
CODE_SIGN_IDENTITY = "Developer ID Application";
ENABLE_HARDENED_RUNTIME = YES;
DEVELOPMENT_TEAM = B3W25FX5H5;
@@ -380,6 +387,8 @@
isa = XCBuildConfiguration;
buildSettings = {
ADDITIONAL_SDKS = /Library/Developer/SDKs/FxPlug.sdk;
+ ARCHS = "arm64 x86_64";
+ ONLY_ACTIVE_ARCH = NO;
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
@@ -436,10 +445,9 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 12.0;
+ MACOSX_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
MTL_FAST_MATH = YES;
- ONLY_ACTIVE_ARCH = YES;
SDKROOT = macosx;
SWIFT_VERSION = 5;
};
@@ -449,6 +457,8 @@
isa = XCBuildConfiguration;
buildSettings = {
ADDITIONAL_SDKS = /Library/Developer/SDKs/FxPlug.sdk;
+ ARCHS = "arm64 x86_64";
+ ONLY_ACTIVE_ARCH = NO;
ALWAYS_SEARCH_USER_PATHS = NO;
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
@@ -499,7 +509,7 @@
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
- MACOSX_DEPLOYMENT_TARGET = 12.0;
+ MACOSX_DEPLOYMENT_TARGET = 13.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = macosx;
diff --git a/beatygril/beatygril/Plugin/Info.plist b/beatygril/beatygril/Plugin/Info.plist
index 13a12ad..fed2a3c 100644
--- a/beatygril/beatygril/Plugin/Info.plist
+++ b/beatygril/beatygril/Plugin/Info.plist
@@ -110,6 +110,6 @@
LSMinimumSystemVersion
- 12.0
+ 13.0
diff --git a/beatygril/beatygril/Plugin/PGBeautyRenderer.h b/beatygril/beatygril/Plugin/PGBeautyRenderer.h
new file mode 100644
index 0000000..c241837
--- /dev/null
+++ b/beatygril/beatygril/Plugin/PGBeautyRenderer.h
@@ -0,0 +1,19 @@
+#import
+#import "PGBeautyTypes.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// Stateless, lazy Core Image graph. All masks use red=coverage and image coordinates.
+/// Caller owns face detection, geometric warping, tracking, and the CIContext/Metal device.
+/// showMask enables debugChannel 0=skin, 1=teeth, 2=eyes. invertMask affects each preview.
+/// If the caller blends geometry plus beauty against the original, pass settings.mix=1.
+@interface PGBeautyRenderer : NSObject
+- (nullable CIImage *)processImage:(CIImage *)image
+ settings:(PGBeautySettings)settings
+ skinMask:(nullable CIImage *)skinMask
+ teethMask:(nullable CIImage *)teethMask
+ eyeMask:(nullable CIImage *)eyeMask
+ error:(NSError * _Nullable * _Nullable)error;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/beatygril/beatygril/Plugin/PGBeautyRenderer.m b/beatygril/beatygril/Plugin/PGBeautyRenderer.m
new file mode 100644
index 0000000..4d31ead
--- /dev/null
+++ b/beatygril/beatygril/Plugin/PGBeautyRenderer.m
@@ -0,0 +1,242 @@
+#import "PGBeautyRenderer.h"
+#import
+
+// Original implementation reconstructed from observed processing stages, not vendor
+// resources. The learned segmentation model and LUTs are deliberately not embedded.
+static float PGClamp(float v, float lo, float hi) { return isfinite(v) ? fmaxf(lo, fminf(hi, v)) : lo; }
+static CIImage *PGBlur(CIImage *image, CGFloat radius, CGRect extent) {
+ return [[[image imageByClampingToExtent] imageByApplyingFilter:@"CIGaussianBlur"
+ withInputParameters:@{kCIInputRadiusKey:@(radius)}] imageByCroppingToRect:extent];
+}
+static CIColorKernel *PGKernel(NSString *body) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ return [CIColorKernel kernelWithString:body];
+#pragma clang diagnostic pop
+}
+static CIImage *PGApply(CIColorKernel *kernel, CGRect extent, NSArray *arguments) {
+ return [kernel applyWithExtent:extent arguments:arguments];
+}
+static NSDictionary *PGKernels(void) {
+ static NSDictionary *kernels;
+ static dispatch_once_t once;
+ dispatch_once(&once, ^{
+ NSMutableDictionary *k = [NSMutableDictionary dictionary];
+ // The fallback mask observes the shipped G/B overlay > Gaussian high-pass >
+ // repeated hard-light stages. Semantic skin support is independently estimated.
+ k[@"overlay"] = PGKernel(@
+ "kernel vec4 pgGB(__sample p) { vec4 q=unpremultiply(p);"
+ "float g=clamp(q.g*0.5,0.0,1.0); float b=clamp(q.b*0.5,0.0,1.0);"
+ "float v=2.0*g*b; return vec4(v,v,v,1.0); }");
+ k[@"candidate"] = PGKernel(@
+ "kernel vec4 pgCandidate(__sample p,__sample g,__sample b) {"
+ "vec3 c=clamp(unpremultiply(p).rgb,0.0,1.0);"
+ "float y=dot(c,vec3(0.299,0.587,0.114));"
+ "float cb=(c.b-y)*0.564+0.5; float cr=(c.r-y)*0.713+0.5;"
+ "float chroma=exp(-pow((cb-0.415)/0.115,2.0)-pow((cr-0.565)/0.135,2.0));"
+ "float h=clamp(g.r-b.r+0.5,0.0,1.0);"
+ "h=mix(2.0*h*h,1.0-2.0*(1.0-h)*(1.0-h),step(0.5,h));"
+ "h=mix(2.0*h*h,1.0-2.0*(1.0-h)*(1.0-h),step(0.5,h));"
+ "h=mix(2.0*h*h,1.0-2.0*(1.0-h)*(1.0-h),step(0.5,h));"
+ "float band=clamp((h-0.29411765)*2.86516854,0.0,1.0);"
+ "float edges=1.0-smoothstep(0.06,0.26,abs(band-0.59));"
+ "float value=clamp(chroma*smoothstep(0.025,0.15,y)*(0.8+0.2*edges),0.0,1.0);"
+ "return vec4(value,value,value,1.0); }");
+ k[@"mask"] = PGKernel(@
+ "kernel vec4 pgMask(__sample raw,__sample feather,__sample p,__sample b,__sample eyes,__sample teeth,"
+ "float threshold,float softness,float edge,float protection,float invert) {"
+ "float m=clamp(mix(raw.r,feather.r,softness),0.0,1.0);"
+ "float width=0.025+0.24*softness;"
+ "m=smoothstep(max(0.0,threshold-width),min(1.0,threshold+width),m);"
+ "m=mix(m,1.0-m,invert);"
+ "vec3 c=unpremultiply(p).rgb; vec3 l=unpremultiply(b).rgb;"
+ "float structure=length(c-l);"
+ "m*=1.0-edge*smoothstep(0.025,0.19,structure);"
+ "float features=clamp(max(eyes.r,teeth.r),0.0,1.0);"
+ "m*=1.0-protection*features;"
+ "return vec4(m,m,m,1.0); }");
+ // Independent frequency separation: texture and structure bands are compressed
+ // in luminance, with feature/edge attenuation, keeping chroma and alpha stable.
+ k[@"detail"] = PGKernel(@
+ "kernel vec4 pgDetail(__sample p,__sample fine,__sample broad,float strength,float protect) {"
+ "vec4 src=unpremultiply(p); vec3 c=src.rgb;"
+ "vec3 t=unpremultiply(fine).rgb; vec3 b=unpremultiply(broad).rgb;"
+ "vec3 w=vec3(0.299,0.587,0.114);"
+ "float y=dot(c,w); float yf=dot(t,w); float yb=dot(b,w);"
+ "float f=y-yf; float mid=yf-yb; float structure=length(c-b);"
+ "float middle=smoothstep(0.04,0.22,y)*(1.0-smoothstep(0.82,0.98,y));"
+ "float texture=smoothstep(0.001,0.010,abs(f));"
+ "float edge=1.0-smoothstep(0.08,0.26,structure);"
+ "float dark=(1.0-smoothstep(0.16,0.42,y))*smoothstep(0.0015,0.018,abs(f)+0.35*abs(y-yb));"
+ "float light=smoothstep(0.70,0.96,y)*smoothstep(0.0025,0.024,abs(f));"
+ "float ridge=smoothstep(0.10,0.30,structure)*smoothstep(0.002,0.020,abs(f)+0.85*abs(y-yb));"
+ "float feature=max(dark*0.96,max(light*0.52,ridge*0.84));"
+ "float gain=clamp(strength*middle*mix(0.56,0.88,texture),0.0,1.05);"
+ "gain*=1.0-protect*feature*mix(0.42,0.82,texture);"
+ "float delta=-gain*(f*mix(0.18,0.76,edge)+mid*mix(0.08,0.30,edge));"
+ "float target=clamp(y+delta,0.0,1.0); float ratio=clamp(target/max(y,0.001),0.82,1.18);"
+ "vec3 outColor=c*mix(1.0,ratio,0.88);"
+ "outColor+=vec3((target-dot(outColor,w))*0.08);"
+ "return premultiply(vec4(clamp(outColor,0.0,1.0),src.a)); }");
+ k[@"maskedMix"] = PGKernel(@
+ "kernel vec4 pgMaskedMix(__sample source,__sample effect,__sample mask,float amount) {"
+ "vec4 s=unpremultiply(source); vec4 e=unpremultiply(effect);"
+ "return premultiply(vec4(mix(s.rgb,e.rgb,clamp(mask.r*amount,0.0,1.0)),s.a)); }");
+ k[@"even"] = PGKernel(@
+ "kernel vec4 pgEven(__sample source,__sample broad,float amount) {"
+ "vec4 s=unpremultiply(source); vec3 b=unpremultiply(broad).rgb;"
+ "vec3 w=vec3(0.299,0.587,0.114); float y=dot(s.rgb,w); float yb=dot(b,w);"
+ "vec3 baseChroma=s.rgb-vec3(y); vec3 smoothChroma=b-vec3(yb);"
+ "float guard=1.0-smoothstep(0.12,0.35,length(s.rgb-b));"
+ "vec3 c=vec3(y)+mix(baseChroma,smoothChroma,amount*0.78*guard);"
+ "return premultiply(vec4(clamp(c,0.0,1.0),s.a)); }");
+ // These six looks are newly authored color transforms, not the shipped LUTs.
+ k[@"preset"] = PGKernel(@
+ "kernel vec4 pgPreset(__sample source,float preset) {"
+ "vec4 s=unpremultiply(source); vec3 c=s.rgb; float y=dot(c,vec3(0.299,0.587,0.114));"
+ "if(preset<1.5){c=mix(vec3(y),c,0.91);c+=vec3(0.038,0.027,0.012)*(1.0-y);}"
+ "else if(preset<2.5){c=mix(vec3(y),c,0.89);c+=vec3(0.003,0.020,0.038)*(1.0-y);}"
+ "else if(preset<3.5){c=mix(vec3(y),c,1.04);c+=vec3(0.037,0.011,-0.018)*(1.0-y);}"
+ "else if(preset<4.5){c=mix(vec3(y),c,0.94);c+=vec3(0.032,0.001,0.018)*(1.0-y);}"
+ "else if(preset<5.5){c=pow(max(c,vec3(0.0)),vec3(1.08));c+=vec3(0.024,0.003,-0.018)*(1.0-y);}"
+ "else{c=pow(max(c,vec3(0.0)),vec3(1.20));c=mix(vec3(dot(c,vec3(0.299,0.587,0.114))),c,1.06);"
+ "c+=vec3(0.030,0.007,-0.022)*(1.0-y);}"
+ "return premultiply(vec4(clamp(c,0.0,1.0),s.a)); }");
+ k[@"teeth"] = PGKernel(@
+ "kernel vec4 pgTeeth(__sample source,__sample mask,float amount) {"
+ "vec4 s=unpremultiply(source);vec3 c=clamp(s.rgb,0.0,1.0);"
+ "float y=dot(c,vec3(0.299,0.587,0.114));float hi=max(c.r,max(c.g,c.b));float lo=min(c.r,min(c.g,c.b));"
+ "float sat=(hi-lo)/max(hi,0.0001);"
+ "float gate=smoothstep(0.26,0.56,max(y,hi*0.86))*(1.0-smoothstep(0.52,0.86,sat));"
+ "float weight=clamp(pow(max(0.0,smoothstep(0.08,0.92,mask.r)*gate*amount),0.90)*(1.02+0.18*amount),0.0,0.88);"
+ "float yellow=max(0.0,(c.r+c.g)*0.5-c.b);"
+ "vec3 neutral=mix(c,vec3(y),0.16+0.22*amount);"
+ "neutral+=yellow*vec3(-0.070*amount,-0.028*amount,0.18+0.28*amount);"
+ "neutral+=(vec3(1.0)-neutral)*(0.045+0.155*amount);"
+ "return premultiply(vec4(mix(c,clamp(neutral,0.0,1.0),weight),s.a)); }");
+ k[@"eyes"] = PGKernel(@
+ "kernel vec4 pgEyes(__sample source,__sample mask,float amount) {"
+ "vec4 s=unpremultiply(source);float y=dot(s.rgb,vec3(0.299,0.587,0.114));"
+ "float weight=clamp(mask.r,0.0,1.0)*amount*smoothstep(0.08,0.32,y);"
+ "vec3 c=s.rgb+(vec3(1.0)-s.rgb)*(0.18*weight);"
+ "return premultiply(vec4(clamp(c,0.0,1.0),s.a)); }");
+ k[@"debug"] = PGKernel(@
+ "kernel vec4 pgDebug(__sample source,__sample mask,float invert) {"
+ "vec4 s=unpremultiply(source);float m=clamp(mask.r,0.0,1.0);"
+ "m=mix(m,1.0-m,invert);return premultiply(vec4(vec3(m),s.a)); }");
+ kernels = [k copy];
+ });
+ return kernels;
+}
+
+@implementation PGBeautyRenderer
+- (CIImage *)processImage:(CIImage *)image settings:(PGBeautySettings)s
+ skinMask:(CIImage *)skinMask teethMask:(CIImage *)teethMask
+ eyeMask:(CIImage *)eyeMask error:(NSError **)error {
+ if (error) *error = nil;
+ CGRect extent = image.extent;
+ if (!image || CGRectIsEmpty(extent) || CGRectIsInfinite(extent) ||
+ !isfinite(extent.origin.x) || !isfinite(extent.origin.y) ||
+ !isfinite(extent.size.width) || !isfinite(extent.size.height)) {
+ if (error) *error = [NSError errorWithDomain:@"PGBeautyRenderer" code:1
+ userInfo:@{NSLocalizedDescriptionKey:@"The source image needs a finite nonempty extent."}];
+ return nil;
+ }
+ float mix = PGClamp(s.mix, 0, 1);
+ if (mix == 0 && !s.showMask) return image;
+ NSDictionary *k = PGKernels();
+ if (k.count != 10) {
+ if (error) *error = [NSError errorWithDomain:@"PGBeautyRenderer" code:2
+ userInfo:@{NSLocalizedDescriptionKey:@"The beauty image kernels could not be compiled."}];
+ return nil;
+ }
+ @try {
+ float amount = PGClamp(s.amount,0,1);
+ float local = PGClamp(s.midtoneDetail,0,2)*0.5f;
+ float global = PGClamp(s.highPassDetail,0,1);
+ float brightness = PGClamp(s.skinBrightness,0,1);
+ float hue = PGClamp(s.skinHue,-30,30);
+ float saturation = PGClamp(s.skinSaturation,-100,100);
+ float even = PGClamp(s.skinEvenTone,0,1);
+ float sharpness = PGClamp(s.sharpness,0,2);
+ float teeth = PGClamp(s.teethWhitening,0,1);
+ float eyes = PGClamp(s.eyeBrightening,0,1);
+ BOOL needsSkin = local*amount>0 || brightness>0 || hue!=0 || saturation!=0 || even>0 ||
+ (s.skinTonePreset>0 && s.skinTonePreset<=6) || (s.showMask && s.debugChannel==0);
+ CIImage *black = [[CIImage imageWithColor:[CIColor colorWithRed:0 green:0 blue:0 alpha:1]] imageByCroppingToRect:extent];
+ CIImage *teethInput = teethMask ? [teethMask imageByCroppingToRect:extent] : black;
+ CIImage *eyeInput = eyeMask ? [eyeMask imageByCroppingToRect:extent] : black;
+ CIImage *raw = skinMask ? [skinMask imageByCroppingToRect:extent] : black;
+ CIImage *mask = black;
+ CGFloat radius = PGClamp(s.radius,1,40);
+ if (needsSkin) {
+ if (!skinMask) {
+ CIImage *gb = PGApply(k[@"overlay"],extent,@[image]);
+ raw = PGApply(k[@"candidate"],extent,@[image,gb,PGBlur(gb,radius,extent)]);
+ }
+ float soft = PGClamp(s.maskSoftness,0,1);
+ float threshold = PGClamp(s.maskThreshold,0,255)/255.f;
+ mask = PGApply(k[@"mask"],extent,@[raw,PGBlur(raw,0.35+soft*radius*0.35,extent),
+ image,PGBlur(image,1.5,extent),eyeInput,teethInput,
+ @(threshold),@(soft),@(PGClamp(s.maskEdgeProtect,0,1)),
+ @(s.featureProtection ? 1 : 0),@(s.invertMask ? 1 : 0)]);
+ }
+ if (s.showMask) {
+ // Popup values select coverage source; changing the popup alone must
+ // never enable a preview. Feature masks retain their supplied coverage.
+ CIImage *preview = s.debugChannel==1 ? teethInput : (s.debugChannel==2 ? eyeInput : mask);
+ float invert = s.debugChannel==1 || s.debugChannel==2 ? (s.invertMask ? 1 : 0) : 0;
+ return PGApply(k[@"debug"],extent,@[image,preview,@(invert)]);
+ }
+ CIImage *result = image;
+ if (local*amount>0) {
+ // The shipped helper derives both blur scales from the detail strength.
+ CGFloat fine = fmin(7.4,2.275+3.15*pow(local,0.72)+0.95*local);
+ CGFloat broad = fmin(16,(2.55+0.45*local)*fine+1.1+1.3*local);
+ float compression = 0.12+2.4*powf(local,2.15)+1.25*local;
+ CIImage *detail = PGApply(k[@"detail"],extent,@[result,PGBlur(result,fine,extent),
+ PGBlur(result,broad,extent),@(compression),@(s.featureProtection ? 1 : 0)]);
+ result = PGApply(k[@"maskedMix"],extent,@[result,detail,mask,@(amount)]);
+ }
+ CIImage *color = result;
+ if (brightness>0) {
+ float shoulder = PGClamp((brightness-0.56f)/0.44f,0,1);
+ float gain = 0.88f*powf(brightness,1.24f)+0.12f*shoulder*shoulder*(3-2*shoulder);
+ color = [color imageByApplyingFilter:@"CIExposureAdjust" withInputParameters:@{kCIInputEVKey:@(gain*0.95f)}];
+ }
+ if (hue!=0) color = [color imageByApplyingFilter:@"CIHueAdjust" withInputParameters:@{kCIInputAngleKey:@(hue*M_PI/180.0)}];
+ if (saturation!=0) color = [color imageByApplyingFilter:@"CIColorControls" withInputParameters:@{kCIInputSaturationKey:@(1+saturation/100.f)}];
+ if (even>0) color = PGApply(k[@"even"],extent,@[color,PGBlur(color,radius*1.8,extent),@(even)]);
+ if (color!=result) result = PGApply(k[@"maskedMix"],extent,@[result,color,mask,@1]);
+ if (sharpness*amount>0) result = [result imageByApplyingFilter:@"CISharpenLuminance"
+ withInputParameters:@{kCIInputSharpnessKey:@(sharpness*amount)}];
+ if (s.skinTonePreset>0 && s.skinTonePreset<=6) {
+ CIImage *preset = PGApply(k[@"preset"],extent,@[result,@(s.skinTonePreset)]);
+ result = PGApply(k[@"maskedMix"],extent,@[result,preset,mask,@1]);
+ }
+ if (global>0) {
+ CGFloat fine = fmin(7.4,2.275+3.15*pow(global,0.72)+0.95*global);
+ CGFloat broad = fmin(16,(2.55+0.45*global)*fine+1.1+1.3*global);
+ float compression = 0.12+2.4*powf(global,2.15)+1.25*global;
+ result = PGApply(k[@"detail"],extent,@[result,PGBlur(result,fine,extent),
+ PGBlur(result,broad,extent),@(compression),@0]);
+ }
+ if (teeth>0 && teethMask) result = PGApply(k[@"teeth"],extent,@[result,teethInput,@(teeth)]);
+ if (eyes>0 && eyeMask) result = PGApply(k[@"eyes"],extent,@[result,eyeInput,@(eyes)]);
+ if (mix<1) {
+ CIImage *white = [[CIImage imageWithColor:[CIColor colorWithRed:1 green:1 blue:1 alpha:1]] imageByCroppingToRect:extent];
+ result = PGApply(k[@"maskedMix"],extent,@[image,result,white,@(mix)]);
+ }
+ if (!result) {
+ if (error) *error = [NSError errorWithDomain:@"PGBeautyRenderer" code:3
+ userInfo:@{NSLocalizedDescriptionKey:@"Core Image could not construct the beauty render graph."}];
+ return nil;
+ }
+ return [result imageByCroppingToRect:extent];
+ } @catch (NSException *exception) {
+ if (error) *error = [NSError errorWithDomain:@"PGBeautyRenderer" code:4
+ userInfo:@{NSLocalizedDescriptionKey:exception.reason ?: @"Invalid Core Image render state."}];
+ return nil;
+ }
+}
+@end
diff --git a/beatygril/beatygril/Plugin/PGFaceProcessor.h b/beatygril/beatygril/Plugin/PGFaceProcessor.h
new file mode 100644
index 0000000..74307bb
--- /dev/null
+++ b/beatygril/beatygril/Plugin/PGFaceProcessor.h
@@ -0,0 +1,37 @@
+#import
+#import
+#import
+#import
+#import "PGBeautyTypes.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGFaceFrame : NSObject
+/// Vision observations in normalized, bottom-left image coordinates. Restored
+/// observations retain their bounding box; render geometry is stored separately.
+@property (nonatomic, copy, readonly) NSArray *faces;
+@property (nonatomic, strong, readonly) CIImage *skinMask;
+@property (nonatomic, strong, readonly) CIImage *teethMask;
+@property (nonatomic, strong, readonly) CIImage *eyeMask;
+@property (nonatomic, strong, readonly) CIImage *image;
+/// Transparent face/target outlines, for compositing after beauty processing.
+@property (nonatomic, strong, readonly) CIImage *overlayImage;
+@end
+
+@interface PGFaceProcessor : NSObject
+- (nullable PGFaceFrame *)processImage:(CIImage *)image
+ settings:(PGBeautySettings)settings
+ time:(CMTime)time
+ error:(NSError * _Nullable * _Nullable)error;
+- (BOOL)analyzeImage:(CIImage *)image
+ settings:(PGBeautySettings)settings
+ time:(CMTime)time
+ error:(NSError * _Nullable * _Nullable)error;
+- (void)resetTracking;
+/// Targets are zero-based (0, 1, 2). Data is a versioned property-list archive,
+/// independent of Vision implementation classes. Only analysis writes frames.
+- (nullable NSData *)trackingDataForTarget:(NSUInteger)target;
+- (void)setTrackingData:(nullable NSData *)data forTarget:(NSUInteger)target;
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/beatygril/beatygril/Plugin/PGFaceProcessor.m b/beatygril/beatygril/Plugin/PGFaceProcessor.m
new file mode 100644
index 0000000..ba361e4
--- /dev/null
+++ b/beatygril/beatygril/Plugin/PGFaceProcessor.m
@@ -0,0 +1,402 @@
+// The source kernels remain available on the supported macOS 12+ range. This
+// keeps the processor self contained instead of requiring a separate metallib.
+#define CI_SILENCE_GL_DEPRECATION 1
+#import "PGFaceProcessor.h"
+#include
+#include
+
+static NSString * const PGFaceErrorDomain = @"media.dayu.PaintFCP.Face";
+
+@interface PGFaceFrame ()
+@property (nonatomic, copy, readwrite) NSArray *faces;
+@property (nonatomic, strong, readwrite) CIImage *skinMask;
+@property (nonatomic, strong, readwrite) CIImage *teethMask;
+@property (nonatomic, strong, readwrite) CIImage *eyeMask;
+@property (nonatomic, strong, readwrite) CIImage *image;
+@property (nonatomic, strong, readwrite) CIImage *overlayImage;
+@end
+@implementation PGFaceFrame
+@end
+
+// All geometry in stored records is normalized to the full source image, with
+// Y increasing upward. Pixel size, render scale and tile order are not persisted.
+static NSString *PGTimeKey(CMTime time) {
+ if (!CMTIME_IS_NUMERIC(time) || time.timescale <= 0) return nil;
+ int64_t a = time.value, b = time.timescale;
+ // Unsigned magnitude avoids overflow for the minimum signed integer.
+ uint64_t u = a < 0 ? (uint64_t)(-(a + 1)) + 1 : (uint64_t)a;
+ uint64_t v = (uint64_t)b;
+ while (v) { uint64_t r = u % v; u = v; v = r; }
+ int64_t divisor = (int64_t)(u ?: 1);
+ return [NSString stringWithFormat:@"%lld/%lld/%lld", (long long)(a / divisor),
+ (long long)(b / divisor), (long long)time.epoch];
+}
+
+static float PGClamp(float value, float low, float high) {
+ return isfinite(value) ? fminf(high, fmaxf(low, value)) : 0;
+}
+static NSArray *PGRectArray(CGRect rect) {
+ return @[@(rect.origin.x), @(rect.origin.y), @(rect.size.width), @(rect.size.height)];
+}
+static CGRect PGArrayRect(NSArray *array) {
+ if (![array isKindOfClass:NSArray.class] || array.count != 4) return CGRectZero;
+ for (id value in array) if (![value isKindOfClass:NSNumber.class] || !isfinite([value doubleValue])) return CGRectZero;
+ return CGRectMake([array[0] doubleValue], [array[1] doubleValue], [array[2] doubleValue], [array[3] doubleValue]);
+}
+static BOOL PGValidRect(CGRect rect) {
+ return rect.size.width > 0.001 && rect.size.height > 0.001 &&
+ rect.origin.x >= -0.1 && rect.origin.y >= -0.1 && CGRectGetMaxX(rect) <= 1.1 && CGRectGetMaxY(rect) <= 1.1;
+}
+static CGPoint PGCenter(CGRect rect) { return CGPointMake(CGRectGetMidX(rect), CGRectGetMidY(rect)); }
+static NSArray *PGRegion(VNFaceLandmarkRegion2D *region, CGRect box) {
+ if (!region || region.pointCount == 0) return @[];
+ NSMutableArray *points = [NSMutableArray arrayWithCapacity:region.pointCount];
+ const CGPoint *p = region.normalizedPoints;
+ if (!p) return @[];
+ for (NSUInteger i = 0; i < MIN(region.pointCount, 256); i++) {
+ if (isfinite(p[i].x) && isfinite(p[i].y)) {
+ [points addObject:@[@(box.origin.x + p[i].x * box.size.width),
+ @(box.origin.y + p[i].y * box.size.height)]];
+ }
+ }
+ return points;
+}
+static NSDictionary *PGGeometry(VNFaceObservation *observation) {
+ CGRect box = observation.boundingBox;
+ VNFaceLandmarks2D *lm = observation.landmarks;
+ return @{@"box": PGRectArray(box),
+ @"leftEye": PGRegion(lm.leftEye, box), @"rightEye": PGRegion(lm.rightEye, box),
+ @"leftBrow": PGRegion(lm.leftEyebrow, box), @"rightBrow": PGRegion(lm.rightEyebrow, box),
+ @"nose": PGRegion(lm.nose, box), @"lips": PGRegion(lm.outerLips, box),
+ @"mouth": PGRegion(lm.innerLips, box), @"contour": PGRegion(lm.faceContour, box)};
+}
+static NSDictionary *PGSanitizedGeometry(id value) {
+ if (![value isKindOfClass:NSDictionary.class]) return nil;
+ CGRect box = PGArrayRect(value[@"box"]);
+ if (!PGValidRect(box)) return nil;
+ NSMutableDictionary *result = [NSMutableDictionary dictionaryWithObject:PGRectArray(box) forKey:@"box"];
+ for (NSString *name in @[@"leftEye", @"rightEye", @"leftBrow", @"rightBrow", @"nose", @"lips", @"mouth", @"contour"]) {
+ id raw = value[name];
+ if (![raw isKindOfClass:NSArray.class] || [raw count] > 256) return nil;
+ NSMutableArray *points = [NSMutableArray array];
+ for (id point in raw) {
+ if (![point isKindOfClass:NSArray.class] || [point count] != 2) return nil;
+ for (id coordinate in point) if (![coordinate isKindOfClass:NSNumber.class] || !isfinite([coordinate doubleValue]) || fabs([coordinate doubleValue]) > 2) return nil;
+ [points addObject:[point copy]];
+ }
+ result[name] = points;
+ }
+ return [result copy];
+}
+static CGRect PGRegionBounds(NSDictionary *geometry, NSString *name, CGRect fallback) {
+ NSArray *points = geometry[name];
+ if (points.count == 0) return fallback;
+ CGFloat minX = 2, minY = 2, maxX = -1, maxY = -1;
+ for (NSArray *point in points) {
+ CGFloat x = [point[0] doubleValue], y = [point[1] doubleValue];
+ minX = MIN(minX, x); minY = MIN(minY, y); maxX = MAX(maxX, x); maxY = MAX(maxY, y);
+ }
+ return CGRectMake(minX, minY, MAX(0.001, maxX - minX), MAX(0.001, maxY - minY));
+}
+static CGRect PGInFace(CGRect face, CGFloat x, CGFloat y, CGFloat w, CGFloat h) {
+ return CGRectMake(face.origin.x + x * face.size.width, face.origin.y + y * face.size.height,
+ w * face.size.width, h * face.size.height);
+}
+static CGRect PGToPixels(CGRect normalized, CGRect extent) {
+ return CGRectMake(extent.origin.x + normalized.origin.x * extent.size.width,
+ extent.origin.y + normalized.origin.y * extent.size.height,
+ normalized.size.width * extent.size.width, normalized.size.height * extent.size.height);
+}
+static CIVector *PGVector(CGPoint point) { return [CIVector vectorWithX:point.x Y:point.y]; }
+static CIImage *PGBlack(CGRect extent) {
+ return [[CIImage imageWithColor:[CIColor colorWithRed:0 green:0 blue:0 alpha:1]] imageByCroppingToRect:extent];
+}
+static CIImage *PGTransparent(CGRect extent) {
+ return [[CIImage imageWithColor:[CIColor colorWithRed:0 green:0 blue:0 alpha:0]] imageByCroppingToRect:extent];
+}
+static CIImage *PGMaximum(CIImage *a, CIImage *b) {
+ return [a imageByApplyingFilter:@"CIMaximumCompositing" withInputParameters:@{kCIInputBackgroundImageKey:b}];
+}
+
+@interface PGFaceProcessor () {
+ NSLock *_lock;
+ NSMutableArray *> *_targets;
+ CIWarpKernel *_warp;
+ CIColorKernel *_ellipse;
+ CIColorKernel *_subtract;
+ CIColorKernel *_box;
+}
+@end
+
+@implementation PGFaceProcessor
+
+- (instancetype)init {
+ self = [super init];
+ if (self) {
+ _lock = [[NSLock alloc] init];
+ _targets = [NSMutableArray arrayWithObjects:[NSMutableDictionary dictionary], [NSMutableDictionary dictionary], [NSMutableDictionary dictionary], nil];
+ // Analytic, feathered sampling deformation authored for this project.
+ // Positive short-face shortens the lower face; positive chin lengthens it.
+ // This is an independent approximation, not the reference vendor's warp.
+ NSString *source = @"kernel vec2 pgFaceWarp(vec2 c, vec2 size, vec2 le, vec2 re, vec2 er, float thin, float bigEye, float shortFace, float narrow, float chin, float vFace, float jaw, float cheek, float smallHead, float headRange) {"
+ " vec2 p = destCoord(); vec2 n = (p-c)/size;"
+ " float body = 1.0-smoothstep(0.38,0.76,length(n*vec2(1.0,0.82)));"
+ " float lower = (1.0-smoothstep(-0.12,0.27,n.y))*body;"
+ " float sides = smoothstep(0.08,0.32,abs(n.x));"
+ " float j=(n.y+0.23)/0.22; float jawBand = exp(-j*j)*body;"
+ " float ch=(n.y-0.02)/0.19; float cheekBand = exp(-ch*ch)*body;"
+ " float head = 1.0-smoothstep(0.38,0.75+0.32*headRange,length(n*vec2(0.9,0.65)));"
+ " p += (p-c)*smallHead*0.18*head;"
+ " p.x += size.x*n.x*(narrow*0.30*body + thin*0.26*lower + vFace*0.24*jawBand + jaw*0.20*jawBand + cheek*0.18*cheekBand)*sides;"
+ " float cn=n.x/0.30; p.y += size.y*(-shortFace*0.16*lower + chin*0.13*exp(-cn*cn)*jawBand - vFace*0.025*lower);"
+ " vec2 dl = (p-le)/er; float wl = 1.0-smoothstep(0.0,1.0,length(dl));"
+ " p -= (p-le)*bigEye*0.33*wl*wl;"
+ " vec2 dr = (p-re)/er; float wr = 1.0-smoothstep(0.0,1.0,length(dr));"
+ " p -= (p-re)*bigEye*0.33*wr*wr; return p; }";
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ _warp = [CIWarpKernel kernelWithString:source];
+ _ellipse = [CIColorKernel kernelWithString:@"kernel vec4 pgEllipse(vec2 c, vec2 r, float inner) { float v=1.0-smoothstep(inner,1.0,length((destCoord()-c)/max(r,vec2(0.001)))); return vec4(v,v,v,1.0); }"];
+ _subtract = [CIColorKernel kernelWithString:@"kernel vec4 pgSubtract(__sample a, __sample b) { float v=max(0.0,a.r-b.r); return vec4(v,v,v,1.0); }"];
+ _box = [CIColorKernel kernelWithString:@"kernel vec4 pgBox(vec4 b, float width, vec4 color) { vec2 p=destCoord(); float inside=step(b.x,p.x)*step(b.y,p.y)*step(p.x,b.z)*step(p.y,b.w); float edge=min(min(abs(p.x-b.x),abs(p.x-b.z)),min(abs(p.y-b.y),abs(p.y-b.w))); float a=inside*(1.0-smoothstep(width,width+1.0,edge)); return color*a; }"];
+#pragma clang diagnostic pop
+ }
+ return self;
+}
+
+- (NSArray *)observationsInImage:(CIImage *)image settings:(PGBeautySettings)settings error:(NSError **)error {
+ CGRect extent = image.extent;
+ CGFloat longest = MAX(extent.size.width, extent.size.height);
+ CGFloat scale = MIN(1.0, (settings.fastMultiFace ? 720.0 : 1280.0) / longest);
+ CIImage *prepared = [image imageByApplyingTransform:CGAffineTransformMakeTranslation(-extent.origin.x, -extent.origin.y)];
+ prepared = [prepared imageByApplyingTransform:CGAffineTransformMakeScale(scale, scale)];
+ VNDetectFaceLandmarksRequest *request = [[VNDetectFaceLandmarksRequest alloc] init];
+ // An image request handler is intentionally local to one invocation. A shared
+ // sequence handler would make parallel / reverse render order observable.
+ VNImageRequestHandler *handler = [[VNImageRequestHandler alloc] initWithCIImage:prepared options:@{}];
+ if (![handler performRequests:@[request] error:error]) return nil;
+ NSArray *faces = request.results ?: @[];
+ return [faces sortedArrayUsingComparator:^NSComparisonResult(VNFaceObservation *a, VNFaceObservation *b) {
+ CGRect x = a.boundingBox, y = b.boundingBox;
+ if (CGRectGetMidX(x) != CGRectGetMidX(y)) return CGRectGetMidX(x) < CGRectGetMidX(y) ? NSOrderedAscending : NSOrderedDescending;
+ if (CGRectGetMidY(x) != CGRectGetMidY(y)) return CGRectGetMidY(x) < CGRectGetMidY(y) ? NSOrderedAscending : NSOrderedDescending;
+ return x.size.width > y.size.width ? NSOrderedAscending : NSOrderedDescending;
+ }];
+}
+
+- (NSDictionary *)recordForTime:(CMTime)time target:(NSUInteger)target nearest:(BOOL)nearest {
+ NSString *key = PGTimeKey(time);
+ if (!key || target >= 3) return nil;
+ [_lock lock];
+ NSDictionary *record = _targets[target][key];
+ if (nearest && [record[@"faces"] count] == 0) record = nil;
+ if (!record && nearest) {
+ // Pick a deterministic analyzed identity, retaining the last valid face
+ // across lost detections. Only an explicit reset/reselection reacquires
+ // a different identity; render ordering never updates this anchor.
+ double distance = DBL_MAX;
+ CMTime selectedTime = kCMTimeInvalid;
+ for (NSDictionary *candidate in _targets[target].allValues) {
+ if ([candidate[@"faces"] count] == 0) continue;
+ CMTime stored = CMTimeMakeWithEpoch([candidate[@"value"] longLongValue], [candidate[@"scale"] intValue], [candidate[@"epoch"] longLongValue]);
+ if (stored.epoch != time.epoch) continue;
+ double delta = fabs(CMTimeGetSeconds(CMTimeSubtract(stored, time)));
+ if (delta < distance || (delta == distance && CMTIME_IS_VALID(selectedTime) && CMTimeCompare(stored, selectedTime) < 0)) {
+ record = candidate; distance = delta; selectedTime = stored;
+ }
+ }
+ }
+ [_lock unlock];
+ return record;
+}
+
+- (NSArray *)geometryForObservations:(NSArray *)observations
+ settings:(PGBeautySettings)settings previous:(NSDictionary *)previous {
+ BOOL selectOne = settings.singleFace || settings.trackingEnabled;
+ if (!selectOne) {
+ NSMutableArray *all = [NSMutableArray array];
+ for (VNFaceObservation *face in observations) if (PGValidRect(face.boundingBox) && all.count < 16) [all addObject:PGGeometry(face)];
+ return all;
+ }
+ CGPoint selection = CGPointMake(PGClamp(settings.selectionX, 0, 1), PGClamp(settings.selectionY, 0, 1));
+ NSArray *previousFaces = previous[@"faces"];
+ CGRect prior = previousFaces.count ? PGArrayRect(previousFaces.firstObject[@"box"]) : CGRectZero;
+ BOOL guard = settings.faceJumpGuardRange > 0 && PGValidRect(prior);
+ CGPoint reference = guard ? PGCenter(prior) : selection;
+ VNFaceObservation *best = nil;
+ double bestScore = DBL_MAX;
+ for (VNFaceObservation *face in observations) {
+ CGRect box = face.boundingBox;
+ if (!PGValidRect(box)) continue;
+ CGPoint center = PGCenter(box);
+ double dx = (center.x - reference.x), dy = (center.y - reference.y);
+ if (guard) {
+ double radius = MAX(prior.size.width, prior.size.height) * PGClamp(settings.faceJumpGuardRange, 0.1, 8);
+ double ratio = box.size.width / prior.size.width;
+ if (hypot(dx, dy) > radius || ratio < 0.4 || ratio > 2.5) continue;
+ }
+ double score = dx * dx + dy * dy;
+ if (!guard && CGRectContainsPoint(box, selection)) score -= 2;
+ if (score < bestScore) { best = face; bestScore = score; }
+ }
+ return best ? @[PGGeometry(best)] : @[];
+}
+
+- (BOOL)analyzeImage:(CIImage *)image settings:(PGBeautySettings)settings time:(CMTime)time error:(NSError **)error {
+ NSString *key = PGTimeKey(time);
+ if (!image || !key || CGRectIsInfinite(image.extent) || CGRectIsEmpty(image.extent)) {
+ if (error) *error = [NSError errorWithDomain:PGFaceErrorDomain code:1 userInfo:@{NSLocalizedDescriptionKey:@"Face analysis requires a finite image and valid frame time."}];
+ return NO;
+ }
+ NSArray *observations = [self observationsInImage:image settings:settings error:error];
+ if (!observations) return NO;
+ NSUInteger target = MIN((NSUInteger)settings.targetIndex, 2);
+ NSDictionary *prior = [self recordForTime:time target:target nearest:YES];
+ NSArray *geometry = [self geometryForObservations:observations settings:settings previous:prior];
+ NSDictionary *record = @{@"value":@(time.value), @"scale":@(time.timescale), @"epoch":@(time.epoch), @"faces":geometry};
+ [_lock lock];
+ _targets[target][key] = record;
+ [_lock unlock];
+ return YES;
+}
+
+- (CIImage *)ellipseInRect:(CGRect)rect extent:(CGRect)extent inner:(CGFloat)inner {
+ return [_ellipse applyWithExtent:extent arguments:@[PGVector(PGCenter(rect)), [CIVector vectorWithX:rect.size.width * 0.5 Y:rect.size.height * 0.5], @(inner)]];
+}
+
+- (CIImage *)warpImage:(CIImage *)image geometry:(NSArray *)geometry settings:(PGBeautySettings)s extent:(CGRect)extent {
+ if (!(s.faceThin || s.faceBigEye || s.faceShort || s.faceNarrow || s.faceChin || s.faceV || s.faceJaw || s.faceCheekbone || s.faceSmallHead)) return [image imageByCroppingToRect:extent];
+ CIImage *result = image;
+ for (NSDictionary *face in geometry) {
+ CGRect box = PGArrayRect(face[@"box"]), pixels = PGToPixels(box, extent);
+ CGRect le = PGRegionBounds(face, @"leftEye", PGInFace(box, 0.16, 0.53, 0.25, 0.15));
+ CGRect re = PGRegionBounds(face, @"rightEye", PGInFace(box, 0.59, 0.53, 0.25, 0.15));
+ CGPoint left = PGCenter(PGToPixels(le, extent)), right = PGCenter(PGToPixels(re, extent));
+ NSArray *arguments = @[PGVector(PGCenter(pixels)), [CIVector vectorWithX:pixels.size.width Y:pixels.size.height],
+ PGVector(left), PGVector(right), [CIVector vectorWithX:MAX(2, pixels.size.width * 0.24) Y:MAX(2, pixels.size.height * 0.17)],
+ @(PGClamp(s.faceThin, 0, 1)), @(PGClamp(s.faceBigEye, 0, 1)), @(PGClamp(s.faceShort, -1, 1)),
+ @(PGClamp(s.faceNarrow, -1, 1)), @(PGClamp(s.faceChin, -1, 1)), @(PGClamp(s.faceV, 0, 1)),
+ @(PGClamp(s.faceJaw, 0, 1)), @(PGClamp(s.faceCheekbone, 0, 1)), @(PGClamp(s.faceSmallHead, 0, 1)), @(PGClamp(s.faceSmallHeadRange, 0, 1))];
+ CIImage *input = [result imageByClampingToExtent];
+ result = [_warp applyWithExtent:extent roiCallback:^CGRect(int index, CGRect rect) { (void)index; (void)rect; return extent; } inputImage:input arguments:arguments];
+ if (!result) return nil;
+ }
+ return [result imageByCroppingToRect:extent];
+}
+
+- (PGFaceFrame *)processImage:(CIImage *)image settings:(PGBeautySettings)settings time:(CMTime)time error:(NSError **)error {
+ CGRect extent = image.extent;
+ if (!image || CGRectIsInfinite(extent) || CGRectIsEmpty(extent) || !_ellipse || !_warp || !_box || !_subtract) {
+ if (error) *error = [NSError errorWithDomain:PGFaceErrorDomain code:2 userInfo:@{NSLocalizedDescriptionKey:@"Unable to initialize face processing for this image."}];
+ return nil;
+ }
+ NSDictionary *record = settings.trackingEnabled ? [self recordForTime:time target:MIN((NSUInteger)settings.targetIndex, 2) nearest:NO] : nil;
+ NSArray *geometry;
+ NSArray *observations;
+ if (record) {
+ geometry = record[@"faces"];
+ NSMutableArray *restored = [NSMutableArray array];
+ for (NSDictionary *face in geometry) [restored addObject:[VNFaceObservation faceObservationWithRequestRevision:VNDetectFaceLandmarksRequestRevision3 boundingBox:PGArrayRect(face[@"box"]) roll:nil yaw:nil pitch:nil]];
+ observations = restored;
+ } else {
+ NSArray *detected = [self observationsInImage:image settings:settings error:error];
+ if (!detected) return nil;
+ // A missing time may use a nearby analyzed identity as a guard, while
+ // still detecting the current image. Rendering never appends to history.
+ NSDictionary *anchor = settings.trackingEnabled ? [self recordForTime:time target:MIN((NSUInteger)settings.targetIndex, 2) nearest:YES] : nil;
+ geometry = [self geometryForObservations:detected settings:settings previous:anchor];
+ NSMutableArray *selected = [NSMutableArray array];
+ for (NSDictionary *face in geometry) {
+ CGRect box = PGArrayRect(face[@"box"]);
+ for (VNFaceObservation *observation in detected) if (CGRectEqualToRect(observation.boundingBox, box)) { [selected addObject:observation]; break; }
+ }
+ observations = selected;
+ }
+ CIImage *skin = PGBlack(extent), *teeth = PGBlack(extent), *eyes = PGBlack(extent), *protection = PGBlack(extent), *overlay = PGTransparent(extent);
+ for (NSDictionary *face in geometry) {
+ CGRect box = PGArrayRect(face[@"box"]);
+ CGRect skinRect = PGInFace(box, -0.10, -0.04, 1.20, 1.16);
+ skin = PGMaximum(skin, [self ellipseInRect:PGToPixels(skinRect, extent) extent:extent inner:0.78]);
+ NSArray *names = @[@"leftEye", @"rightEye", @"leftBrow", @"rightBrow", @"lips", @"nose"];
+ NSArray *fallbacks = @[[NSValue valueWithRect:PGInFace(box, 0.16, 0.53, 0.25, 0.15)],
+ [NSValue valueWithRect:PGInFace(box, 0.59, 0.53, 0.25, 0.15)],
+ [NSValue valueWithRect:PGInFace(box, 0.12, 0.72, 0.29, 0.08)],
+ [NSValue valueWithRect:PGInFace(box, 0.59, 0.72, 0.29, 0.08)],
+ [NSValue valueWithRect:PGInFace(box, 0.27, 0.16, 0.46, 0.18)],
+ [NSValue valueWithRect:PGInFace(box, 0.39, 0.33, 0.22, 0.16)]];
+ for (NSUInteger i = 0; i < names.count; i++) {
+ CGRect region = PGToPixels(PGRegionBounds(face, names[i], fallbacks[i].rectValue), extent);
+ CGRect expanded = CGRectInset(region, -region.size.width * 0.15, -region.size.height * 0.35);
+ CIImage *mask = [self ellipseInRect:expanded extent:extent inner:0.45];
+ protection = PGMaximum(protection, mask);
+ if (i < 2) eyes = PGMaximum(eyes, [self ellipseInRect:region extent:extent inner:0.45]);
+ }
+ CGRect mouth = PGRegionBounds(face, @"mouth", PGInFace(box, 0.30, 0.20, 0.40, 0.08));
+ teeth = PGMaximum(teeth, [self ellipseInRect:PGToPixels(mouth, extent) extent:extent inner:0.35]);
+ if (settings.showFaceBoxes || settings.showTrackBox) {
+ CGRect pixels = PGToPixels(box, extent);
+ CGFloat inset = MAX(1, MIN(pixels.size.width, pixels.size.height) * 0.005);
+ CIImage *outline = [_box applyWithExtent:extent arguments:@[[CIVector vectorWithX:CGRectGetMinX(pixels) Y:CGRectGetMinY(pixels) Z:CGRectGetMaxX(pixels) W:CGRectGetMaxY(pixels)], @(inset), [CIVector vectorWithX:0.12 Y:1.0 Z:0.35 W:0.95]]];
+ overlay = [outline imageByCompositingOverImage:overlay];
+ }
+ }
+ if (settings.featureProtection) skin = [_subtract applyWithExtent:extent arguments:@[skin, protection]];
+ PGFaceFrame *frame = [[PGFaceFrame alloc] init];
+ frame.faces = observations ?: @[];
+ frame.image = [self warpImage:image geometry:geometry settings:settings extent:extent];
+ frame.skinMask = [self warpImage:skin geometry:geometry settings:settings extent:extent];
+ frame.teethMask = [self warpImage:teeth geometry:geometry settings:settings extent:extent];
+ frame.eyeMask = [self warpImage:eyes geometry:geometry settings:settings extent:extent];
+ frame.overlayImage = [overlay imageByCroppingToRect:extent];
+ if (!frame.image || !frame.skinMask || !frame.teethMask || !frame.eyeMask) {
+ if (error) *error = [NSError errorWithDomain:PGFaceErrorDomain code:3 userInfo:@{NSLocalizedDescriptionKey:@"Unable to apply face geometry."}];
+ return nil;
+ }
+ return frame;
+}
+
+- (void)resetTracking {
+ [_lock lock];
+ for (NSMutableDictionary *target in _targets) [target removeAllObjects];
+ [_lock unlock];
+}
+
+- (NSData *)trackingDataForTarget:(NSUInteger)target {
+ if (target >= 3) return nil;
+ [_lock lock];
+ NSDictionary *frames = [_targets[target] copy];
+ [_lock unlock];
+ if (!frames.count) return nil;
+ return [NSPropertyListSerialization dataWithPropertyList:@{@"version":@1, @"frames":frames} format:NSPropertyListBinaryFormat_v1_0 options:0 error:nil];
+}
+
+- (void)setTrackingData:(NSData *)data forTarget:(NSUInteger)target {
+ if (target >= 3) return;
+ NSMutableDictionary *frames = [NSMutableDictionary dictionary];
+ if (data.length && data.length <= 128 * 1024 * 1024) {
+ NSDictionary *archive = [NSPropertyListSerialization propertyListWithData:data options:NSPropertyListImmutable format:nil error:nil];
+ if ([archive isKindOfClass:NSDictionary.class] && [archive[@"version"] isEqual:@1] && [archive[@"frames"] isKindOfClass:NSDictionary.class] && [archive[@"frames"] count] <= 250000) {
+ for (id key in archive[@"frames"]) {
+ id raw = archive[@"frames"][key];
+ if (![key isKindOfClass:NSString.class] || ![raw isKindOfClass:NSDictionary.class]) continue;
+ NSNumber *value = raw[@"value"], *scale = raw[@"scale"], *epoch = raw[@"epoch"];
+ if (![value isKindOfClass:NSNumber.class] || ![scale isKindOfClass:NSNumber.class] || ![epoch isKindOfClass:NSNumber.class] || scale.intValue <= 0) continue;
+ CMTime time = CMTimeMakeWithEpoch(value.longLongValue, scale.intValue, epoch.longLongValue);
+ if (![key isEqualToString:PGTimeKey(time)] || ![raw[@"faces"] isKindOfClass:NSArray.class] || [raw[@"faces"] count] > 16) continue;
+ NSMutableArray *faces = [NSMutableArray array];
+ BOOL valid = YES;
+ for (id geometry in raw[@"faces"]) {
+ NSDictionary *face = PGSanitizedGeometry(geometry);
+ if (!face) { valid = NO; break; }
+ [faces addObject:face];
+ }
+ if (valid) frames[key] = @{@"value":value, @"scale":scale, @"epoch":epoch, @"faces":[faces copy]};
+ }
+ }
+ }
+ [_lock lock];
+ _targets[target] = frames;
+ [_lock unlock];
+}
+
+@end
diff --git a/beatygril/beatygril/Plugin/beatygrilPlugIn.m b/beatygril/beatygril/Plugin/beatygrilPlugIn.m
index f559130..8d308e4 100644
--- a/beatygril/beatygril/Plugin/beatygrilPlugIn.m
+++ b/beatygril/beatygril/Plugin/beatygrilPlugIn.m
@@ -46,7 +46,9 @@ static BOOL PGFail(NSError **error, NSString *message) {
}
static CIImage *PGImageFromTile(FxImageTile *tile) {
if (!tile.ioSurface) return nil;
- NSDictionary *options = tile.colorSpace ? @{kCIImageColorSpace:(__bridge id)tile.colorSpace} : @{};
+ // The host already supplies video-gamma RGB. Keep those numeric values in
+ // every stage; implicit Core Image linearization changes mask thresholds.
+ NSDictionary *options = @{kCIImageColorSpace:NSNull.null};
CIImage *image = [CIImage imageWithIOSurface:(__bridge IOSurfaceRef)tile.ioSurface options:options];
if (tile.imageOrigin == kFxImageOrigin_TOP_LEFT) {
image = [image imageByApplyingTransform:CGAffineTransformMake(1,0,0,-1,0,image.extent.size.height)];
@@ -58,11 +60,13 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
@interface beatygrilPlugIn ()
@property (strong) PGBeautyRenderer *beautyRenderer;
@property (strong) PGFaceProcessor *faceProcessor;
+@property (strong) PGFaceProcessor *analysisFaceProcessor;
@property (strong) NSMutableDictionary *contexts;
@property PGBeautySettings analysisSettings;
@property CMTime analysisTime;
@property NSUInteger analyzedFrames;
@property BOOL analyzing;
+@property BOOL analysisForward;
@property (strong) NSArray *loadedTracks;
@end
@@ -71,6 +75,7 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
if ((self=[super init])) {
_apiManager=manager;
_beautyRenderer=[PGBeautyRenderer new]; _faceProcessor=[PGFaceProcessor new];
+ _analysisFaceProcessor=[PGFaceProcessor new];
_contexts=[NSMutableDictionary new]; _analysisSettings=PGBeautyDefaults();
_analysisTime=kCMTimeZero;
}
@@ -178,7 +183,6 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
if(!state) return PGFail(error,@"缺少渲染状态输出位置。");
if(![_apiManager apiForProtocol:@protocol(FxParameterRetrievalAPI_v6)]) return PGFail(error,@"无法读取宿主参数。");
PGBeautySettings s=[self settingsAtTime:time];
- @synchronized(self) {_analysisTime=time;}
*state=[NSPropertyListSerialization dataWithPropertyList:@{@"settings":[NSData dataWithBytes:&s length:sizeof(s)],@"tracks":[self trackStrings]} format:NSPropertyListBinaryFormat_v1_0 options:0 error:error];
return *state!=nil;
}
@@ -198,21 +202,21 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
for(id candidate in MTLCopyAllDevices()) if(candidate.registryID==tile.deviceRegistryID) {device=candidate;break;}
if(!device) device=MTLCreateSystemDefaultDevice();
if(!device) return nil;
- _contexts[key]=[CIContext contextWithMTLDevice:device options:@{kCIContextCacheIntermediates:@NO}];
+ _contexts[key]=[CIContext contextWithMTLDevice:device options:@{kCIContextCacheIntermediates:@NO,kCIContextWorkingColorSpace:NSNull.null,kCIContextOutputColorSpace:NSNull.null}];
}
return _contexts[key];
}
}
- (BOOL)renderDestinationImage:(FxImageTile *)destination sourceImages:(NSArray *)sources pluginState:(NSData *)state atTime:(CMTime)time error:(NSError **)error {
@autoreleasepool {
- if(sources.count==0||!sources.firstObject.ioSurface||!destination.ioSurface||state.length>16*1024*1024) return PGFail(error,@"宿主传入的画面或状态无效。");
+ if(sources.count==0||!sources.firstObject.ioSurface||!destination.ioSurface||state.length>320*1024*1024) return PGFail(error,@"宿主传入的画面或状态无效。");
NSDictionary *plist=[NSPropertyListSerialization propertyListWithData:state options:NSPropertyListImmutable format:nil error:error];
if(![plist isKindOfClass:NSDictionary.class]||![plist[@"settings"] isKindOfClass:NSData.class]||[plist[@"settings"] length]!=sizeof(PGBeautySettings)) return PGFail(error,@"渲染状态版本无效。");
PGBeautySettings s;[plist[@"settings"] getBytes:&s length:sizeof(s)];
if(s.version!=1) return PGFail(error,@"此版本不支持保存的渲染状态。");
CIImage *input=PGImageFromTile(sources.firstObject); if(!input) return PGFail(error,@"无法读取 IOSurface。");
CIContext *context=[self contextForTile:destination]; if(!context) return PGFail(error,@"没有可用的 Metal 图形设备。");
- CIImage *output=nil;
+ CIImage *output=nil; CIImage *overlay=nil;
@synchronized(_faceProcessor) {
NSArray *tracks=plist[@"tracks"];
if(![tracks isKindOfClass:NSArray.class]||tracks.count!=3) return PGFail(error,@"跟踪状态无效。");
@@ -225,18 +229,21 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
}
PGFaceFrame *frame=[_faceProcessor processImage:input settings:s time:time error:error];
if(!frame) return NO;
- output=[_beautyRenderer processImage:frame.image settings:s skinMask:frame.skinMask teethMask:frame.teethMask eyeMask:frame.eyeMask error:error];
+ PGBeautySettings beauty=s; beauty.mix=1;
+ output=[_beautyRenderer processImage:frame.image settings:beauty skinMask:frame.skinMask teethMask:frame.teethMask eyeMask:frame.eyeMask error:error];
+ overlay=frame.overlayImage;
}
if(!output) return NO;
// Blend from the original frame so zero mix also disables geometry.
if(s.mix<1 && !s.showMask) {
output=[output imageByApplyingFilter:@"CIDissolveTransition" withInputParameters:@{kCIInputTargetImageKey:input,kCIInputTimeKey:@(1-s.mix)}];
}
+ if(overlay && !s.showMask) output=[overlay imageByCompositingOverImage:output];
FxRect b=destination.tilePixelBounds;
output=[output imageByApplyingTransform:CGAffineTransformMakeTranslation(-b.left,-b.bottom)];
size_t width=IOSurfaceGetWidth((__bridge IOSurfaceRef)destination.ioSurface),height=IOSurfaceGetHeight((__bridge IOSurfaceRef)destination.ioSurface);
if(destination.imageOrigin==kFxImageOrigin_TOP_LEFT) output=[output imageByApplyingTransform:CGAffineTransformMake(1,0,0,-1,0,height)];
- @try {[context render:output toIOSurface:(__bridge IOSurfaceRef)destination.ioSurface bounds:CGRectMake(0,0,width,height) colorSpace:destination.colorSpace];}
+ @try {[context render:output toIOSurface:(__bridge IOSurfaceRef)destination.ioSurface bounds:CGRectMake(0,0,width,height) colorSpace:nil];}
@catch(NSException *exception) {return PGFail(error,exception.reason?:@"图像处理失败。");}
return YES;
}
@@ -245,26 +252,49 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
id api=[_apiManager apiForProtocol:@protocol(FxParameterSettingAPI_v5)];
[api setStringParameterValue:status toParameter:PGStatus];
}
+- (CMTime)currentHostTime {
+ id api=[_apiManager apiForProtocol:@protocol(FxCustomParameterActionAPI_v4)];
+ return api ? [api currentTime] : kCMTimeZero;
+}
- (void)startAnalysisForward:(BOOL)forward {
+ if(_analyzing) {[self setStatus:@"请先等待当前分析结束或取消分析。"];return;}
NSError *error=nil;
- PGBeautySettings s=[self settingsAtTime:_analysisTime];
- @synchronized(_faceProcessor) {[_faceProcessor setTrackingData:nil forTarget:s.targetIndex];}
- _analysisSettings=s;_analysisSettings.trackingEnabled=1;_analysisSettings.singleFace=1;
id api=[_apiManager apiForProtocol:@protocol(FxAnalysisAPI)];
+ if(!api) {[self setStatus:@"当前宿主不提供帧分析接口。"];return;}
+ _analysisTime=[self currentHostTime];
+ PGBeautySettings s=[self settingsAtTime:_analysisTime];
+ NSArray *tracks=[self trackStrings];
+ // A separate processor owns the mutable analysis session. Render snapshots
+ // cannot overwrite records being accumulated by the analyzer.
+ _analysisFaceProcessor=[PGFaceProcessor new];
+ [_analysisFaceProcessor setTrackingData:[[NSData alloc] initWithBase64EncodedString:tracks[s.targetIndex] options:0] forTarget:s.targetIndex];
+ _analysisSettings=s;_analysisSettings.trackingEnabled=1;_analysisSettings.singleFace=1;
+ _analysisForward=forward;_analyzing=YES;
BOOL ok=forward?[api startForwardAnalysis:kFxAnalysisLocation_CPU error:&error]:[api startBackwardAnalysis:kFxAnalysisLocation_CPU error:&error];
- [self setStatus:ok?@"正在分析所选人脸…":(error.localizedDescription?:@"当前宿主不提供帧分析接口。")];
+ if(!ok) _analyzing=NO;
+ [self setStatus:ok?@"正在分析所选人脸…":(error.localizedDescription?:@"宿主未能开始帧分析。")];
}
- (void)analyzeForward {[self startAnalysisForward:YES];}
- (void)analyzeBackward {[self startAnalysisForward:NO];}
- (void)clearTracking {
- PGBeautySettings s=[self settingsAtTime:_analysisTime];
+ PGBeautySettings s=[self settingsAtTime:[self currentHostTime]];
@synchronized(_faceProcessor) {[_faceProcessor setTrackingData:nil forTarget:s.targetIndex];_loadedTracks=nil;}
id api=[_apiManager apiForProtocol:@protocol(FxParameterSettingAPI_v5)];
[api setStringParameterValue:@"" toParameter:PGTrackData1+s.targetIndex];
[self setStatus:@"已清除当前目标的分析数据"];
}
- (BOOL)desiredAnalysisTimeRange:(CMTimeRange *)desired forInputWithTimeRange:(CMTimeRange)range error:(NSError **)error {
- if(!desired) return PGFail(error,@"缺少分析时间范围。");*desired=range;return YES;
+ if(!desired) return PGFail(error,@"缺少分析时间范围。");
+ *desired=range;
+ if(CMTIMERANGE_IS_VALID(range) && CMTIME_IS_NUMERIC(_analysisTime) && CMTimeRangeContainsTime(range,_analysisTime)) {
+ if(_analysisForward) *desired=CMTimeRangeFromTimeToTime(_analysisTime,CMTimeRangeGetEnd(range));
+ else {
+ CMTime last=CMTimeAdd(_analysisTime,CMTimeMake(1,MAX(1,_analysisTime.timescale)));
+ if(CMTimeCompare(last,CMTimeRangeGetEnd(range))>0) last=CMTimeRangeGetEnd(range);
+ *desired=CMTimeRangeFromTimeToTime(range.start,last);
+ }
+ }
+ return YES;
}
- (BOOL)setupAnalysisForTimeRange:(CMTimeRange)range frameDuration:(CMTime)duration error:(NSError **)error {
_analyzedFrames=0;_analyzing=YES;return YES;
@@ -272,14 +302,19 @@ static CIImage *PGImageFromTile(FxImageTile *tile) {
- (BOOL)analyzeFrame:(FxImageTile *)frame atTime:(CMTime)time error:(NSError **)error {
CIImage *image=PGImageFromTile(frame);if(!image) return PGFail(error,@"无法读取分析帧。");
BOOL ok=NO;
- @synchronized(_faceProcessor) {ok=[_faceProcessor analyzeImage:image settings:_analysisSettings time:time error:error];}
+ @synchronized(_analysisFaceProcessor) {ok=[_analysisFaceProcessor analyzeImage:image settings:_analysisSettings time:time error:error];}
if(ok) _analyzedFrames++;
return ok;
}
- (BOOL)cleanupAnalysis:(NSError **)error {
id api=[_apiManager apiForProtocol:@protocol(FxParameterSettingAPI_v5)];
NSData *data=nil;
- @synchronized(_faceProcessor) {data=[_faceProcessor trackingDataForTarget:_analysisSettings.targetIndex];_loadedTracks=nil;}
+ @synchronized(_analysisFaceProcessor) {data=[_analysisFaceProcessor trackingDataForTarget:_analysisSettings.targetIndex];}
+ @synchronized(_faceProcessor) {_loadedTracks=nil;}
+ if(data.length>64*1024*1024) {
+ _analyzing=NO;
+ return PGFail(error,@"当前目标的跟踪数据超过 64 MB。请将长素材分段分析;原先保存的数据仍保留。");
+ }
if(data) {
if(![api setStringParameterValue:[data base64EncodedStringWithOptions:0] toParameter:PGTrackData1+_analysisSettings.targetIndex]) return PGFail(error,@"无法将分析数据保存到工程。");
[api setBoolValue:YES toParameter:PGTrackEnabled atTime:_analysisTime];
diff --git a/beatygril/beatygril/Wrapper Application/AppDelegate.m b/beatygril/beatygril/Wrapper Application/AppDelegate.m
index c620866..6e5bb10 100644
--- a/beatygril/beatygril/Wrapper Application/AppDelegate.m
+++ b/beatygril/beatygril/Wrapper Application/AppDelegate.m
@@ -1,27 +1,34 @@
-//
-// AppDelegate.m
-// beatygril
-//
-// Created by dayu on 2026/10/21.
-//
-
#import "AppDelegate.h"
-
@interface AppDelegate ()
-
@property (weak) IBOutlet NSWindow *window;
@end
-
@implementation AppDelegate
-
-- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
- // Insert code here to initialize your application
+- (void)applicationDidFinishLaunching:(NSNotification *)notification {
+ self.window.title=@"大鱼人像美化";
+ [self.window setContentSize:NSMakeSize(600,360)];
+ NSView *content=[NSView new];self.window.contentView=content;
+ NSStackView *stack=[NSStackView new];stack.orientation=NSUserInterfaceLayoutOrientationVertical;
+ stack.alignment=NSLayoutAttributeLeading;stack.spacing=16;stack.translatesAutoresizingMaskIntoConstraints=NO;
+ [content addSubview:stack];
+ [NSLayoutConstraint activateConstraints:@[[stack.leadingAnchor constraintEqualToAnchor:content.leadingAnchor constant:32],[stack.trailingAnchor constraintEqualToAnchor:content.trailingAnchor constant:-32],[stack.topAnchor constraintEqualToAnchor:content.topAnchor constant:30]]];
+ NSTextField *title=[NSTextField labelWithString:@"大鱼人像美化"];
+ title.font=[NSFont systemFontOfSize:28 weight:NSFontWeightSemibold];[stack addArrangedSubview:title];
+ NSTextField *subtitle=[NSTextField labelWithString:@"beatygril · FxPlug 4"];
+ subtitle.textColor=NSColor.secondaryLabelColor;[stack addArrangedSubview:subtitle];
+ NSTextField *description=[NSTextField wrappingLabelWithString:@"在 Motion 的滤镜资源库中选择「大鱼 → 大鱼人像美化」。Final Cut Pro 的效果浏览器中也可使用配套效果。\n\n磨皮、肤色、细节和脸型可分别开关。启用「只处理选中人脸」后,在检视器调整选脸位置,或直接点击画面选脸。选定目标后可向前、向后分析并将跟踪数据保存在工程中。"];
+ description.font=[NSFont systemFontOfSize:13];[stack addArrangedSubview:description];
+ NSStackView *buttons=[NSStackView new];buttons.orientation=NSUserInterfaceLayoutOrientationHorizontal;buttons.spacing=12;
+ [buttons addArrangedSubview:[NSButton buttonWithTitle:@"打开 Motion" target:self action:@selector(openMotion:)]];
+ [buttons addArrangedSubview:[NSButton buttonWithTitle:@"打开 Final Cut Pro" target:self action:@selector(openFinalCut:)]];
+ [stack addArrangedSubview:buttons];
+ NSTextField *note=[NSTextField wrappingLabelWithString:@"建议先调高中频磨皮,再按需调节肤色与脸型。肤色风格为本插件独立调色预设。"];
+ note.textColor=NSColor.secondaryLabelColor;note.font=[NSFont systemFontOfSize:11];[stack addArrangedSubview:note];
+ [self.window center];
}
-
-
-- (void)applicationWillTerminate:(NSNotification *)aNotification {
- // Insert code here to tear down your application
+- (void)openMotion:(id)sender {[self openApplication:@"com.apple.motionapp"];}
+- (void)openFinalCut:(id)sender {[self openApplication:@"com.apple.FinalCut"];}
+- (void)openApplication:(NSString *)identifier {
+ NSURL *url=[NSWorkspace.sharedWorkspace URLForApplicationWithBundleIdentifier:identifier];
+ if(url) [NSWorkspace.sharedWorkspace openApplicationAtURL:url configuration:NSWorkspaceOpenConfiguration.configuration completionHandler:nil];
}
-
-
@end
diff --git a/docs/analysis/rea-host.json b/docs/analysis/rea-host.json
new file mode 100644
index 0000000..9de4431
--- /dev/null
+++ b/docs/analysis/rea-host.json
@@ -0,0 +1 @@
+{"artifacts":[{"architecture":"arm64","digest":{"sha256":"958d2ae106a023febe244397402cdc3f1977cbc529811335fca15b93ed569a10"},"format":"mach-o"}],"captures":[],"environments":[],"providers":[{"id":"ghidra","name":"Ghidra","version":"12.1.4"},{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"}],"records":[{"analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_bf25a1cd9c181e8f034fdee81259118798ae67e640ade71238f4afb707eab142","evidence_links":[],"limitations":["The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.","The imported Program and temporary project are ephemeral and deleted on close. Annotation operations edit session database metadata; original executable bytes are never written.","Cancelling an active Ghidra request terminates its ephemeral database and discards session annotations. The selected target remains open; the next provider query imports the original artifact again.","Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use :0x.","Regex mode uses Java Pattern semantics. Matcher or compiler stack exhaustion returns a resource constraint without closing the session; literal mode avoids regex recursion and returns complete matching values.","macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state."],"locations":[],"normalized_result":[{"address":"0x100000c24","value":"AppDelegate::applicationDidFinishLaunching:"},{"address":"0x100000c28","value":"AppDelegate::mss_configureLaunchArtworkWindow"},{"address":"0x100000eb4","value":"AppDelegate::mss_pixelSizeForImage:"},{"address":"0x10000100c","value":"AppDelegate::mss_backingScaleFactorForScreen:"},{"address":"0x10000104c","value":"AppDelegate::mss_fittedSizeForSize:onScreen:"},{"address":"0x1000010e4","value":"AppDelegate::window"},{"address":"0x1000010ec","value":"AppDelegate::setWindow:"}],"operation":"search_procedures","parameters":{"case_sensitive":false,"mode":"regex","pattern":"(AppDelegate|ViewController|WindowController)"},"predicate_type":"rea.analysis","provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"},"raw_result":[{"address":"0x100000c24","value":"AppDelegate::applicationDidFinishLaunching:"},{"address":"0x100000c28","value":"AppDelegate::mss_configureLaunchArtworkWindow"},{"address":"0x100000eb4","value":"AppDelegate::mss_pixelSizeForImage:"},{"address":"0x10000100c","value":"AppDelegate::mss_backingScaleFactorForScreen:"},{"address":"0x10000104c","value":"AppDelegate::mss_fittedSizeForSize:onScreen:"},{"address":"0x1000010e4","value":"AppDelegate::window"},{"address":"0x1000010ec","value":"AppDelegate::setWindow:"}],"subject":{"architecture":"arm64","digest":{"sha256":"958d2ae106a023febe244397402cdc3f1977cbc529811335fca15b93ed569a10"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-host-arm64","name":"MSE18V2-host-arm64"}},{"analysis_profile":{"digest":"575a577ce88c350b8ef1d4768986d124a16377363cbf22c68a4f73cc917881d4","parameters":{"upstream_analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"workflow_revision":2},"provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"}},"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_e57649ee7791e0ee7f491c2659e8aece223aca06c5a95f45406c5e27e5b0974b","evidence_links":[],"limitations":["Derived by an REA composed workflow."],"locations":[{"address":"0x100000c24","kind":"address"},{"address":"0x100000c28","kind":"address"}],"normalized_result":{"failed":0,"items":[{"address":"0x100000c24","procedure":{"address":"0x100000c24","name":"AppDelegate::applicationDidFinishLaunching:","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x18 bytes */\n\nID __objc_msgSend_stub AppDelegate::applicationDidFinishLaunching_(ID self,...)\n\n{\n ID IVar1;\n \n IVar1 = (*(code *)PTR__objc_msgSend_100004008)(self,\"mss_configureLaunchArtworkWindow\");\n return IVar1;\n}\n\n","status":"ok"},{"address":"0x100000c28","procedure":{"address":"0x100000c28","name":"AppDelegate::mss_configureLaunchArtworkWindow","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x10 bytes */\n\nvoid AppDelegate::mss_configureLaunchArtworkWindow(ID param_1,SEL param_2)\n\n{\n ID IVar1;\n ID IVar2;\n double extraout_d0;\n double dVar3;\n undefined8 extraout_d0_00;\n undefined8 uVar5;\n CGSize CVar6;\n CGSize CVar7;\n double dVar4;\n \n IVar1 = window(param_1);\n if (IVar1 == 0) {\n return;\n }\n IVar1 = NSImage::imageNamed_((ID)&_OBJC_CLASS___NSImage,&cf_cNz_ofV);\n if (IVar1 == 0) {\n IVar1 = NSBundle::mainBundle((ID)&_OBJC_CLASS___NSBundle);\n IVar1 = NSBundle::pathForResource_ofType_(IVar1,&cf_cNz_ofV,&cf_png);\n IVar2 = NSBundle::length(IVar1);\n if (IVar2 == 0) {\n return;\n }\n IVar2 = _objc_alloc(&_OBJC_CLASS___NSImage);\n IVar1 = NSImage::initWithContentsOfFile_(IVar2,IVar1);\n if (IVar1 == 0) {\n return;\n }\n }\n CVar6 = mss_pixelSizeForImage_(param_1,IVar1);\n dVar3 = CVar6.field1_0x8;\n if ((CVar6.field0_0x0 <= 0.0) || (dVar3 <= 0.0)) {\n NSImage::size(IVar1);\n CVar6.field1_0x8 = dVar3;\n CVar6.field0_0x0 = extraout_d0;\n }\n if ((0.0 < CVar6.field0_0x0) && (0.0 < CVar6.field1_0x8)) {\n IVar2 = window(param_1);\n IVar2 = objc_stub::screen(IVar2);\n if ((IVar2 == 0) && (IVar2 = NSScreen::mainScreen((ID)&_OBJC_CLASS___NSScreen), IVar2 == 0)) {\n IVar2 = NSScreen::screens((ID)&_OBJC_CLASS___NSScreen);\n IVar2 = NSScreen::firstObject(IVar2);\n }\n dVar3 = mss_backingScaleFactorForScreen_(param_1,IVar2);\n CVar7.field1_0x8 = CVar6.field1_0x8 / dVar3;\n CVar7.field0_0x0 = CVar6.field0_0x0 / dVar3;\n CVar6 = mss_fittedSizeForSize_onScreen_(param_1,CVar7,IVar2);\n dVar4 = CVar6.field1_0x8;\n dVar3 = CVar6.field0_0x0;\n IVar2 = _objc_alloc(&_OBJC_CLASS___NSImageView);\n IVar2 = NSImageView::initWithFrame_(IVar2,0,0,dVar3,dVar4);\n NSImageView::setImage_(IVar2,IVar1);\n NSImageView::setImageScaling_(IVar2,3);\n NSImageView::setImageAlignment_(IVar2,0);\n IVar1 = window(param_1);\n objc_stub::setContentView_(IVar1,IVar2);\n IVar1 = window(param_1);\n objc_stub::setTitle_(IVar1,&cf_MSE18V2);\n IVar1 = window(param_1);\n objc_stub::setContentAspectRatio_(IVar1,dVar3,dVar4);\n IVar1 = window(param_1);\n objc_stub::setContentMinSize_(IVar1,dVar3,dVar4);\n IVar1 = window(param_1);\n objc_stub::setContentMaxSize_(IVar1,dVar3,dVar4);\n IVar1 = window(param_1);\n IVar2 = objc_stub::styleMask(IVar1);\n objc_stub::setStyleMask_(IVar1,IVar2 & 0xfffffffffffffff7);\n IVar1 = window(param_1);\n uVar5 = 0;\n objc_stub::frameRectForContentRect_(IVar1,0,0,dVar3,dVar4);\n IVar1 = window(param_1);\n objc_stub::setFrame_display_(IVar1,extraout_d0_00,uVar5,CVar6.field0_0x0,CVar6.field1_0x8,1);\n IVar1 = window(param_1);\n objc_stub::center(IVar1);\n IVar1 = window(param_1);\n objc_stub::makeKeyAndOrderFront_(IVar1,0);\n objc_stub::activateIgnoringOtherApps_(*(ID *)PTR__NSApp_100004020,1);\n return;\n }\n return;\n}\n\n","status":"ok"}],"succeeded":2,"total":2},"operation":"batch_decompile","parameters":{"addresses":["0x100000c24","0x100000c28"]},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":"arm64","digest":{"sha256":"958d2ae106a023febe244397402cdc3f1977cbc529811335fca15b93ed569a10"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-host-arm64","name":"MSE18V2-host-arm64"}}],"scenarios":[],"unknowns":[]}
\ No newline at end of file
diff --git a/docs/analysis/rea-plugin.json b/docs/analysis/rea-plugin.json
new file mode 100644
index 0000000..79bcafb
--- /dev/null
+++ b/docs/analysis/rea-plugin.json
@@ -0,0 +1 @@
+{"artifacts":[{"architecture":"arm64","digest":{"sha256":"6c5d74bc844a5c5f745718b48ea10ec6635d08aa08a5b6dc6e62653980849f8a"},"format":"mach-o"},{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o"}],"captures":[],"environments":[],"providers":[{"id":"ghidra","name":"Ghidra","version":"12.1.4"},{"id":"native-macos","name":"macOS native inspection utilities","version":null},{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"}],"records":[{"analysis_profile":{"digest":"575a577ce88c350b8ef1d4768986d124a16377363cbf22c68a4f73cc917881d4","parameters":{"upstream_analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"workflow_revision":2},"provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"}},"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_0ea0cc3a7596fe3d6f4023cc4ab539bb81f65c6fdb3f28074712847e9dd048b8","evidence_links":[],"limitations":["Derived by an REA composed workflow."],"locations":[{"address":"0x1000353b0","kind":"address"},{"address":"0x1000370a0","kind":"address"},{"address":"0x1000373ec","kind":"address"},{"address":"0x100035c2c","kind":"address"}],"normalized_result":{"failed":0,"items":[{"address":"0x1000353b0","procedure":{"address":"0x1000353b0","name":"YUCIHighPassSkinSmoothingMaskGenerator::outputImage","status":"resolved"},"pseudocode":"\n/* WARNING: Function: _objc_autorelease replaced with injection: _objc_retain_fixup */\n/* Function Stack Size: 0x10 bytes */\n\nID YUCIHighPassSkinSmoothingMaskGenerator::outputImage(ID param_1,SEL param_2)\n\n{\n ID IVar1;\n ID IVar2;\n class_t *pcVar3;\n class_t *self;\n \n IVar1 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIExposureAdjust);\n IVar2 = inputImage(param_1);\n CIFilter::setValue_forKey_(IVar1,IVar2,*(undefined8 *)PTR__kCIInputImageKey_1000781a8);\n CIFilter::setValue_forKey_\n (IVar1,&PTR__OBJC_CLASS___NSConstantDoubleNumber_10007d848,\n *(undefined8 *)PTR__kCIInputEVKey_1000781a0);\n pcVar3 = &objc::class_t::YUCIGreenBlueChannelOverlayBlend;\n _objc_alloc_init();\n IVar1 = CIFilter::outputImage(IVar1);\n objc_stub::setInputImage_((ID)pcVar3,IVar1);\n self = &objc::class_t::YUCIHighPass;\n _objc_alloc_init();\n IVar1 = objc_stub::outputImage((ID)pcVar3);\n objc_stub::setInputImage_((ID)self,IVar1);\n IVar1 = inputRadius(param_1);\n objc_stub::setInputRadius_((ID)self,IVar1);\n pcVar3 = &objc::class_t::YUCIHighPassSkinSmoothingMaskBoost;\n _objc_alloc_init();\n IVar1 = objc_stub::outputImage((ID)self);\n objc_stub::setInputImage_((ID)pcVar3,IVar1);\n IVar1 = objc_stub::outputImage((ID)pcVar3);\n return IVar1;\n}\n\n","status":"ok"},{"address":"0x1000370a0","procedure":{"address":"0x1000370a0","name":"FUN_1000370a0","status":"resolved"},"pseudocode":"\nvoid FUN_1000370a0(double param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,\n ID param_5,undefined8 param_6)\n\n{\n ID IVar1;\n ID IVar2;\n ID IVar3;\n undefined8 uVar4;\n undefined8 uVar5;\n ID IVar6;\n double dVar7;\n double dVar8;\n double dVar9;\n double dVar10;\n undefined8 extraout_d0;\n double dVar11;\n double dVar12;\n ID local_b8;\n ID IStack_b0;\n ID local_a8;\n ID local_a0;\n long local_98;\n \n local_98 = *(long *)PTR____stack_chk_guard_1000780b8;\n if (param_5 != 0) {\n dVar7 = 1.0;\n if (param_1 <= 1.0) {\n dVar7 = param_1;\n }\n dVar8 = 0.0;\n if (0.0 <= param_1) {\n dVar8 = dVar7 + dVar7;\n }\n dVar7 = 2.0;\n if (dVar8 <= 2.0) {\n dVar7 = dVar8;\n }\n dVar11 = 0.0;\n if (0.0 <= dVar8) {\n dVar11 = dVar7;\n }\n IVar6 = param_5;\n if (2.220446049250313e-16 < dVar11) {\n dVar11 = dVar11 * 0.5;\n dVar7 = dVar11;\n _pow(dVar11,0x4001333333333333);\n dVar8 = dVar11;\n _pow(dVar11,0x3fe70a3d70a3d70a);\n dVar9 = dVar11 * 3.15 + 1.45 + 0.825 + dVar7 * 0.95;\n dVar10 = 7.4;\n if (dVar9 <= 7.4) {\n dVar10 = dVar9;\n }\n dVar12 = 0.8;\n if (0.8 <= dVar9) {\n dVar12 = dVar10;\n }\n IVar1 = objc_stub::imageByClampingToExtent(param_5);\n IVar2 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIGaussianBlur);\n uVar4 = *(undefined8 *)PTR__kCIInputImageKey_1000781a8;\n CIFilter::setValue_forKey_(IVar2,IVar1,uVar4);\n IVar3 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar12);\n uVar5 = *(undefined8 *)PTR__kCIInputRadiusKey_1000781b8;\n CIFilter::setValue_forKey_(IVar2,IVar3,uVar5);\n IVar2 = CIFilter::outputImage(IVar2);\n objc_stub::extent(param_5);\n IVar2 = CIFilter::imageByCroppingToRect_(IVar2);\n if (IVar2 != 0) {\n dVar10 = (dVar11 * 0.45 + 2.55) * dVar12 + 1.1 + dVar7 * 1.3;\n dVar11 = 16.0;\n if (dVar10 <= 16.0) {\n dVar11 = dVar10;\n }\n dVar9 = dVar12 + 0.8;\n if (dVar12 + 0.8 <= dVar10) {\n dVar9 = dVar11;\n }\n IVar3 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIGaussianBlur);\n CIFilter::setValue_forKey_(IVar3,IVar1,uVar4);\n IVar1 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar9);\n CIFilter::setValue_forKey_(IVar3,IVar1,uVar5);\n IVar1 = CIFilter::outputImage(IVar3);\n objc_stub::extent(param_5);\n IVar1 = CIFilter::imageByCroppingToRect_(IVar1);\n if (IVar1 != 0) {\n if (DAT_1000890b0 != -1) {\n FUN_100054990();\n }\n IVar3 = DAT_1000890a8;\n if (DAT_1000890a8 != 0) {\n uVar4 = 0x3ff4000000000000;\n objc_stub::extent(param_5);\n local_b8 = param_5;\n IStack_b0 = IVar2;\n local_a8 = IVar1;\n local_a0 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,dVar8 * 2.4 + 0.12 + dVar7 * 1.25);\n IVar1 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_b8,4);\n IVar1 = objc_stub::applyWithExtent_arguments_\n (IVar3,extraout_d0,uVar4,dVar11,param_4,IVar1);\n if (IVar1 != 0) {\n IVar6 = IVar1;\n }\n }\n }\n }\n }\n IVar1 = IVar6;\n FUN_100037714(IVar6,param_5,param_6);\n param_5 = IVar6;\n if (IVar1 != 0) {\n param_5 = IVar1;\n }\n }\n if (*(long *)PTR____stack_chk_guard_1000780b8 == local_98) {\n return;\n }\n /* WARNING: Subroutine does not return */\n ___stack_chk_fail(param_5);\n}\n\n","status":"ok"},{"address":"0x1000373ec","procedure":{"address":"0x1000373ec","name":"FUN_1000373ec","status":"resolved"},"pseudocode":"\nID FUN_1000373ec(double param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,ID param_5)\n\n{\n ID IVar1;\n ID IVar2;\n ID IVar3;\n undefined8 uVar4;\n undefined8 uVar5;\n double dVar6;\n double dVar7;\n double dVar8;\n undefined8 extraout_d0;\n double dVar9;\n double dVar10;\n double dVar11;\n ID local_a8;\n ID IStack_a0;\n ID local_98;\n ID local_90;\n long local_88;\n \n local_88 = *(long *)PTR____stack_chk_guard_1000780b8;\n if (param_5 != 0) {\n dVar6 = 1.0;\n if (param_1 <= 1.0) {\n dVar6 = param_1;\n }\n dVar9 = 0.0;\n if (0.0 <= param_1) {\n dVar9 = dVar6;\n }\n if (2.220446049250313e-16 < dVar9) {\n dVar9 = dVar9 + dVar9;\n dVar6 = 2.0;\n if (dVar9 <= 2.0) {\n dVar6 = dVar9;\n }\n dVar10 = 0.0;\n if (0.0 <= dVar9) {\n dVar10 = dVar6;\n }\n if (2.220446049250313e-16 < dVar10) {\n dVar10 = dVar10 * 0.5;\n dVar6 = dVar10;\n _pow(dVar10,0x4001333333333333);\n dVar9 = dVar10;\n _pow(dVar10,0x3fe70a3d70a3d70a);\n dVar7 = dVar10 * 3.15 + 1.45 + 0.825 + dVar6 * 0.95;\n dVar8 = 7.4;\n if (dVar7 <= 7.4) {\n dVar8 = dVar7;\n }\n dVar11 = 0.8;\n if (0.8 <= dVar7) {\n dVar11 = dVar8;\n }\n IVar1 = objc_stub::imageByClampingToExtent(param_5);\n IVar2 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIGaussianBlur);\n uVar4 = *(undefined8 *)PTR__kCIInputImageKey_1000781a8;\n CIFilter::setValue_forKey_(IVar2,IVar1,uVar4);\n IVar3 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar11);\n uVar5 = *(undefined8 *)PTR__kCIInputRadiusKey_1000781b8;\n CIFilter::setValue_forKey_(IVar2,IVar3,uVar5);\n IVar2 = CIFilter::outputImage(IVar2);\n objc_stub::extent(param_5);\n IVar2 = CIFilter::imageByCroppingToRect_(IVar2);\n if (IVar2 != 0) {\n dVar8 = (dVar10 * 0.45 + 2.55) * dVar11 + 1.1 + dVar6 * 1.3;\n dVar10 = 16.0;\n if (dVar8 <= 16.0) {\n dVar10 = dVar8;\n }\n dVar7 = dVar11 + 0.8;\n if (dVar11 + 0.8 <= dVar8) {\n dVar7 = dVar10;\n }\n IVar3 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIGaussianBlur);\n CIFilter::setValue_forKey_(IVar3,IVar1,uVar4);\n IVar1 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar7);\n CIFilter::setValue_forKey_(IVar3,IVar1,uVar5);\n IVar1 = CIFilter::outputImage(IVar3);\n objc_stub::extent(param_5);\n IVar1 = CIFilter::imageByCroppingToRect_(IVar1);\n if (IVar1 != 0) {\n if (DAT_1000890c0 != -1) {\n FUN_1000549a4();\n }\n IVar3 = DAT_1000890b8;\n if (DAT_1000890b8 != 0) {\n uVar4 = 0x3ff4000000000000;\n objc_stub::extent(param_5);\n local_a8 = param_5;\n IStack_a0 = IVar2;\n local_98 = IVar1;\n local_90 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,dVar9 * 2.4 + 0.12 + dVar6 * 1.25);\n IVar1 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_a8,4);\n IVar1 = objc_stub::applyWithExtent_arguments_\n (IVar3,extraout_d0,uVar4,dVar10,param_4,IVar1);\n if (IVar1 != 0) {\n param_5 = IVar1;\n }\n }\n }\n }\n }\n }\n }\n if (*(long *)PTR____stack_chk_guard_1000780b8 == local_88) {\n return param_5;\n }\n /* WARNING: Subroutine does not return */\n ___stack_chk_fail();\n}\n\n","status":"ok"},{"address":"0x100035c2c","procedure":{"address":"0x100035c2c","name":"YUCIHighPassSkinSmoothing::setDefaults","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x10 bytes */\n\nvoid YUCIHighPassSkinSmoothing::setDefaults(ID param_1,SEL param_2)\n\n{\n setInputAmount_(param_1,0);\n setInputSkinTonePreset_(param_1,0);\n setInputSkinBrightness_(param_1,0);\n setInputSkinHue_(param_1,0);\n setInputSkinSaturation_(param_1,0);\n setInputMidtoneDetail_(param_1,0);\n setInputHighPassDetail_(param_1,0);\n setInputTeethWhitening_(param_1,0);\n setInputEyeBrightening_(param_1,0);\n setInputRadius_(param_1,0);\n setInputToneCurveControlPoints_(param_1,0);\n setInputSharpnessFactor_(param_1,0);\n setInputMaskThreshold_(param_1,0);\n setInputMaskSoftness_(param_1,0);\n setInputMaskEdgeProtect_(param_1,0);\n setInputShowChannelInfo_(param_1,0);\n setInputDebugChannelMode_(param_1,0);\n setInputInvertMaskChannel_(param_1,0);\n setInputMaskImage_(param_1,0);\n setInputPreviewMaskImage_(param_1,0);\n setInputLocalSmoothingMaskImage_(param_1,0);\n setInputGlobalSmoothingMaskImage_(param_1,0);\n setInputSkinEvenToneMaskImage_(param_1,0);\n setInputTeethMaskImage_(param_1,0);\n setInputEyeMaskImage_(param_1,0);\n setInputEyeMaskActiveExtentVector_(param_1,0);\n return;\n}\n\n","status":"ok"}],"succeeded":4,"total":4},"operation":"batch_decompile","parameters":{"addresses":["0x1000353b0","0x1000370a0","0x1000373ec","0x100035c2c"]},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_1f203b1c982b1cbce6d8f7c28e8557d99d38dc9a77f751d619c85fde67a2b2cc","evidence_links":[],"limitations":["The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.","The imported Program and temporary project are ephemeral and deleted on close. Annotation operations edit session database metadata; original executable bytes are never written.","Cancelling an active Ghidra request terminates its ephemeral database and discards session annotations. The selected target remains open; the next provider query imports the original artifact again.","Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use :0x.","Regex mode uses Java Pattern semantics. Matcher or compiler stack exhaustion returns a resource constraint without closing the session; literal mode avoids regex recursion and returns complete matching values.","macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state."],"locations":[],"normalized_result":[{"address":"0x100016590","value":"MSSuperSkinSmoothingPlugIn::load"},{"address":"0x1000166d0","value":"MSSuperSkinSmoothingPlugIn::initWithAPIManager:"},{"address":"0x100016c64","value":"MSSuperSkinSmoothingPlugIn::dealloc"},{"address":"0x100016e00","value":"MSSuperSkinSmoothingPlugIn::mss_faceThinRememberedPointsForBox:renderTime:source:"},{"address":"0x100018320","value":"MSSuperSkinSmoothingPlugIn::mss_faceThinRenderTimeCanUpdateMemory:"},{"address":"0x100018328","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPoints:forBox:renderTime:source:"},{"address":"0x100018988","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPointSets:boxes:renderTime:source:"},{"address":"0x100018bd0","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018c10","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018f94","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100018fe0","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100019490","value":"MSSuperSkinSmoothingPlugIn::mss_storeRewindFaceReferencePoints:forBox:renderTime:"},{"address":"0x100019830","value":"MSSuperSkinSmoothingPlugIn::mss_clearRewindFaceReferences"},{"address":"0x100019890","value":"MSSuperSkinSmoothingPlugIn::apiManager"},{"address":"0x100019898","value":"MSSuperSkinSmoothingPlugIn::controlPanelValueForPluginAtTime:"},{"address":"0x100019d20","value":"MSSuperSkinSmoothingPlugIn::writeControlPanelValueFromPlugin:atTime:"},{"address":"0x100019d54","value":"MSSuperSkinSmoothingPlugIn::writeControlPanelValueFromPlugin:atTime:refreshCombinedState:"},{"address":"0x10001a430","value":"MSSuperSkinSmoothingPlugIn::mss_syncCompletedFaceTrackCacheFromPanelValue:"},{"address":"0x10001a45c","value":"MSSuperSkinSmoothingPlugIn::analyzedFaceTrackBoxAtTime:panelValue:usedCachedFallback:"},{"address":"0x10001a478","value":"MSSuperSkinSmoothingPlugIn::mss_applyLivePanelStateToParams:atTime:"},{"address":"0x10001a6c8","value":"MSSuperSkinSmoothingPlugIn::pluginVersionString"},{"address":"0x10001a738","value":"MSSuperSkinSmoothingPlugIn::isAuthorizedForCurrentLicense"},{"address":"0x10001a73c","value":"MSSuperSkinSmoothingPlugIn::mss_gateGlyph"},{"address":"0x10001a740","value":"MSSuperSkinSmoothingPlugIn::mss_branchA"},{"address":"0x10001a744","value":"MSSuperSkinSmoothingPlugIn::mss_branchB"},{"address":"0x10001a850","value":"MSSuperSkinSmoothingPlugIn::mss_branchC"},{"address":"0x10001a874","value":"MSSuperSkinSmoothingPlugIn::mss_branchD"},{"address":"0x10001a898","value":"MSSuperSkinSmoothingPlugIn::mss_branchE"},{"address":"0x10001a8bc","value":"MSSuperSkinSmoothingPlugIn::mss_branchF"},{"address":"0x10001a928","value":"MSSuperSkinSmoothingPlugIn::unregisteredOverlayURL"},{"address":"0x10001aae4","value":"MSSuperSkinSmoothingPlugIn::unregisteredOverlayImageForExtent:"},{"address":"0x10001afc0","value":"MSSuperSkinSmoothingPlugIn::unregisteredOverlayTextureForDevice:width:height:"},{"address":"0x10001b37c","value":"MSSuperSkinSmoothingPlugIn::renderUnregisteredOverlayToDestinationImage:device:deviceCache:"},{"address":"0x10001b698","value":"MSSuperSkinSmoothingPlugIn::properties:error:"},{"address":"0x10001b84c","value":"MSSuperSkinSmoothingPlugIn::addParametersWithError:"},{"address":"0x10001bfb4","value":"MSSuperSkinSmoothingPlugIn::pluginState:atTime:quality:error:"},{"address":"0x10001c038","value":"MSSuperSkinSmoothingPlugIn::mss_currentHostTime"},{"address":"0x10001c09c","value":"MSSuperSkinSmoothingPlugIn::mss_requestFaceTrackAnalysisWithPanelValue:"},{"address":"0x10001c0a4","value":"MSSuperSkinSmoothingPlugIn::mss_requestFaceTrackAnalysisWithPanelValue:apiManager:"},{"address":"0x10001c0ac","value":"MSSuperSkinSmoothingPlugIn::mss_startFaceTrackAnalysisFromHostButtonAppendingTarget:"},{"address":"0x10001c0b0","value":"MSSuperSkinSmoothingPlugIn::startFaceTrackAnalysisFromHostButton"},{"address":"0x10001c0b8","value":"MSSuperSkinSmoothingPlugIn::startAdditionalFaceTrackTargetFromHostButton"},{"address":"0x10001c0c0","value":"MSSuperSkinSmoothingPlugIn::mss_startFaceTrackAnalysisDirection:"},{"address":"0x10001c108","value":"MSSuperSkinSmoothingPlugIn::mss_startFaceTrackAnalysisDirection:apiManager:"},{"address":"0x10001c110","value":"MSSuperSkinSmoothingPlugIn::mss_markFaceTrackAnalysisFailedWithReason:error:"},{"address":"0x10001c2fc","value":"MSSuperSkinSmoothingPlugIn::mss_updateFaceTrackAnalysisProgressWithProcessedFrameCount:forceWrite:"},{"address":"0x10001c64c","value":"MSSuperSkinSmoothingPlugIn::desiredAnalysisTimeRange:forInputWithTimeRange:error:"},{"address":"0x10001c66c","value":"MSSuperSkinSmoothingPlugIn::setupAnalysisForTimeRange:frameDuration:error:"},{"address":"0x10001c704","value":"MSSuperSkinSmoothingPlugIn::analyzeFrame:atTime:error:"},{"address":"0x10001c70c","value":"MSSuperSkinSmoothingPlugIn::cleanupAnalysis:"},{"address":"0x10001c7a0","value":"MSSuperSkinSmoothingPlugIn::destinationImageRect:sourceImages:destinationImage:pluginState:atTime:error:"},{"address":"0x10001c810","value":"MSSuperSkinSmoothingPlugIn::sourceTileRect:sourceImageIndex:sourceImages:destinationTileRect:destinationImage:pluginState:atTime:error:"},{"address":"0x10001cba4","value":"MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:"},{"address":"0x1000293b0","value":"MSSuperSkinSmoothingPlugIn::legacyControlPanelValueAtTime:"},{"address":"0x10002973c","value":"MSSuperSkinSmoothingPlugIn::populateParams:atTime:error:"},{"address":"0x10002aa78","value":"MSSuperSkinSmoothingPlugIn::createViewForParameterID:"},{"address":"0x10002abf4","value":"MSSuperSkinSmoothingPlugIn::classForCustomParameterID:"},{"address":"0x10002ac10","value":"MSSuperSkinSmoothingPlugIn::classesForCustomParameterID:"},{"address":"0x10002ac3c","value":"MSSuperSkinSmoothingPlugIn::temporallyStabilizedEyeBrighteningMaskImage:inputImage:activeExtent:activeExtentOut:renderTime:"},{"address":"0x10002ae04","value":"MSSuperSkinSmoothingPlugIn::applySkinSmoothingToImage:params:renderTime:faceObservations:selectedFacePoints:"},{"address":"0x10002e094","value":"MSSuperSkinSmoothingPlugIn::resetTemporalMaskCache"},{"address":"0x10002e150","value":"MSSuperSkinSmoothingPlugIn::playbackStabilizedMaskImageFromInputImage:params:renderTime:trackingGrayBytes:trackingGrayWidth:trackingGrayHeight:trackingAlphaBytes:trackingAlphaWidth:trackingAlphaHeight:previewMaskImage:rawPreviewSmallMaskImage:maskImage:smoothCarrierImageOut:"},{"address":"0x10002e164","value":"MSSuperSkinSmoothingPlugIn::stabilizedMaskImageFromMaskImage:params:renderTime:"},{"address":"0x10002e4f4","value":"MSSuperSkinSmoothingPlugIn::cachedFaceObservationsForInputImage:inputSurface:sourceTileRect:renderTime:allowForwardReuse:"},{"address":"0x10002e9f0","value":"MSSuperSkinSmoothingPlugIn::cachedFaceRectangleObservationsForInputImage:inputSurface:sourceTileRect:renderTime:allowForwardReuse:"},{"address":"0x10002ee74","value":"MSSuperSkinSmoothingPlugIn::trackedFaceBoxForInputImage:renderTime:selectedObservation:shouldTrack:"},{"address":"0x10002f58c","value":"MSSuperSkinSmoothingPlugIn::deterministicFacePointsForObservations:params:selectedObservationOut:strengthMultiplierOut:"},{"address":"0x10002f700","value":"MSSuperSkinSmoothingPlugIn::temporalFacePointsForObservations:renderTime:params:selectedObservationOut:strengthMultiplierOut:pointsBoxOut:"}],"operation":"search_procedures","parameters":{"case_sensitive":false,"mode":"literal","pattern":"MSSuperSkinSmoothingPlugIn"},"predicate_type":"rea.analysis","provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"},"raw_result":[{"address":"0x100016590","value":"MSSuperSkinSmoothingPlugIn::load"},{"address":"0x1000166d0","value":"MSSuperSkinSmoothingPlugIn::initWithAPIManager:"},{"address":"0x100016c64","value":"MSSuperSkinSmoothingPlugIn::dealloc"},{"address":"0x100016e00","value":"MSSuperSkinSmoothingPlugIn::mss_faceThinRememberedPointsForBox:renderTime:source:"},{"address":"0x100018320","value":"MSSuperSkinSmoothingPlugIn::mss_faceThinRenderTimeCanUpdateMemory:"},{"address":"0x100018328","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPoints:forBox:renderTime:source:"},{"address":"0x100018988","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPointSets:boxes:renderTime:source:"},{"address":"0x100018bd0","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018c10","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018f94","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100018fe0","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100019490","value":"MSSuperSkinSmoothingPlugIn::mss_storeRewindFaceReferencePoints:forBox:renderTime:"},{"address":"0x100019830","value":"MSSuperSkinSmoothingPlugIn::mss_clearRewindFaceReferences"},{"address":"0x100019890","value":"MSSuperSkinSmoothingPlugIn::apiManager"},{"address":"0x100019898","value":"MSSuperSkinSmoothingPlugIn::controlPanelValueForPluginAtTime:"},{"address":"0x100019d20","value":"MSSuperSkinSmoothingPlugIn::writeControlPanelValueFromPlugin:atTime:"},{"address":"0x100019d54","value":"MSSuperSkinSmoothingPlugIn::writeControlPanelValueFromPlugin:atTime:refreshCombinedState:"},{"address":"0x10001a430","value":"MSSuperSkinSmoothingPlugIn::mss_syncCompletedFaceTrackCacheFromPanelValue:"},{"address":"0x10001a45c","value":"MSSuperSkinSmoothingPlugIn::analyzedFaceTrackBoxAtTime:panelValue:usedCachedFallback:"},{"address":"0x10001a478","value":"MSSuperSkinSmoothingPlugIn::mss_applyLivePanelStateToParams:atTime:"},{"address":"0x10001a6c8","value":"MSSuperSkinSmoothingPlugIn::pluginVersionString"},{"address":"0x10001a738","value":"MSSuperSkinSmoothingPlugIn::isAuthorizedForCurrentLicense"},{"address":"0x10001a73c","value":"MSSuperSkinSmoothingPlugIn::mss_gateGlyph"},{"address":"0x10001a740","value":"MSSuperSkinSmoothingPlugIn::mss_branchA"},{"address":"0x10001a744","value":"MSSuperSkinSmoothingPlugIn::mss_branchB"},{"address":"0x10001a850","value":"MSSuperSkinSmoothingPlugIn::mss_branchC"},{"address":"0x10001a874","value":"MSSuperSkinSmoothingPlugIn::mss_branchD"},{"address":"0x10001a898","value":"MSSuperSkinSmoothingPlugIn::mss_branchE"},{"address":"0x10001a8bc","value":"MSSuperSkinSmoothingPlugIn::mss_branchF"},{"address":"0x10001a928","value":"MSSuperSkinSmoothingPlugIn::unregisteredOverlayURL"},{"address":"0x10001aae4","value":"MSSuperSkinSmoothingPlugIn::unregisteredOverlayImageForExtent:"},{"address":"0x10001afc0","value":"MSSuperSkinSmoothingPlugIn::unregisteredOverlayTextureForDevice:width:height:"},{"address":"0x10001b37c","value":"MSSuperSkinSmoothingPlugIn::renderUnregisteredOverlayToDestinationImage:device:deviceCache:"},{"address":"0x10001b698","value":"MSSuperSkinSmoothingPlugIn::properties:error:"},{"address":"0x10001b84c","value":"MSSuperSkinSmoothingPlugIn::addParametersWithError:"},{"address":"0x10001bfb4","value":"MSSuperSkinSmoothingPlugIn::pluginState:atTime:quality:error:"},{"address":"0x10001c038","value":"MSSuperSkinSmoothingPlugIn::mss_currentHostTime"},{"address":"0x10001c09c","value":"MSSuperSkinSmoothingPlugIn::mss_requestFaceTrackAnalysisWithPanelValue:"},{"address":"0x10001c0a4","value":"MSSuperSkinSmoothingPlugIn::mss_requestFaceTrackAnalysisWithPanelValue:apiManager:"},{"address":"0x10001c0ac","value":"MSSuperSkinSmoothingPlugIn::mss_startFaceTrackAnalysisFromHostButtonAppendingTarget:"},{"address":"0x10001c0b0","value":"MSSuperSkinSmoothingPlugIn::startFaceTrackAnalysisFromHostButton"},{"address":"0x10001c0b8","value":"MSSuperSkinSmoothingPlugIn::startAdditionalFaceTrackTargetFromHostButton"},{"address":"0x10001c0c0","value":"MSSuperSkinSmoothingPlugIn::mss_startFaceTrackAnalysisDirection:"},{"address":"0x10001c108","value":"MSSuperSkinSmoothingPlugIn::mss_startFaceTrackAnalysisDirection:apiManager:"},{"address":"0x10001c110","value":"MSSuperSkinSmoothingPlugIn::mss_markFaceTrackAnalysisFailedWithReason:error:"},{"address":"0x10001c2fc","value":"MSSuperSkinSmoothingPlugIn::mss_updateFaceTrackAnalysisProgressWithProcessedFrameCount:forceWrite:"},{"address":"0x10001c64c","value":"MSSuperSkinSmoothingPlugIn::desiredAnalysisTimeRange:forInputWithTimeRange:error:"},{"address":"0x10001c66c","value":"MSSuperSkinSmoothingPlugIn::setupAnalysisForTimeRange:frameDuration:error:"},{"address":"0x10001c704","value":"MSSuperSkinSmoothingPlugIn::analyzeFrame:atTime:error:"},{"address":"0x10001c70c","value":"MSSuperSkinSmoothingPlugIn::cleanupAnalysis:"},{"address":"0x10001c7a0","value":"MSSuperSkinSmoothingPlugIn::destinationImageRect:sourceImages:destinationImage:pluginState:atTime:error:"},{"address":"0x10001c810","value":"MSSuperSkinSmoothingPlugIn::sourceTileRect:sourceImageIndex:sourceImages:destinationTileRect:destinationImage:pluginState:atTime:error:"},{"address":"0x10001cba4","value":"MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:"},{"address":"0x1000293b0","value":"MSSuperSkinSmoothingPlugIn::legacyControlPanelValueAtTime:"},{"address":"0x10002973c","value":"MSSuperSkinSmoothingPlugIn::populateParams:atTime:error:"},{"address":"0x10002aa78","value":"MSSuperSkinSmoothingPlugIn::createViewForParameterID:"},{"address":"0x10002abf4","value":"MSSuperSkinSmoothingPlugIn::classForCustomParameterID:"},{"address":"0x10002ac10","value":"MSSuperSkinSmoothingPlugIn::classesForCustomParameterID:"},{"address":"0x10002ac3c","value":"MSSuperSkinSmoothingPlugIn::temporallyStabilizedEyeBrighteningMaskImage:inputImage:activeExtent:activeExtentOut:renderTime:"},{"address":"0x10002ae04","value":"MSSuperSkinSmoothingPlugIn::applySkinSmoothingToImage:params:renderTime:faceObservations:selectedFacePoints:"},{"address":"0x10002e094","value":"MSSuperSkinSmoothingPlugIn::resetTemporalMaskCache"},{"address":"0x10002e150","value":"MSSuperSkinSmoothingPlugIn::playbackStabilizedMaskImageFromInputImage:params:renderTime:trackingGrayBytes:trackingGrayWidth:trackingGrayHeight:trackingAlphaBytes:trackingAlphaWidth:trackingAlphaHeight:previewMaskImage:rawPreviewSmallMaskImage:maskImage:smoothCarrierImageOut:"},{"address":"0x10002e164","value":"MSSuperSkinSmoothingPlugIn::stabilizedMaskImageFromMaskImage:params:renderTime:"},{"address":"0x10002e4f4","value":"MSSuperSkinSmoothingPlugIn::cachedFaceObservationsForInputImage:inputSurface:sourceTileRect:renderTime:allowForwardReuse:"},{"address":"0x10002e9f0","value":"MSSuperSkinSmoothingPlugIn::cachedFaceRectangleObservationsForInputImage:inputSurface:sourceTileRect:renderTime:allowForwardReuse:"},{"address":"0x10002ee74","value":"MSSuperSkinSmoothingPlugIn::trackedFaceBoxForInputImage:renderTime:selectedObservation:shouldTrack:"},{"address":"0x10002f58c","value":"MSSuperSkinSmoothingPlugIn::deterministicFacePointsForObservations:params:selectedObservationOut:strengthMultiplierOut:"},{"address":"0x10002f700","value":"MSSuperSkinSmoothingPlugIn::temporalFacePointsForObservations:renderTime:params:selectedObservationOut:strengthMultiplierOut:pointsBoxOut:"}],"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":null,"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_3bb1e4ae7389cb232ee25afbc0c8c2c650feb67b316da02b63252dc26ce38b4f","evidence_links":[],"limitations":[],"locations":[{"kind":"artifact-path","path":"/Applications/MSE18V2.app/Contents/Info.plist"}],"normalized_result":{"bundle":{"executable":"MSE18V2","identifier":"com.ms.plugins.mse18v2.host","name":"MSE18V2","short_version":"1.0.20260617-170517","version":"20260617170517"},"format":"xml","limitations":[],"provenance":[{"command":["/usr/bin/file","-b","$PLIST"],"executable_sha256":"ea15c704c7775a47093dedbf36ff6b302acfc2e8aa64e95819c6ddd3e133c073","exit":{"code":0,"signal":null},"stderr_bytes":0,"stdout_bytes":34,"tool":"file","tool_version":null,"version_reason":"Tool exposes no uniform stable version flag; executable SHA-256 is a prelaunch file sample and does not prove atomic OS image binding."},{"command":["/usr/bin/plutil","-convert","json","-o","-","--","$PLIST"],"executable_sha256":"a1a6b15ead16a5a3238dbe6a6db403969e34d47b737e143911248a6ba22698cc","exit":{"code":0,"signal":null},"stderr_bytes":0,"stdout_bytes":763,"tool":"plutil","tool_version":null,"version_reason":"Tool exposes no uniform stable version flag; executable SHA-256 is a prelaunch file sample and does not prove atomic OS image binding."}],"source_path":"/Applications/MSE18V2.app/Contents/Info.plist","value":{"BuildMachineOSBuild":"24G419","CFBundleDevelopmentRegion":"en","CFBundleDisplayName":"MSE18V2","CFBundleExecutable":"MSE18V2","CFBundleIdentifier":"com.ms.plugins.mse18v2.host","CFBundleInfoDictionaryVersion":"6.0","CFBundleName":"MSE18V2","CFBundlePackageType":"APPL","CFBundleShortVersionString":"1.0.20260617-170517","CFBundleSupportedPlatforms":["MacOSX"],"CFBundleVersion":"20260617170517","DTCompiler":"com.apple.compilers.llvm.clang.1_0","DTPlatformBuild":"24F74","DTPlatformName":"macosx","DTPlatformVersion":"15.5","DTSDKBuild":"24F74","DTSDKName":"macosx15.5","DTXcode":"1640","DTXcodeBuild":"16F6","LSApplicationCategoryType":"public.app-category.video","LSMinimumSystemVersion":"11.5.1","NSMainNibFile":"MainMenu","NSPrincipalClass":"NSApplication"}},"operation":"inspect_plist","parameters":{"path":"/Applications/MSE18V2.app/Contents/Info.plist"},"predicate_type":"rea.analysis","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"raw_result":null,"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":{"digest":"575a577ce88c350b8ef1d4768986d124a16377363cbf22c68a4f73cc917881d4","parameters":{"upstream_analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"workflow_revision":2},"provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"}},"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_4ab9fb8e1643d141ad84355f7fde14e9269f94adadf9348b1175bf308cbcb7c1","evidence_links":[],"limitations":["Derived by an REA composed workflow."],"locations":[{"address":"0x10001b84c","kind":"address"},{"address":"0x10002973c","kind":"address"},{"address":"0x10002ae04","kind":"address"},{"address":"0x10001b698","kind":"address"}],"normalized_result":{"failed":0,"items":[{"address":"0x10001b84c","procedure":{"address":"0x10001b84c","name":"MSSuperSkinSmoothingPlugIn::addParametersWithError:","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x18 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::addParametersWithError_(ID param_1,SEL param_2,ID *param_3)\n\n{\n cfstringStruct *pcVar1;\n ID self;\n ID IVar2;\n class_t *pcVar3;\n ID IVar4;\n ID IVar5;\n cfstringStruct *pcVar6;\n \n self = objc_stub::apiForProtocol_\n (*(ID *)(param_1 + 8),&objc::protocol_t::FxParameterCreationAPI_v5);\n if (self == 0) {\n if (param_3 != (ID *)0x0) {\n pcVar6 = &cf_UnabletogetFxParameterCreationAPI_v5;\n FUN_10001b7ac();\n *param_3 = (ID)pcVar6;\n }\n goto LAB_10001bf88;\n }\n IVar2 = MSSSectionCardParameterValue::defaultValue\n ((ID)&objc::class_t::MSSSectionCardParameterValue);\n objc_stub::addCustomParameterWithName_parameterID_defaultValue_parameterFlags_\n (self,&cf___,0xd2,IVar2,0x861);\n objc_stub::\n addPercentSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0x3ff0000000000000,0,0x3ff0000000000000,0,0x3ff0000000000000,0x3f847ae147ae147b,\n &cf_xv___,1,0x23);\n objc_stub::\n addPercentSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0,0,0x3ff0000000000000,0,0x3ff0000000000000,0x3f847ae147ae147b,&cf_rN_,2,0x23);\n objc_stub::\n addPercentSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0,0,0x3ff0000000000000,0,0x3ff0000000000000,0x3f847ae147ae147b,&cf___xv,0xc,0x23);\n objc_stub::addToggleButtonWithName_parameterID_defaultValue_parameterFlags_\n (self,&cf_N_Ob,0x1e,1,0x23);\n objc_stub::\n addPercentSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0,0,0x3ff0000000000000,0,0x3ff0000000000000,0x3f847ae147ae147b,&cf_hQ__xv,0x11,\n 0x23);\n objc_stub::\n addPercentSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0,0,0x3ff0000000000000,0,0x3ff0000000000000,0x3f847ae147ae147b,&cf__vYr,0x1f,0x23)\n ;\n objc_stub::\n addPercentSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0,0,0x3ff0000000000000,0,0x3ff0000000000000,0x3f847ae147ae147b,&cf_Nf_ySOo_,10,0,0x23);\n objc_stub::addToggleButtonWithName_parameterID_defaultValue_parameterFlags_\n (self,&cf_hKmFh,0x13,0,0x23);\n objc_stub::addToggleButtonWithName_parameterID_defaultValue_parameterFlags_\n (self,&cf_hKmFhr_,0x23,0,0x23);\n objc_stub::addToggleButtonWithName_parameterID_defaultValue_parameterFlags_\n (self,&cfstringStruct_10007b638,0x27,0,0x23);\n objc_stub::\n addFloatSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0x3ffccccccccccccd,0x3ff0000000000000,0x4010000000000000,0x3ff0000000000000,\n 0x4010000000000000,0x3fa999999999999a,&cf_28V,0x28,0x23);\n objc_stub::addToggleButtonWithName_parameterID_defaultValue_parameterFlags_\n (self,&cf_USNb,0x14,0,0x23);\n objc_stub::addPointParameterWithName_parameterID_defaultX_defaultY_parameterFlags_\n (self,0x3fe0000000000000,0x3fe0000000000000,&cf_8p,0x15,0x23);\n objc_stub::\n addFloatSliderWithName_parameterID_defaultValue_parameterMin_parameterMax_sliderMin_sliderMax_delta_parameterFlags_\n (self,0,0,0x3ff0000000000000,0,0x3ff0000000000000,0x3ff0000000000000,&cf_S__W,0xd,0x23);\n objc_stub::addToggleButtonWithName_parameterID_defaultValue_parameterFlags_\n (self,&cf_SlrS,0xb,0,0x23);\n pcVar3 = &objc::class_t::MSSuperSkinSmoothingPlugIn;\n _objc_opt_class(&objc::class_t::MSSuperSkinSmoothingPlugIn);\n IVar2 = NSBundle::bundleForClass_((ID)&_OBJC_CLASS___NSBundle,pcVar3);\n IVar4 = NSBundle::objectForInfoDictionaryKey_(IVar2,&cf_CFBundleShortVersionString);\n IVar2 = NSBundle::objectForInfoDictionaryKey_(IVar2,&cf_infoString);\n IVar5 = NSBundle::length(IVar4);\n if ((IVar5 == 0) || (IVar5 = NSBundle::length(IVar2), IVar5 == 0)) {\n IVar4 = NSBundle::length(IVar4);\n if ((IVar4 != 0) || (IVar2 = NSBundle::length(IVar2), IVar2 != 0)) {\n pcVar6 = &cf_Build__;\n goto override_prt_10001bf64_6e7d234f;\n }\n pcVar6 = &cf_Buildinfounavailable;\n }\n else {\n pcVar6 = &cf_Build______;\noverride_prt_10001bf64_6e7d234f:\n pcVar6 = (cfstringStruct *)NSString::stringWithFormat_((ID)&_OBJC_CLASS___NSString,pcVar6);\n }\n pcVar1 = &cf___;\n if (pcVar6 != (cfstringStruct *)0x0) {\n pcVar1 = pcVar6;\n }\n objc_stub::addStringParameterWithName_parameterID_defaultValue_parameterFlags_\n (self,&cf_Hr_gOo_,6,pcVar1,0x37);\nLAB_10001bf88:\n return (bool)(self != 0);\n}\n\n","status":"ok"},{"address":"0x10002973c","procedure":{"address":"0x10002973c","name":"MSSuperSkinSmoothingPlugIn::populateParams:atTime:error:","status":"resolved"},"pseudocode":"\n/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */\n/* Function Stack Size: 0x38 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::populateParams_atTime_error_\n (ID param_1,SEL param_2,AnonymousStructure6 *param_3,AnonymousStructure0 param_4,\n ID *param_5)\n\n{\n long_long lVar1;\n bool bVar2;\n undefined1 uVar3;\n bool bVar4;\n ID self;\n ID IVar5;\n ID IVar6;\n class_t *pcVar7;\n ulong uVar8;\n ulong self_00;\n cfstringStruct *pcVar9;\n ID IVar10;\n double dVar11;\n ID IVar12;\n long_long lVar13;\n long_long lVar14;\n undefined1 (*pauVar15) [16];\n undefined8 *puVar16;\n byte bVar17;\n double *pdVar18;\n ulong uVar19;\n double extraout_d0;\n double extraout_d0_00;\n double extraout_d0_01;\n double extraout_d0_02;\n undefined8 extraout_d0_03;\n undefined8 extraout_d0_04;\n undefined8 extraout_d0_05;\n undefined8 extraout_d0_06;\n undefined8 extraout_d0_07;\n undefined8 extraout_d0_08;\n undefined8 extraout_d0_09;\n undefined8 extraout_d0_10;\n undefined8 extraout_d0_11;\n undefined8 extraout_d0_12;\n undefined8 extraout_d0_13;\n undefined8 extraout_d0_14;\n undefined8 extraout_d0_15;\n undefined8 extraout_d0_16;\n undefined8 extraout_d0_17;\n undefined8 extraout_d0_18;\n double extraout_d0_19;\n undefined8 extraout_d0_20;\n undefined8 extraout_d0_21;\n double dVar20;\n double dVar21;\n undefined1 auVar22 [16];\n undefined1 auVar23 [16];\n undefined1 auVar24 [16];\n double dVar25;\n undefined1 auVar26 [16];\n undefined1 local_179;\n undefined8 local_178;\n undefined8 local_170;\n double local_168;\n char local_15a;\n byte local_159;\n double local_158;\n double local_150;\n double local_148;\n double local_140;\n double local_138;\n double local_130;\n double local_128;\n byte local_11c;\n byte local_11b;\n byte local_11a;\n byte local_119;\n double local_118;\n double local_110;\n double local_108;\n double local_100;\n double local_f8;\n double local_f0;\n double local_e8;\n double local_e0;\n double local_d8;\n double local_d0;\n double local_c8;\n double local_c0;\n byte local_b1;\n double local_b0;\n double local_a8;\n double local_a0;\n double local_98;\n AnonymousStructure0 local_90;\n ulong local_78 [3];\n \n puVar16 = param_4._8_8_;\n pauVar15 = (undefined1 (*) [16])param_4.field0_0x0;\n if (param_3 == (AnonymousStructure6 *)0x0) {\n if (puVar16 == (undefined8 *)0x0) {\n return 0;\n }\n pcVar9 = &cf_Paramspointerisnil;\nLAB_100029a8c:\n FUN_10001b7ac();\n *puVar16 = pcVar9;\n /* WARNING: Read-only address (ram,0x00010005f9d0) is written */\n /* WARNING: Read-only address (ram,0x00010005fa70) is written */\n /* WARNING: Read-only address (ram,0x00010005fa80) is written */\n /* WARNING: Read-only address (ram,0x00010005fa90) is written */\n return 0;\n }\n param_3[1].field2_0x10 = 0.0;\n param_3->field46_0x148 = 0;\n *(undefined8 *)((long)¶m_3->field44_0x13c + 4) = 0;\n param_3[1].field1_0x8 = 0.0;\n param_3[1].field0_0x0 = 0;\n *(undefined8 *)((long)¶m_3->field40_0x124 + 4) = 0;\n *(undefined8 *)¶m_3->field39_0x120 = 0;\n *(undefined8 *)¶m_3->field43_0x138 = 0;\n param_3->field42_0x130 = 0;\n param_3->field36_0x108 = 0;\n *(undefined8 *)((long)¶m_3->field34_0xfc + 4) = 0;\n param_3->field38_0x118 = 0;\n param_3->field37_0x110 = 0;\n param_3->field31_0xe8 = 0.0;\n param_3->field29_0xe0 = 0;\n param_3->field30_0xe4 = 0;\n *(undefined8 *)((long)¶m_3->field33_0xf4 + 4) = 0;\n *(undefined8 *)¶m_3->field32_0xf0 = 0;\n *(undefined8 *)((long)¶m_3->field25_0xc4 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field24_0xbc + 4) = 0;\n *(undefined8 *)((long)¶m_3->field27_0xd4 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field26_0xcc + 4) = 0;\n *(undefined8 *)((long)¶m_3->field21_0xa4 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field20_0x9c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field23_0xb4 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field22_0xac + 4) = 0;\n *(undefined8 *)((long)¶m_3->field17_0x84 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field16_0x7c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field19_0x94 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field18_0x8c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field13_0x64 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field12_0x5c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field15_0x74 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field14_0x6c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field9_0x44 + 4) = 0;\n *(undefined8 *)¶m_3->field8_0x40 = 0;\n *(undefined8 *)((long)¶m_3->field11_0x54 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field10_0x4c + 4) = 0;\n param_3->field5_0x28 = 0;\n param_3->field4_0x20 = 0.0;\n param_3->field7_0x38 = 0.0;\n param_3->field6_0x30 = 0.0;\n param_3->field1_0x8 = 0.0;\n param_3->field0_0x0 = 0;\n param_3->field3_0x18 = 0.0;\n param_3->field2_0x10 = 0.0;\n param_3->field0_0x0 = 0x126d4ad477bd;\n self = objc_stub::apiForProtocol_\n (*(ID *)(param_1 + 8),&objc::protocol_t::FxParameterRetrievalAPI_v6,pauVar15,\n puVar16,param_4.field3_0x10);\n if (self == 0) {\n if (puVar16 == (undefined8 *)0x0) {\n return 0;\n }\n pcVar9 = &cf_UnabletogetFxParameterRetrievalAPI_v6;\n goto LAB_100029a8c;\n }\n puVar16 = (undefined8 *)((long)¶m_3->field24_0xbc + 4);\n *(undefined8 *)((long)¶m_3->field25_0xc4 + 4) = 0x4062800000000000;\n *puVar16 = 0x3ff0000000000000;\n param_3->field1_0x8 = 1.0;\n param_3->field3_0x18 = 0.0;\n param_3->field2_0x10 = 0.0;\n param_3->field5_0x28 = 0;\n param_3->field4_0x20 = 0.0;\n param_3->field7_0x38 = 0.0;\n param_3->field6_0x30 = 0.0;\n *(undefined1 *)¶m_3->field8_0x40 = 1;\n pdVar18 = (double *)((long)¶m_3->field9_0x44 + 4);\n *(undefined8 *)((long)¶m_3->field10_0x4c + 4) = 0;\n *pdVar18 = 0.0;\n *(undefined8 *)((long)¶m_3->field12_0x5c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field11_0x54 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field14_0x6c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field13_0x64 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field16_0x7c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field15_0x74 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field18_0x8c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field17_0x84 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field20_0x9c + 4) = 0;\n *(undefined8 *)((long)¶m_3->field19_0x94 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field21_0xa4 + 4) = 0;\n *(undefined8 *)((long)¶m_3->field23_0xb4 + 4) = 0x3fe3333333333333;\n *(undefined8 *)((long)¶m_3->field22_0xac + 4) = 0x4020000000000000;\n *(undefined8 *)((long)¶m_3->field27_0xd4 + 4) = 0x3fd999999999999a;\n *(undefined8 *)((long)¶m_3->field26_0xcc + 4) = 0x3fe3333333333333;\n *(undefined2 *)¶m_3->field29_0xe0 = 0;\n *(undefined1 *)((long)¶m_3->field29_0xe0 + 2) = 0;\n param_3->field31_0xe8 = 1.8;\n *(undefined1 *)¶m_3->field32_0xf0 = 0;\n auVar22 = NEON_fmov(0x3fe0000000000000,8);\n *(long *)((long)¶m_3->field34_0xfc + 4) = auVar22._8_8_;\n *(long *)((long)¶m_3->field33_0xf4 + 4) = auVar22._0_8_;\n param_3[1].field2_0x10 = 0.0;\n *(undefined1 *)¶m_3->field36_0x108 = 0;\n *(undefined1 *)¶m_3->field43_0x138 = 0;\n *(undefined8 *)((long)¶m_3->field44_0x13c + 4) = 0;\n *(undefined1 *)¶m_3->field46_0x148 = 0;\n param_3->field38_0x118 = 0;\n *(undefined8 *)¶m_3->field39_0x120 = 0;\n param_3->field37_0x110 = 0;\n param_3[1].field0_0x0 = 1;\n *(undefined1 *)¶m_3[1].field1_0x8 = 0;\n IVar5 = MSSSectionCardParameterValue::defaultValue\n ((ID)&objc::class_t::MSSSectionCardParameterValue);\n local_90._8_8_ = SUB168(*(undefined1 (*) [16])PTR__kCMTimeZero_1000781d8,8);\n local_90.field0_0x0 = SUB168(*(undefined1 (*) [16])PTR__kCMTimeZero_1000781d8,0);\n local_90.field3_0x10 = *(long_long *)(PTR__kCMTimeZero_1000781d8 + 0x10);\n local_78[0] = 0;\n IVar6 = objc_stub::getCustomParameterValue_fromParameter_atTime_(self,local_78,0xd2,&local_90);\n uVar19 = local_78[0];\n if ((int)IVar6 == 0) {\n uVar19 = 0;\nLAB_100029aac:\n bVar2 = false;\n }\n else {\n pcVar7 = &objc::class_t::MSSSectionCardParameterValue;\n _objc_opt_class(&objc::class_t::MSSSectionCardParameterValue);\n _objc_opt_isKindOfClass(uVar19,pcVar7);\n uVar8 = local_78[0];\n pcVar7 = &objc::class_t::MSSSectionCardParameterValue;\n _objc_opt_class(&objc::class_t::MSSSectionCardParameterValue);\n _objc_opt_isKindOfClass(uVar8,pcVar7);\n self_00 = local_78[0];\n if (((uVar8 & 1) == 0) ||\n ((IVar6 = objc_stub::hasCommittedState(local_78[0]), (IVar6 & 1) == 0 &&\n (IVar6 = objc_stub::isEqual_(self_00,IVar5), (IVar6 & 1) != 0)))) goto LAB_100029aac;\n FUN_10000e6b8();\n IVar6 = objc_stub::skinTonePreset(self_00);\n param_3->field5_0x28 = IVar6;\n objc_stub::skinBrightness(self_00);\n param_3->field2_0x10 = extraout_d0;\n objc_stub::skinHue(self_00);\n param_3->field3_0x18 = extraout_d0_00;\n objc_stub::skinSaturation(self_00);\n param_3->field4_0x20 = extraout_d0_01;\n param_3->field6_0x30 = 0.0;\n objc_stub::midtoneDetail(self_00);\n param_3->field7_0x38 = extraout_d0_02;\n IVar6 = objc_stub::featureProtection(self_00);\n *(char *)¶m_3->field8_0x40 = (char)IVar6;\n objc_stub::highPassDetail(self_00);\n *(undefined8 *)((long)¶m_3->field9_0x44 + 4) = extraout_d0_03;\n objc_stub::teethWhitening(self_00);\n *(undefined8 *)((long)¶m_3->field10_0x4c + 4) = extraout_d0_04;\n *(undefined8 *)((long)¶m_3->field11_0x54 + 4) = 0;\n objc_stub::faceThin(self_00);\n *(undefined8 *)((long)¶m_3->field12_0x5c + 4) = extraout_d0_05;\n objc_stub::faceBigEye(self_00);\n *(undefined8 *)((long)¶m_3->field13_0x64 + 4) = extraout_d0_06;\n objc_stub::faceShort(self_00);\n *(undefined8 *)((long)¶m_3->field14_0x6c + 4) = extraout_d0_07;\n objc_stub::faceNarrow(self_00);\n *(undefined8 *)((long)¶m_3->field15_0x74 + 4) = extraout_d0_08;\n objc_stub::faceChin(self_00);\n *(undefined8 *)((long)¶m_3->field16_0x7c + 4) = extraout_d0_09;\n objc_stub::faceV(self_00);\n *(undefined8 *)((long)¶m_3->field17_0x84 + 4) = extraout_d0_10;\n objc_stub::faceJaw(self_00);\n *(undefined8 *)((long)¶m_3->field18_0x8c + 4) = extraout_d0_11;\n objc_stub::faceCheekbone(self_00);\n *(undefined8 *)((long)¶m_3->field19_0x94 + 4) = extraout_d0_12;\n objc_stub::faceSmallHead(self_00);\n *(undefined8 *)((long)¶m_3->field20_0x9c + 4) = extraout_d0_13;\n objc_stub::faceSmallHeadRange(self_00);\n *(undefined8 *)((long)¶m_3->field21_0xa4 + 4) = extraout_d0_14;\n objc_stub::radius(self_00);\n *(undefined8 *)((long)¶m_3->field22_0xac + 4) = extraout_d0_15;\n objc_stub::sharpness(self_00);\n *(undefined8 *)((long)¶m_3->field23_0xb4 + 4) = extraout_d0_16;\n objc_stub::maskSoftness(self_00);\n *(undefined8 *)((long)¶m_3->field26_0xcc + 4) = extraout_d0_17;\n objc_stub::maskEdgeProtect(self_00);\n *(undefined8 *)((long)¶m_3->field27_0xd4 + 4) = extraout_d0_18;\n IVar6 = self_00;\n FUN_10000e74c();\n *(char *)¶m_3->field29_0xe0 = (char)IVar6;\n *(char *)((long)¶m_3->field29_0xe0 + 1) = (char)IVar6;\n IVar6 = objc_stub::fastMultiFaceMode(self_00);\n *(char *)((long)¶m_3->field29_0xe0 + 2) = (char)IVar6;\n objc_stub::faceJumpGuardRange(self_00);\n param_3->field31_0xe8 = extraout_d0_19;\n if ((param_3->field29_0xe0 & 0x10000) == 0) {\n IVar6 = objc_stub::faceSingleSelection(self_00);\n uVar3 = (undefined1)IVar6;\n }\n else {\n uVar3 = 0;\n }\n *(undefined1 *)¶m_3->field32_0xf0 = uVar3;\n objc_stub::faceSelectionX(self_00);\n *(undefined8 *)((long)¶m_3->field33_0xf4 + 4) = extraout_d0_20;\n objc_stub::faceSelectionY(self_00);\n *(undefined8 *)((long)¶m_3->field34_0xfc + 4) = extraout_d0_21;\n dVar11 = (double)objc_stub::faceSelectionRevision(self_00);\n param_3[1].field2_0x10 = dVar11;\n IVar6 = objc_stub::faceTrackEnabled(self_00);\n *(char *)¶m_3->field36_0x108 = (char)IVar6;\n IVar6 = objc_stub::faceTrackStatus(self_00);\n param_3->field37_0x110 = IVar6;\n IVar6 = objc_stub::faceTrackRevision(self_00);\n param_3->field38_0x118 = IVar6;\n IVar6 = objc_stub::faceTrackFrameCount(self_00);\n *(ID *)¶m_3->field39_0x120 = IVar6;\n IVar12 = objc_stub::faceTrackActiveTargetIndex(self_00);\n IVar6 = IVar12;\n if (0x7e < IVar12) {\n IVar6 = 0x7f;\n }\n IVar10 = 0;\n if (-1 < (long)IVar12) {\n IVar10 = IVar6;\n }\n param_3->field42_0x130 = IVar10;\n IVar6 = self_00;\n FUN_100010058();\n *(char *)((long)¶m_3->field40_0x124 + 4) = (char)IVar6;\n IVar6 = objc_stub::showChannelInfo(self_00);\n *(char *)¶m_3->field43_0x138 = (char)IVar6;\n IVar6 = objc_stub::debugChannelMode(self_00);\n *(ulong *)((long)¶m_3->field44_0x13c + 4) = (ulong)(0 < (long)IVar6);\n bVar2 = true;\n }\n IVar6 = MSSSectionCardParameterValue::defaultValue\n ((ID)&objc::class_t::MSSSectionCardParameterValue);\n local_98 = param_3->field2_0x10;\n if ((uVar19 & 1) == 0) {\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar12 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_98,2,&local_90);\n if ((int)IVar12 != 0) {\n MSSSectionCardParameterValue::setSkinBrightness_(IVar6,local_98);\n }\n local_a0 = param_3->field3_0x18;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_a0,0xe,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setSkinHue_(IVar6,local_a0);\n IVar12 = 1;\n }\n local_a8 = param_3->field4_0x20;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_a8,0xf,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setSkinSaturation_(IVar6,local_a8);\n IVar12 = 1;\n }\n local_b0 = param_3->field7_0x38;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_b0,0xc,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setMidtoneDetail_(IVar6,local_b0);\n IVar12 = 1;\n }\n local_b1 = (byte)param_3->field8_0x40;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_b1,0x1e,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFeatureProtection_(IVar6,(uint)local_b1);\n IVar12 = 1;\n }\n local_c0 = *pdVar18;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_c0,0x11,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setHighPassDetail_(IVar6,local_c0);\n IVar12 = 1;\n }\n local_c8 = *(double *)((long)¶m_3->field10_0x4c + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_c8,0x1f,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setTeethWhitening_(IVar6,local_c8);\n IVar12 = 1;\n }\n local_d0 = *(double *)((long)¶m_3->field12_0x5c + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_d0,0x12,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceThin_(IVar6,local_d0);\n IVar12 = 1;\n }\n local_d8 = *(double *)((long)¶m_3->field13_0x64 + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_d8,0x21,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceBigEye_(IVar6,local_d8);\n IVar12 = 1;\n }\n local_e0 = *(double *)((long)¶m_3->field14_0x6c + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_e0,0x16,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceShort_(IVar6,local_e0);\n IVar12 = 1;\n }\n local_e8 = *(double *)((long)¶m_3->field15_0x74 + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_e8,0x17,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceNarrow_(IVar6,local_e8);\n IVar12 = 1;\n }\n local_f0 = *(double *)((long)¶m_3->field16_0x7c + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_f0,0x18,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceChin_(IVar6,local_f0);\n IVar12 = 1;\n }\n local_f8 = *(double *)((long)¶m_3->field17_0x84 + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_f8,0x19,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceV_(IVar6,local_f8);\n IVar12 = 1;\n }\n local_100 = *(double *)((long)¶m_3->field18_0x8c + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_100,0x1a,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceJaw_(IVar6,local_100);\n IVar12 = 1;\n }\n local_108 = *(double *)((long)¶m_3->field19_0x94 + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_108,0x1b,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceCheekbone_(IVar6,local_108);\n IVar12 = 1;\n }\n local_110 = *(double *)((long)¶m_3->field20_0x9c + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_110,0x1c,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceSmallHead_(IVar6,local_110);\n IVar12 = 1;\n }\n local_118 = *(double *)((long)¶m_3->field21_0xa4 + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_118,0x1d,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceSmallHeadRange_(IVar6,local_118);\n IVar12 = 1;\n }\n local_119 = (byte)param_3->field29_0xe0;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_119,0x13,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setShowFaceBoxes_(IVar6,(uint)local_119);\n IVar12 = 1;\n }\n local_11a = *(byte *)((long)¶m_3->field29_0xe0 + 1);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_11a,0x23,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setShowFaceTrackBox_(IVar6,(uint)local_11a);\n IVar12 = 1;\n }\n local_11b = (byte)param_3->field32_0xf0;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_11b,0x14,&local_90);\n if ((int)IVar10 != 0) {\n bVar4 = MSSSectionCardParameterValue::fastMultiFaceMode(IVar6);\n MSSSectionCardParameterValue::setFaceSingleSelection_(IVar6,(bVar4 ^ 1) & (uint)local_11b);\n IVar12 = 1;\n }\n local_11c = *(byte *)((long)¶m_3->field29_0xe0 + 2);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_11c,0x27,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFastMultiFaceMode_(IVar6,(uint)local_11c);\n bVar4 = MSSSectionCardParameterValue::fastMultiFaceMode(IVar6);\n if (bVar4 != 0) {\n MSSSectionCardParameterValue::setFaceSingleSelection_(IVar6,0);\n }\n IVar12 = 1;\n }\n local_128 = param_3->field31_0xe8;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_128,0x28,&local_90);\n if ((int)IVar10 != 0) {\n dVar11 = 4.0;\n if (local_128 <= 4.0) {\n dVar11 = local_128;\n }\n dVar20 = 1.0;\n if (1.0 <= local_128) {\n dVar20 = dVar11;\n }\n MSSSectionCardParameterValue::setFaceJumpGuardRange_(IVar6,dVar20);\n IVar12 = 1;\n }\n local_130 = *(double *)((long)¶m_3->field33_0xf4 + 4);\n local_138 = *(double *)((long)¶m_3->field34_0xfc + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getXValue_YValue_fromParameter_atTime_\n (self,&local_130,&local_138,0x15,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setFaceSelectionX_(IVar6,local_130);\n MSSSectionCardParameterValue::setFaceSelectionY_(IVar6,local_138);\n IVar12 = 1;\n }\n local_140 = *(double *)((long)¶m_3->field22_0xac + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_140,3,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setRadius_(IVar6,local_140);\n IVar12 = 1;\n }\n local_148 = *(double *)((long)¶m_3->field23_0xb4 + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_148,4,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setSharpness_(IVar6,local_148);\n IVar12 = 1;\n }\n }\n else {\n IVar12 = 0;\n local_a0 = param_3->field3_0x18;\n local_a8 = param_3->field4_0x20;\n local_b0 = param_3->field7_0x38;\n local_c0 = *(double *)((long)¶m_3->field9_0x44 + 4);\n local_c8 = *(double *)((long)¶m_3->field10_0x4c + 4);\n local_d0 = *(double *)((long)¶m_3->field12_0x5c + 4);\n local_d8 = *(double *)((long)¶m_3->field13_0x64 + 4);\n local_e0 = *(double *)((long)¶m_3->field14_0x6c + 4);\n local_e8 = *(double *)((long)¶m_3->field15_0x74 + 4);\n local_f0 = *(double *)((long)¶m_3->field16_0x7c + 4);\n local_f8 = *(double *)((long)¶m_3->field17_0x84 + 4);\n local_100 = *(double *)((long)¶m_3->field18_0x8c + 4);\n local_108 = *(double *)((long)¶m_3->field19_0x94 + 4);\n local_110 = *(double *)((long)¶m_3->field20_0x9c + 4);\n local_118 = *(double *)((long)¶m_3->field21_0xa4 + 4);\n local_128 = param_3->field31_0xe8;\n local_130 = *(double *)((long)¶m_3->field33_0xf4 + 4);\n local_138 = *(double *)((long)¶m_3->field34_0xfc + 4);\n local_140 = *(double *)((long)¶m_3->field22_0xac + 4);\n local_148 = *(double *)((long)¶m_3->field23_0xb4 + 4);\n local_b1 = (byte)param_3->field8_0x40;\n local_119 = (byte)param_3->field29_0xe0;\n local_11a = *(byte *)((long)¶m_3->field29_0xe0 + 1);\n local_11b = (byte)param_3->field32_0xf0;\n local_11c = *(byte *)((long)¶m_3->field29_0xe0 + 2);\n }\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n objc_stub::getFloatValue_fromParameter_atTime_(self,puVar16,5,&local_90);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n objc_stub::getFloatValue_fromParameter_atTime_\n (self,(undefined1 *)((long)¶m_3->field25_0xc4 + 4),7,&local_90);\n local_150 = *(double *)((long)¶m_3->field26_0xcc + 4);\n if ((uVar19 & 1) != 0) {\n local_158 = *(double *)((long)¶m_3->field27_0xd4 + 4);\n FUN_10000da38(IVar6);\n if ((IVar12 & 1) != 0) {\n objc_stub::isEqual_(IVar6,IVar5);\n }\n local_159 = (byte)param_3->field32_0xf0;\n local_15a = (char)param_3->field8_0x40;\n local_168 = *(double *)((long)¶m_3->field10_0x4c + 4);\n local_170 = *(undefined8 *)((long)¶m_3->field33_0xf4 + 4);\n local_178 = *(undefined8 *)((long)¶m_3->field34_0xfc + 4);\n goto LAB_10002a818;\n }\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_150,8,&local_90);\n if ((int)IVar10 != 0) {\n MSSSectionCardParameterValue::setMaskSoftness_(IVar6,local_150);\n IVar12 = 1;\n }\n local_158 = *(double *)((long)¶m_3->field27_0xd4 + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar10 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_158,9,&local_90);\n if ((int)IVar10 == 0) {\n FUN_10000da38(IVar6);\n if ((IVar12 & 1) != 0) goto LAB_10002a304;\n if (bVar2) goto LAB_10002a728;\nLAB_10002a5bc:\n local_170 = CONCAT71(local_170._1_7_,(char)param_3->field32_0xf0);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_170,0x14,&local_90);\n if ((int)IVar5 != 0) {\n *(byte *)¶m_3->field32_0xf0 =\n (*(byte *)((long)¶m_3->field29_0xe0 + 2) ^ 1) & (byte)local_170;\n }\n local_178 = CONCAT71(local_178._1_7_,(char)param_3->field29_0xe0);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_178,0x13,&local_90);\n if ((int)IVar5 != 0) {\n *(undefined1 *)¶m_3->field29_0xe0 = (undefined1)local_178;\n }\n local_159 = *(byte *)((long)¶m_3->field29_0xe0 + 1);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_159,0x23,&local_90);\n if ((int)IVar5 != 0) {\n *(byte *)((long)¶m_3->field29_0xe0 + 1) = local_159;\n }\n if ((char)param_3->field29_0xe0 == '\\x01') {\n bVar17 = *(byte *)((long)¶m_3->field29_0xe0 + 1);\n }\n else {\n bVar17 = 0;\n }\n *(byte *)¶m_3->field29_0xe0 = bVar17 & 1;\n *(byte *)((long)¶m_3->field29_0xe0 + 1) = bVar17 & 1;\n local_15a = *(char *)((long)¶m_3->field29_0xe0 + 2);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_15a,0x27,&local_90);\n if (((int)IVar5 != 0) &&\n (*(char *)((long)¶m_3->field29_0xe0 + 2) = local_15a, local_15a == '\\x01')) {\n *(undefined1 *)¶m_3->field32_0xf0 = 0;\n }\n local_168 = param_3->field31_0xe8;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_168,0x28,&local_90);\n if ((int)IVar5 != 0) {\n dVar11 = 4.0;\n if (local_168 <= 4.0) {\n dVar11 = local_168;\n }\n dVar20 = 1.0;\n if (1.0 <= local_168) {\n dVar20 = dVar11;\n }\n param_3->field31_0xe8 = dVar20;\n }\n }\n else {\n MSSSectionCardParameterValue::setMaskEdgeProtect_(IVar6,local_158);\n FUN_10000da38(IVar6);\nLAB_10002a304:\n IVar5 = objc_stub::isEqual_(IVar6,IVar5);\n if (((uVar19 & 1) == 0 && !bVar2) && ((IVar5 & 1) == 0)) {\n dVar11 = MSSSectionCardParameterValue::skinBrightness(IVar6);\n param_3->field2_0x10 = dVar11;\n dVar11 = MSSSectionCardParameterValue::skinHue(IVar6);\n param_3->field3_0x18 = dVar11;\n dVar11 = MSSSectionCardParameterValue::skinSaturation(IVar6);\n param_3->field4_0x20 = dVar11;\n param_3->field6_0x30 = 0.0;\n dVar11 = MSSSectionCardParameterValue::midtoneDetail(IVar6);\n param_3->field7_0x38 = dVar11;\n bVar4 = MSSSectionCardParameterValue::featureProtection(IVar6);\n *(char *)¶m_3->field8_0x40 = (char)bVar4;\n dVar11 = MSSSectionCardParameterValue::highPassDetail(IVar6);\n *(double *)((long)¶m_3->field9_0x44 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::teethWhitening(IVar6);\n *(double *)((long)¶m_3->field10_0x4c + 4) = dVar11;\n *(undefined8 *)((long)¶m_3->field11_0x54 + 4) = 0;\n dVar11 = MSSSectionCardParameterValue::faceThin(IVar6);\n *(double *)((long)¶m_3->field12_0x5c + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceBigEye(IVar6);\n *(double *)((long)¶m_3->field13_0x64 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceShort(IVar6);\n *(double *)((long)¶m_3->field14_0x6c + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceNarrow(IVar6);\n *(double *)((long)¶m_3->field15_0x74 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceChin(IVar6);\n *(double *)((long)¶m_3->field16_0x7c + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceV(IVar6);\n *(double *)((long)¶m_3->field17_0x84 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceJaw(IVar6);\n *(double *)((long)¶m_3->field18_0x8c + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceCheekbone(IVar6);\n *(double *)((long)¶m_3->field19_0x94 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceSmallHead(IVar6);\n *(double *)((long)¶m_3->field20_0x9c + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceSmallHeadRange(IVar6);\n *(double *)((long)¶m_3->field21_0xa4 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::radius(IVar6);\n *(double *)((long)¶m_3->field22_0xac + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::sharpness(IVar6);\n *(double *)((long)¶m_3->field23_0xb4 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::maskSoftness(IVar6);\n *(double *)((long)¶m_3->field26_0xcc + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::maskEdgeProtect(IVar6);\n *(double *)((long)¶m_3->field27_0xd4 + 4) = dVar11;\n IVar5 = IVar6;\n FUN_10000e74c();\n *(char *)¶m_3->field29_0xe0 = (char)IVar5;\n *(char *)((long)¶m_3->field29_0xe0 + 1) = (char)IVar5;\n bVar4 = MSSSectionCardParameterValue::fastMultiFaceMode(IVar6);\n *(char *)((long)¶m_3->field29_0xe0 + 2) = (char)bVar4;\n dVar11 = MSSSectionCardParameterValue::faceJumpGuardRange(IVar6);\n param_3->field31_0xe8 = dVar11;\n if ((param_3->field29_0xe0 & 0x10000) == 0) {\n bVar4 = MSSSectionCardParameterValue::faceSingleSelection(IVar6);\n uVar3 = (undefined1)bVar4;\n }\n else {\n uVar3 = 0;\n }\n *(undefined1 *)¶m_3->field32_0xf0 = uVar3;\n dVar11 = MSSSectionCardParameterValue::faceSelectionX(IVar6);\n *(double *)((long)¶m_3->field33_0xf4 + 4) = dVar11;\n dVar11 = MSSSectionCardParameterValue::faceSelectionY(IVar6);\n *(double *)((long)¶m_3->field34_0xfc + 4) = dVar11;\n dVar11 = (double)MSSSectionCardParameterValue::faceSelectionRevision(IVar6);\n param_3[1].field2_0x10 = dVar11;\n bVar4 = MSSSectionCardParameterValue::faceTrackEnabled(IVar6);\n *(char *)¶m_3->field36_0x108 = (char)bVar4;\n lVar13 = MSSSectionCardParameterValue::faceTrackStatus(IVar6);\n param_3->field37_0x110 = lVar13;\n lVar13 = MSSSectionCardParameterValue::faceTrackRevision(IVar6);\n param_3->field38_0x118 = lVar13;\n lVar13 = MSSSectionCardParameterValue::faceTrackFrameCount(IVar6);\n *(long_long *)¶m_3->field39_0x120 = lVar13;\n lVar14 = MSSSectionCardParameterValue::faceTrackActiveTargetIndex(IVar6);\n lVar13 = lVar14;\n if (0x7e < lVar14) {\n lVar13 = 0x7f;\n }\n lVar1 = 0;\n if (-1 < (long)lVar14) {\n lVar1 = lVar13;\n }\n param_3->field42_0x130 = lVar1;\n FUN_100010058();\n *(char *)((long)¶m_3->field40_0x124 + 4) = (char)IVar6;\n *(undefined1 *)¶m_3->field43_0x138 = 0;\n *(undefined8 *)((long)¶m_3->field44_0x13c + 4) = 0;\n goto LAB_10002a5bc;\n }\n if ((uVar19 & 1) == 0 && !bVar2) goto LAB_10002a5bc;\n }\nLAB_10002a728:\n local_159 = (byte)param_3->field32_0xf0;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_159,0x14,&local_90);\n if ((int)IVar5 != 0) {\n *(byte *)¶m_3->field32_0xf0 = (*(byte *)((long)¶m_3->field29_0xe0 + 2) ^ 1) & local_159;\n }\n local_15a = (char)param_3->field8_0x40;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getBoolValue_fromParameter_atTime_(self,&local_15a,0x1e,&local_90);\n if ((int)IVar5 != 0) {\n *(char *)¶m_3->field8_0x40 = local_15a;\n }\n local_168 = *(double *)((long)¶m_3->field10_0x4c + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getFloatValue_fromParameter_atTime_(self,&local_168,0x1f,&local_90);\n if ((int)IVar5 != 0) {\n *(double *)((long)¶m_3->field10_0x4c + 4) = local_168;\n }\n local_170 = *(undefined8 *)((long)¶m_3->field33_0xf4 + 4);\n local_178 = *(undefined8 *)((long)¶m_3->field34_0xfc + 4);\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n IVar5 = objc_stub::getXValue_YValue_fromParameter_atTime_\n (self,&local_170,&local_178,0x15,&local_90);\n if ((int)IVar5 != 0) {\n *(undefined8 *)((long)¶m_3->field33_0xf4 + 4) = local_170;\n *(undefined8 *)((long)¶m_3->field34_0xfc + 4) = local_178;\n }\nLAB_10002a818:\n local_90.field0_0x0 = *(long_long *)*pauVar15;\n local_90._8_8_ = *(undefined8 *)(*pauVar15 + 8);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n mss_applyLivePanelStateToParams_atTime_(param_1,param_3,&local_90);\n local_179 = 0;\n local_90._8_8_ = SUB168(*pauVar15,8);\n local_90.field0_0x0 = SUB168(*pauVar15,0);\n local_90.field3_0x10 = *(long_long *)pauVar15[1];\n objc_stub::getBoolValue_fromParameter_atTime_(self,&local_179,0xb,&local_90);\n *(undefined1 *)¶m_3->field46_0x148 = local_179;\n auVar22._0_8_ = param_3->field1_0x8;\n auVar22._8_8_ = param_3->field2_0x10;\n auVar23 = ZEXT816(0);\n auVar22 = NEON_fmaxnm(auVar22,auVar23,8);\n auVar24 = NEON_fmov(0x3ff0000000000000,8);\n auVar22 = NEON_fminnm(auVar22,auVar24,8);\n param_3->field2_0x10 = auVar22._8_8_;\n param_3->field1_0x8 = auVar22._0_8_;\n auVar26._0_8_ = param_3->field3_0x18;\n auVar26._8_8_ = param_3->field4_0x20;\n auVar22 = NEON_fmaxnm(auVar26,_DAT_10005fa70,8);\n auVar22 = NEON_fminnm(auVar22,_DAT_10005fa80,8);\n param_3->field4_0x20 = auVar22._8_8_;\n param_3->field3_0x18 = auVar22._0_8_;\n param_3->field6_0x30 = 0.0;\n dVar11 = param_3->field7_0x38;\n if (dVar11 <= 0.0) {\n dVar11 = 0.0;\n }\n dVar20 = (double)NEON_fminnm(dVar11,0x4000000000000000);\n param_3->field7_0x38 = dVar20;\n auVar22 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field9_0x44 + 4),auVar23,8);\n auVar22 = NEON_fminnm(auVar22,auVar24,8);\n *(long *)((long)¶m_3->field10_0x4c + 4) = auVar22._8_8_;\n *(long *)((long)¶m_3->field9_0x44 + 4) = auVar22._0_8_;\n *(undefined8 *)((long)¶m_3->field11_0x54 + 4) = 0;\n auVar22 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field12_0x5c + 4),auVar23,8);\n auVar22 = NEON_fminnm(auVar22,auVar24,8);\n auVar26 = NEON_fmov(0xbff0000000000000,8);\n auVar26 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field14_0x6c + 4),auVar26,8);\n auVar26 = NEON_fminnm(auVar26,auVar24,8);\n *(long *)((long)¶m_3->field13_0x64 + 4) = auVar22._8_8_;\n *(long *)((long)¶m_3->field12_0x5c + 4) = auVar22._0_8_;\n *(long *)((long)¶m_3->field15_0x74 + 4) = auVar26._8_8_;\n *(long *)((long)¶m_3->field14_0x6c + 4) = auVar26._0_8_;\n auVar22 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field16_0x7c + 4),_DAT_10005f9d0,8);\n auVar22 = NEON_fminnm(auVar22,auVar24,8);\n auVar26 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field18_0x8c + 4),auVar23,8);\n auVar26 = NEON_fminnm(auVar26,auVar24,8);\n *(long *)((long)¶m_3->field17_0x84 + 4) = auVar22._8_8_;\n *(long *)((long)¶m_3->field16_0x7c + 4) = auVar22._0_8_;\n *(long *)((long)¶m_3->field19_0x94 + 4) = auVar26._8_8_;\n *(long *)((long)¶m_3->field18_0x8c + 4) = auVar26._0_8_;\n auVar22 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field20_0x9c + 4),auVar23,8);\n auVar22 = NEON_fminnm(auVar22,auVar24,8);\n *(long *)((long)¶m_3->field21_0xa4 + 4) = auVar22._8_8_;\n *(long *)((long)¶m_3->field20_0x9c + 4) = auVar22._0_8_;\n auVar22 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field25_0xc4 + 4),auVar23,8);\n auVar26 = NEON_fminnm(auVar22,_DAT_10005fa90,8);\n *(double *)((long)¶m_3->field26_0xcc + 4) = auVar26._8_8_;\n *(long *)((long)¶m_3->field25_0xc4 + 4) = auVar26._0_8_;\n dVar25 = (double)NEON_fminnm(*(undefined8 *)((long)¶m_3->field27_0xd4 + 4),0x3ff0000000000000)\n ;\n *(double *)((long)¶m_3->field27_0xd4 + 4) = dVar25;\n auVar22 = NEON_fmaxnm(*(undefined1 (*) [16])((long)¶m_3->field33_0xf4 + 4),auVar23,8);\n auVar22 = NEON_fminnm(auVar22,auVar24,8);\n *(long *)((long)¶m_3->field34_0xfc + 4) = auVar22._8_8_;\n *(long *)((long)¶m_3->field33_0xf4 + 4) = auVar22._0_8_;\n dVar11 = param_3->field31_0xe8;\n if (dVar11 <= 1.0) {\n dVar11 = 1.0;\n }\n dVar11 = (double)NEON_fminnm(dVar11,0x4010000000000000);\n param_3->field31_0xe8 = dVar11;\n if (*(char *)((long)¶m_3->field29_0xe0 + 2) == '\\x01') {\n *(undefined1 *)¶m_3->field32_0xf0 = 0;\n }\n *(undefined1 *)¶m_3->field43_0x138 = 0;\n *(undefined8 *)((long)¶m_3->field44_0x13c + 4) = 0;\n if ((ABS(auVar26._8_8_) <= 2.220446049250313e-16) && (ABS(dVar25 + -1.0) <= 2.220446049250313e-16)\n ) {\n *(undefined8 *)((long)¶m_3->field27_0xd4 + 4) = 0x3fd999999999999a;\n *(undefined8 *)((long)¶m_3->field26_0xcc + 4) = 0x3fe3333333333333;\n }\n dVar11 = dVar20 * 0.5;\n if (dVar20 <= 1.0) {\n dVar11 = dVar20;\n }\n dVar20 = 1.0;\n if (dVar11 <= 1.0) {\n dVar20 = dVar11;\n }\n dVar25 = 0.0;\n if (0.0 <= dVar11) {\n dVar25 = dVar20;\n }\n dVar20 = (dVar25 + -0.08) / 0.92;\n dVar11 = 1.0;\n if (dVar20 <= 1.0) {\n dVar11 = dVar20;\n }\n dVar21 = 0.0;\n if (0.0 <= dVar20) {\n dVar21 = dVar11;\n }\n param_3->field1_0x8 = 1.0;\n param_3->field7_0x38 = dVar25 + dVar25;\n *(double *)((long)¶m_3->field22_0xac + 4) =\n dVar21 * dVar21 * (dVar21 * -2.0 + 3.0) * 7.2 + 7.8;\n *(undefined8 *)((long)¶m_3->field24_0xbc + 4) = 0x3ff0000000000000;\n *(undefined8 *)((long)¶m_3->field23_0xb4 + 4) = 0;\n return 1;\n}\n\n","status":"ok"},{"address":"0x10002ae04","procedure":{"address":"0x10002ae04","name":"MSSuperSkinSmoothingPlugIn::applySkinSmoothingToImage:params:renderTime:faceObservations:selectedFacePoints:","status":"resolved"},"pseudocode":"\n/* WARNING: Function: _objc_autorelease replaced with injection: _objc_retain_fixup */\n/* WARNING: Removing unreachable block (ram,0x00010002b044) */\n/* Function Stack Size: 0x48 bytes */\n\nID MSSuperSkinSmoothingPlugIn::\n applySkinSmoothingToImage_params_renderTime_faceObservations_selectedFacePoints_\n (ID param_1,SEL param_2,ID param_3,const_AnonymousStructure6__ param_4,\n AnonymousStructure0 param_5,ID param_6,ID param_7)\n\n{\n undefined *puVar1;\n undefined *puVar2;\n bool bVar3;\n undefined *puVar4;\n bool bVar5;\n bool bVar6;\n bool bVar7;\n bool bVar8;\n bool bVar9;\n int iVar10;\n ID IVar11;\n class_t *pcVar12;\n ID IVar13;\n ID IVar14;\n ID IVar15;\n ID IVar16;\n ID IVar17;\n long_long *plVar18;\n ulong uVar19;\n long lVar20;\n ID IVar21;\n byte bVar22;\n undefined8 uVar23;\n ID IVar24;\n double *pdVar25;\n undefined8 uVar26;\n double extraout_d0;\n double dVar27;\n double dVar28;\n double extraout_d0_00;\n double extraout_d0_01;\n double extraout_d0_02;\n double dVar29;\n double extraout_d0_03;\n double dVar30;\n double dVar31;\n double extraout_d0_04;\n double extraout_d0_05;\n double extraout_d0_06;\n double extraout_d0_07;\n undefined8 extraout_d0_08;\n undefined8 extraout_d0_09;\n undefined8 extraout_d0_10;\n undefined8 uVar32;\n undefined8 extraout_d0_11;\n undefined8 extraout_d0_12;\n double in_d1;\n double dVar33;\n double dVar34;\n double dVar35;\n double in_d2;\n double dVar36;\n double in_d3;\n double dVar37;\n undefined8 uVar38;\n double dVar39;\n undefined8 uVar40;\n double dVar41;\n undefined8 uVar42;\n double dVar43;\n undefined8 uVar44;\n double dVar45;\n double dVar46;\n double dVar47;\n double dVar48;\n double dVar49;\n double dVar50;\n CGRect CVar51;\n double local_2a0;\n double local_298;\n double local_290;\n double local_288;\n ID local_280;\n double local_260;\n long_long local_200;\n long_long lStack_1f8;\n const_char__ local_1f0;\n long_long lStack_1e8;\n long_long local_1e0;\n const_char__ local_1d8;\n ID local_1d0;\n ID local_1c8;\n ID local_1c0;\n long lStack_1b8;\n long *local_1b0;\n undefined8 uStack_1a8;\n undefined8 local_1a0;\n undefined8 uStack_198;\n undefined8 uStack_190;\n undefined8 uStack_188;\n ID local_178;\n ID IStack_170;\n ID local_168;\n ID local_160;\n ID local_158;\n ID local_150;\n ID local_148;\n ID IStack_140;\n ID local_138;\n AnonymousStructure0 local_130 [5];\n long local_b0;\n \n IVar17 = param_5._8_8_;\n plVar18 = (long_long *)param_5.field0_0x0;\n local_b0 = *(long *)PTR____stack_chk_guard_1000780b8;\n FUN_100021c7c();\n DAT_100088df0 = DAT_100088df0 + 1;\n IVar13 = param_3;\n if (param_3 == 0) goto LAB_10002beec;\n objc_stub::extent(param_3);\n _NSStringFromRect();\n if (param_4 == (const_AnonymousStructure6__)0x0) goto LAB_10002beec;\n bVar9 = mss_branchA(param_1);\n if ((bVar9 & 1) == 0) {\n objc_stub::extent(param_3);\n CVar51.field0_0x0.field1_0x8 = in_d1;\n CVar51.field0_0x0.field0_0x0 = extraout_d0;\n CVar51.field1_0x10.field1_0x8 = in_d3;\n CVar51.field1_0x10.field0_0x0 = in_d2;\n IVar17 = unregisteredOverlayImageForExtent_(param_1,CVar51);\n FUN_100021c7c();\n if (IVar17 != 0) {\n IVar13 = IVar17;\n }\n goto LAB_10002beec;\n }\n if ((((((2.220446049250313e-16 < param_4->field7_0x38) ||\n (2.220446049250313e-16 < *(double *)((long)¶m_4->field9_0x44 + 4))) ||\n (2.220446049250313e-16 < *(double *)((long)¶m_4->field10_0x4c + 4))) ||\n ((2.220446049250313e-16 < param_4->field2_0x10 ||\n (2.220446049250313e-16 < ABS(param_4->field3_0x18))))) ||\n (2.220446049250313e-16 < ABS(param_4->field4_0x20))) ||\n ((param_4->field5_0x28 != 0 || ((param_4->field43_0x138 & 1) != 0)))) {\n dVar36 = 2.220446049250313e-16;\n if ((2.220446049250313e-16 < *(double *)((long)¶m_4->field24_0xbc + 4)) ||\n ((param_4->field43_0x138 & 1) != 0)) {\n if ((((2.220446049250313e-16 < param_4->field7_0x38) ||\n (2.220446049250313e-16 < param_4->field2_0x10)) ||\n (2.220446049250313e-16 < ABS(param_4->field3_0x18))) ||\n ((2.220446049250313e-16 < ABS(param_4->field4_0x20) || (param_4->field5_0x28 != 0)))) {\n bVar22 = 1;\n }\n else {\n bVar22 = (byte)param_4->field43_0x138;\n }\n local_1d0 = 0;\n local_1c8 = 0;\n local_1e0 = 0;\n local_1d8 = (const_char__)0x0;\n local_1f0 = (const_char__)0x0;\n lStack_1e8 = 0;\n local_200 = 0;\n lStack_1f8 = 0;\n if ((bVar22 & 1) == 0) {\n resetTemporalMaskCache(param_1);\nLAB_10002b074:\n resetTemporalMaskCache(param_1);\n IVar13 = 0;\n if (((bVar22 ^ 1) & 1) == 0) goto LAB_10002b088;\n }\n else {\n dVar36 = *(double *)((long)¶m_4->field27_0xd4 + 4);\n FUN_10002c0d4(*(undefined8 *)((long)¶m_4->field25_0xc4 + 4),\n *(undefined8 *)((long)¶m_4->field26_0xcc + 4),param_3,\n (char)param_4->field46_0x148,&local_1d8,&local_1e0,&lStack_1e8,&local_1f0,\n &lStack_1f8,&local_200,&local_1c8,&local_1d0);\n if (IVar13 == 0) goto LAB_10002b074;\n local_1c0 = local_1c8;\n FUN_100021c7c();\n local_130[0]._8_8_ = plVar18[1];\n local_130[0].field0_0x0 = *plVar18;\n local_130[0].field3_0x10 = plVar18[2];\n IVar11 = playbackStabilizedMaskImageFromInputImage_params_renderTime_trackingGrayBytes_trackingGrayWidth_trackingGrayHeight_trackingAlphaBytes_trackingAlphaWidth_trackingAlphaHeight_previewMaskImage_rawPreviewSmallMaskImage_maskImage_smoothCarrierImageOut_\n (param_1,param_3,param_4,local_130,local_1d8,local_1e0,lStack_1e8,\n local_1f0,lStack_1f8,local_200,local_1c8,local_1d0,IVar13,&local_1c0);\n FUN_100021c7c();\n if (IVar11 != 0) {\n IVar13 = IVar11;\n }\n if (local_1c0 != 0) {\n local_1c8 = local_1c0;\n }\nLAB_10002b088:\n if (IVar13 == 0) {\n if ((param_4->field43_0x138 & 1) == 0) {\n pcVar12 = &objc::class_t::YUCIHighPassSkinSmoothingMaskGenerator;\n _objc_alloc_init();\n IVar13 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field22_0xac + 4));\n objc_stub::setInputRadius_((ID)pcVar12,IVar13);\n objc_stub::setInputImage_((ID)pcVar12,param_3);\n IVar13 = objc_stub::outputImage((ID)pcVar12);\n }\n else {\n IVar13 = 0;\n }\n }\n }\n if (local_1d8 != (const_char__)0x0) {\n _free(local_1d8);\n local_1d8 = (const_char__)0x0;\n }\n if (local_1f0 != (const_char__)0x0) {\n _free(local_1f0);\n local_1f0 = (const_char__)0x0;\n }\n pcVar12 = &objc::class_t::YUCIHighPassSkinSmoothing;\n _objc_alloc_init();\n objc_stub::setInputImage_((ID)pcVar12,param_3);\n objc_stub::setInputMaskImage_((ID)pcVar12,IVar13);\n objc_stub::setInputPreviewMaskImage_((ID)pcVar12,local_1c8);\n if (((char)param_4->field8_0x40 == '\\x01') && (IVar11 = objc_stub::count(IVar17), IVar11 != 0)\n ) {\n if (param_4->field7_0x38 <= 2.220446049250313e-16) {\n IVar13 = 0;\n }\n else {\n FUN_10002c9e8(IVar13,IVar17);\n }\n objc_stub::setInputLocalSmoothingMaskImage_((ID)pcVar12,IVar13);\n if (*(double *)((long)¶m_4->field9_0x44 + 4) <= 2.220446049250313e-16)\n goto LAB_10002b198;\n objc_stub::extent(param_3);\n IVar13 = IVar17;\n FUN_10002e05c(IVar17);\n }\n else {\n objc_stub::setInputLocalSmoothingMaskImage_((ID)pcVar12,0);\nLAB_10002b198:\n IVar13 = 0;\n }\n objc_stub::setInputGlobalSmoothingMaskImage_((ID)pcVar12,IVar13);\n pdVar25 = (double *)((long)¶m_4->field10_0x4c + 4);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,*pdVar25);\n objc_stub::setInputTeethWhitening_((ID)pcVar12,IVar13);\n if (((*pdVar25 <= 2.220446049250313e-16) || (IVar13 = objc_stub::count(IVar17), IVar13 == 0))\n || (IVar13 = objc_stub::count(IVar17), IVar13 == 0)) {\nLAB_10002bb40:\n IVar13 = 0;\n }\n else {\n if (DAT_100089058 != -1) {\n FUN_1000546f0();\n }\n IVar13 = DAT_100089050;\n if (DAT_100089050 == 0) goto LAB_10002bb40;\n local_280 = objc_stub::extent(param_3);\n FUN_10003e8ac();\n if (local_280 == 0) goto LAB_10002bb40;\n uStack_198 = 0;\n local_1a0 = 0;\n uStack_188 = 0;\n uStack_190 = 0;\n lStack_1b8 = 0;\n local_1c0 = 0;\n uStack_1a8 = 0;\n local_1b0 = (long *)0x0;\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar17,&local_1c0,local_130,0x10);\n if (IVar11 == 0) goto LAB_10002bb40;\n bVar3 = false;\n lVar20 = *local_1b0;\n dVar33 = *(double *)PTR__CGRectNull_100078110;\n dVar27 = *(double *)(PTR__CGRectNull_100078110 + 8);\n local_260 = 0.01;\n local_288 = 1.72;\n local_290 = 1.45;\n local_298 = 0.034;\n local_2a0 = 0.115;\n dVar34 = *(double *)(PTR__CGRectNull_100078110 + 0x10);\n dVar28 = *(double *)(PTR__CGRectNull_100078110 + 0x18);\n dVar35 = dVar34;\n do {\n IVar21 = 0;\n do {\n dVar29 = dVar35;\n dVar30 = dVar36;\n dVar31 = in_d3;\n if (*local_1b0 != lVar20) {\n _objc_enumerationMutation(IVar17);\n dVar29 = dVar35;\n dVar30 = dVar36;\n dVar31 = in_d3;\n }\n IVar24 = *(ID *)(lStack_1b8 + IVar21 * 8);\n dVar35 = dVar29;\n dVar36 = dVar30;\n in_d3 = dVar31;\n if ((IVar24 != 0) &&\n (IVar14 = objc_stub::landmarks(IVar24), dVar35 = dVar29, dVar36 = dVar30,\n in_d3 = dVar31, IVar14 != 0)) {\n IVar14 = objc_stub::boundingBox(IVar24);\n iVar10 = (int)IVar14;\n dVar35 = dVar29;\n dVar36 = dVar30;\n in_d3 = dVar31;\n FUN_10002ad20(extraout_d0_00);\n if (iVar10 != 0) {\n IVar14 = objc_stub::landmarks(IVar24);\n IVar15 = objc_stub::innerLips(IVar14);\n IVar14 = 0;\n dVar46 = dVar33;\n dVar48 = dVar27;\n dVar49 = dVar34;\n dVar50 = dVar28;\n if (IVar15 != 0) {\n IVar16 = objc_stub::pointCount(IVar15);\n IVar14 = 0;\n if (IVar16 != 0) {\n IVar16 = objc_stub::normalizedPoints(IVar15);\n IVar14 = 0;\n if (IVar16 != 0) {\n objc_stub::boundingBox(IVar24);\n IVar14 = objc_stub::normalizedPoints(IVar15);\n IVar16 = objc_stub::pointCount(IVar15);\n if (IVar16 == 0) {\n dVar37 = -1.7976931348623157e+308;\n dVar45 = 1.7976931348623157e+308;\n dVar41 = -1.7976931348623157e+308;\n dVar39 = 1.7976931348623157e+308;\n IVar14 = 0;\n }\n else {\n uVar19 = 0;\n pdVar25 = (double *)(IVar14 + 8);\n dVar41 = -1.7976931348623157e+308;\n dVar39 = 1.7976931348623157e+308;\n dVar37 = -1.7976931348623157e+308;\n dVar45 = 1.7976931348623157e+308;\n do {\n dVar43 = pdVar25[-1];\n dVar47 = *pdVar25;\n IVar14 = objc_stub::pointCount(IVar15);\n dVar43 = extraout_d0_01 + dVar43 * dVar36;\n dVar47 = dVar35 + dVar47 * in_d3;\n dVar39 = (double)NEON_fminnm(dVar39,dVar43);\n dVar45 = (double)NEON_fminnm(dVar45,dVar47);\n if (dVar37 <= dVar43) {\n dVar37 = dVar43;\n }\n if (dVar41 <= dVar47) {\n dVar41 = dVar47;\n }\n uVar19 = uVar19 + 1;\n pdVar25 = pdVar25 + 2;\n } while (uVar19 < IVar14);\n }\n if ((((ulong)ABS(dVar39) < 0x7ff0000000000000) &&\n ((ulong)ABS(dVar45) < 0x7ff0000000000000)) &&\n ((ulong)ABS(dVar37) < 0x7ff0000000000000)) {\n bVar5 = false;\n bVar7 = false;\n if ((ulong)ABS(dVar41) < 0x7ff0000000000000) {\n bVar5 = false;\n bVar7 = true;\n if (!NAN(dVar37) && !NAN(dVar39)) {\n bVar5 = dVar37 == dVar39;\n bVar7 = dVar39 <= dVar37;\n }\n }\n bVar6 = false;\n bVar8 = false;\n if (bVar7 && !bVar5) {\n bVar6 = false;\n bVar8 = true;\n if (!NAN(dVar41) && !NAN(dVar45)) {\n bVar6 = dVar41 == dVar45;\n bVar8 = dVar45 <= dVar41;\n }\n }\n if (bVar8 && !bVar6) {\n dVar49 = dVar37 - dVar39;\n dVar50 = dVar41 - dVar45;\n dVar46 = dVar39;\n dVar48 = dVar45;\n }\n }\n }\n }\n }\n dVar36 = dVar48;\n dVar35 = dVar49;\n dVar37 = dVar50;\n FUN_10002ad20(dVar46);\n if ((int)IVar14 == 0) {\nLAB_10002b4c0:\n IVar14 = objc_stub::landmarks(IVar24);\n IVar14 = objc_stub::outerLips(IVar14);\n iVar10 = 0;\n dVar46 = dVar33;\n dVar48 = dVar27;\n dVar49 = dVar34;\n dVar50 = dVar28;\n if (IVar14 != 0) {\n IVar15 = objc_stub::pointCount(IVar14);\n iVar10 = 0;\n if (IVar15 != 0) {\n IVar15 = objc_stub::normalizedPoints(IVar14);\n iVar10 = 0;\n if (IVar15 != 0) {\n objc_stub::boundingBox(IVar24);\n IVar24 = objc_stub::normalizedPoints(IVar14);\n IVar15 = objc_stub::pointCount(IVar14);\n if (IVar15 == 0) {\n dVar39 = -1.7976931348623157e+308;\n dVar43 = 1.7976931348623157e+308;\n dVar41 = -1.7976931348623157e+308;\n dVar45 = 1.7976931348623157e+308;\n IVar24 = 0;\n }\n else {\n uVar19 = 0;\n pdVar25 = (double *)(IVar24 + 8);\n dVar41 = -1.7976931348623157e+308;\n dVar45 = 1.7976931348623157e+308;\n dVar39 = -1.7976931348623157e+308;\n dVar43 = 1.7976931348623157e+308;\n do {\n dVar46 = pdVar25[-1];\n dVar48 = *pdVar25;\n IVar24 = objc_stub::pointCount(IVar14);\n dVar46 = extraout_d0_02 + dVar46 * dVar35;\n dVar48 = dVar36 + dVar48 * dVar37;\n dVar45 = (double)NEON_fminnm(dVar45,dVar46);\n dVar43 = (double)NEON_fminnm(dVar43,dVar48);\n if (dVar39 <= dVar46) {\n dVar39 = dVar46;\n }\n if (dVar41 <= dVar48) {\n dVar41 = dVar48;\n }\n uVar19 = uVar19 + 1;\n pdVar25 = pdVar25 + 2;\n } while (uVar19 < IVar24);\n }\n iVar10 = (int)IVar24;\n dVar46 = dVar33;\n dVar48 = dVar27;\n if ((((ulong)ABS(dVar45) < 0x7ff0000000000000) &&\n ((ulong)ABS(dVar43) < 0x7ff0000000000000)) &&\n ((ulong)ABS(dVar39) < 0x7ff0000000000000)) {\n bVar5 = false;\n bVar7 = false;\n if ((ulong)ABS(dVar41) < 0x7ff0000000000000) {\n bVar5 = false;\n bVar7 = true;\n if (!NAN(dVar39) && !NAN(dVar45)) {\n bVar5 = dVar39 == dVar45;\n bVar7 = dVar45 <= dVar39;\n }\n }\n bVar6 = false;\n bVar8 = false;\n if (bVar7 && !bVar5) {\n bVar6 = false;\n bVar8 = true;\n if (!NAN(dVar41) && !NAN(dVar43)) {\n bVar6 = dVar41 == dVar43;\n bVar8 = dVar43 <= dVar41;\n }\n }\n if (bVar8 && !bVar6) {\n dVar49 = dVar39 - dVar45;\n dVar50 = dVar41 - dVar43;\n dVar46 = dVar45;\n dVar48 = dVar43;\n }\n }\n }\n }\n }\n dVar35 = dVar48;\n dVar36 = dVar49;\n in_d3 = dVar50;\n FUN_10002ad20(dVar46);\n if (iVar10 != 0) {\n _CGRectGetWidth(dVar46,dVar48,dVar49,dVar50);\n _CGRectGetHeight(dVar46,dVar48,dVar49,dVar50);\n _CGRectInset();\n dVar35 = dVar48;\n dVar36 = dVar49;\n in_d3 = dVar50;\n FUN_10002ad20();\n if (((iVar10 != 0) &&\n (dVar35 = dVar48, dVar36 = dVar49, in_d3 = dVar50, FUN_10002ad20(dVar46),\n iVar10 != 0)) &&\n (dVar35 = dVar29, dVar36 = dVar30, in_d3 = dVar31,\n FUN_10002ad20(extraout_d0_00), iVar10 != 0)) {\n dVar37 = 0.032;\n dVar41 = 1.22;\n dVar39 = 1.14;\n goto LAB_10002b730;\n }\n }\n }\n else {\n dVar41 = dVar46;\n _CGRectGetHeight(dVar46,dVar48,dVar49,dVar50);\n dVar39 = extraout_d0_00;\n dVar35 = dVar30;\n dVar37 = dVar31;\n _CGRectGetHeight(extraout_d0_00,dVar29);\n dVar36 = local_260;\n if (dVar41 < dVar39 * 0.01) goto LAB_10002b4c0;\n dVar35 = dVar48;\n dVar36 = dVar49;\n in_d3 = dVar50;\n FUN_10002ad20(dVar46);\n if (((int)IVar14 == 0) ||\n (dVar36 = dVar30, in_d3 = dVar31, FUN_10002ad20(extraout_d0_00,dVar29),\n dVar37 = local_298, dVar35 = local_2a0, dVar41 = local_288, dVar39 = local_290,\n (IVar14 & 1) == 0)) goto LAB_10002b958;\nLAB_10002b730:\n dVar36 = dVar46;\n _CGRectGetWidth(dVar46,dVar48,dVar49,dVar50);\n dVar35 = dVar46;\n _CGRectGetHeight(dVar46,dVar48,dVar49,dVar50);\n _CGRectGetWidth(extraout_d0_00,dVar29,dVar30,dVar31);\n dVar45 = extraout_d0_00;\n _CGRectGetHeight(extraout_d0_00,dVar29,dVar30,dVar31);\n dVar29 = dVar46;\n _CGRectGetMidX(dVar46,dVar48,dVar49,dVar50);\n _CGRectGetMidY(dVar46,dVar48,dVar49,dVar50);\n in_d3 = dVar41 * dVar35;\n if (dVar41 * dVar35 <= dVar37 * dVar45) {\n in_d3 = dVar37 * dVar45;\n }\n dVar36 = dVar39 * dVar36 * 0.5;\n in_d3 = in_d3 * 0.5;\n IVar24 = CIVector::vectorWithX_Y_Z_W_((ID)&_OBJC_CLASS___CIVector,dVar29);\n dVar35 = dVar46;\n if (IVar24 != 0) {\n IVar14 = objc_stub::extent(param_3);\n iVar10 = (int)IVar14;\n dVar35 = dVar46;\n dVar29 = dVar36;\n dVar30 = in_d3;\n FUN_10002ad20();\n if (iVar10 != 0) {\n dVar29 = extraout_d0_03;\n _CGRectGetWidth(extraout_d0_03,dVar46,dVar36,in_d3);\n dVar30 = extraout_d0_03;\n _CGRectGetHeight(extraout_d0_03,dVar46,dVar36,in_d3);\n dVar31 = extraout_d0_03;\n _CGRectGetMinX(extraout_d0_03,dVar46,dVar36,in_d3);\n CIVector::X(IVar24);\n CIVector::Y(IVar24);\n dVar35 = extraout_d0_03;\n _CGRectGetMinY(extraout_d0_03,dVar46,dVar36,in_d3);\n CIVector::Z(IVar24);\n CIVector::W(IVar24);\n dVar35 = dVar35 + dVar30 * (1.0 - extraout_d0_05);\n dVar36 = dVar29 * extraout_d0_06;\n in_d3 = dVar30 * extraout_d0_07;\n IVar24 = CIVector::vectorWithX_Y_Z_W_\n ((ID)&_OBJC_CLASS___CIVector,\n dVar31 + dVar29 * extraout_d0_04);\n dVar29 = dVar36;\n dVar30 = in_d3;\n if (IVar24 == 0) goto LAB_10002b958;\n }\n in_d3 = dVar30;\n dVar36 = dVar29;\n objc_stub::extent(param_3);\n IStack_140 = local_280;\n local_148 = param_3;\n local_138 = IVar24;\n IVar24 = NSArray::arrayWithObjects_count_\n ((ID)&_OBJC_CLASS___NSArray,&local_148,3);\n IVar14 = objc_stub::applyWithExtent_arguments_(IVar13,extraout_d0_08,IVar24);\n IVar24 = IVar14;\n if (IVar14 == 0) {\n IVar24 = local_280;\n }\n bVar3 = (bool)(IVar14 != 0 | bVar3);\n local_280 = IVar24;\n }\n }\n }\n }\nLAB_10002b958:\n IVar21 = IVar21 + 1;\n } while (IVar21 != IVar11);\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar17,&local_1c0,local_130,0x10);\n } while (IVar11 != 0);\n if (!bVar3) goto LAB_10002bb40;\n objc_stub::extent(param_3);\n uVar23 = extraout_d0_09;\n _CGRectGetWidth();\n objc_stub::extent(param_3);\n uVar26 = extraout_d0_10;\n _CGRectGetHeight();\n IVar13 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIMedianFilter);\n puVar1 = PTR__kCIInputImageKey_1000781a8;\n if (IVar13 != 0) {\n CIFilter::setValue_forKey_\n (IVar13,local_280,*(undefined8 *)PTR__kCIInputImageKey_1000781a8);\n IVar13 = CIFilter::outputImage(IVar13);\n objc_stub::extent(param_3);\n IVar13 = CIFilter::imageByCroppingToRect_(IVar13);\n if (IVar13 != 0) {\n local_280 = IVar13;\n }\n }\n dVar27 = (double)NEON_fminnm(uVar23,uVar26);\n dVar35 = dVar27 * 0.0009;\n dVar36 = 1.7;\n if (dVar35 <= 1.7) {\n dVar36 = dVar35;\n }\n dVar28 = 0.7;\n if (0.7 <= dVar35) {\n dVar28 = dVar36;\n }\n IVar13 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIMorphologyMaximum);\n if ((IVar13 != 0) && (0.0 < dVar28)) {\n IVar17 = objc_stub::imageByClampingToExtent(local_280);\n uVar26 = *(undefined8 *)puVar1;\n CIFilter::setValue_forKey_(IVar13,IVar17,uVar26);\n IVar17 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar28);\n uVar23 = *(undefined8 *)PTR__kCIInputRadiusKey_1000781b8;\n CIFilter::setValue_forKey_(IVar13,IVar17,uVar23);\n IVar13 = CIFilter::outputImage(IVar13);\n objc_stub::extent(param_3);\n IVar13 = CIFilter::imageByCroppingToRect_(IVar13);\n if ((IVar13 != 0) &&\n (IVar17 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIMorphologyMinimum),\n local_280 = IVar13, IVar17 != 0)) {\n IVar13 = CIFilter::imageByClampingToExtent(IVar13);\n CIFilter::setValue_forKey_(IVar17,IVar13,uVar26);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar28);\n CIFilter::setValue_forKey_(IVar17,IVar13,uVar23);\n IVar13 = CIFilter::outputImage(IVar17);\n objc_stub::extent(param_3);\n IVar13 = CIFilter::imageByCroppingToRect_(IVar13);\n if (IVar13 != 0) {\n local_280 = IVar13;\n }\n }\n }\n dVar27 = dVar27 * 0.0022;\n dVar36 = 3.6;\n if (dVar27 <= 3.6) {\n dVar36 = dVar27;\n }\n dVar28 = 1.2;\n dVar35 = dVar28;\n if (1.2 <= dVar27) {\n dVar35 = dVar36;\n }\n if (dVar35 <= 0.0) {\nLAB_10002c09c:\n objc_stub::extent(param_3);\n IVar13 = objc_stub::imageByCroppingToRect_(local_280);\n }\n else {\n IVar13 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIGaussianBlur);\n IVar17 = objc_stub::imageByClampingToExtent(local_280);\n CIFilter::setValue_forKey_(IVar13,IVar17,*(undefined8 *)puVar1);\n IVar17 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar35);\n CIFilter::setValue_forKey_(IVar13,IVar17,*(undefined8 *)PTR__kCIInputRadiusKey_1000781b8);\n IVar13 = CIFilter::outputImage(IVar13);\n objc_stub::extent(param_3);\n IVar17 = CIFilter::imageByCroppingToRect_(IVar13);\n if (IVar17 == 0) goto LAB_10002c09c;\n if (DAT_100089018 != -1) {\n FUN_100054714();\n }\n IVar13 = DAT_100089010;\n if (DAT_100089010 == 0) {\nLAB_10002c094:\n IVar13 = IVar17;\n }\n else {\n objc_stub::extent(param_3);\n local_160 = IVar17;\n local_158 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,0x3fb47ae147ae147b);\n local_150 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,0x3fe70a3d70a3d70a);\n IVar11 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_160,3);\n IVar13 = objc_stub::applyWithExtent_arguments_\n (IVar13,extraout_d0_12,dVar36,dVar28,in_d3,IVar11);\n if (IVar13 == 0) goto LAB_10002c094;\n }\n }\n }\n objc_stub::setInputTeethMaskImage_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,0);\n objc_stub::setInputEyeBrightening_((ID)pcVar12,IVar13);\n IVar13 = objc_stub::setInputEyeMaskImage_((ID)pcVar12,0);\n iVar10 = (int)IVar13;\n uVar38 = *(undefined8 *)PTR__CGRectNull_100078110;\n uVar40 = *(undefined8 *)(PTR__CGRectNull_100078110 + 8);\n uVar42 = *(undefined8 *)(PTR__CGRectNull_100078110 + 0x10);\n uVar44 = *(undefined8 *)(PTR__CGRectNull_100078110 + 0x18);\n uVar23 = uVar42;\n uVar26 = uVar44;\n FUN_10002ad20(uVar38,uVar40,uVar42,uVar44);\n if (iVar10 == 0) {\n IVar13 = 0;\n }\n else {\n uVar26 = uVar38;\n _CGRectGetMinX(uVar38,uVar40,uVar42,uVar44);\n uVar32 = uVar38;\n _CGRectGetMinY(uVar38,uVar40,uVar42,uVar44);\n uVar23 = uVar38;\n _CGRectGetWidth(uVar38,uVar40,uVar42,uVar44);\n _CGRectGetHeight(uVar38,uVar40,uVar42,uVar44);\n IVar13 = CIVector::vectorWithX_Y_Z_W_\n ((ID)&_OBJC_CLASS___CIVector,uVar26,uVar32,uVar23,uVar38);\n uVar26 = uVar38;\n }\n objc_stub::setInputEyeMaskActiveExtentVector_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,param_4->field1_0x8);\n objc_stub::setInputAmount_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,param_4->field5_0x28);\n objc_stub::setInputSkinTonePreset_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,param_4->field2_0x10);\n objc_stub::setInputSkinBrightness_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,param_4->field3_0x18);\n objc_stub::setInputSkinHue_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,param_4->field4_0x20);\n objc_stub::setInputSkinSaturation_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,param_4->field7_0x38);\n objc_stub::setInputMidtoneDetail_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field9_0x44 + 4));\n objc_stub::setInputHighPassDetail_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field22_0xac + 4));\n objc_stub::setInputRadius_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field23_0xb4 + 4));\n objc_stub::setInputSharpnessFactor_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field25_0xc4 + 4));\n objc_stub::setInputMaskThreshold_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field26_0xcc + 4));\n objc_stub::setInputMaskSoftness_((ID)pcVar12,IVar13);\n IVar13 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field27_0xd4 + 4));\n objc_stub::setInputMaskEdgeProtect_((ID)pcVar12,IVar13);\n puVar2 = PTR____kCFBooleanTrue_1000780f0;\n puVar4 = PTR____kCFBooleanFalse_1000780e8;\n puVar1 = PTR____kCFBooleanTrue_1000780f0;\n if ((char)param_4->field43_0x138 == '\\0') {\n puVar1 = PTR____kCFBooleanFalse_1000780e8;\n }\n objc_stub::setInputShowChannelInfo_((ID)pcVar12,puVar1);\n IVar13 = NSNumber::numberWithInteger_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field44_0x13c + 4));\n objc_stub::setInputDebugChannelMode_((ID)pcVar12,IVar13);\n if ((char)param_4->field46_0x148 == '\\0') {\n puVar2 = puVar4;\n }\n objc_stub::setInputInvertMaskChannel_((ID)pcVar12,puVar2);\n IVar13 = objc_stub::outputImage((ID)pcVar12);\n if (IVar13 == 0) {\n FUN_100021c7c();\n IVar13 = param_3;\n }\n else if ((char)param_4->field43_0x138 == '\\x01') {\n FUN_100021c7c();\n }\n else {\n uVar38 = 0x3feffffffffffffe;\n if (0.9999999999999998 <= *(double *)((long)¶m_4->field24_0xbc + 4)) {\n FUN_100021c7c();\n }\n else {\n if (DAT_100089068 != -1) {\n FUN_100054738();\n }\n IVar17 = DAT_100089060;\n if (DAT_100089060 == 0) {\n FUN_100021c7c();\n }\n else {\n objc_stub::extent(param_3);\n local_178 = param_3;\n IStack_170 = IVar13;\n local_168 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,\n *(undefined8 *)((long)¶m_4->field24_0xbc + 4));\n IVar11 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_178,3);\n IVar17 = objc_stub::applyWithExtent_arguments_\n (IVar17,extraout_d0_11,uVar38,uVar23,uVar26,IVar11);\n FUN_100021c7c();\n if (IVar17 != 0) {\n IVar13 = IVar17;\n }\n }\n }\n }\n goto LAB_10002beec;\n }\n resetTemporalMaskCache(param_1);\n }\n FUN_100021c7c();\nLAB_10002beec:\n if (*(long *)PTR____stack_chk_guard_1000780b8 != local_b0) {\n /* WARNING: Subroutine does not return */\n ___stack_chk_fail();\n }\n return IVar13;\n}\n\n","status":"ok"},{"address":"0x10001b698","procedure":{"address":"0x10001b698","name":"MSSuperSkinSmoothingPlugIn::properties:error:","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x20 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::properties_error_(ID param_1,SEL param_2,ID *param_3,ID *param_4)\n\n{\n undefined *puVar1;\n ID IVar2;\n cfstringStruct *pcVar3;\n cfstringStruct *local_98;\n cfstringStruct *pcStack_90;\n cfstringStruct *local_88;\n cfstringStruct *pcStack_80;\n cfstringStruct *local_78;\n cfstringStruct *pcStack_70;\n undefined *local_68;\n ID local_60;\n undefined *puStack_58;\n undefined *local_50;\n undefined *puStack_48;\n ID local_40;\n long local_38;\n \n puVar1 = PTR____kCFBooleanFalse_1000780e8;\n local_38 = *(long *)PTR____stack_chk_guard_1000780b8;\n if (param_3 == (ID *)0x0) {\n if (param_4 != (ID *)0x0) {\n pcVar3 = &cf_propertiespointerisnil;\n FUN_10001b7ac();\n *param_4 = (ID)pcVar3;\n }\n }\n else {\n local_68 = PTR____kCFBooleanFalse_1000780e8;\n local_98 = &cf_MayRemapTime;\n pcStack_90 = &cf_PixelTransformSupport;\n local_60 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,6);\n puStack_58 = PTR____kCFBooleanTrue_1000780f0;\n local_88 = &cf_NeedsFullBuffer;\n pcStack_80 = &cf_VariesWhenParamsAreStatic;\n local_50 = puVar1;\n puStack_48 = puVar1;\n local_78 = &cf_ChangesOutputSize;\n pcStack_70 = &cf_DesiredProcessingColorInfo;\n local_40 = NSNumber::numberWithInt_((ID)&_OBJC_CLASS___NSNumber,2);\n IVar2 = NSDictionary::dictionaryWithObjects_forKeys_count_\n ((ID)&_OBJC_CLASS___NSDictionary,&local_68,&local_98,6);\n *param_3 = IVar2;\n }\n if (*(long *)PTR____stack_chk_guard_1000780b8 == local_38) {\n return (bool)(param_3 != (ID *)0x0);\n }\n /* WARNING: Subroutine does not return */\n ___stack_chk_fail();\n}\n\n","status":"ok"}],"succeeded":4,"total":4},"operation":"batch_decompile","parameters":{"addresses":["0x10001b84c","0x10002973c","0x10002ae04","0x10001b698"]},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_4c72ae4c73b551a5f12a78f5fe5e9ea7493f0cd11c24398b73515b2465ceb907","evidence_links":[],"limitations":["The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.","The imported Program and temporary project are ephemeral and deleted on close. Annotation operations edit session database metadata; original executable bytes are never written.","Cancelling an active Ghidra request terminates its ephemeral database and discards session annotations. The selected target remains open; the next provider query imports the original artifact again.","Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use :0x.","Regex mode uses Java Pattern semantics. Matcher or compiler stack exhaustion returns a resource constraint without closing the session; literal mode avoids regex recursion and returns complete matching values.","macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state."],"locations":[],"normalized_result":[{"address":"EXTERNAL:0x322","value":"/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage::kernelWithString:"},{"address":"0x100003e4c","value":"MSSSectionCardParameterValue::defaultValue"},{"address":"0x100033a64","value":"YUCIRGBToneCurve::filterKernel"},{"address":"0x100034e44","value":"YUCIHighPass::filterKernel"},{"address":"0x1000350c0","value":"YUCIGreenBlueChannelOverlayBlend::filterKernel"},{"address":"0x100035238","value":"YUCIHighPassSkinSmoothingMaskBoost::filterKernel"},{"address":"0x100058f80","value":"objc_stub::filterKernel"},{"address":"0x100059b20","value":"objc_stub::kernelWithString:"},{"address":"0x1000a1c01","value":"CIColorKernel::kernelWithString:"},{"address":"0x1000a1e01","value":"CIFilter::dealloc"},{"address":"0x1000a1e02","value":"CIFilter::filterWithName:"},{"address":"0x1000a1e03","value":"CIFilter::setValue:forKey:"},{"address":"0x1000a1e04","value":"CIFilter::outputImage"},{"address":"0x1000a1e05","value":"CIFilter::imageByCroppingToRect:"},{"address":"0x1000a1e06","value":"CIFilter::imageByClampingToExtent"},{"address":"0x1000a1e07","value":"CIFilter::inputKeys"},{"address":"0x1000a1e08","value":"CIFilter::containsObject:"},{"address":"0x1000a1e09","value":"CIFilter::registerFilterName:constructor:classAttributes:"},{"address":"0x1000a2001","value":"CIKernel::kernelWithString:"},{"address":"0x1000a2201","value":"CIWarpKernel::kernelWithString:"}],"operation":"search_procedures","parameters":{"case_sensitive":false,"mode":"regex","pattern":"(Filter::|Kernel|MetalDeviceCache|ControlPanelValue::default|SectionCardParameterValue::default)"},"predicate_type":"rea.analysis","provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"},"raw_result":[{"address":"EXTERNAL:0x322","value":"/System/Library/Frameworks/CoreImage.framework/Versions/A/CoreImage::kernelWithString:"},{"address":"0x100003e4c","value":"MSSSectionCardParameterValue::defaultValue"},{"address":"0x100033a64","value":"YUCIRGBToneCurve::filterKernel"},{"address":"0x100034e44","value":"YUCIHighPass::filterKernel"},{"address":"0x1000350c0","value":"YUCIGreenBlueChannelOverlayBlend::filterKernel"},{"address":"0x100035238","value":"YUCIHighPassSkinSmoothingMaskBoost::filterKernel"},{"address":"0x100058f80","value":"objc_stub::filterKernel"},{"address":"0x100059b20","value":"objc_stub::kernelWithString:"},{"address":"0x1000a1c01","value":"CIColorKernel::kernelWithString:"},{"address":"0x1000a1e01","value":"CIFilter::dealloc"},{"address":"0x1000a1e02","value":"CIFilter::filterWithName:"},{"address":"0x1000a1e03","value":"CIFilter::setValue:forKey:"},{"address":"0x1000a1e04","value":"CIFilter::outputImage"},{"address":"0x1000a1e05","value":"CIFilter::imageByCroppingToRect:"},{"address":"0x1000a1e06","value":"CIFilter::imageByClampingToExtent"},{"address":"0x1000a1e07","value":"CIFilter::inputKeys"},{"address":"0x1000a1e08","value":"CIFilter::containsObject:"},{"address":"0x1000a1e09","value":"CIFilter::registerFilterName:constructor:classAttributes:"},{"address":"0x1000a2001","value":"CIKernel::kernelWithString:"},{"address":"0x1000a2201","value":"CIWarpKernel::kernelWithString:"}],"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":{"digest":"575a577ce88c350b8ef1d4768986d124a16377363cbf22c68a4f73cc917881d4","parameters":{"upstream_analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"workflow_revision":2},"provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"}},"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_65936f315a3978bebcafd04e028acc5609c1c092282c05e0ca08cf2b279bc9ad","evidence_links":[],"limitations":["Derived by an REA composed workflow."],"locations":[{"address":"0x100035d78","kind":"address"},{"address":"0x100003e4c","kind":"address"},{"address":"0x10001cba4","kind":"address"}],"normalized_result":{"failed":0,"items":[{"address":"0x100035d78","procedure":{"address":"0x100035d78","name":"YUCIHighPassSkinSmoothing::outputImage","status":"resolved"},"pseudocode":"\n/* WARNING: Function: _objc_autorelease replaced with injection: _objc_retain_fixup */\n/* Function Stack Size: 0x10 bytes */\n\nID YUCIHighPassSkinSmoothing::outputImage(ID param_1,SEL param_2)\n\n{\n long lVar1;\n bool bVar2;\n bool bVar3;\n bool bVar4;\n bool bVar5;\n bool bVar6;\n ID IVar7;\n ID IVar8;\n ID IVar9;\n ID IVar10;\n class_t *self;\n undefined *self_00;\n ID IVar11;\n undefined *puVar12;\n undefined *puVar13;\n ID IVar14;\n code *pcVar15;\n SEL extraout_x1;\n undefined **ppuVar16;\n undefined *puVar17;\n undefined8 uVar18;\n double extraout_d0;\n double extraout_d0_00;\n double extraout_d0_01;\n double extraout_d0_02;\n double extraout_d0_03;\n double dVar19;\n double extraout_d0_04;\n double dVar20;\n double extraout_d0_05;\n double dVar21;\n undefined8 extraout_d0_06;\n double dVar22;\n undefined8 extraout_d0_07;\n double extraout_d0_08;\n double extraout_d0_09;\n undefined8 extraout_d0_10;\n double dVar23;\n double dVar24;\n double extraout_d0_11;\n double extraout_d0_12;\n double extraout_d0_13;\n double extraout_d0_14;\n undefined8 extraout_d0_15;\n undefined8 extraout_d0_16;\n undefined8 extraout_d0_17;\n undefined8 extraout_d0_18;\n double dVar25;\n double dVar26;\n double dVar27;\n double in_d2;\n undefined8 in_d3;\n double dVar28;\n ID local_158;\n long local_150;\n ID local_148;\n undefined *puStack_140;\n ID local_138;\n undefined *local_130;\n ID IStack_128;\n ID local_120;\n ID IStack_118;\n ID local_110;\n ID IStack_108;\n ID local_100;\n ID local_f8;\n undefined *local_f0;\n ID local_e8;\n code *local_e0;\n undefined *puStack_d8;\n ID local_d0;\n ID IStack_c8;\n ID local_c0;\n ID IStack_b8;\n long local_b0;\n \n local_b0 = *(long *)PTR____stack_chk_guard_1000780b8;\n IVar7 = inputImage(param_1);\n if (IVar7 == 0) {\n self_00 = (undefined *)0x0;\n }\n else {\n bVar6 = FUN_100016594(IVar7,extraout_x1);\n if ((bVar6 & 1) == 0) {\n if (*(long *)PTR____stack_chk_guard_1000780b8 == local_b0) {\n IVar7 = inputImage(param_1);\n return IVar7;\n }\n goto LAB_100037064;\n }\n IVar7 = inputAmount(param_1);\n objc_stub::doubleValue(IVar7);\n dVar25 = 1.0;\n if (extraout_d0 <= 1.0) {\n dVar25 = extraout_d0;\n }\n dVar23 = 0.0;\n if (0.0 <= extraout_d0) {\n dVar23 = dVar25;\n }\n IVar7 = inputSkinTonePreset(param_1);\n IVar8 = objc_stub::integerValue(IVar7);\n IVar7 = inputSkinBrightness(param_1);\n objc_stub::doubleValue(IVar7);\n dVar25 = 1.0;\n if (extraout_d0_00 <= 1.0) {\n dVar25 = extraout_d0_00;\n }\n dVar24 = 0.0;\n if (0.0 <= extraout_d0_00) {\n dVar24 = dVar25;\n }\n IVar7 = inputSkinHue(param_1);\n objc_stub::doubleValue(IVar7);\n dVar25 = 30.0;\n if (extraout_d0_01 <= 30.0) {\n dVar25 = extraout_d0_01;\n }\n IVar7 = inputSkinSaturation(param_1);\n objc_stub::doubleValue(IVar7);\n dVar28 = 100.0;\n if (extraout_d0_02 <= 100.0) {\n dVar28 = extraout_d0_02;\n }\n IVar7 = inputMidtoneDetail(param_1);\n objc_stub::doubleValue(IVar7);\n dVar19 = 2.0;\n if (extraout_d0_03 <= 2.0) {\n dVar19 = extraout_d0_03;\n }\n IVar7 = inputHighPassDetail(param_1);\n objc_stub::doubleValue(IVar7);\n dVar26 = 1.0;\n if (extraout_d0_04 <= 1.0) {\n dVar26 = extraout_d0_04;\n }\n dVar20 = 0.0;\n if (0.0 <= extraout_d0_04) {\n dVar20 = dVar26;\n }\n IVar7 = inputTeethWhitening(param_1);\n objc_stub::doubleValue(IVar7);\n dVar26 = 1.0;\n if (extraout_d0_05 <= 1.0) {\n dVar26 = extraout_d0_05;\n }\n dVar21 = 0.0;\n if (0.0 <= extraout_d0_05) {\n dVar21 = dVar26;\n }\n IVar7 = inputRadius(param_1);\n objc_stub::doubleValue(IVar7);\n IVar7 = inputInvertMaskChannel(param_1);\n IVar7 = objc_stub::boolValue(IVar7);\n IVar9 = inputMaskImage(param_1);\n local_158 = inputPreviewMaskImage(param_1);\n dVar26 = 0.0;\n if (0.0 <= extraout_d0_03) {\n dVar26 = dVar19 * 0.5;\n }\n dVar19 = 1.0;\n if (dVar26 <= 1.0) {\n dVar19 = dVar26;\n }\n dVar27 = 0.0;\n if (0.0 <= dVar26) {\n dVar27 = dVar19;\n }\n dVar26 = ABS(extraout_d0_01);\n dVar19 = 2.220446049250313e-16;\n bVar2 = -30.0 <= extraout_d0_01;\n if (!bVar2) {\n dVar25 = -30.0;\n }\n dVar22 = ABS(extraout_d0_02);\n bVar3 = -100.0 <= extraout_d0_02;\n if (!bVar3) {\n dVar28 = -100.0;\n }\n bVar5 = true;\n if ((((dVar24 <= 2.220446049250313e-16) &&\n (bVar2 && (dVar26 <= 2.220446049250313e-16 && extraout_d0_01 <= 30.0))) &&\n (bVar3 && (dVar22 <= 2.220446049250313e-16 && extraout_d0_02 <= 100.0))) &&\n ((bVar5 = IVar8 != 0, IVar8 == 0 && (2.220446049250313e-16 < dVar27)))) {\n IVar10 = inputLocalSmoothingMaskImage(param_1);\n bVar5 = IVar10 == 0;\n }\n if ((IVar9 == 0) && (bVar5)) {\n IVar9 = inputImage(param_1);\n IVar10 = inputMaskThreshold(param_1);\n objc_stub::doubleValue(IVar10);\n IVar10 = inputMaskSoftness(param_1);\n objc_stub::doubleValue(IVar10);\n IVar10 = inputMaskEdgeProtect(param_1);\n objc_stub::doubleValue(IVar10);\n dVar19 = extraout_d0_08;\n in_d2 = extraout_d0_09;\n FUN_10002c0d4(extraout_d0_07,extraout_d0_08,extraout_d0_09,IVar9,IVar7,0,0,0,0,0,0,&local_158,\n 0);\n if (IVar9 == 0) {\n self = &objc::class_t::YUCIHighPassSkinSmoothingMaskGenerator;\n _objc_alloc_init();\n IVar7 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,extraout_d0_06);\n objc_stub::setInputRadius_((ID)self,IVar7);\n IVar7 = inputImage(param_1);\n objc_stub::setInputImage_((ID)self,IVar7);\n IVar9 = objc_stub::outputImage((ID)self);\n goto LAB_100036080;\n }\n }\n else {\nLAB_100036080:\n if ((bool)(IVar9 == 0 & bVar5)) {\n if (2.220446049250313e-16 < dVar20) {\n IVar7 = inputGlobalSmoothingMaskImage(param_1);\n self_00 = (undefined *)inputImage(param_1);\n if (IVar7 == 0) {\n FUN_1000373ec(dVar20);\n }\n else {\n FUN_1000370a0(dVar20,self_00,IVar7);\n }\n if (self_00 != (undefined *)0x0) goto LAB_100036ff8;\n }\n self_00 = (undefined *)inputImage(param_1);\n goto LAB_100036ff8;\n }\n }\n self_00 = (undefined *)inputImage(param_1);\n IVar7 = IVar9;\n if (local_158 != 0) {\n IVar7 = local_158;\n }\n IVar11 = inputLocalSmoothingMaskImage(param_1);\n IVar10 = IVar7;\n if (IVar11 != 0) {\n IVar10 = IVar11;\n }\n if (2.220446049250313e-16 < dVar27 && IVar10 != 0) {\n puVar12 = (undefined *)inputImage(param_1);\n FUN_1000370a0(dVar27,puVar12,IVar10);\n if (puVar12 != (undefined *)0x0) {\n self_00 = puVar12;\n }\n }\n if (dVar23 <= 2.220446049250313e-16) {\n self_00 = (undefined *)inputImage(param_1);\n }\n else if (dVar23 < 0.9999999999999998) {\n if (DAT_100089068 != -1) {\n FUN_100054738();\n }\n IVar10 = DAT_100089060;\n if (DAT_100089060 != 0) {\n IVar11 = inputImage(param_1);\n objc_stub::extent(IVar11);\n local_148 = inputImage(param_1);\n puStack_140 = self_00;\n local_138 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar23);\n IVar11 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_148,3);\n puVar12 = (undefined *)\n objc_stub::applyWithExtent_arguments_\n (IVar10,extraout_d0_10,dVar19,in_d2,in_d3,IVar11);\n if (puVar12 != (undefined *)0x0) {\n self_00 = puVar12;\n }\n }\n }\n puVar12 = self_00;\n if (2.220446049250313e-16 < dVar24) {\n if (self_00 == (undefined *)0x0) {\n puVar17 = (undefined *)0x0;\n }\n else {\n puVar17 = self_00;\n if (2.220446049250313e-16 < dVar24) {\n dVar23 = dVar24;\n _pow(dVar24,0x3ff3d70a3d70a3d7);\n dVar19 = (dVar24 + -0.56) / 0.43999999999999995;\n in_d2 = 1.0;\n dVar24 = 1.0;\n if (dVar19 <= 1.0) {\n dVar24 = dVar19;\n }\n dVar27 = 0.0;\n if (0.0 <= dVar19) {\n dVar27 = dVar24;\n }\n dVar19 = dVar27 * dVar27 * (dVar27 * -2.0 + 3.0) * 0.12;\n in_d3 = 0x3fec28f5c28f5c29;\n dVar24 = dVar19 + dVar23 * 0.88;\n dVar23 = 1.0;\n if (dVar24 <= 1.0) {\n dVar23 = dVar24;\n }\n bVar5 = false;\n bVar4 = false;\n if (0.0 <= dVar24) {\n bVar5 = false;\n bVar4 = true;\n if (!NAN(dVar23)) {\n bVar5 = dVar23 == 2.220446049250313e-16;\n bVar4 = 2.220446049250313e-16 <= dVar23;\n }\n }\n if ((bVar4 && !bVar5) &&\n (IVar10 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIExposureAdjust),\n IVar10 != 0)) {\n CIFilter::setValue_forKey_\n (IVar10,self_00,*(undefined8 *)PTR__kCIInputImageKey_1000781a8);\n IVar11 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar23 * 0.95);\n CIFilter::setValue_forKey_(IVar10,IVar11,*(undefined8 *)PTR__kCIInputEVKey_1000781a0);\n puVar13 = (undefined *)CIFilter::outputImage(IVar10);\n if (puVar13 != (undefined *)0x0) {\n puVar17 = puVar13;\n }\n }\n }\n }\n if (puVar17 != (undefined *)0x0) {\n puVar12 = puVar17;\n }\n }\n if ((!bVar2 || (2.220446049250313e-16 < dVar26 || 30.0 < extraout_d0_01)) ||\n (!bVar3 || (2.220446049250313e-16 < dVar22 || 100.0 < extraout_d0_02))) {\n if (puVar12 == (undefined *)0x0) {\n puVar17 = (undefined *)0x0;\n }\n else {\n puVar17 = puVar12;\n if (dVar25 < -30.0 || (!bVar2 || (2.220446049250313e-16 < dVar26 || 30.0 < extraout_d0_01)))\n {\n IVar10 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIHueAdjust);\n CIFilter::setValue_forKey_(IVar10,puVar12,*(undefined8 *)PTR__kCIInputImageKey_1000781a8);\n dVar23 = -0.5235987755982988;\n if (-30.0 <= dVar25) {\n dVar23 = dVar25 * 0.017453292519943295;\n }\n IVar11 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar23);\n CIFilter::setValue_forKey_(IVar10,IVar11,*(undefined8 *)PTR__kCIInputAngleKey_100078190);\n puVar13 = (undefined *)CIFilter::outputImage(IVar10);\n if (puVar13 != (undefined *)0x0) {\n puVar17 = puVar13;\n }\n }\n if (dVar28 < -100.0 ||\n (!bVar3 || (2.220446049250313e-16 < dVar22 || 100.0 < extraout_d0_02))) {\n IVar10 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorControls);\n CIFilter::setValue_forKey_(IVar10,puVar17,*(undefined8 *)PTR__kCIInputImageKey_1000781a8);\n dVar19 = 0.0;\n if (-100.0 <= dVar28) {\n dVar19 = dVar28 / 100.0 + 1.0;\n }\n in_d2 = 2.0;\n if (dVar19 <= 2.0) {\n in_d2 = dVar19;\n }\n dVar25 = 0.0;\n if (0.0 <= dVar19) {\n dVar25 = in_d2;\n }\n IVar11 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar25);\n CIFilter::setValue_forKey_\n (IVar10,IVar11,*(undefined8 *)PTR__kCIInputSaturationKey_1000781c0);\n puVar13 = (undefined *)CIFilter::outputImage(IVar10);\n if (puVar13 != (undefined *)0x0) {\n puVar17 = puVar13;\n }\n }\n }\n if (puVar17 != (undefined *)0x0) {\n puVar12 = puVar17;\n }\n }\n if (((puVar12 != self_00) && (IVar7 != 0)) &&\n (FUN_100037714(puVar12,self_00,IVar7), puVar12 != (undefined *)0x0)) {\n self_00 = puVar12;\n }\n IVar10 = inputSharpnessFactor(param_1);\n objc_stub::doubleValue(IVar10);\n IVar10 = inputAmount(param_1);\n objc_stub::doubleValue(IVar10);\n if (0.0 < extraout_d0_11 * extraout_d0_12) {\n IVar10 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CISharpenLuminance);\n IVar11 = NSNumber::numberWithDouble_\n ((ID)&_OBJC_CLASS___NSNumber,extraout_d0_11 * extraout_d0_12);\n CIFilter::setValue_forKey_(IVar10,IVar11,&cf_inputSharpness);\n CIFilter::setValue_forKey_(IVar10,self_00,*(undefined8 *)PTR__kCIInputImageKey_1000781a8);\n puVar12 = (undefined *)CIFilter::outputImage(IVar10);\n if (puVar12 != (undefined *)0x0) {\n self_00 = puVar12;\n }\n }\n if (IVar8 != 0) {\n if (IVar7 == 0) {\n IVar7 = IVar9;\n }\n IVar9 = IVar8;\n FUN_1000125e8();\n IVar9 = objc_stub::objectForKeyedSubscript_(IVar9,&cf_defaultIntensity);\n objc_stub::doubleValue(IVar9);\n dVar19 = 1.0;\n if (extraout_d0_13 <= 1.0) {\n dVar19 = extraout_d0_13;\n }\n dVar25 = 0.0;\n if (0.0 <= extraout_d0_13) {\n dVar25 = dVar19;\n }\n puVar12 = self_00;\n if ((IVar7 != 0) && (self_00 != (undefined *)0x0)) {\n if (IVar8 < 6) {\n puVar17 = (&PTR_DAT_100078de8)[IVar8];\n }\n else {\n puVar17 = (undefined *)0x0;\n }\n IVar9 = objc_stub::length((ID)puVar17);\n if (IVar9 != 0) {\n dVar23 = 0.0;\n if (0.0 <= dVar25) {\n dVar23 = dVar25;\n }\n if (2.220446049250313e-16 < dVar23) {\n if (DAT_1000890d0 != -1) {\n FUN_100054900();\n }\n IVar9 = DAT_1000890c8;\n IVar10 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,IVar8);\n IVar9 = objc_stub::objectForKey_(IVar9,IVar10);\n if (IVar9 == 0) {\nLAB_1000367e0:\n if ((5 < IVar8) || ((1L << (IVar8 & 0x3f) & 0x26U) == 0)) {\nLAB_100036ac4:\n IVar9 = IVar7;\n FUN_10003f0a8();\n if (IVar9 != 0) {\n IVar7 = IVar9;\n }\n IVar10 = IVar8;\n FUN_10003f184(IVar8,&cf_filter_bg);\n IVar11 = IVar8;\n FUN_10003f184(IVar8,puVar17);\n IVar14 = IVar8;\n FUN_10003f184(IVar8,&cf_temperature_min);\n FUN_10003f184(IVar8,&cf_temperature_max);\n if ((((IVar10 != 0) && (IVar11 != 0)) && (IVar14 != 0)) && (IVar8 != 0)) {\n if (DAT_100089190 != -1) {\n FUN_100054948();\n }\n IVar9 = DAT_100089188;\n if (DAT_100089188 != 0) {\n objc_stub::extent((ID)self_00);\n local_f0 = PTR___NSConcreteStackBlock_1000780a8;\n local_e8 = 0xc2000000;\n local_e0 = FUN_10003f404;\n puStack_d8 = &DAT_100078bc0;\n local_130 = self_00;\n IStack_128 = IVar7;\n local_120 = IVar10;\n IStack_118 = IVar11;\n local_110 = IVar14;\n IStack_108 = IVar8;\n local_d0 = IVar10;\n IStack_c8 = IVar11;\n local_c0 = IVar14;\n IStack_b8 = IVar8;\n local_100 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar23);\n local_f8 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,0);\n IVar7 = NSArray::arrayWithObjects_count_\n ((ID)&_OBJC_CLASS___NSArray,&local_130,8);\n ppuVar16 = &local_f0;\n uVar18 = extraout_d0_16;\n goto LAB_100036bf8;\n }\n }\n goto LAB_100036ecc;\n }\n IVar9 = IVar8;\n FUN_1000125e8();\n IVar9 = objc_stub::objectForKeyedSubscript_(IVar9,&cf_defaultColdWarm);\n objc_stub::doubleValue(IVar9);\n dVar19 = 0.5;\n if ((0.5 < ABS(extraout_d0_14)) ||\n (dVar19 = 2.220446049250313e-16, 2.220446049250313e-16 < ABS(extraout_d0_14)))\n goto LAB_100036ac4;\n local_130 = (undefined *)0x0;\n IVar9 = IVar8;\n FUN_10003ed9c(IVar8,&cf_filter_bg,&local_130);\n local_150 = 0;\n FUN_10003ed9c(IVar8,puVar17,&local_150);\n puVar17 = local_130;\n lVar1 = local_150;\n if ((((local_130 == (undefined *)0x0) || (local_150 == 0)) || (IVar9 == 0)) ||\n (IVar8 == 0)) goto LAB_100036ecc;\n IVar10 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCubeWithColorSpace);\n if (IVar10 == 0) {\n IVar10 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCube);\n }\n IVar11 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCubeWithColorSpace);\n if (IVar11 == 0) {\n IVar11 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCube);\n }\n if ((IVar10 == 0) || (IVar11 == 0)) goto LAB_100036ecc;\n uVar18 = *(undefined8 *)PTR__kCIInputImageKey_1000781a8;\n CIFilter::setValue_forKey_(IVar10,self_00,uVar18);\n IVar14 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,lVar1);\n CIFilter::setValue_forKey_(IVar10,IVar14,&cf_inputCubeDimension);\n CIFilter::setValue_forKey_(IVar10,IVar8,&cf_inputCubeData);\n IVar8 = CIFilter::inputKeys(IVar10);\n IVar8 = CIFilter::containsObject_(IVar8,&cf_inputColorSpace);\n if ((int)IVar8 != 0) {\n if (DAT_100088f08 != -1) {\n FUN_100054584();\n }\n CIFilter::setValue_forKey_(IVar10,DAT_100088f00,&cf_inputColorSpace);\n }\n CIFilter::setValue_forKey_(IVar11,self_00,uVar18);\n IVar8 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,puVar17);\n CIFilter::setValue_forKey_(IVar11,IVar8,&cf_inputCubeDimension);\n CIFilter::setValue_forKey_(IVar11,IVar9,&cf_inputCubeData);\n IVar8 = CIFilter::inputKeys(IVar11);\n IVar8 = CIFilter::containsObject_(IVar8,&cf_inputColorSpace);\n if ((int)IVar8 != 0) {\n if (DAT_100088f08 != -1) {\n FUN_100054584();\n }\n CIFilter::setValue_forKey_(IVar11,DAT_100088f00,&cf_inputColorSpace);\n }\n pcVar15 = (code *)CIFilter::outputImage(IVar10);\n puVar17 = (undefined *)CIFilter::outputImage(IVar11);\n if ((pcVar15 == (code *)0x0) || (puVar17 == (undefined *)0x0)) goto LAB_100036ecc;\n IVar8 = IVar7;\n FUN_10003f0a8();\n if (IVar8 != 0) {\n IVar7 = IVar8;\n }\n if (DAT_100089118 != -1) {\n FUN_100054924();\n }\n IVar9 = DAT_100089110;\n if (DAT_100089110 == 0) goto LAB_100036ecc;\n objc_stub::extent((ID)self_00);\n local_f0 = self_00;\n local_e8 = IVar7;\n local_e0 = pcVar15;\n puStack_d8 = puVar17;\n local_d0 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar23);\n IVar7 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_f0,5);\n ppuVar16 = &PTR___NSConcreteGlobalBlock_100078d30;\n uVar18 = extraout_d0_15;\nLAB_100036bf8:\n puVar17 = (undefined *)\n objc_stub::applyWithExtent_roiCallback_arguments_\n (IVar9,uVar18,dVar19,in_d2,in_d3,ppuVar16,IVar7);\n }\n else {\n IVar10 = objc_stub::objectForKeyedSubscript_(IVar9,&cf_mode);\n IVar10 = objc_stub::integerValue(IVar10);\n if (IVar10 == 2) {\n IVar8 = IVar9;\n FUN_10003ec90(IVar9,&cf_skinLUTRelativePath);\n FUN_10003ec90(IVar9,&cf_backgroundLUTRelativePath);\n if ((IVar8 != 0) && (IVar9 != 0)) {\n local_130 = (undefined *)0x0;\n FUN_10003f5b0(IVar8,&local_130);\n local_150 = 0;\n FUN_10003f5b0(IVar9,&local_150);\n if ((IVar8 != 0) &&\n (((IVar9 != 0 && (local_130 != (undefined *)0x0)) && (local_150 != 0)))) {\n IVar10 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCubeWithColorSpace);\n if (IVar10 == 0) {\n IVar10 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCube);\n }\n IVar11 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCubeWithColorSpace);\n if (IVar11 == 0) {\n IVar11 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCube);\n }\n if ((IVar10 != 0) && (IVar11 != 0)) {\n uVar18 = *(undefined8 *)PTR__kCIInputImageKey_1000781a8;\n CIFilter::setValue_forKey_(IVar10,self_00,uVar18);\n IVar14 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,local_130);\n CIFilter::setValue_forKey_(IVar10,IVar14,&cf_inputCubeDimension);\n CIFilter::setValue_forKey_(IVar10,IVar8,&cf_inputCubeData);\n IVar8 = CIFilter::inputKeys(IVar10);\n IVar8 = CIFilter::containsObject_(IVar8,&cf_inputColorSpace);\n if ((int)IVar8 != 0) {\n if (DAT_100088f08 != -1) {\n FUN_100054584();\n }\n CIFilter::setValue_forKey_(IVar10,DAT_100088f00,&cf_inputColorSpace);\n }\n CIFilter::setValue_forKey_(IVar11,self_00,uVar18);\n IVar8 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,local_150);\n CIFilter::setValue_forKey_(IVar11,IVar8,&cf_inputCubeDimension);\n CIFilter::setValue_forKey_(IVar11,IVar9,&cf_inputCubeData);\n IVar8 = CIFilter::inputKeys(IVar11);\n IVar8 = CIFilter::containsObject_(IVar8,&cf_inputColorSpace);\n if ((int)IVar8 != 0) {\n if (DAT_100088f08 != -1) {\n FUN_100054584();\n }\n CIFilter::setValue_forKey_(IVar11,DAT_100088f00,&cf_inputColorSpace);\n }\n pcVar15 = (code *)CIFilter::outputImage(IVar10);\n puVar17 = (undefined *)CIFilter::outputImage(IVar11);\n if ((pcVar15 != (code *)0x0) && (puVar17 != (undefined *)0x0)) {\n IVar8 = IVar7;\n FUN_10003f0a8();\n if (IVar8 != 0) {\n IVar7 = IVar8;\n }\n if (DAT_100089118 != -1) {\n FUN_100054924();\n }\n IVar9 = DAT_100089110;\n if (DAT_100089110 != 0) {\n objc_stub::extent((ID)self_00);\n local_f0 = self_00;\n local_e8 = IVar7;\n local_e0 = pcVar15;\n puStack_d8 = puVar17;\n local_d0 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar23)\n ;\n IVar7 = NSArray::arrayWithObjects_count_\n ((ID)&_OBJC_CLASS___NSArray,&local_f0,5);\n ppuVar16 = (undefined **)&UNK_100078c90;\n uVar18 = extraout_d0_17;\n goto LAB_100036bf8;\n }\n }\n }\n }\n }\n goto LAB_100036ecc;\n }\n if (IVar10 != 1) goto LAB_1000367e0;\n FUN_10003ec90(IVar9,&cf_singleLUTRelativePath);\n if (IVar9 == 0) goto LAB_100036ecc;\n local_f0 = (undefined *)0x0;\n FUN_10003f5b0();\n if (((IVar9 == 0) || (local_f0 == (undefined *)0x0)) ||\n ((IVar8 = CIFilter::filterWithName_\n ((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCubeWithColorSpace),\n IVar8 == 0 &&\n (IVar8 = CIFilter::filterWithName_((ID)&_OBJC_CLASS___CIFilter,&cf_CIColorCube),\n IVar8 == 0)))) goto LAB_100036ecc;\n CIFilter::setValue_forKey_\n (IVar8,self_00,*(undefined8 *)PTR__kCIInputImageKey_1000781a8);\n IVar10 = NSNumber::numberWithInteger_((ID)&_OBJC_CLASS___NSNumber,local_f0);\n CIFilter::setValue_forKey_(IVar8,IVar10,&cf_inputCubeDimension);\n CIFilter::setValue_forKey_(IVar8,IVar9,&cf_inputCubeData);\n IVar9 = CIFilter::inputKeys(IVar8);\n IVar9 = CIFilter::containsObject_(IVar9,&cf_inputColorSpace);\n if ((int)IVar9 != 0) {\n if (DAT_100088f08 != -1) {\n FUN_100054584();\n }\n CIFilter::setValue_forKey_(IVar8,DAT_100088f00,&cf_inputColorSpace);\n }\n puVar17 = (undefined *)CIFilter::outputImage(IVar8);\n if (puVar17 == (undefined *)0x0) goto LAB_100036ecc;\n IVar8 = IVar7;\n FUN_10003f0a8();\n if (IVar8 != 0) {\n IVar7 = IVar8;\n }\n FUN_100037714(puVar17,self_00,IVar7);\n }\n if (puVar17 != (undefined *)0x0) {\n puVar12 = puVar17;\n }\n }\n }\n }\nLAB_100036ecc:\n if (puVar12 != (undefined *)0x0) {\n self_00 = puVar12;\n }\n }\n if (2.220446049250313e-16 < dVar20) {\n IVar7 = inputGlobalSmoothingMaskImage(param_1);\n puVar12 = self_00;\n if (IVar7 == 0) {\n FUN_1000373ec(dVar20);\n }\n else {\n FUN_1000370a0(dVar20,self_00,IVar7);\n }\n if (puVar12 != (undefined *)0x0) {\n self_00 = puVar12;\n }\n }\n if ((2.220446049250313e-16 < dVar21) && (IVar7 = inputTeethMaskImage(param_1), IVar7 != 0)) {\n IVar7 = inputTeethMaskImage(param_1);\n puVar12 = self_00;\n if ((self_00 != (undefined *)0x0) && ((IVar7 != 0 && (2.220446049250313e-16 < dVar21)))) {\n if (DAT_1000891a0 != -1) {\n FUN_10005496c();\n }\n IVar8 = DAT_100089198;\n if (DAT_100089198 != 0) {\n objc_stub::extent((ID)self_00);\n local_f0 = self_00;\n local_e8 = IVar7;\n local_e0 = (code *)NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber,dVar21);\n IVar7 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_f0,3);\n puVar17 = (undefined *)\n objc_stub::applyWithExtent_arguments_\n (IVar8,extraout_d0_18,dVar19,in_d2,in_d3,IVar7);\n if (puVar17 != (undefined *)0x0) {\n puVar12 = puVar17;\n }\n }\n }\n if (puVar12 != (undefined *)0x0) {\n self_00 = puVar12;\n }\n }\n }\nLAB_100036ff8:\n if (*(long *)PTR____stack_chk_guard_1000780b8 == local_b0) {\n return (ID)self_00;\n }\nLAB_100037064:\n /* WARNING: Subroutine does not return */\n ___stack_chk_fail();\n}\n\n","status":"ok"},{"address":"0x100003e4c","procedure":{"address":"0x100003e4c","name":"MSSSectionCardParameterValue::defaultValue","status":"resolved"},"pseudocode":"\n/* WARNING: Function: _objc_autorelease replaced with injection: _objc_retain_fixup */\n/* Function Stack Size: 0x10 bytes */\n\nID MSSSectionCardParameterValue::defaultValue(ID param_1,SEL param_2)\n\n{\n _objc_alloc_init();\n return param_1;\n}\n\n","status":"ok"},{"address":"0x10001cba4","procedure":{"address":"0x10001cba4","name":"MSSuperSkinSmoothingPlugIn::renderDestinationImage:sourceImages:pluginState:atTime:error:","status":"resolved"},"pseudocode":"\n/* WARNING: Function: _objc_release replaced with injection: _objc_release_fixup */\n/* WARNING: Function: _objc_retain replaced with injection: _objc_retain_fixup */\n/* WARNING: Function: _objc_autorelease replaced with injection: _objc_retain_fixup */\n/* Function Stack Size: 0x48 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::renderDestinationImage_sourceImages_pluginState_atTime_error_\n (ID param_1,SEL param_2,ID param_3,ID param_4,ID param_5,AnonymousStructure0 param_6,\n ID *param_7)\n\n{\n bool bVar1;\n unsigned_long_long uVar2;\n ulong uVar3;\n int iVar4;\n bool bVar5;\n double dVar6;\n bool bVar7;\n uint uVar8;\n uint uVar9;\n ID IVar10;\n ID IVar11;\n ID IVar12;\n ID IVar13;\n ID IVar14;\n ID IVar15;\n ID IVar16;\n ID IVar17;\n __IOSurface *p_Var18;\n undefined8 *puVar19;\n cfstringStruct *pcVar20;\n ID IVar21;\n ID IVar22;\n ID IVar23;\n undefined *puVar24;\n undefined *self;\n undefined8 *puVar25;\n undefined8 *puVar26;\n undefined *puVar27;\n ID IVar28;\n ID IVar29;\n cfstringStruct *pcVar30;\n cfstringStruct *pcVar31;\n cfstringStruct *pcVar32;\n cfstringStruct *pcVar33;\n ulong uVar34;\n ID IVar35;\n undefined8 *puVar36;\n undefined8 *puVar37;\n cfstringStruct *pcVar38;\n cfstringStruct *pcVar39;\n undefined8 extraout_x1;\n undefined8 extraout_x1_00;\n undefined8 extraout_x1_01;\n undefined8 extraout_x1_02;\n SEL extraout_x1_03;\n SEL pcVar40;\n SEL extraout_x1_04;\n SEL extraout_x1_05;\n double *pdVar41;\n ID *pIVar42;\n int iVar43;\n int iVar44;\n int iVar45;\n long *plVar46;\n undefined8 *puVar47;\n undefined8 *puVar48;\n bool bVar49;\n long lVar50;\n uint uVar51;\n uint uVar52;\n bool bVar53;\n uint uVar54;\n undefined8 *puVar55;\n long lVar56;\n long lVar57;\n undefined8 extraout_d0;\n CGRect *pCVar58;\n code *pcVar59;\n CGRect *pCVar60;\n code *pcVar61;\n double extraout_d0_00;\n undefined8 extraout_d0_01;\n double extraout_d0_02;\n double extraout_d0_03;\n ulong extraout_d0_04;\n ulong extraout_d0_05;\n double extraout_d0_06;\n double extraout_d0_07;\n double extraout_d0_08;\n double extraout_d0_09;\n double extraout_d0_10;\n double extraout_d0_11;\n undefined8 extraout_d0_12;\n undefined8 extraout_d0_13;\n double dVar62;\n undefined8 extraout_d0_14;\n undefined8 extraout_d0_15;\n undefined8 extraout_d0_16;\n undefined8 uVar63;\n double extraout_d0_17;\n double dVar64;\n CGRect *pCVar65;\n double dVar66;\n undefined8 in_d1;\n double dVar67;\n double dVar68;\n CGRect *pCVar69;\n double dVar70;\n CGRect *pCVar71;\n CGRect *pCVar72;\n CGRect *pCVar73;\n double in_d2;\n CGRect *pCVar74;\n double dVar75;\n double dVar76;\n CGRect *pCVar77;\n CGRect *pCVar78;\n undefined8 uVar79;\n double in_d3;\n double dVar80;\n code *pcVar81;\n code *pcVar82;\n double dVar83;\n double dVar84;\n code *pcVar85;\n double dVar86;\n CGRect *pCVar87;\n CGRect *pCVar88;\n code *pcVar89;\n CGRect CVar90;\n CGRect CVar91;\n CGRect CVar92;\n CGRect CVar93;\n CGRect CVar94;\n CGRect CVar95;\n code *local_a78;\n CGRect *pCStack_a70;\n CGRect *local_a68;\n double dStack_a60;\n ID local_a58;\n undefined *local_a50;\n double local_a40;\n CGRect *local_a38;\n code *local_a30;\n CGRect *local_a28;\n double local_a20;\n CGRect *local_a10;\n code *local_a00;\n CGRect *local_9f8;\n cfstringStruct *local_9f0;\n cfstringStruct *local_9a8;\n ID local_978;\n ID local_968;\n cfstringStruct *local_960;\n ID local_958;\n uint local_944;\n ID local_940;\n code *local_938;\n CGRect *pCStack_930;\n CGRect *local_928;\n double local_920;\n code *local_908;\n CGRect *local_900;\n CGRect *local_8f8;\n double local_8f0;\n ID local_8e8;\n ID local_8e0;\n ID local_8d8;\n cfstringStruct *local_8d0;\n ID local_8c8;\n undefined8 local_8b8;\n undefined8 local_8b0;\n long lStack_8a8;\n long *local_8a0;\n undefined8 uStack_898;\n undefined8 local_890;\n undefined8 uStack_888;\n undefined8 uStack_880;\n undefined8 uStack_878;\n CGRect local_870;\n undefined8 local_850;\n long lStack_848;\n long *local_840;\n undefined8 uStack_838;\n undefined8 local_830;\n undefined8 uStack_828;\n undefined8 uStack_820;\n undefined8 uStack_818;\n undefined8 local_810;\n long lStack_808;\n long *local_800;\n undefined8 uStack_7f8;\n undefined8 local_7f0;\n undefined8 uStack_7e8;\n undefined8 uStack_7e0;\n undefined8 uStack_7d8;\n undefined *local_7d0;\n undefined8 local_7c8;\n code *local_7c0;\n undefined *local_7b8;\n ID local_7b0;\n cfstringStruct *local_7a8;\n ID local_7a0;\n cfstringStruct *local_798;\n ulong *local_790;\n cfstringStruct **local_788;\n undefined1 *local_780;\n CGRect *local_778;\n long local_770;\n double local_768;\n __IOSurface *local_760;\n double local_758;\n CGRect *local_750;\n CGRect *local_748;\n code *local_740;\n double local_738;\n double dStack_730;\n double local_728;\n undefined8 local_720;\n long lStack_718;\n long *local_710;\n undefined8 uStack_708;\n undefined8 local_700;\n undefined8 uStack_6f8;\n undefined8 uStack_6f0;\n undefined8 uStack_6e8;\n undefined8 local_6e0;\n long lStack_6d8;\n long *local_6d0;\n undefined8 uStack_6c8;\n undefined8 local_6c0;\n undefined8 uStack_6b8;\n undefined8 uStack_6b0;\n undefined8 uStack_6a8;\n byte local_691;\n CGRect local_690;\n double local_668;\n cfstringStruct *local_660;\n AnonymousStructure6 AStack_658;\n ulong local_4f0;\n ulong *puStack_4e8;\n long *local_4e0;\n undefined8 local_4d8;\n undefined8 local_4d0;\n undefined8 uStack_4c8;\n undefined8 uStack_4c0;\n undefined8 uStack_4b8;\n cfstringStruct *local_4b0;\n cfstringStruct **ppcStack_4a8;\n long *local_4a0;\n code *local_498;\n code *local_490;\n undefined8 uStack_488;\n undefined8 uStack_480;\n undefined8 uStack_478;\n undefined1 auStack_470 [128];\n undefined1 auStack_3f0 [128];\n undefined1 auStack_370 [128];\n undefined1 auStack_2f0 [128];\n undefined1 auStack_270 [128];\n cfstringStruct *local_1f0;\n cfstringStruct *local_1e8;\n undefined8 local_1e0;\n ID local_1d8;\n undefined8 local_1d0;\n ID local_1c8;\n undefined1 local_1c0 [8];\n undefined1 *puStack_1b8;\n long *local_1b0;\n double dStack_1a8;\n undefined8 local_1a0;\n undefined8 uStack_198;\n undefined8 local_190;\n undefined8 uStack_188;\n CGRect local_140;\n code *local_120;\n undefined8 local_118;\n long local_b8;\n \n pIVar42 = param_6._8_8_;\n pdVar41 = (double *)param_6.field0_0x0;\n local_b8 = *(long *)PTR____stack_chk_guard_1000780b8;\n FUN_100021c7c();\n lVar57 = DAT_100088de8 + 1;\n DAT_100088de8 = lVar57;\n objc_stub::count(param_4);\n objc_stub::length(param_5);\n objc_stub::count(param_4);\n objc_stub::length(param_5);\n IVar10 = objc_stub::count(param_4);\n if (IVar10 == 0) {\n if (pIVar42 != (ID *)0x0) {\n pcVar20 = &cf_Nosourceimageprovided;\n FUN_10001b7ac();\n *pIVar42 = (ID)pcVar20;\n }\n FUN_100021c7c();\nLAB_10001d310:\n bVar7 = 0;\n goto LAB_10002126c;\n }\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n bVar7 = populateParams_atTime_error_\n (param_1,&AStack_658,(AnonymousStructure0 *)&local_140,pIVar42);\n if ((bVar7 & 1) == 0) {\n IVar10 = param_5;\n FUN_10001cac8(param_5,&AStack_658);\n if ((int)IVar10 == 0) {\n objc_stub::length(param_5);\n FUN_100021c7c();\n goto LAB_10001d310;\n }\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n mss_applyLivePanelStateToParams_atTime_(param_1,&AStack_658,(AnonymousStructure0 *)&local_140);\n }\n IVar11 = objc_stub::objectAtIndex_(param_4,0);\n IVar10 = objc_stub::colorSpace(IVar11);\n if (((IVar10 == 0) && (IVar10 = objc_stub::colorSpace(param_3), IVar10 == 0)) &&\n (IVar10 = DAT_100088f00, DAT_100088f08 != -1)) {\n FUN_100054584();\n IVar10 = DAT_100088f00;\n }\n local_978 = objc_stub::colorSpace(param_3);\n if ((local_978 == 0) && (local_978 = IVar10, IVar10 == 0)) {\n if (DAT_100088f08 != -1) {\n FUN_100054584();\n }\n local_978 = DAT_100088f00;\n }\n IVar12 = objc_stub::tilePixelBounds(param_3);\n IVar13 = objc_stub::imagePixelBounds(IVar11);\n IVar14 = objc_stub::tilePixelBounds(IVar11);\n IVar15 = objc_stub::imagePixelBounds(param_3);\n IVar16 = FxMTLDeviceCache::deviceCache((ID)&objc::class_t::FxMTLDeviceCache);\n IVar17 = objc_stub::deviceRegistryID(param_3);\n IVar17 = FxMTLDeviceCache::deviceWithRegistryID_(IVar16,IVar17);\n if (IVar17 == 0) {\n local_940 = 0;\n local_8d8 = 0;\n }\n else {\n local_940 = objc_stub::metalTextureForDevice_(IVar11);\n local_8d8 = objc_stub::metalTextureForDevice_(param_3,IVar17);\n }\n bVar7 = mss_branchA(param_1);\n if (((bVar7 & 1) == 0) &&\n (bVar7 = renderUnregisteredOverlayToDestinationImage_device_deviceCache_\n (param_1,param_3,IVar17,IVar16), bVar7 != 0)) {\n FUN_100021c7c();\n bVar7 = 1;\n goto LAB_10002126c;\n }\n p_Var18 = (__IOSurface *)objc_stub::ioSurface(IVar11);\n puVar19 = (undefined8 *)objc_stub::ioSurface(param_3);\n puVar24 = PTR__kCIImageColorSpace_100078188;\n if (local_940 == 0) {\n pcVar20 = (cfstringStruct *)0x0;\nLAB_10001ce94:\n if (p_Var18 != (__IOSurface *)0x0) {\n _IOSurfaceLock(p_Var18,1,0);\n local_1e0 = *(undefined8 *)puVar24;\n local_1d8 = IVar10;\n IVar10 = NSDictionary::dictionaryWithObjects_forKeys_count_\n ((ID)&_OBJC_CLASS___NSDictionary,&local_1d8,&local_1e0,1);\n pcVar20 = (cfstringStruct *)\n CIImage::imageWithIOSurface_options_((ID)&_OBJC_CLASS___CIImage,p_Var18,IVar10);\n _IOSurfaceUnlock(p_Var18,1,0);\n }\n }\n else {\n local_1d0 = *(undefined8 *)PTR__kCIImageColorSpace_100078188;\n local_1c8 = IVar10;\n IVar11 = NSDictionary::dictionaryWithObjects_forKeys_count_\n ((ID)&_OBJC_CLASS___NSDictionary,&local_1c8,&local_1d0,1);\n pcVar20 = (cfstringStruct *)\n CIImage::imageWithMTLTexture_options_((ID)&_OBJC_CLASS___CIImage,local_940,IVar11);\n if (pcVar20 == (cfstringStruct *)0x0) goto LAB_10001ce94;\n }\n if (pcVar20 == (cfstringStruct *)0x0) {\n if (pIVar42 != (ID *)0x0) {\n pcVar20 = &cf_UnabletowrapsourceIOSurfaceasCIImage;\n FUN_10001b7ac();\n *pIVar42 = (ID)pcVar20;\n }\n FUN_100021c7c();\n goto LAB_10001d310;\n }\n CIImage::extent((ID)pcVar20);\n dVar80 = in_d2;\n dVar70 = in_d3;\n IVar10 = CIImage::extent((ID)pcVar20);\n uVar8 = (uint)IVar10;\n _CGRectIsEmpty();\n dVar67 = (double)(int)IVar13;\n iVar43 = (int)(IVar13 >> 0x20);\n pCVar74 = (CGRect *)(double)iVar43;\n iVar45 = (int)extraout_x1_00 - (int)IVar13;\n pCVar58 = (CGRect *)(double)iVar45;\n iVar43 = (int)((ulong)extraout_x1_00 >> 0x20) - iVar43;\n pcVar59 = (code *)(double)iVar43;\n dVar68 = (double)(int)IVar14;\n iVar44 = (int)(IVar14 >> 0x20);\n pCVar60 = (CGRect *)(double)iVar44;\n iVar4 = (int)extraout_x1_01 - (int)IVar14;\n pCVar69 = (CGRect *)(double)iVar4;\n iVar44 = (int)((ulong)extraout_x1_01 >> 0x20) - iVar44;\n pcVar61 = (code *)(double)iVar44;\n uVar52 = uVar8;\n if (dVar80 <= 0.0) {\n uVar52 = 1;\n }\n if (((uVar52 & 1) == 0) && (0.0 < dVar70)) {\n _CGRectIsEmpty(dVar67,pCVar74,pCVar58,pcVar59);\n uVar52 = uVar8;\n if (iVar45 < 1) {\n uVar52 = 1;\n }\n if (((uVar52 & 1) == 0) && (0 < iVar43)) {\n _CGRectIsEmpty(dVar68,pCVar60,pCVar69,pcVar61);\n if (iVar4 < 1) {\n uVar8 = 1;\n }\n if (iVar44 < 1) {\n uVar8 = 1;\n }\n pcVar85 = pcVar59;\n pCVar65 = pCVar58;\n dVar76 = dVar67;\n pCVar71 = pCVar74;\n if (uVar8 == 0) {\n pcVar85 = pcVar61;\n pCVar65 = pCVar69;\n dVar76 = dVar68;\n pCVar71 = pCVar60;\n }\n dVar70 = (double)pcVar85 / dVar70;\n dVar75 = -1.0;\n dVar80 = ABS((double)pCVar65 / dVar80 + -1.0);\n if ((0.0001 < dVar80) || (dVar75 = ABS(dVar70 + -1.0), 0.0001 < dVar75)) {\n _CGAffineTransformMakeScale(&local_140);\n pcVar20 = (cfstringStruct *)CIImage::imageByApplyingTransform_((ID)pcVar20,&local_140);\n }\n CIImage::extent((ID)pcVar20);\n dVar83 = extraout_d0_00;\n _CGRectGetMinX();\n dVar84 = extraout_d0_00;\n _CGRectGetMinY(extraout_d0_00,dVar70,dVar75,dVar80);\n if ((0.0001 < ABS(dVar76 - dVar83)) || (0.0001 < ABS((double)pCVar71 - dVar84))) {\n _CGAffineTransformMakeTranslation(&local_140,dVar76 - dVar83,(double)pCVar71 - dVar84);\n pcVar20 = (cfstringStruct *)CIImage::imageByApplyingTransform_((ID)pcVar20,&local_140);\n }\n IVar10 = CIColor::colorWithRed_green_blue_alpha_((ID)&_OBJC_CLASS___CIColor,0,0,0,0);\n IVar10 = CIImage::imageWithColor_((ID)&_OBJC_CLASS___CIImage,IVar10);\n IVar10 = CIImage::imageByCroppingToRect_(IVar10,dVar67,pCVar74,pCVar58,pcVar59);\n IVar10 = CIImage::imageByCompositingOverImage_((ID)pcVar20,IVar10);\n pcVar20 = (cfstringStruct *)\n CIImage::imageByCroppingToRect_(IVar10,dVar67,pCVar74,pCVar58,pcVar59);\n }\n }\n FUN_100021d48(dVar67,pCVar74,pCVar58,pcVar59);\n if (p_Var18 != (__IOSurface *)0x0) {\n _IOSurfaceGetWidth(p_Var18);\n _IOSurfaceGetHeight(p_Var18);\n }\n if (puVar19 != (undefined8 *)0x0) {\n _IOSurfaceGetWidth(puVar19);\n _IOSurfaceGetHeight(puVar19);\n }\n if (p_Var18 != (__IOSurface *)0x0) {\n _IOSurfaceGetPixelFormat(p_Var18);\n FUN_100021e9c();\n }\n if (puVar19 != (undefined8 *)0x0) {\n _IOSurfaceGetPixelFormat(puVar19);\n FUN_100021e9c();\n }\n _NSStringFromRect(dVar67,pCVar74,pCVar58,pcVar59);\n _NSStringFromRect(dVar68,pCVar60,pCVar69,pcVar61);\n iVar45 = (int)(IVar15 >> 0x20);\n _NSStringFromRect((double)(int)IVar15,(double)iVar45,(double)((int)extraout_x1_02 - (int)IVar15),\n (double)((int)((ulong)extraout_x1_02 >> 0x20) - iVar45));\n dVar80 = (double)(int)IVar12;\n iVar45 = (int)(IVar12 >> 0x20);\n dVar70 = (double)iVar45;\n dVar76 = (double)((int)extraout_x1 - (int)IVar12);\n dVar75 = (double)((int)((ulong)extraout_x1 >> 0x20) - iVar45);\n _NSStringFromRect();\n _NSStringFromRect(extraout_d0,in_d1,in_d2,in_d3);\n IVar10 = objc_stub::extent((ID)pcVar20);\n pcVar40 = extraout_x1_03;\n _NSStringFromRect();\n if (local_940 != 0) {\n objc_stub::width(local_940);\n IVar10 = objc_stub::height(local_940);\n pcVar40 = extraout_x1_04;\n }\n if (local_8d8 != 0) {\n objc_stub::width(local_8d8);\n IVar10 = objc_stub::height(local_8d8);\n pcVar40 = extraout_x1_05;\n }\n bVar7 = FUN_10001a8c0(IVar10,pcVar40);\n if (bVar7 == 0) {\n uVar52 = 0;\n }\n else if ((((2.220446049250313e-16 < ABS((double)AStack_658._96_8_)) ||\n (2.220446049250313e-16 < ABS((double)AStack_658._104_8_))) ||\n (2.220446049250313e-16 < ABS((double)AStack_658._112_8_))) ||\n (((2.220446049250313e-16 < ABS((double)AStack_658._120_8_) ||\n (2.220446049250313e-16 < ABS((double)AStack_658._128_8_))) ||\n ((2.220446049250313e-16 < ABS((double)AStack_658._136_8_) ||\n ((2.220446049250313e-16 < ABS((double)AStack_658._144_8_) ||\n (2.220446049250313e-16 < ABS((double)AStack_658._152_8_))))))))) {\n uVar52 = 1;\n }\n else {\n uVar52 = (uint)(2.220446049250313e-16 < ABS((double)AStack_658._160_8_));\n }\n IVar10 = NSUserDefaults::standardUserDefaults((ID)&_OBJC_CLASS___NSUserDefaults);\n IVar11 = NSUserDefaults::objectForKey_(IVar10,&cf_MSE18GlobalPreviewOverlayEnabled);\n if (IVar11 == 0) {\n local_944 = 0;\n }\n else {\n IVar10 = NSUserDefaults::boolForKey_(IVar10,&cf_MSE18GlobalPreviewOverlayEnabled);\n local_944 = (uint)IVar10;\n }\n if (((double)AStack_658._192_8_ <= 2.220446049250313e-16) ||\n ((char)AStack_658.field8_0x40 != '\\x01')) {\n uVar8 = 0;\n }\n else if (AStack_658.field7_0x38 <= 2.220446049250313e-16) {\n uVar8 = (uint)(2.220446049250313e-16 < (double)AStack_658._72_8_);\n }\n else {\n uVar8 = 1;\n }\n uVar9 = 0;\n if (2.220446049250313e-16 < (double)AStack_658._80_8_) {\n uVar9 = (uint)(2.220446049250313e-16 < (double)AStack_658._192_8_);\n }\n local_920._0_4_ = uVar52 | local_944 | uVar8 | uVar9;\n uVar54 = local_920._0_4_ ^ 1;\n if ((uVar54 & 1) == 0) {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n CVar90.field0_0x0.field1_0x8 = (double)pCVar60;\n CVar90.field0_0x0.field0_0x0 = dVar68;\n CVar90.field1_0x10.field1_0x8 = (double)pcVar61;\n CVar90.field1_0x10.field0_0x0 = (double)pCVar69;\n local_968 = cachedFaceObservationsForInputImage_inputSurface_sourceTileRect_renderTime_allowForwardReuse_\n (param_1,(ID)pcVar20,p_Var18,CVar90,(AnonymousStructure0 *)&local_140,\n uVar54 & 1);\n if (local_944 == 0) {\n IVar10 = 0;\n }\n else {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n CVar91.field0_0x0.field1_0x8 = (double)pCVar60;\n CVar91.field0_0x0.field0_0x0 = dVar68;\n CVar91.field1_0x10.field1_0x8 = (double)pcVar61;\n CVar91.field1_0x10.field0_0x0 = (double)pCVar69;\n pCVar65 = pCVar60;\n pCVar71 = pCVar69;\n pcVar85 = pcVar61;\n IVar10 = cachedFaceRectangleObservationsForInputImage_inputSurface_sourceTileRect_renderTime_allowForwardReuse_\n (param_1,(ID)pcVar20,p_Var18,CVar91,(AnonymousStructure0 *)&local_140,\n uVar54 & 1);\n IVar11 = objc_stub::count(IVar10);\n IVar12 = objc_stub::count(local_968);\n if (IVar12 < IVar11) {\n pcVar39 = pcVar20;\n FUN_100021f30(pcVar20,IVar10);\n IVar11 = local_968;\n FUN_1000221b4(local_968,pcVar39);\n IVar12 = objc_stub::count(IVar11);\n IVar13 = objc_stub::count(local_968);\n if (IVar13 < IVar12) {\n objc_stub::lock(*(ID *)(param_1 + 0x20));\n IVar12 = objc_stub::copy(IVar11);\n *(ID *)(param_1 + 0x140) = IVar12;\n dVar84 = pdVar41[1];\n dVar83 = *pdVar41;\n *(double *)(param_1 + 0x158) = pdVar41[2];\n *(double *)(param_1 + 0x150) = dVar84;\n *(double *)(param_1 + 0x148) = dVar83;\n objc_stub::extent((ID)pcVar20);\n *(undefined8 *)(param_1 + 0x160) = extraout_d0_01;\n *(CGRect **)(param_1 + 0x168) = pCVar65;\n *(CGRect **)(param_1 + 0x170) = pCVar71;\n *(code **)(param_1 + 0x178) = pcVar85;\n *(double *)(param_1 + 0x180) = dVar68;\n *(CGRect **)(param_1 + 0x188) = pCVar60;\n *(CGRect **)(param_1 + 400) = pCVar69;\n *(code **)(param_1 + 0x198) = pcVar61;\n *(undefined1 *)(param_1 + 0x1a0) = 1;\n objc_stub::unlock(*(ID *)(param_1 + 0x20));\n local_968 = IVar11;\n }\n }\n }\n }\n else {\n IVar10 = 0;\n local_968 = 0;\n }\n local_660 = (cfstringStruct *)0x0;\n local_668 = 0.0;\n pCVar65 = *(CGRect **)(PTR__CGRectNull_100078110 + 8);\n dVar83 = *(double *)PTR__CGRectNull_100078110;\n pcVar85 = *(code **)(PTR__CGRectNull_100078110 + 0x18);\n pCVar71 = *(CGRect **)(PTR__CGRectNull_100078110 + 0x10);\n local_a40 = -1.0;\n local_690.field0_0x0.field0_0x0 = dVar83;\n local_690.field0_0x0.field1_0x8 = (double)pCVar65;\n local_690.field1_0x10.field0_0x0 = (double)pCVar71;\n local_690.field1_0x10.field1_0x8 = (double)pcVar85;\n if ((*(uint *)((long)pdVar41 + 0xc) & 0x1d) == 1) {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_a40 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n local_140.field0_0x0.field0_0x0 = local_a40;\n _CMTimeGetSeconds(&local_140);\n }\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n IVar12 = controlPanelValueForPluginAtTime_(param_1,(AnonymousStructure0 *)&local_140);\n FUN_10000b70c(IVar12);\n IVar11 = objc_stub::fastMultiFaceMode(IVar12);\n uVar54 = (uint)IVar11 | (uint)AStack_658.field29_0xe0._2_1_;\n local_691 = (byte)uVar54 & 1;\n IVar11 = objc_stub::apiForProtocol_\n (*(ID *)(param_1 + 8),&objc::protocol_t::FxParameterRetrievalAPI_v6);\n if (IVar11 == 0) {\nLAB_10001d67c:\n if ((uVar54 & 1) == 0) goto LAB_10001d674;\nLAB_10001d680:\n objc_stub::setFastMultiFaceMode_(IVar12,1);\n objc_stub::setFaceSingleSelection_(IVar12,0);\n local_920._0_4_ = 0;\n bVar5 = true;\n }\n else {\n if ((*(byte *)((long)pdVar41 + 0xc) & 1) == 0) {\nLAB_10001d634:\n local_140.field0_0x0.field1_0x8 = *(double *)(PTR__kCMTimeZero_1000781d8 + 8);\n local_140.field0_0x0.field0_0x0 = *(double *)PTR__kCMTimeZero_1000781d8;\n local_140.field1_0x10.field0_0x0 = *(double *)(PTR__kCMTimeZero_1000781d8 + 0x10);\n IVar11 = objc_stub::getBoolValue_fromParameter_atTime_(IVar11,&local_691,0x27,&local_140);\n if ((int)IVar11 == 0) goto LAB_10001d67c;\n }\n else {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n IVar13 = objc_stub::getBoolValue_fromParameter_atTime_(IVar11,&local_691,0x27,&local_140);\n if ((IVar13 & 1) == 0) goto LAB_10001d634;\n }\n if (((local_691 | uVar54) & 1) != 0) goto LAB_10001d680;\nLAB_10001d674:\n bVar5 = false;\n }\n FUN_10000ba28(IVar12);\n objc_stub::faceTrackActiveTargetIndex(IVar12);\n IVar11 = objc_stub::faceTrackData(IVar12);\n IVar11 = objc_stub::length(IVar11);\n if (((IVar11 == 0) && (IVar11 = objc_stub::length(*(ID *)(param_1 + 0x520)), IVar11 != 0)) &&\n (IVar11 = objc_stub::faceTrackRevision(IVar12), *(long *)(param_1 + 0x528) < (long)IVar11)) {\n *(undefined8 *)(param_1 + 0x520) = 0;\n *(undefined8 *)(param_1 + 0x528) = 0;\n }\n if (AStack_658.field37_0x110 == 3) {\n objc_stub::length(0);\n }\n IVar11 = objc_stub::length(0);\n if (IVar11 != 0) {\n IVar11 = 0;\n FUN_1000394f8();\n IVar13 = objc_stub::count(IVar11);\n if ((IVar13 == 0) && (IVar13 = objc_stub::hasPrefix_(0,&cf_m1_), (int)IVar13 != 0)) {\n IVar13 = 0;\n FUN_100038e34();\n uStack_188 = 0;\n local_190 = 0;\n uStack_198 = 0;\n local_1a0 = 0;\n dStack_1a8 = 0.0;\n local_1b0 = (long *)0x0;\n puStack_1b8 = (undefined1 *)0x0;\n local_1c0 = (undefined1 [8])0x0;\n IVar14 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar13,local_1c0,&local_140,0x10);\n if (IVar14 != 0) {\n lVar50 = 0;\n lVar56 = *local_1b0;\n dVar86 = 1.7976931348623157e+308;\n dVar84 = -1.7976931348623157e+308;\n do {\n IVar15 = 0;\n dVar66 = dVar84;\n do {\n if (*local_1b0 != lVar56) {\n _objc_enumerationMutation(IVar13);\n }\n IVar21 = *(ID *)(puStack_1b8 + IVar15 * 8);\n FUN_1000394f8();\n IVar22 = objc_stub::count(IVar21);\n dVar84 = dVar66;\n if (IVar22 != 0) {\n IVar22 = objc_stub::firstObject(IVar21);\n IVar22 = objc_stub::objectForKey_(IVar22,&cf_t);\n objc_stub::doubleValue(IVar22);\n IVar22 = objc_stub::lastObject(IVar21);\n IVar22 = objc_stub::objectForKey_(IVar22,&cf_t);\n objc_stub::doubleValue(IVar22);\n if (((ulong)ABS(extraout_d0_02) < 0x7ff0000000000000) &&\n ((ulong)ABS(extraout_d0_03) < 0x7ff0000000000000)) {\n if (extraout_d0_02 <= dVar86) {\n dVar86 = extraout_d0_02;\n }\n dVar84 = extraout_d0_03;\n if (extraout_d0_03 <= dVar66) {\n dVar84 = dVar66;\n }\n IVar21 = objc_stub::count(IVar21);\n lVar50 = IVar21 + lVar50;\n }\n }\n IVar15 = IVar15 + 1;\n dVar66 = dVar84;\n } while (IVar14 != IVar15);\n IVar14 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar13,local_1c0,&local_140,0x10);\n } while (IVar14 != 0);\n if (((lVar50 != 0) && ((ulong)ABS(dVar86) < 0x7ff0000000000000)) &&\n ((ulong)ABS(dVar84) < 0x7ff0000000000000)) goto LAB_10001d8d0;\n }\n }\n IVar13 = objc_stub::count(IVar11);\n if (IVar13 != 0) {\n IVar13 = objc_stub::firstObject(IVar11);\n IVar13 = objc_stub::objectForKey_(IVar13,&cf_t);\n objc_stub::doubleValue(IVar13);\n IVar13 = objc_stub::lastObject(IVar11);\n IVar13 = objc_stub::objectForKey_(IVar13,&cf_t);\n objc_stub::doubleValue(IVar13);\n if (((extraout_d0_04 & 0x7fffffffffffffff) < 0x7ff0000000000000) &&\n ((extraout_d0_05 & 0x7fffffffffffffff) < 0x7ff0000000000000)) {\n objc_stub::count(IVar11);\n }\n }\n }\nLAB_10001d8d0:\n IVar13 = IVar12;\n FUN_10000ba28();\n IVar14 = objc_stub::faceTrackActiveTargetIndex(IVar12);\n IVar11 = IVar14;\n if (0x7e < IVar14) {\n IVar11 = 0x7f;\n }\n IVar15 = 0;\n if (-1 < (long)IVar14) {\n IVar15 = IVar11;\n }\n if ((long)(IVar13 - 1) <= (long)IVar15) {\n IVar15 = IVar13 - 1;\n }\n if (!bVar5) {\n IVar14 = IVar12;\n FUN_100010058(IVar12,IVar15);\n }\n dVar84 = *(double *)PTR__CGRectNull_100078110;\n pCVar87 = *(CGRect **)(PTR__CGRectNull_100078110 + 8);\n pCVar88 = *(CGRect **)(PTR__CGRectNull_100078110 + 0x10);\n pcVar89 = *(code **)(PTR__CGRectNull_100078110 + 0x18);\n CVar90 = *(CGRect *)PTR__CGRectNull_100078110;\n local_8f0 = dVar84;\n local_8f8 = pCVar87;\n local_900 = pCVar88;\n local_908 = pcVar89;\n _CGRectIsNull();\n if (((IVar14 & 1) == 0) &&\n (local_8f0 = dVar84, local_8f8 = pCVar87, local_900 = pCVar88, local_908 = pcVar89,\n _CGRectIsEmpty(), (IVar14 & 1) == 0)) {\n local_8f0 = dVar84;\n local_900 = pCVar88;\n local_908 = pcVar89;\n _CGRectGetWidth(dVar84,pCVar87);\n local_8f8 = (CGRect *)0x3cb0000000000000;\n if (local_8f0 <= 2.220446049250313e-16) goto LAB_10001d9ac;\n local_8f0 = dVar84;\n local_900 = pCVar88;\n local_908 = pcVar89;\n _CGRectGetHeight(dVar84,pCVar87);\n local_8f8 = (CGRect *)0x3cb0000000000000;\n bVar53 = 2.220446049250313e-16 < local_8f0;\n }\n else {\nLAB_10001d9ac:\n bVar53 = false;\n }\n if (bVar5) {\n bVar1 = false;\n pCVar73 = local_8f8;\n pCVar77 = local_900;\n pcVar81 = local_908;\n local_908 = pcVar89;\n local_900 = pCVar88;\n local_8f8 = pCVar87;\n local_8f0 = dVar84;\n }\n else {\n FUN_1000224fc(IVar12,IVar15);\n IVar11 = IVar12;\n pCVar73 = local_8f8;\n pCVar77 = local_900;\n pcVar81 = local_908;\n FUN_100022650(IVar12,IVar15);\n if ((((int)IVar11 != 0) &&\n (pCVar73 = local_8f8, pCVar77 = local_900, pcVar81 = local_908, _CGRectIsNull(local_8f0),\n (IVar11 & 1) == 0)) &&\n (pCVar73 = local_8f8, pCVar77 = local_900, pcVar81 = local_908, _CGRectIsEmpty(local_8f0),\n (IVar11 & 1) == 0)) {\n dVar86 = local_8f0;\n pCVar77 = local_900;\n pcVar81 = local_908;\n _CGRectGetWidth(local_8f0,local_8f8);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n dVar86 = local_8f0;\n pCVar77 = local_900;\n pcVar81 = local_908;\n _CGRectGetHeight(local_8f0,local_8f8);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n bVar1 = 2.220446049250313e-16 < dVar86;\n goto LAB_10001da50;\n }\n }\n bVar1 = false;\n }\nLAB_10001da50:\n local_920 = dVar84;\n local_938 = pcVar89;\n pCStack_930 = pCVar88;\n local_928 = pCVar87;\n if ((local_920._0_4_ & 1) == 0) {\n local_960 = (cfstringStruct *)0x0;\n }\n else {\n if (bVar53) {\n IVar11 = local_968;\n FUN_1000226a0(dVar84,pCVar87,pCVar88,pcVar89);\n IVar13 = objc_stub::count(IVar11);\n local_960 = (cfstringStruct *)0x0;\n if ((IVar13 == 0) ||\n (local_960 = (cfstringStruct *)objc_stub::firstObject(IVar11),\n local_960 == (cfstringStruct *)0x0)) {\nLAB_100020050:\n pcVar39 = &cf_none;\n }\n else {\n local_660 = local_960;\n FUN_100022c70();\n IVar11 = objc_stub::count((ID)local_960);\n if (IVar11 < 0x4d) {\n local_960 = (cfstringStruct *)0x0;\n local_668 = 0.0;\n goto LAB_100020050;\n }\n local_668 = 1.0;\n pcVar39 = &cf_vision_track_match;\n local_690.field0_0x0.field0_0x0 = dVar84;\n local_690.field0_0x0.field1_0x8 = (double)pCVar87;\n local_690.field1_0x10.field0_0x0 = (double)pCVar88;\n local_690.field1_0x10.field1_0x8 = (double)pcVar89;\n }\n pcVar30 = (cfstringStruct *)objc_stub::count((ID)local_960);\n if (pcVar30 < (cfstringStruct *)0x4d) {\n FUN_100022f60(dVar84,pCVar87,pCVar88,pcVar89);\n pcVar38 = pcVar20;\n FUN_100021f30(pcVar20,pcVar30);\n pcVar32 = pcVar38;\n FUN_1000230cc();\n IVar11 = objc_stub::count((ID)pcVar32);\n if ((IVar11 != 0) &&\n (pcVar31 = (cfstringStruct *)objc_stub::firstObject((ID)pcVar32),\n pcVar31 != (cfstringStruct *)0x0)) {\n local_960 = pcVar31;\n local_660 = pcVar31;\n FUN_100022c70();\n IVar11 = objc_stub::count((ID)local_960);\n local_668 = 1.0;\n if (IVar11 < 0x4d) {\n local_668 = 0.0;\n local_960 = (cfstringStruct *)0x0;\n }\n else {\n local_1e8 = pcVar31;\n IVar11 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_1e8,1);\n FUN_1000221b4(local_968,IVar11);\n pcVar39 = &cf_vision_track_guided;\n local_690.field0_0x0.field0_0x0 = dVar84;\n local_690.field0_0x0.field1_0x8 = (double)pCVar87;\n local_690.field1_0x10.field0_0x0 = (double)pCVar88;\n local_690.field1_0x10.field1_0x8 = (double)pcVar89;\n }\n }\n objc_stub::count((ID)pcVar30);\n objc_stub::count((ID)pcVar38);\n objc_stub::count((ID)pcVar32);\n pcVar30 = (cfstringStruct *)objc_stub::count((ID)local_960);\n _NSStringFromRect(dVar84,pCVar87,pCVar88,pcVar89);\n }\n if ((local_660 == (cfstringStruct *)0x0) ||\n (pcVar30 = (cfstringStruct *)objc_stub::count((ID)local_960),\n pcVar30 < (cfstringStruct *)0x4d)) {\nLAB_100020660:\n uVar54 = 0;\n }\n else {\n if (local_660 != (cfstringStruct *)0x0) {\n objc_stub::boundingBox((ID)local_660,dVar84,pCVar87,pCVar88,pcVar89);\n _CGRectStandardize();\n _CGRectIntersection();\n }\n pcVar38 = local_960;\n FUN_1000177a4();\n pcVar30 = (cfstringStruct *)objc_stub::count((ID)pcVar38);\n if (pcVar30 < (cfstringStruct *)0x4d) goto LAB_100020660;\n local_660 = (cfstringStruct *)0x0;\n local_668 = 1.0;\n local_690.field0_0x0.field0_0x0 = dVar84;\n local_690.field0_0x0.field1_0x8 = (double)pCVar87;\n local_690.field1_0x10.field0_0x0 = (double)pCVar88;\n local_690.field1_0x10.field1_0x8 = (double)pcVar89;\n pcVar30 = (cfstringStruct *)objc_stub::stringByAppendingString_((ID)pcVar39,&cf__remap);\n uVar54 = 0;\n local_960 = pcVar38;\n pcVar39 = pcVar30;\n }\nLAB_100020664:\n local_938 = pcVar89;\n pCStack_930 = pCVar88;\n local_928 = pCVar87;\n local_920 = dVar84;\n }\n else {\n if (bVar1) {\n IVar11 = local_968;\n pCVar73 = local_8f8;\n pCVar77 = local_900;\n pcVar81 = local_908;\n FUN_1000226a0(local_8f0);\n IVar13 = objc_stub::count(IVar11);\n local_960 = (cfstringStruct *)0x0;\n if (IVar13 != 0) {\n local_960 = (cfstringStruct *)objc_stub::firstObject(IVar11);\n }\n local_660 = local_960;\n FUN_100022c70();\n IVar11 = objc_stub::count((ID)local_960);\n if (IVar11 < 0x4d) {\nLAB_1000206a0:\n local_960 = (cfstringStruct *)0x0;\n local_668 = 0.0;\n local_660 = (cfstringStruct *)0x0;\n pcVar38 = &cf_none;\n }\n else {\n uVar79 = extraout_d0_12;\n FUN_10002320c(local_660);\n pcVar39 = local_960;\n FUN_1000177a4();\n IVar11 = objc_stub::count((ID)pcVar39);\n if ((IVar11 < 0x4d) ||\n (pcVar38 = pcVar39, pCVar72 = local_900, pcVar82 = local_908,\n FUN_100023250(local_8f0,local_8f8), (int)pcVar38 == 0)) {\n pcVar38 = local_960;\n pCVar72 = local_900;\n pcVar82 = local_908;\n FUN_100023250(local_8f0,local_8f8);\n if ((int)pcVar38 == 0) {\n FUN_1000181ec(local_8f0,local_8f8,local_900,local_908);\n FUN_1000181ec(uVar79);\n objc_stub::count((ID)local_960);\n objc_stub::count((ID)pcVar39);\n goto LAB_1000206a0;\n }\n pcVar38 = &cf_vision_selection_box;\n }\n else {\n pcVar38 = &cf_vision_selection_box_remap;\n local_960 = pcVar39;\n }\n local_668 = 1.0;\n local_690.field0_0x0.field1_0x8 = (double)local_8f8;\n local_690.field0_0x0.field0_0x0 = local_8f0;\n local_690.field1_0x10.field0_0x0 = (double)local_900;\n local_690.field1_0x10.field1_0x8 = (double)local_908;\n pCVar73 = local_900;\n pCVar77 = pCVar72;\n pcVar81 = pcVar82;\n }\n IVar11 = objc_stub::count((ID)local_960);\n if (IVar11 < 0x4d) {\n FUN_100022f60(local_8f0,local_8f8,local_900,local_908);\n pcVar39 = pcVar20;\n FUN_100021f30(pcVar20,IVar11);\n pcVar30 = pcVar39;\n FUN_1000230cc();\n IVar13 = objc_stub::count((ID)pcVar30);\n if (IVar13 == 0) {\n pcVar32 = (cfstringStruct *)0x0;\n }\n else {\n pcVar32 = (cfstringStruct *)objc_stub::firstObject((ID)pcVar30);\n }\n pcVar31 = pcVar32;\n FUN_100022c70();\n IVar13 = objc_stub::count((ID)pcVar31);\n if (0x4c < IVar13) {\n FUN_10002320c(pcVar32);\n FUN_1000177a4();\n IVar13 = objc_stub::count((ID)pcVar31);\n if ((0x4c < IVar13) &&\n (pcVar33 = pcVar31, FUN_100023250(local_8f0,local_8f8,local_900,local_908),\n (int)pcVar33 != 0)) {\n local_668 = 1.0;\n local_690.field0_0x0.field0_0x0 = local_8f0;\n local_690.field0_0x0.field1_0x8 = (double)local_8f8;\n local_690.field1_0x10.field0_0x0 = (double)local_900;\n local_690.field1_0x10.field1_0x8 = (double)local_908;\n local_660 = pcVar32;\n local_1f0 = pcVar32;\n IVar13 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_1f0,1);\n FUN_1000221b4(local_968,IVar13);\n pcVar38 = &cf_vision_selection_box_guided;\n local_960 = pcVar31;\n }\n }\n objc_stub::count(IVar11);\n objc_stub::count((ID)pcVar39);\n objc_stub::count((ID)pcVar30);\n objc_stub::count((ID)local_960);\n pCVar73 = local_8f8;\n pCVar77 = local_900;\n pcVar81 = local_908;\n _NSStringFromRect(local_8f0);\n }\n objc_stub::count((ID)local_960);\n uVar54 = 0;\nLAB_100020800:\n uVar51 = 0;\n }\n else {\n IVar11 = objc_stub::count(0);\n if (IVar11 < 0x4d) {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n local_960 = (cfstringStruct *)\n temporalFacePointsForObservations_renderTime_params_selectedObservationOut_strengthMultiplierOut_pointsBoxOut_\n (param_1,local_968,(AnonymousStructure0 *)&local_140,&AStack_658,\n (ID *)&local_660,&local_668,&local_690);\n IVar11 = objc_stub::count((ID)local_960);\n pcVar38 = &cf_none;\n uVar54 = 1;\n if ((IVar11 < 0x4d) ||\n (pCVar73 = (CGRect *)0x3cb0000000000000, local_668 <= 2.220446049250313e-16))\n goto LAB_100020800;\n local_928 = (CGRect *)local_690.field0_0x0.field1_0x8;\n local_920 = local_690.field0_0x0.field0_0x0;\n local_938 = (code *)local_690.field1_0x10.field1_0x8;\n pCStack_930 = (CGRect *)local_690.field1_0x10.field0_0x0;\n pCVar73 = (CGRect *)local_690.field0_0x0.field1_0x8;\n pCVar77 = (CGRect *)local_690.field1_0x10.field0_0x0;\n pcVar81 = (code *)local_690.field1_0x10.field1_0x8;\n FUN_1000174d8();\n uVar51 = (uint)IVar11;\n pcVar38 = &cf_vision_temporal_held;\n if (local_660 != (cfstringStruct *)0x0) {\n pcVar38 = &cf_vision_temporal;\n }\n }\n else {\n uVar54 = 0;\n uVar51 = 0;\n local_960 = (cfstringStruct *)0x0;\n pcVar38 = &cf_none;\n }\n }\n pcVar30 = (cfstringStruct *)objc_stub::count((ID)local_960);\n pcVar39 = pcVar38;\n if (((cfstringStruct *)0x4c < pcVar30) &&\n (pCVar73 = (CGRect *)0x3cb0000000000000, 2.220446049250313e-16 < local_668)) {\n pcVar30 = (cfstringStruct *)objc_stub::isEqualToString_((ID)pcVar38,&cf_none);\n pcVar39 = &cf_vision_temporal;\n if (uVar54 == 0) {\n pcVar39 = &cf_vision_selection_box;\n }\n if ((int)pcVar30 == 0) {\n pcVar39 = pcVar38;\n }\n }\n if (bVar1) {\n local_928 = local_8f8;\n local_920 = local_8f0;\n local_938 = local_908;\n pCStack_930 = local_900;\n }\n else {\n if ((uVar54 & uVar51) == 0) {\n if ((local_660 != (cfstringStruct *)0x0) &&\n (pcVar30 = (cfstringStruct *)objc_stub::count((ID)local_960),\n (cfstringStruct *)0x4c < pcVar30)) {\n pcVar30 = local_660;\n local_920 = extraout_d0_17;\n FUN_100023580();\n local_938 = pcVar81;\n pCStack_930 = pCVar77;\n local_928 = pCVar73;\n local_690.field0_0x0.field0_0x0 = local_920;\n local_690.field0_0x0.field1_0x8 = (double)pCVar73;\n local_690.field1_0x10.field0_0x0 = (double)pCVar77;\n local_690.field1_0x10.field1_0x8 = (double)pcVar81;\n goto LAB_1000208d4;\n }\n if (uVar51 != 0) goto LAB_1000208d4;\n goto LAB_100020664;\n }\n uVar54 = 1;\n }\n }\nLAB_1000208d4:\n dVar62 = local_690.field1_0x10.field1_0x8;\n dVar6 = local_690.field1_0x10.field0_0x0;\n dVar66 = local_690.field0_0x0.field1_0x8;\n dVar86 = local_690.field0_0x0.field0_0x0;\n _CGRectIsNull(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8);\n if (((((((ulong)pcVar30 & 1) != 0) ||\n (_CGRectIsEmpty(dVar86,dVar66,dVar6,dVar62), ((ulong)pcVar30 & 1) != 0)) ||\n (dVar64 = dVar86, _CGRectGetWidth(dVar86,dVar66,dVar6,dVar62),\n dVar64 <= 2.220446049250313e-16)) ||\n (_CGRectGetHeight(dVar86,dVar66,dVar6,dVar62), dVar86 <= 2.220446049250313e-16)) &&\n (((uVar34 = objc_stub::count((ID)local_960), 0x4c < uVar34 &&\n (_CGRectIsNull(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0)) &&\n ((_CGRectIsEmpty(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0 &&\n ((dVar86 = local_920, _CGRectGetWidth(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86 &&\n (dVar86 = local_920, _CGRectGetHeight(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86)))))))) {\n local_690.field0_0x0.field0_0x0 = local_920;\n local_690.field0_0x0.field1_0x8 = (double)local_928;\n local_690.field1_0x10.field0_0x0 = (double)pCStack_930;\n local_690.field1_0x10.field1_0x8 = (double)local_938;\n }\n uVar34 = objc_stub::count((ID)local_960);\n dVar62 = local_690.field1_0x10.field1_0x8;\n dVar6 = local_690.field1_0x10.field0_0x0;\n dVar66 = local_690.field0_0x0.field1_0x8;\n dVar86 = local_690.field0_0x0.field0_0x0;\n if ((((((0x4c < uVar34) &&\n (_CGRectIsNull(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8),\n (uVar34 & 1) == 0)) && (_CGRectIsEmpty(dVar86,dVar66,dVar6,dVar62), (uVar34 & 1) == 0))\n && ((dVar64 = dVar86, _CGRectGetWidth(dVar86,dVar66,dVar6,dVar62),\n 2.220446049250313e-16 < dVar64 &&\n (_CGRectGetHeight(dVar86,dVar66,dVar6,dVar62), 2.220446049250313e-16 < dVar86)))) &&\n (((_CGRectIsNull(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0 &&\n ((_CGRectIsEmpty(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0 &&\n (dVar86 = local_920, _CGRectGetWidth(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86)))) &&\n (dVar86 = local_920, _CGRectGetHeight(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86)))) &&\n (FUN_10002373c(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8,local_920,\n local_928,pCStack_930,local_938), (uVar34 & 1) == 0)) {\n _NSStringFromRect(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8);\n _NSStringFromRect(local_920,local_928,pCStack_930,local_938);\n local_928 = *(CGRect **)((ulong)&local_690 | 8);\n local_920 = local_690.field0_0x0.field0_0x0;\n local_938 = (code *)local_690.field1_0x10.field1_0x8;\n pCStack_930 = (CGRect *)local_690.field1_0x10.field0_0x0;\n }\n if (uVar54 == 0) {\n bVar49 = false;\n }\n else {\n uVar34 = objc_stub::count((ID)local_960);\n bVar49 = local_668 <= 2.220446049250313e-16 || uVar34 < 0x4d;\n }\n pCVar73 = pCVar87;\n pCVar77 = pCVar88;\n pcVar81 = pcVar89;\n _CGRectIsNull(dVar84);\n if (((uVar34 & 1) == 0) &&\n (pCVar73 = pCVar87, pCVar77 = pCVar88, pcVar81 = pcVar89, _CGRectIsEmpty(dVar84),\n (uVar34 & 1) == 0)) {\n dVar86 = dVar84;\n pCVar77 = pCVar88;\n pcVar81 = pcVar89;\n _CGRectGetWidth(dVar84,pCVar87);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n dVar86 = dVar84;\n pCVar77 = pCVar88;\n pcVar81 = pcVar89;\n _CGRectGetHeight(dVar84,pCVar87);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (((2.220446049250313e-16 < dVar86) &&\n (IVar11 = objc_stub::count((ID)local_960), IVar11 < 0x4d)) && (!bVar49)) {\n local_4b0 = (cfstringStruct *)0x0;\n local_140.field0_0x0.field0_0x0 = dVar83;\n local_140.field0_0x0.field1_0x8 = (double)pCVar65;\n local_140.field1_0x10.field0_0x0 = (double)pCVar71;\n local_140.field1_0x10.field1_0x8 = (double)pcVar85;\n objc_stub::lock(*(ID *)(param_1 + 0x20));\n puStack_1b8 = (undefined1 *)pdVar41[1];\n local_1c0 = (undefined1 [8])*pdVar41;\n local_1b0 = (long *)pdVar41[2];\n bVar7 = mss_timeLocalFaceReferenceForRenderTime_pointsOut_boxOut_detectionTimeOut_outputTimeOut_usedHistoryOut_\n (param_1,(AnonymousStructure0 *)local_1c0,(ID *)&local_4b0,&local_140,\n (AnonymousStructure0 *)0x0,(AnonymousStructure0 *)0x0,(bool *)0x0);\n if (((bVar7 == 0) || (IVar11 = objc_stub::count((ID)local_4b0), IVar11 < 0x4d)) ||\n (FUN_1000174d8(local_140.field0_0x0.field0_0x0,local_140.field0_0x0.field1_0x8,\n local_140.field1_0x10.field0_0x0,local_140.field1_0x10.field1_0x8),\n (int)IVar11 == 0)) {\n local_4b0 = (cfstringStruct *)0x0;\n local_140.field0_0x0.field0_0x0 = dVar83;\n local_140.field0_0x0.field1_0x8 = (double)pCVar65;\n local_140.field1_0x10.field0_0x0 = (double)pCVar71;\n local_140.field1_0x10.field1_0x8 = (double)pcVar85;\n }\n objc_stub::unlock(*(ID *)(param_1 + 0x20));\n pcVar38 = local_4b0;\n FUN_1000177a4(local_140.field0_0x0.field0_0x0,local_140.field0_0x0.field1_0x8,\n local_140.field1_0x10.field0_0x0,local_140.field1_0x10.field1_0x8,dVar84,\n pCVar87,pCVar88,pcVar89);\n IVar11 = objc_stub::count((ID)pcVar38);\n if (IVar11 < 0x4d) {\n puStack_1b8 = (undefined1 *)pdVar41[1];\n local_1c0 = (undefined1 [8])*pdVar41;\n local_1b0 = (long *)pdVar41[2];\n pcVar38 = (cfstringStruct *)\n mss_faceThinRememberedPointsForBox_renderTime_source_\n (param_1,CVar90,(AnonymousStructure0 *)local_1c0,0x10007b8d8);\n pcVar30 = &cf_held_track_memory;\n }\n else {\n pcVar30 = &cf_held_track_remap;\n }\n IVar11 = objc_stub::count((ID)pcVar38);\n if (0x4c < IVar11) {\n local_660 = (cfstringStruct *)0x0;\n local_668 = 1.0;\n local_960 = pcVar38;\n pcVar39 = pcVar30;\n local_938 = pcVar89;\n pCStack_930 = pCVar88;\n local_928 = pCVar87;\n local_920 = dVar84;\n local_690.field0_0x0.field0_0x0 = dVar84;\n local_690.field0_0x0.field1_0x8 = (double)pCVar87;\n local_690.field1_0x10.field0_0x0 = (double)pCVar88;\n local_690.field1_0x10.field1_0x8 = (double)pcVar89;\n }\n objc_stub::count((ID)local_4b0);\n objc_stub::count((ID)pcVar38);\n _NSStringFromRect(local_140.field0_0x0.field0_0x0,local_140.field0_0x0.field1_0x8,\n local_140.field1_0x10.field0_0x0,local_140.field1_0x10.field1_0x8);\n pCVar73 = pCVar87;\n pCVar77 = pCVar88;\n pcVar81 = pcVar89;\n _NSStringFromRect(dVar84);\n }\n }\n }\n uVar34 = objc_stub::count((ID)local_960);\n if (((0x4c < uVar34) &&\n (pCVar73 = (CGRect *)0x3cb0000000000000, 2.220446049250313e-16 < local_668)) &&\n ((pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938, _CGRectIsNull(local_920),\n (uVar34 & 1) == 0 &&\n (pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938, _CGRectIsEmpty(local_920),\n (uVar34 & 1) == 0)))) {\n dVar86 = local_920;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n _CGRectGetWidth(local_920,local_928);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n dVar86 = local_920;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n _CGRectGetHeight(local_920,local_928);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n local_4b0 = (cfstringStruct *)0x0;\n local_140.field0_0x0.field0_0x0 = dVar83;\n local_140.field0_0x0.field1_0x8 = (double)pCVar65;\n local_140.field1_0x10.field0_0x0 = (double)pCVar71;\n local_140.field1_0x10.field1_0x8 = (double)pcVar85;\n objc_stub::lock(*(ID *)(param_1 + 0x20));\n puStack_1b8 = (undefined1 *)pdVar41[1];\n local_1c0 = (undefined1 [8])*pdVar41;\n local_1b0 = (long *)pdVar41[2];\n bVar7 = mss_timeLocalFaceReferenceForRenderTime_pointsOut_boxOut_detectionTimeOut_outputTimeOut_usedHistoryOut_\n (param_1,(AnonymousStructure0 *)local_1c0,(ID *)&local_4b0,&local_140,\n (AnonymousStructure0 *)0x0,(AnonymousStructure0 *)0x0,(bool *)0x0);\n if (((bVar7 == 0) || (IVar11 = objc_stub::count((ID)local_4b0), IVar11 < 0x4d)) ||\n (FUN_1000174d8(local_140.field0_0x0.field0_0x0,local_140.field0_0x0.field1_0x8,\n local_140.field1_0x10.field0_0x0,local_140.field1_0x10.field1_0x8),\n (int)IVar11 == 0)) {\n local_4b0 = (cfstringStruct *)0x0;\n local_140.field0_0x0.field0_0x0 = dVar83;\n local_140.field0_0x0.field1_0x8 = (double)pCVar65;\n local_140.field1_0x10.field0_0x0 = (double)pCVar71;\n local_140.field1_0x10.field1_0x8 = (double)pcVar85;\n }\n uVar34 = objc_stub::unlock(*(ID *)(param_1 + 0x20));\n dVar62 = local_140.field1_0x10.field1_0x8;\n dVar6 = local_140.field1_0x10.field0_0x0;\n dVar66 = local_140.field0_0x0.field1_0x8;\n dVar86 = local_140.field0_0x0.field0_0x0;\n local_1c0 = (undefined1 [8])0x7ff8000000000000;\n local_4f0 = 0x7ff8000000000000;\n local_870.field0_0x0.field0_0x0 = NAN;\n _CGRectIsNull(local_140.field0_0x0.field0_0x0,local_140.field0_0x0.field1_0x8,\n local_140.field1_0x10.field0_0x0,local_140.field1_0x10.field1_0x8);\n if ((uVar34 & 1) == 0) {\n _CGRectIsEmpty(dVar86,dVar66,dVar6,dVar62);\n iVar45 = (int)uVar34;\n if ((((uVar34 & 1) != 0) ||\n (dVar64 = dVar86, _CGRectGetWidth(dVar86,dVar66,dVar6,dVar62),\n dVar64 <= 2.220446049250313e-16)) ||\n ((_CGRectGetHeight(dVar86,dVar66,dVar6,dVar62), dVar86 <= 2.220446049250313e-16 ||\n (pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938,\n FUN_10002373c(local_920), iVar45 != 0)))) goto LAB_1000219a0;\n bVar49 = false;\n iVar45 = 0;\n }\n else {\nLAB_1000219a0:\n pcVar38 = local_960;\n pCVar73 = local_928;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n FUN_100023e00(local_920,local_960,local_4b0,local_1c0,&local_4f0,&local_870);\n iVar45 = (int)pcVar38;\n bVar49 = true;\n }\n IVar11 = objc_stub::count((ID)local_4b0);\n if (0x4c < IVar11) {\n FUN_1000181ec(local_920,local_928,pCStack_930,local_938);\n pCVar73 = (CGRect *)local_140.field0_0x0.field1_0x8;\n pCVar77 = (CGRect *)local_140.field1_0x10.field0_0x0;\n pcVar81 = (code *)local_140.field1_0x10.field1_0x8;\n FUN_1000181ec(local_140.field0_0x0.field0_0x0);\n }\n if (iVar45 == 0) {\n if ((!bVar49) && (IVar11 = objc_stub::count((ID)local_4b0), 0x4c < IVar11)) {\n FUN_1000181ec(local_920,local_928,pCStack_930,local_938);\n pCVar73 = (CGRect *)local_140.field0_0x0.field1_0x8;\n pCVar77 = (CGRect *)local_140.field1_0x10.field0_0x0;\n pcVar81 = (code *)local_140.field1_0x10.field1_0x8;\n FUN_1000181ec(local_140.field0_0x0.field0_0x0);\n }\n }\n else {\n pcVar38 = local_4b0;\n pCVar73 = (CGRect *)local_140.field0_0x0.field1_0x8;\n pCVar77 = (CGRect *)local_140.field1_0x10.field0_0x0;\n pcVar81 = (code *)local_140.field1_0x10.field1_0x8;\n FUN_1000177a4(local_140.field0_0x0.field0_0x0);\n IVar11 = objc_stub::count((ID)pcVar38);\n if ((0x4c < IVar11) &&\n (pcVar30 = pcVar38, pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938,\n FUN_100017cd8(local_920), (int)pcVar30 != 0)) {\n local_660 = (cfstringStruct *)0x0;\n local_668 = 1.0;\n local_690.field0_0x0.field0_0x0 = local_920;\n local_690.field0_0x0.field1_0x8 = (double)local_928;\n local_690.field1_0x10.field0_0x0 = (double)pCStack_930;\n local_690.field1_0x10.field1_0x8 = (double)local_938;\n pcVar39 = (cfstringStruct *)\n objc_stub::stringByAppendingString_((ID)pcVar39,&cf__axis_hold);\n _NSStringFromRect(local_920,local_928,pCStack_930,local_938);\n pCVar73 = (CGRect *)local_140.field0_0x0.field1_0x8;\n pCVar77 = (CGRect *)local_140.field1_0x10.field0_0x0;\n pcVar81 = (code *)local_140.field1_0x10.field1_0x8;\n _NSStringFromRect(local_140.field0_0x0.field0_0x0);\n local_960 = pcVar38;\n }\n }\n }\n }\n }\n uVar34 = objc_stub::count((ID)local_960);\n if ((((0x4c < uVar34) &&\n (pCVar73 = (CGRect *)0x3cb0000000000000, 2.220446049250313e-16 < local_668)) &&\n (pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938, _CGRectIsNull(local_920),\n (uVar34 & 1) == 0)) &&\n (pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938, _CGRectIsEmpty(local_920),\n (uVar34 & 1) == 0)) {\n dVar86 = local_920;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n _CGRectGetWidth(local_920,local_928);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n dVar86 = local_920;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n _CGRectGetHeight(local_920,local_928);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n uVar51 = uVar54;\n if (dVar86 <= 2.220446049250313e-16) {\n uVar51 = 1;\n }\n if (uVar51 == 0) {\n objc_stub::lock(*(ID *)(param_1 + 0x20));\n IVar11 = objc_stub::copy((ID)local_960);\n *(ID *)(param_1 + 0x210) = IVar11;\n *(double *)(param_1 + 0x218) = local_920;\n *(CGRect **)(param_1 + 0x220) = local_928;\n *(CGRect **)(param_1 + 0x228) = pCStack_930;\n *(code **)(param_1 + 0x230) = local_938;\n dVar66 = pdVar41[1];\n dVar86 = *pdVar41;\n *(double *)(param_1 + 0x248) = pdVar41[2];\n *(double *)(param_1 + 0x240) = dVar66;\n *(double *)(param_1 + 0x238) = dVar86;\n dVar66 = pdVar41[1];\n dVar86 = *pdVar41;\n *(double *)(param_1 + 0x260) = pdVar41[2];\n *(double *)(param_1 + 600) = dVar66;\n *(double *)(param_1 + 0x250) = dVar86;\n *(undefined1 *)(param_1 + 0x268) = 1;\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n CVar94.field0_0x0.field1_0x8 = (double)local_928;\n CVar94.field0_0x0.field0_0x0 = local_920;\n CVar94.field1_0x10.field1_0x8 = (double)local_938;\n CVar94.field1_0x10.field0_0x0 = (double)pCStack_930;\n mss_storeRewindFaceReferencePoints_forBox_renderTime_\n (param_1,(ID)local_960,CVar94,(AnonymousStructure0 *)&local_140);\n objc_stub::unlock(*(ID *)(param_1 + 0x20));\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n CVar95.field0_0x0.field1_0x8 = (double)local_928;\n CVar95.field0_0x0.field0_0x0 = local_920;\n CVar95.field1_0x10.field1_0x8 = (double)local_938;\n CVar95.field1_0x10.field0_0x0 = (double)pCStack_930;\n pCVar73 = local_928;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n mss_rememberFaceThinPoints_forBox_renderTime_source_\n (param_1,(ID)local_960,CVar95,(AnonymousStructure0 *)&local_140,(ID)pcVar39);\n goto LAB_10001dadc;\n }\n }\n }\n uVar34 = objc_stub::count((ID)local_960);\n if (((0x4c < uVar34) &&\n (pCVar73 = (CGRect *)0x3cb0000000000000, 2.220446049250313e-16 < local_668)) &&\n ((pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938, _CGRectIsNull(local_920),\n (uVar34 & 1) == 0 &&\n (pCVar73 = local_928, pCVar77 = pCStack_930, pcVar81 = local_938, _CGRectIsEmpty(local_920),\n (uVar34 & 1) == 0)))) {\n dVar86 = local_920;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n _CGRectGetWidth(local_920,local_928);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n dVar86 = local_920;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n _CGRectGetHeight(local_920,local_928);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n uVar54 = uVar54 ^ 1;\n if (dVar86 <= 2.220446049250313e-16) {\n uVar54 = 1;\n }\n if ((uVar54 == 0) &&\n (IVar11 = objc_stub::rangeOfString_((ID)pcVar39,&cf_held), IVar11 == 0x7fffffffffffffff))\n {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n CVar93.field0_0x0.field1_0x8 = (double)local_928;\n CVar93.field0_0x0.field0_0x0 = local_920;\n CVar93.field1_0x10.field1_0x8 = (double)local_938;\n CVar93.field1_0x10.field0_0x0 = (double)pCStack_930;\n pCVar73 = local_928;\n pCVar77 = pCStack_930;\n pcVar81 = local_938;\n mss_rememberFaceThinPoints_forBox_renderTime_source_\n (param_1,(ID)local_960,CVar93,(AnonymousStructure0 *)&local_140,(ID)pcVar39);\n }\n }\n }\n }\nLAB_10001dadc:\n if ((bVar5) && (uVar52 != 0)) {\n IVar11 = objc_stub::count(IVar10);\n if (IVar11 == 0) {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n CVar92.field0_0x0.field1_0x8 = (double)pCVar60;\n CVar92.field0_0x0.field0_0x0 = dVar68;\n CVar92.field1_0x10.field1_0x8 = (double)pcVar61;\n CVar92.field1_0x10.field0_0x0 = (double)pCVar69;\n pCVar73 = pCVar60;\n pCVar77 = pCVar69;\n pcVar81 = pcVar61;\n IVar10 = cachedFaceRectangleObservationsForInputImage_inputSurface_sourceTileRect_renderTime_allowForwardReuse_\n (param_1,(ID)pcVar20,p_Var18,CVar92,(AnonymousStructure0 *)&local_140,0);\n }\n IVar11 = local_968;\n FUN_1000230cc();\n IVar13 = objc_stub::count(IVar11);\n IVar13 = NSMutableArray::arrayWithCapacity_((ID)&_OBJC_CLASS___NSMutableArray,IVar13);\n uStack_6b8 = 0;\n local_6c0 = 0;\n uStack_6a8 = 0;\n uStack_6b0 = 0;\n lStack_6d8 = 0;\n local_6e0 = 0;\n uStack_6c8 = 0;\n local_6d0 = (long *)0x0;\n IVar14 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar11,&local_6e0,auStack_270,0x10);\n if (IVar14 != 0) {\n lVar50 = *local_6d0;\n dVar86 = extraout_d0_06;\n do {\n IVar21 = 0;\n do {\n dVar66 = dVar86;\n pCVar72 = pCVar73;\n pCVar78 = pCVar77;\n pcVar82 = pcVar81;\n if (*local_6d0 != lVar50) {\n _objc_enumerationMutation(IVar11);\n dVar66 = dVar86;\n pCVar72 = pCVar73;\n pCVar78 = pCVar77;\n pcVar82 = pcVar81;\n }\n uVar34 = *(ulong *)(lStack_6d8 + IVar21 * 8);\n FUN_100023580();\n dVar86 = dVar66;\n pCVar73 = pCVar72;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n _CGRectIsNull();\n if (((uVar34 & 1) == 0) &&\n (dVar86 = dVar66, pCVar73 = pCVar72, pCVar77 = pCVar78, pcVar81 = pcVar82,\n _CGRectIsEmpty(), (uVar34 & 1) == 0)) {\n dVar86 = dVar66;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n _CGRectGetWidth(dVar66,pCVar72);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n dVar86 = dVar66;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n _CGRectGetHeight(dVar66,pCVar72);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar86) {\n IVar22 = NSValue::valueWithRect_((ID)&_OBJC_CLASS___NSValue,dVar66);\n NSMutableArray::addObject_(IVar13,IVar22);\n dVar86 = extraout_d0_07;\n pCVar73 = pCVar72;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n }\n }\n }\n IVar21 = IVar21 + 1;\n } while (IVar14 != IVar21);\n IVar14 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar11,&local_6e0,auStack_270,0x10);\n dVar86 = extraout_d0_08;\n } while (IVar14 != 0);\n }\n uStack_6f8 = 0;\n local_700 = 0;\n uStack_6e8 = 0;\n uStack_6f0 = 0;\n lStack_718 = 0;\n local_720 = 0;\n uStack_708 = 0;\n local_710 = (long *)0x0;\n IVar14 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar10,&local_720,auStack_2f0,0x10);\n lVar50 = 0;\n if (IVar14 != 0) {\n lVar56 = *local_710;\n do {\n IVar21 = 0;\n do {\n if (*local_710 != lVar56) {\n _objc_enumerationMutation(IVar10);\n }\n IVar23 = *(ID *)(lStack_718 + IVar21 * 8);\n IVar22 = 0;\n dVar86 = dVar84;\n pCVar72 = pCVar87;\n pCVar78 = pCVar88;\n pcVar82 = pcVar89;\n if (IVar23 != 0) {\n IVar22 = objc_stub::boundingBox(IVar23);\n dVar86 = extraout_d0_09;\n _CGRectStandardize();\n _CGRectIntersection();\n pCVar72 = pCVar73;\n pCVar78 = pCVar77;\n pcVar82 = pcVar81;\n }\n pCVar73 = pCVar72;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n _CGRectIsNull(dVar86);\n if (((IVar22 & 1) == 0) &&\n (pCVar73 = pCVar72, pCVar77 = pCVar78, pcVar81 = pcVar82, _CGRectIsEmpty(dVar86),\n (IVar22 & 1) == 0)) {\n dVar66 = dVar86;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n _CGRectGetWidth(dVar86,pCVar72);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar66) {\n dVar66 = dVar86;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n _CGRectGetHeight(dVar86,pCVar72);\n pCVar73 = (CGRect *)0x3cb0000000000000;\n if (2.220446049250313e-16 < dVar66) {\n IVar22 = IVar13;\n FUN_100024340(dVar86);\n lVar50 = lVar50 + (ulong)((uint)IVar22 ^ 1);\n pCVar73 = pCVar72;\n pCVar77 = pCVar78;\n pcVar81 = pcVar82;\n }\n }\n }\n IVar21 = IVar21 + 1;\n } while (IVar14 != IVar21);\n IVar14 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar10,&local_720,auStack_2f0,0x10);\n } while (IVar14 != 0);\n }\n IVar13 = objc_stub::count(IVar10);\n if (IVar13 == 0) {\nLAB_10001de04:\n pcVar39 = (cfstringStruct *)0x0;\n }\n else {\n IVar13 = objc_stub::count(IVar11);\n IVar14 = objc_stub::count(IVar10);\n if ((IVar14 <= IVar13) && (lVar50 == 0)) goto LAB_10001de04;\n pcVar39 = pcVar20;\n FUN_100021f30(pcVar20,IVar10);\n pcVar38 = pcVar39;\n FUN_1000230cc();\n IVar13 = local_968;\n FUN_1000221b4(local_968,pcVar38);\n IVar14 = objc_stub::count(IVar13);\n IVar21 = objc_stub::count(local_968);\n if (IVar21 < IVar14) {\n IVar11 = IVar13;\n FUN_1000230cc();\n objc_stub::lock(*(ID *)(param_1 + 0x20));\n IVar14 = objc_stub::copy(IVar13);\n *(ID *)(param_1 + 0x140) = IVar14;\n dVar66 = pdVar41[1];\n dVar86 = *pdVar41;\n *(double *)(param_1 + 0x158) = pdVar41[2];\n *(double *)(param_1 + 0x150) = dVar66;\n *(double *)(param_1 + 0x148) = dVar86;\n objc_stub::extent((ID)pcVar20);\n *(undefined8 *)(param_1 + 0x160) = extraout_d0_13;\n *(CGRect **)(param_1 + 0x168) = pCVar73;\n *(CGRect **)(param_1 + 0x170) = pCVar77;\n *(code **)(param_1 + 0x178) = pcVar81;\n *(double *)(param_1 + 0x180) = dVar68;\n *(CGRect **)(param_1 + 0x188) = pCVar60;\n *(CGRect **)(param_1 + 400) = pCVar69;\n *(code **)(param_1 + 0x198) = pcVar61;\n *(undefined1 *)(param_1 + 0x1a0) = 1;\n objc_stub::unlock(*(ID *)(param_1 + 0x20));\n local_968 = IVar13;\n }\n }\n IVar14 = objc_stub::count(IVar11);\n IVar13 = local_968;\n if (IVar14 != 0) {\n IVar13 = IVar11;\n }\n IVar14 = objc_stub::count(local_968);\n IVar21 = objc_stub::count(IVar10);\n if (IVar14 <= IVar21) {\n IVar14 = IVar21;\n }\n pcVar38 = (cfstringStruct *)\n NSMutableArray::arrayWithCapacity_((ID)&_OBJC_CLASS___NSMutableArray,IVar14);\n IVar14 = objc_stub::count(local_968);\n IVar21 = objc_stub::count(IVar10);\n if (IVar14 <= IVar21) {\n IVar14 = IVar21;\n }\n IVar14 = NSMutableArray::arrayWithCapacity_((ID)&_OBJC_CLASS___NSMutableArray,IVar14);\n local_778 = &local_140;\n local_140.field0_0x0.field0_0x0 = 0.0;\n local_140.field1_0x10.field0_0x0 = 1.02535499743127e-312;\n local_140.field1_0x10.field1_0x8 = (double)FUN_100019ba8;\n local_120 = FUN_100019bb8;\n local_118 = 0;\n local_780 = local_1c0;\n local_1c0 = (undefined1 [8])0x0;\n local_1b0 = (long *)0x2020000000;\n dStack_1a8 = 0.0;\n local_788 = &local_4b0;\n local_4b0 = (cfstringStruct *)0x0;\n local_4a0 = (long *)0x2020000000;\n local_498 = (code *)0x0;\n local_790 = &local_4f0;\n local_4f0 = 0;\n local_4e0 = (long *)0x2020000000;\n local_4d8 = 0;\n local_7d0 = PTR___NSConcreteStackBlock_1000780a8;\n local_7c8 = 0xc2000000;\n local_7c0 = FUN_100024534;\n local_7b8 = &DAT_1000785d8;\n local_768 = local_a40;\n dStack_730 = pdVar41[1];\n local_738 = *pdVar41;\n local_728 = pdVar41[2];\n uStack_7e8 = 0;\n local_7f0 = 0;\n uStack_7d8 = 0;\n uStack_7e0 = 0;\n lStack_808 = 0;\n local_810 = 0;\n uStack_7f8 = 0;\n local_800 = (long *)0x0;\n pCVar73 = pCVar69;\n local_7b0 = IVar14;\n local_7a8 = pcVar20;\n local_7a0 = param_1;\n local_798 = pcVar38;\n local_770 = lVar57;\n local_760 = p_Var18;\n local_758 = dVar68;\n local_750 = pCVar60;\n local_748 = pCVar69;\n local_740 = pcVar61;\n puStack_4e8 = local_790;\n ppcStack_4a8 = local_788;\n puStack_1b8 = local_780;\n local_140.field0_0x0.field1_0x8 = (double)local_778;\n IVar21 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar13,&local_810,auStack_370,0x10);\n if (IVar21 != 0) {\n lVar57 = *local_800;\n do {\n IVar22 = 0;\n do {\n if (*local_800 != lVar57) {\n _objc_enumerationMutation(IVar13);\n }\n (*local_7c0)(&local_7d0,*(undefined8 *)(lStack_808 + IVar22 * 8),&cf_landmark);\n IVar22 = IVar22 + 1;\n } while (IVar21 != IVar22);\n IVar21 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar13,&local_810,auStack_370,0x10);\n } while (IVar21 != 0);\n }\n uStack_828 = 0;\n local_830 = 0;\n uStack_818 = 0;\n uStack_820 = 0;\n lStack_848 = 0;\n local_850 = 0;\n uStack_838 = 0;\n local_840 = (long *)0x0;\n IVar13 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar10,&local_850,auStack_3f0,0x10);\n if (IVar13 != 0) {\n lVar57 = *local_840;\n do {\n IVar21 = 0;\n do {\n if (*local_840 != lVar57) {\n _objc_enumerationMutation(IVar10);\n }\n (*local_7c0)(&local_7d0,*(undefined8 *)(lStack_848 + IVar21 * 8),&cf_rectangle);\n IVar21 = IVar21 + 1;\n } while (IVar13 != IVar21);\n IVar13 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar10,&local_850,auStack_3f0,0x10);\n } while (IVar13 != 0);\n }\n IVar13 = objc_stub::count((ID)pcVar38);\n if (IVar13 == 0) {\n local_8d0 = (cfstringStruct *)0x0;\n }\n else {\n local_960 = (cfstringStruct *)objc_stub::firstObject((ID)pcVar38);\n local_660 = (cfstringStruct *)\n (((CGRect *)((long)local_140.field0_0x0.field1_0x8 + 0x20))->field0_0x0).\n field1_0x8;\n local_668 = 1.0;\n IVar13 = NSMutableArray::count(IVar14);\n if (IVar13 == 0) {\n local_920 = extraout_d0_10;\n FUN_10002320c(local_660);\n local_938 = pcVar81;\n pCStack_930 = pCVar77;\n local_928 = pCVar73;\n }\n else {\n IVar13 = NSMutableArray::firstObject(IVar14);\n NSMutableArray::rectValue(IVar13);\n local_920 = extraout_d0_11;\n FUN_100018a78();\n local_938 = pcVar81;\n pCStack_930 = pCVar77;\n local_928 = pCVar73;\n }\n local_690.field0_0x0.field0_0x0 = local_920;\n local_690.field0_0x0.field1_0x8 = (double)local_928;\n local_690.field1_0x10.field0_0x0 = (double)pCStack_930;\n local_690.field1_0x10.field1_0x8 = (double)local_938;\n local_870.field0_0x0.field1_0x8 = pdVar41[1];\n local_870.field0_0x0.field0_0x0 = *pdVar41;\n local_870.field1_0x10.field0_0x0 = pdVar41[2];\n mss_rememberFaceThinPointSets_boxes_renderTime_source_\n (param_1,(ID)pcVar38,IVar14,(AnonymousStructure0 *)&local_870,0x10007b9b8);\n local_8d0 = pcVar38;\n }\n objc_stub::count(local_968);\n objc_stub::count(IVar10);\n objc_stub::count(IVar11);\n objc_stub::count((ID)pcVar39);\n objc_stub::count((ID)pcVar38);\n __Block_object_dispose(&local_4f0,8);\n __Block_object_dispose(&local_4b0,8);\n __Block_object_dispose(local_1c0,8);\n __Block_object_dispose(&local_140,8);\n }\n else {\n local_8d0 = (cfstringStruct *)0x0;\n }\n uVar34 = objc_stub::count(0);\n if ((((bVar53) && (_CGRectIsNull(dVar84,pCVar87,pCVar88,pcVar89), (uVar34 & 1) == 0)) &&\n (_CGRectIsEmpty(dVar84,pCVar87,pCVar88,pcVar89), (uVar34 & 1) == 0)) &&\n ((dVar86 = dVar84, _CGRectGetWidth(dVar84,pCVar87,pCVar88,pcVar89),\n 2.220446049250313e-16 < dVar86 &&\n (dVar86 = dVar84, _CGRectGetHeight(dVar84,pCVar87,pCVar88,pcVar89),\n 2.220446049250313e-16 < dVar86)))) {\n local_938 = pcVar89;\n pCStack_930 = pCVar88;\n local_928 = pCVar87;\n local_920 = dVar84;\n }\n dVar62 = local_690.field1_0x10.field1_0x8;\n dVar6 = local_690.field1_0x10.field0_0x0;\n dVar66 = local_690.field0_0x0.field1_0x8;\n dVar86 = local_690.field0_0x0.field0_0x0;\n _CGRectIsNull(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8);\n if ((((((uVar34 & 1) != 0) || (_CGRectIsEmpty(dVar86,dVar66,dVar6,dVar62), (uVar34 & 1) != 0)) ||\n ((dVar64 = dVar86, _CGRectGetWidth(dVar86,dVar66,dVar6,dVar62),\n dVar64 <= 2.220446049250313e-16 ||\n (_CGRectGetHeight(dVar86,dVar66,dVar6,dVar62), dVar86 <= 2.220446049250313e-16)))) &&\n (((uVar34 = objc_stub::count((ID)local_960), 0x4c < uVar34 &&\n (_CGRectIsNull(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0)) &&\n (_CGRectIsEmpty(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0)))) &&\n ((dVar86 = local_920, _CGRectGetWidth(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86 &&\n (dVar86 = local_920, _CGRectGetHeight(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86)))) {\n local_690.field0_0x0.field0_0x0 = local_920;\n local_690.field0_0x0.field1_0x8 = (double)local_928;\n local_690.field1_0x10.field0_0x0 = (double)pCStack_930;\n local_690.field1_0x10.field1_0x8 = (double)local_938;\n }\n uVar34 = objc_stub::count((ID)local_960);\n dVar62 = local_690.field1_0x10.field1_0x8;\n dVar6 = local_690.field1_0x10.field0_0x0;\n dVar66 = local_690.field0_0x0.field1_0x8;\n dVar86 = local_690.field0_0x0.field0_0x0;\n if (((0x4c < uVar34) &&\n (_CGRectIsNull(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8),\n (uVar34 & 1) == 0)) &&\n ((_CGRectIsEmpty(dVar86,dVar66,dVar6,dVar62), (uVar34 & 1) == 0 &&\n ((((((dVar64 = dVar86, _CGRectGetWidth(dVar86,dVar66,dVar6,dVar62),\n 2.220446049250313e-16 < dVar64 &&\n (_CGRectGetHeight(dVar86,dVar66,dVar6,dVar62), 2.220446049250313e-16 < dVar86)) &&\n (_CGRectIsNull(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0)) &&\n ((_CGRectIsEmpty(local_920,local_928,pCStack_930,local_938), (uVar34 & 1) == 0 &&\n (dVar86 = local_920, _CGRectGetWidth(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86)))) &&\n (dVar86 = local_920, _CGRectGetHeight(local_920,local_928,pCStack_930,local_938),\n 2.220446049250313e-16 < dVar86)) &&\n (FUN_10002373c(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8,local_920,\n local_928,pCStack_930,local_938), (uVar34 & 1) == 0)))))) {\n _NSStringFromRect(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8);\n _NSStringFromRect(local_920,local_928,pCStack_930,local_938);\n local_928 = *(CGRect **)((ulong)&local_690 | 8);\n local_920 = local_690.field0_0x0.field0_0x0;\n local_938 = (code *)local_690.field1_0x10.field1_0x8;\n pCStack_930 = (CGRect *)local_690.field1_0x10.field0_0x0;\n }\n objc_stub::count(local_968);\n objc_stub::count(IVar10);\n objc_stub::count(0);\n objc_stub::count(local_968);\n objc_stub::count((ID)local_960);\n _NSStringFromRect(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8);\n _NSStringFromRect(local_920,local_928,pCStack_930,local_938);\n _NSStringFromRect(dVar84,pCVar87,pCVar88,pcVar89);\n _NSStringFromRect(dVar84,pCVar87,pCVar88,pcVar89);\n objc_stub::length(*(ID *)(param_1 + 0x520));\n IVar11 = local_968;\n if (uVar8 == 0 && uVar9 == 0) {\n IVar11 = 0;\n }\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n pcVar39 = (cfstringStruct *)\n applySkinSmoothingToImage_params_renderTime_faceObservations_selectedFacePoints_\n (param_1,(ID)pcVar20,&AStack_658,(AnonymousStructure0 *)&local_140,IVar11,0);\n local_9a8 = pcVar20;\n if (pcVar39 != (cfstringStruct *)0x0) {\n local_9a8 = pcVar39;\n }\n pcVar39 = local_9a8;\n FUN_100024e0c();\n if (pcVar39 != (cfstringStruct *)0x0) {\n local_9a8 = pcVar39;\n }\n if (uVar52 == 0) {\n local_a30._0_4_ = 0;\n local_9f0 = (cfstringStruct *)0x0;\n local_a40 = 0.0;\n }\n else {\n FUN_100021c7c();\n IVar11 = objc_stub::count((ID)local_8d0);\n pcVar39 = (cfstringStruct *)objc_stub::count((ID)local_960);\n pcVar38 = local_960;\n if (pcVar39 < (cfstringStruct *)0x4d) {\n pcVar39 = (cfstringStruct *)objc_stub::firstObject((ID)local_8d0);\n pcVar38 = pcVar39;\n }\n if (IVar11 < 2) {\n pcVar39 = (cfstringStruct *)objc_stub::count((ID)pcVar38);\n local_9f0 = (cfstringStruct *)0x0;\n local_a40 = 0.0;\n if (((cfstringStruct *)0x4c < pcVar39) && (2.220446049250313e-16 < local_668))\n goto LAB_10001e918;\n }\n else if (2.220446049250313e-16 < local_668) {\nLAB_10001e918:\n local_a40 = local_668;\n local_9f0 = pcVar38;\n }\n else {\n local_9f0 = (cfstringStruct *)0x0;\n local_a40 = 0.0;\n }\n if (DAT_100088f60 != -1) {\n FUN_1000545a8();\n }\n local_a30._0_4_ = (uint)DAT_100088590;\n if (((DAT_100088590 & 1) == 0) && (2.220446049250313e-16 < local_668)) {\n pcVar39 = local_9a8;\n if (IVar11 < 2) {\n IVar11 = objc_stub::count((ID)pcVar38);\n if (IVar11 < 0x4d) {\n pcVar39 = (cfstringStruct *)0x0;\n }\n else {\n FUN_100025058(AStack_658._96_8_,local_668,local_9a8,pcVar38);\n }\n }\n else {\n FUN_100024eec(AStack_658._96_8_,local_9a8,local_8d0);\n }\n if (pcVar39 != (cfstringStruct *)0x0) {\n local_9a8 = pcVar39;\n }\n }\n FUN_100021c7c();\n }\n _CGRectIsNull(local_920,local_928,pCStack_930,local_938);\n if (((((ulong)pcVar39 & 1) != 0) ||\n (_CGRectIsEmpty(local_920,local_928,pCStack_930,local_938), ((ulong)pcVar39 & 1) != 0)) ||\n (dVar86 = local_920, _CGRectGetWidth(local_920,local_928,pCStack_930,local_938),\n dVar86 <= 2.220446049250313e-16)) {\n bVar53 = false;\n }\n else {\n dVar86 = local_920;\n _CGRectGetHeight(local_920,local_928,pCStack_930,local_938);\n bVar53 = 2.220446049250313e-16 < dVar86;\n }\n local_870.field0_0x0.field0_0x0 = dVar83;\n local_870.field0_0x0.field1_0x8 = (double)pCVar65;\n local_870.field1_0x10.field0_0x0 = (double)pCVar71;\n local_870.field1_0x10.field1_0x8 = (double)pcVar85;\n objc_stub::lock(*(ID *)(param_1 + 0x20));\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n bVar7 = mss_timeLocalFaceReferenceForRenderTime_pointsOut_boxOut_detectionTimeOut_outputTimeOut_usedHistoryOut_\n (param_1,(AnonymousStructure0 *)&local_140,(ID *)0x0,&local_870,\n (AnonymousStructure0 *)0x0,(AnonymousStructure0 *)0x0,(bool *)0x0);\n dVar6 = local_870.field1_0x10.field1_0x8;\n dVar66 = local_870.field1_0x10.field0_0x0;\n dVar86 = local_870.field0_0x0.field1_0x8;\n dVar83 = local_870.field0_0x0.field0_0x0;\n uVar34 = (ulong)bVar7;\n if (((bVar7 == 0) ||\n (_CGRectIsNull(local_870.field0_0x0.field0_0x0,local_870.field0_0x0.field1_0x8,\n local_870.field1_0x10.field0_0x0,local_870.field1_0x10.field1_0x8),\n (uVar34 & 1) != 0)) ||\n ((_CGRectIsEmpty(dVar83,dVar86,dVar66,dVar6), (uVar34 & 1) != 0 ||\n (dVar62 = dVar83, _CGRectGetWidth(dVar83,dVar86,dVar66,dVar6), dVar62 <= 2.220446049250313e-16\n )))) {\n bVar49 = false;\n }\n else {\n _CGRectGetHeight(dVar83,dVar86,dVar66,dVar6);\n bVar49 = 2.220446049250313e-16 < dVar83;\n }\n objc_stub::unlock(*(ID *)(param_1 + 0x20));\n pcVar85 = pcVar89;\n pCVar65 = pCVar88;\n pCVar71 = pCVar87;\n dVar83 = dVar84;\n if ((!bVar5) &&\n (pcVar85 = local_908, pCVar65 = local_900, pCVar71 = local_8f8, dVar83 = local_8f0, !bVar1)) {\n local_8f8 = local_928;\n local_8f0 = local_920;\n local_908 = local_938;\n local_900 = pCStack_930;\n pcVar85 = local_908;\n pCVar65 = local_900;\n pCVar71 = local_8f8;\n dVar83 = local_8f0;\n if ((!bVar53) &&\n (pcVar85 = pcVar89, pCVar65 = pCVar88, pCVar71 = pCVar87, dVar83 = dVar84, bVar49)) {\n local_8f8 = (CGRect *)local_870.field0_0x0.field1_0x8;\n local_8f0 = local_870.field0_0x0.field0_0x0;\n local_908 = (code *)local_870.field1_0x10.field1_0x8;\n local_900 = (CGRect *)local_870.field1_0x10.field0_0x0;\n pcVar85 = local_908;\n pCVar65 = local_900;\n pCVar71 = local_8f8;\n dVar83 = local_8f0;\n }\n }\n local_8f0 = dVar83;\n local_8f8 = pCVar71;\n local_900 = pCVar65;\n local_908 = pcVar85;\n if (local_944 == 0) {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n FUN_100025c0c(*(undefined8 *)(param_1 + 8),0,&local_140);\n local_968 = 0;\n puVar24 = (undefined *)0x0;\n }\n else {\n FUN_1000230cc();\n IVar11 = objc_stub::count(local_968);\n IVar13 = objc_stub::count(IVar10);\n puVar24 = (undefined *)\n NSMutableArray::arrayWithCapacity_\n ((ID)&_OBJC_CLASS___NSMutableArray,IVar11 + IVar13 + 1);\n _CGRectStandardize(dVar84,pCVar87,pCVar88,pcVar89);\n _CGRectIntersection();\n FUN_1000259f8(puVar24,0x18);\n uStack_488 = 0;\n local_490 = (code *)0x0;\n uStack_478 = 0;\n uStack_480 = 0;\n ppcStack_4a8 = (cfstringStruct **)0x0;\n local_4b0 = (cfstringStruct *)0x0;\n local_498 = (code *)0x0;\n local_4a0 = (long *)0x0;\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_\n (local_968,&local_4b0,&local_140,0x10);\n if (IVar11 != 0) {\n lVar57 = *local_4a0;\n do {\n IVar13 = 0;\n do {\n if (*local_4a0 != lVar57) {\n _objc_enumerationMutation(local_968);\n }\n FUN_100023580(ppcStack_4a8[IVar13]);\n FUN_1000259f8(puVar24,0x18);\n IVar13 = IVar13 + 1;\n } while (IVar11 != IVar13);\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_\n (local_968,&local_4b0,&local_140,0x10);\n } while (IVar11 != 0);\n }\n uStack_4c8 = 0;\n local_4d0 = 0;\n uStack_4b8 = 0;\n uStack_4c0 = 0;\n puStack_4e8 = (ulong *)0x0;\n local_4f0 = 0;\n local_4d8 = 0;\n local_4e0 = (long *)0x0;\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_(IVar10,&local_4f0,local_1c0,0x10)\n ;\n if (IVar11 != 0) {\n lVar57 = *local_4e0;\n do {\n IVar13 = 0;\n do {\n if (*local_4e0 != lVar57) {\n _objc_enumerationMutation(IVar10);\n }\n if (puStack_4e8[IVar13] != 0) {\n objc_stub::boundingBox(puStack_4e8[IVar13],dVar84,pCVar87,pCVar88,pcVar89);\n _CGRectStandardize();\n _CGRectIntersection();\n }\n FUN_1000259f8(puVar24,0x18);\n IVar13 = IVar13 + 1;\n } while (IVar11 != IVar13);\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_\n (IVar10,&local_4f0,local_1c0,0x10);\n } while (IVar11 != 0);\n }\n uVar34 = objc_stub::count((ID)puVar24);\n puVar27 = (undefined *)0x0;\n if (uVar34 != 0) {\n puVar27 = puVar24;\n }\n if ((!bVar5) &&\n (((((pCVar65 = local_900, pcVar85 = local_908, _CGRectIsNull(local_8f0,local_8f8),\n (uVar34 & 1) != 0 ||\n (pCVar65 = local_900, pcVar85 = local_908, _CGRectIsEmpty(local_8f0,local_8f8),\n (uVar34 & 1) != 0)) ||\n (dVar83 = local_8f0, pCVar65 = local_900, pcVar85 = local_908,\n _CGRectGetWidth(local_8f0,local_8f8), dVar83 <= 2.220446049250313e-16)) ||\n (dVar83 = local_8f0, pCVar65 = local_900, pcVar85 = local_908,\n _CGRectGetHeight(local_8f0,local_8f8), dVar83 <= 2.220446049250313e-16)) &&\n (((char)AStack_658.field32_0xf0 == '\\x01' &&\n (IVar10 = objc_stub::count((ID)puVar27), IVar10 != 0)))))) {\n puVar24 = puVar27;\n dVar83 = (double)AStack_658._248_8_;\n pCVar71 = (CGRect *)AStack_658._256_8_;\n FUN_10002555c();\n iVar45 = (int)puVar24;\n FUN_1000174d8();\n if (iVar45 != 0) {\n local_908 = pcVar85;\n local_900 = pCVar65;\n local_8f8 = pCVar71;\n local_8f0 = dVar83;\n }\n }\n puVar24 = PTR____NSArray0__struct_1000780d8;\n if (puVar27 != (undefined *)0x0) {\n puVar24 = puVar27;\n }\n self = (undefined *)NSMutableArray::arrayWithArray_((ID)&_OBJC_CLASS___NSMutableArray,puVar24);\n puVar24 = self;\n if (bVar53) {\n FUN_1000259f8(local_920,local_928,pCStack_930,local_938,self,0x18);\n }\n _CGRectIsNull(local_8f0,local_8f8,local_900,local_908);\n if (((((ulong)puVar24 & 1) == 0) &&\n (_CGRectIsEmpty(local_8f0,local_8f8,local_900,local_908), ((ulong)puVar24 & 1) == 0)) &&\n ((dVar83 = local_8f0, _CGRectGetWidth(local_8f0,local_8f8,local_900,local_908),\n 2.220446049250313e-16 < dVar83 &&\n (dVar83 = local_8f0, _CGRectGetHeight(local_8f0,local_8f8,local_900,local_908),\n 2.220446049250313e-16 < dVar83)))) {\n FUN_1000259f8(local_8f0,local_8f8,local_900,local_908,self,0x18);\n }\n uVar34 = objc_stub::count((ID)self);\n puVar24 = puVar27;\n if (uVar34 != 0) {\n puVar24 = self;\n }\n if (bVar5) {\n local_968 = 0;\n }\n else {\n _CGRectIsNull(local_8f0,local_8f8,local_900,local_908);\n if (((((uVar34 & 1) != 0) ||\n (_CGRectIsEmpty(local_8f0,local_8f8,local_900,local_908), (uVar34 & 1) != 0)) ||\n (dVar83 = local_8f0, _CGRectGetWidth(local_8f0,local_8f8,local_900,local_908),\n dVar83 <= 2.220446049250313e-16)) ||\n (dVar83 = local_8f0, _CGRectGetHeight(local_8f0,local_8f8,local_900,local_908),\n dVar83 <= 2.220446049250313e-16)) {\nLAB_10001efc4:\n local_968 = 0;\n }\n else {\n dVar83 = local_8f0;\n pCVar65 = local_8f8;\n pCVar71 = local_900;\n pcVar85 = local_908;\n FUN_100025428(local_8f0,local_8f8,local_900,local_908,AStack_658.field31_0xe8);\n _CGRectIsNull();\n if (((uVar34 & 1) != 0) ||\n (_CGRectIsEmpty(dVar83,pCVar65,pCVar71,pcVar85), (uVar34 & 1) != 0)) goto LAB_10001efc4;\n _CGRectStandardize(dVar83,pCVar65,pCVar71,pcVar85);\n _CGRectIntersection();\n _CGRectIsNull();\n if (((uVar34 & 1) != 0) ||\n (_CGRectIsEmpty(dVar83,pCVar65,pCVar71,pcVar85), (uVar34 & 1) != 0)) goto LAB_10001efc4;\n local_140.field0_0x0.field0_0x0 =\n (double)NSValue::valueWithRect_\n ((ID)&_OBJC_CLASS___NSValue,dVar83,pCVar65,pCVar71,pcVar85);\n local_968 = NSArray::arrayWithObjects_count_((ID)&_OBJC_CLASS___NSArray,&local_140,1);\n }\n FUN_10000f5a4(IVar12,IVar15);\n if ((IVar12 - 1 & 0xfffffffffffffffa) != 0) {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n FUN_100025c0c(*(undefined8 *)(param_1 + 8),puVar27,&local_140);\n }\n }\n objc_stub::count((ID)puVar27);\n uVar34 = objc_stub::count((ID)puVar24);\n _CGRectIsNull(local_8f0,local_8f8,local_900,local_908);\n if ((((uVar34 & 1) == 0) &&\n (_CGRectIsEmpty(local_8f0,local_8f8,local_900,local_908), (uVar34 & 1) == 0)) &&\n (dVar83 = local_8f0, _CGRectGetWidth(local_8f0,local_8f8,local_900,local_908),\n 2.220446049250313e-16 < dVar83)) {\n _CGRectGetHeight(local_8f0,local_8f8,local_900,local_908);\n }\n _NSStringFromRect(local_8f0,local_8f8,local_900,local_908);\n }\n IVar10 = objc_stub::count((ID)puVar24);\n if ((IVar10 == 0) && (IVar10 = objc_stub::count(0), IVar10 == 0)) {\n local_8e8 = 0;\n }\n else {\n IVar10 = objc_stub::count((ID)puVar24);\n IVar11 = objc_stub::count(0);\n local_8e8 = NSMutableArray::arrayWithCapacity_\n ((ID)&_OBJC_CLASS___NSMutableArray,IVar11 + IVar10);\n IVar10 = objc_stub::count((ID)puVar24);\n if (IVar10 != 0) {\n NSMutableArray::addObjectsFromArray_(local_8e8,puVar24);\n }\n IVar10 = objc_stub::count(0);\n if (IVar10 != 0) {\n NSMutableArray::addObjectsFromArray_(local_8e8,0);\n }\n }\n if (local_944 == 0) {\n local_140.field0_0x0.field1_0x8 = pdVar41[1];\n local_140.field0_0x0.field0_0x0 = *pdVar41;\n local_140.field1_0x10.field0_0x0 = pdVar41[2];\n FUN_100025c0c(*(undefined8 *)(param_1 + 8),0,&local_140);\n local_8e8 = 0;\n local_968 = 0;\n puVar24 = (undefined *)0x0;\n local_908 = pcVar89;\n local_900 = pCVar88;\n local_8f8 = pCVar87;\n local_8f0 = dVar84;\n }\n local_1c0 = (undefined1 [8])*pdVar41;\n uVar52 = *(uint *)((long)pdVar41 + 0xc);\n puStack_1b8 = (undefined1 *)CONCAT44(puStack_1b8._4_4_,*(undefined4 *)(pdVar41 + 1));\n plVar46 = (long *)pdVar41[2];\n if (*(long *)(param_1 + 8) == 0) {\n IVar10 = 0;\n }\n else {\n IVar10 = NSValue::valueWithNonretainedObject_((ID)&_OBJC_CLASS___NSValue);\n }\n puVar27 = puVar24;\n FUN_10003b9a8();\n IVar12 = 0;\n FUN_10003b9a8();\n IVar11 = local_968;\n FUN_10003b9a8();\n dVar83 = local_8f0;\n pCVar65 = local_8f8;\n pCVar73 = local_900;\n pcVar85 = local_908;\n FUN_100018a78(local_8f0,local_8f8,local_900,local_908);\n dVar86 = dVar84;\n pCVar71 = pCVar87;\n pCVar77 = pCVar88;\n pcVar81 = pcVar89;\n FUN_100018a78();\n IVar13 = objc_stub::count((ID)puVar27);\n if ((((IVar13 != 0) || (IVar13 = objc_stub::count(IVar12), IVar13 != 0)) ||\n (uVar34 = objc_stub::count(IVar11), uVar34 != 0)) ||\n (((_CGRectIsNull(dVar83,pCVar65,pCVar73,pcVar85), (uVar34 & 1) == 0 &&\n (_CGRectIsEmpty(dVar83,pCVar65,pCVar73,pcVar85), (uVar34 & 1) == 0)) &&\n ((dVar66 = dVar83, _CGRectGetWidth(dVar83,pCVar65,pCVar73,pcVar85),\n 2.220446049250313e-16 < dVar66 &&\n (dVar66 = dVar83, _CGRectGetHeight(dVar83,pCVar65,pCVar73,pcVar85),\n 2.220446049250313e-16 < dVar66)))))) {\n bVar53 = true;\n }\n else {\n _CGRectIsNull(dVar86,pCVar71,pCVar77,pcVar81);\n if ((((uVar34 & 1) != 0) || (_CGRectIsEmpty(dVar86,pCVar71,pCVar77,pcVar81), (uVar34 & 1) != 0))\n || (dVar66 = dVar86, _CGRectGetWidth(dVar86,pCVar71,pCVar77,pcVar81),\n dVar66 <= 2.220446049250313e-16)) {\n bVar53 = false;\n }\n else {\n dVar66 = dVar86;\n _CGRectGetHeight(dVar86,pCVar71,pCVar77,pcVar81);\n bVar53 = 2.220446049250313e-16 < dVar66;\n }\n }\n if (DAT_100088fc8 != -1) {\n FUN_1000545cc();\n }\n IVar13 = DAT_100088fc0;\n objc_stub::lock(DAT_100088fc0);\n if (DAT_100088fd8 != -1) {\n FUN_1000545f0();\n }\n IVar14 = DAT_100088fd0;\n if (bVar53) {\n IVar21 = NSMutableDictionary::dictionary((ID)&_OBJC_CLASS___NSMutableDictionary);\n IVar22 = objc_stub::count((ID)puVar27);\n IVar15 = 0;\n if (IVar22 != 0) {\n IVar15 = NSMutableDictionary::setObject_forKeyedSubscript_(IVar21,puVar27,&cf_faceBoxes);\n }\n _CGRectIsNull(dVar83,pCVar65,pCVar73,pcVar85);\n if (((((IVar15 & 1) == 0) && (_CGRectIsEmpty(dVar83,pCVar65,pCVar73,pcVar85), (IVar15 & 1) == 0)\n ) && (dVar66 = dVar83, _CGRectGetWidth(dVar83,pCVar65,pCVar73,pcVar85),\n 2.220446049250313e-16 < dVar66)) &&\n (dVar66 = dVar83, _CGRectGetHeight(dVar83,pCVar65,pCVar73,pcVar85),\n 2.220446049250313e-16 < dVar66)) {\n IVar15 = NSValue::valueWithRect_((ID)&_OBJC_CLASS___NSValue,dVar83,pCVar65,pCVar73,pcVar85);\n NSMutableDictionary::setObject_forKeyedSubscript_(IVar21,IVar15,&cf_faceSelectedBox);\n }\n IVar22 = objc_stub::count(IVar12);\n IVar15 = 0;\n if (IVar22 != 0) {\n IVar15 = NSMutableDictionary::setObject_forKeyedSubscript_(IVar21,IVar12,&cf_trackBoxes);\n }\n _CGRectIsNull(dVar86,pCVar71,pCVar77,pcVar81);\n if ((((IVar15 & 1) == 0) && (_CGRectIsEmpty(dVar86,pCVar71,pCVar77,pcVar81), (IVar15 & 1) == 0))\n && ((dVar83 = dVar86, _CGRectGetWidth(dVar86,pCVar71,pCVar77,pcVar81),\n 2.220446049250313e-16 < dVar83 &&\n (dVar83 = dVar86, _CGRectGetHeight(dVar86,pCVar71,pCVar77,pcVar81),\n 2.220446049250313e-16 < dVar83)))) {\n IVar15 = NSValue::valueWithRect_((ID)&_OBJC_CLASS___NSValue,dVar86,pCVar71,pCVar77,pcVar81);\n NSMutableDictionary::setObject_forKeyedSubscript_(IVar21,IVar15,&cf_trackSelectedBox);\n }\n IVar15 = objc_stub::count(IVar11);\n if (IVar15 != 0) {\n NSMutableDictionary::setObject_forKeyedSubscript_(IVar21,IVar11,&cf_guardBoxes);\n }\n if ((uVar52 & 0x1d) == 1) {\n local_140.field0_0x0.field0_0x0 = (double)local_1c0;\n local_140.field0_0x0.field1_0x8 = (double)CONCAT44(uVar52,(int)puStack_1b8);\n local_140.field1_0x10.field0_0x0 = (double)plVar46;\n _CMTimeGetSeconds(&local_140);\n }\n IVar15 = NSNumber::numberWithDouble_((ID)&_OBJC_CLASS___NSNumber);\n NSMutableDictionary::setObject_forKeyedSubscript_(IVar21,IVar15,&cf_renderTime);\n IVar15 = NSMutableDictionary::copy(IVar21);\n if (IVar10 == 0) {\n IVar10 = 0;\n uVar79 = extraout_d0_14;\n }\n else {\n objc_stub::setObject_forKey_(IVar14,IVar15,IVar10);\n uVar79 = extraout_d0_15;\n }\n DAT_100088fa8 = IVar15;\n DAT_100088fb0 = IVar10;\n _CFAbsoluteTimeGetCurrent();\n DAT_100088fb8 = uVar79;\n objc_stub::count((ID)puVar27);\n objc_stub::count(IVar12);\n objc_stub::count(IVar11);\n if ((uVar52 & 0x1d) == 1) {\n local_140.field0_0x0.field0_0x0 = (double)local_1c0;\n local_140.field0_0x0.field1_0x8 = (double)CONCAT44(uVar52,(int)puStack_1b8);\n local_140.field1_0x10.field0_0x0 = (double)plVar46;\n _CMTimeGetSeconds(&local_140);\n }\n }\n else {\n if (IVar10 != 0) {\n objc_stub::removeObjectForKey_(DAT_100088fd0,IVar10);\n }\n DAT_100088fa8 = 0;\n DAT_100088fb0 = 0;\n DAT_100088fb8 = 0;\n }\n objc_stub::unlock(IVar13);\n if (local_944 != 0) {\n objc_stub::count((ID)local_960);\n }\n IVar10 = objc_stub::deviceRegistryID(param_3);\n if (DAT_100088ff0 != -1) {\n FUN_100054614();\n }\n IVar11 = NSNumber::numberWithUnsignedLongLong_((ID)&_OBJC_CLASS___NSNumber,IVar10);\n objc_stub::lock(DAT_100088fe8);\n local_8c8 = objc_stub::objectForKey_(DAT_100088fe0,IVar11);\n if (local_8c8 == 0) {\n IVar12 = FxMTLDeviceCache::deviceCache((ID)&objc::class_t::FxMTLDeviceCache);\n IVar10 = FxMTLDeviceCache::deviceWithRegistryID_(IVar12,IVar10);\n if (IVar10 == 0) {\nLAB_10001f698:\n objc_stub::unlock(DAT_100088fe8);\n }\n else {\n if (DAT_100088f38 != -1) {\n FUN_100054638();\n }\n IVar10 = CIContext::contextWithMTLDevice_options_\n ((ID)&_OBJC_CLASS___CIContext,IVar10,DAT_100088f30);\n if (IVar10 == 0) goto LAB_10001f698;\n objc_stub::setObject_forKey_(DAT_100088fe0,IVar10,IVar11);\n local_8c8 = objc_stub::objectForKey_(DAT_100088fe0,IVar11);\n objc_stub::unlock(DAT_100088fe8);\n if (local_8c8 != 0) goto LAB_10001f6c8;\n }\n if (DAT_100088f28 != -1) {\n FUN_10005465c();\n }\n local_8c8 = DAT_100088f20;\n if (DAT_100088f20 != 0) goto LAB_10001f6c8;\n if (pIVar42 != (ID *)0x0) {\n pcVar20 = &cf_UnabletocreateCIContext;\n FUN_10001b7ac();\n goto LAB_10002120c;\n }\nLAB_1000212fc:\n bVar7 = 0;\n }\n else {\n objc_stub::unlock(DAT_100088fe8);\nLAB_10001f6c8:\n if ((IVar17 == 0) || (local_8d8 == 0)) {\n uVar8 = 0;\n uVar52 = 0;\n if (local_8d8 != 0) goto LAB_10001f708;\nLAB_10001f71c:\n IVar10 = FxMTLDeviceCache::MTLPixelFormatForImageTile_\n ((ID)&objc::class_t::FxMTLDeviceCache,param_3);\n }\n else {\n IVar10 = objc_stub::width(local_8d8);\n if ((IVar10 == 0) || (IVar10 = objc_stub::height(local_8d8), IVar10 == 0)) {\n uVar52 = 0;\n }\n else {\n IVar10 = objc_stub::usage(local_8d8);\n uVar52 = (uint)(IVar10 >> 2) & 1;\n }\nLAB_10001f708:\n uVar8 = uVar52;\n IVar10 = objc_stub::pixelFormat(local_8d8);\n if (IVar10 == 0) goto LAB_10001f71c;\n IVar10 = objc_stub::pixelFormat(local_8d8);\n }\n IVar11 = IVar10;\n if (puVar19 != (undefined8 *)0x0) {\n IVar11 = FxMTLDeviceCache::MTLPixelFormatForImageTile_\n ((ID)&objc::class_t::FxMTLDeviceCache,param_3);\n }\n if (((uVar8 == 0) && (local_8d8 = 0, IVar17 != 0)) && (puVar19 != (undefined8 *)0x0)) {\n puVar25 = puVar19;\n _IOSurfaceGetWidth();\n puVar26 = puVar19;\n _IOSurfaceGetHeight();\n local_8d8 = 0;\n IVar10 = IVar11;\n if ((puVar25 != (undefined8 *)0x0) && (puVar26 != (undefined8 *)0x0)) {\n IVar11 = MTLTextureDescriptor::texture2DDescriptorWithPixelFormat_width_height_mipmapped_\n ((ID)&_OBJC_CLASS___MTLTextureDescriptor,IVar11,puVar25,puVar26,0);\n MTLTextureDescriptor::setUsage_(IVar11,7);\n MTLTextureDescriptor::setStorageMode_(IVar11,0);\n local_8d8 = objc_stub::newTextureWithDescriptor_iosurface_plane_(IVar17,IVar11,puVar19,0);\n }\n }\n uVar2 = 0x73;\n if (IVar10 != 0) {\n uVar2 = IVar10;\n }\n objc_stub::count((ID)local_8d0);\n IVar11 = objc_stub::count((ID)local_8d0);\n if (IVar11 == 0) {\n IVar11 = objc_stub::count((ID)local_9f0);\n uVar52 = (uint)(0x4c < IVar11);\n }\n else {\n uStack_888 = 0;\n local_890 = 0;\n uStack_878 = 0;\n uStack_880 = 0;\n lStack_8a8 = 0;\n local_8b0 = 0;\n uStack_898 = 0;\n local_8a0 = (long *)0x0;\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_\n ((ID)local_8d0,&local_8b0,auStack_470,0x10);\n if (IVar11 == 0) {\n uVar52 = 0;\n }\n else {\n lVar57 = *local_8a0;\n do {\n IVar12 = 0;\n do {\n if (*local_8a0 != lVar57) {\n _objc_enumerationMutation(local_8d0);\n }\n IVar13 = objc_stub::count(*(ID *)(lStack_8a8 + IVar12 * 8));\n if (0x4c < IVar13) {\n uVar52 = 1;\n goto LAB_10001f8c4;\n }\n IVar12 = IVar12 + 1;\n } while (IVar11 != IVar12);\n IVar11 = objc_stub::countByEnumeratingWithState_objects_count_\n ((ID)local_8d0,&local_8b0,auStack_470,0x10);\n uVar52 = 0;\n } while (IVar11 != 0);\n }\n }\nLAB_10001f8c4:\n uVar8 = 0;\n if (2.220446049250313e-16 < local_a40) {\n uVar8 = (uint)local_a30;\n }\n if (!bVar5) {\n objc_stub::count(0);\n }\n objc_stub::count((ID)local_960);\n objc_stub::count((ID)local_8d0);\n IVar11 = objc_stub::count((ID)local_8d0);\n pcVar39 = local_9f0;\n if (IVar11 != 0) {\n pcVar39 = (cfstringStruct *)objc_stub::firstObject((ID)local_8d0);\n }\n objc_stub::count((ID)pcVar39);\n FUN_1000181ec(local_920,local_928,pCStack_930,local_938);\n FUN_1000181ec(dVar84,pCVar87,pCVar88,pcVar89);\n puVar27 = puVar24;\n FUN_100025eec();\n local_960 = (cfstringStruct *)local_8f0;\n local_a10 = local_8f8;\n local_9f8 = local_900;\n local_a00 = local_908;\n FUN_1000260bc();\n local_8e0 = 0;\n FUN_100025eec();\n local_a20 = dVar84;\n local_a38 = pCVar87;\n local_a28 = pCVar88;\n local_a30 = pcVar89;\n FUN_1000260bc();\n local_958 = local_968;\n FUN_100025eec();\n if (local_944 == 0) {\n local_a58 = 0;\n local_a50 = (undefined *)0x0;\n local_8e0 = 0;\n local_958 = 0;\n puVar27 = (undefined *)0x0;\n local_a78 = pcVar89;\n pCStack_a70 = pCVar88;\n local_a68 = pCVar87;\n dStack_a60 = dVar84;\n local_a38 = pCVar87;\n local_a30 = pcVar89;\n local_a28 = pCVar88;\n local_a20 = dVar84;\n local_a10 = pCVar87;\n local_a00 = pcVar89;\n local_9f8 = pCVar88;\n local_960 = (cfstringStruct *)dVar84;\n }\n else {\n local_a68 = local_8f8;\n dStack_a60 = local_8f0;\n local_a78 = local_908;\n pCStack_a70 = local_900;\n local_a58 = local_968;\n local_a50 = puVar24;\n }\n IVar11 = objc_stub::count((ID)puVar27);\n IVar12 = objc_stub::count(local_8e0);\n IVar13 = objc_stub::count(local_958);\n IVar14 = objc_stub::count((ID)local_a50);\n IVar15 = objc_stub::count(0);\n IVar21 = objc_stub::count(local_a58);\n objc_stub::count((ID)puVar24);\n objc_stub::count(0);\n objc_stub::count(local_968);\n objc_stub::count(local_8e8);\n _NSStringFromRect(local_8f0,local_8f8,local_900,local_908);\n _NSStringFromRect(dVar84,pCVar87,pCVar88,pcVar89);\n _NSStringFromRect(local_960,local_a10,local_9f8,local_a00);\n _NSStringFromRect(local_a20,local_a38,local_a28,local_a30);\n _NSStringFromRect(dStack_a60,local_a68,pCStack_a70,local_a78);\n _NSStringFromRect(dVar84,pCVar87,pCVar88,pcVar89);\n if (IVar17 == 0 || local_8d8 == 0) {\nLAB_10001fe4c:\n bVar5 = false;\n }\n else {\n FUN_100021c7c();\n IVar22 = objc_stub::width(local_8d8);\n IVar23 = objc_stub::height(local_8d8);\n IVar28 = objc_stub::width(local_8d8);\n IVar29 = objc_stub::height(local_8d8);\n FUN_100026200(dVar80,dVar70,dVar76,dVar75,IVar28,IVar29);\n dVar83 = (double)IVar22;\n pcVar85 = (code *)(double)IVar23;\n uVar9 = (uint)IVar28;\n pcVar39 = local_9a8;\n if (uVar9 != 0) {\n FUN_100026294(dVar80,dVar70,dVar76,dVar75,0,0,dVar83,pcVar85,local_9a8,1);\n }\n uVar54 = uVar8 & uVar52;\n uVar51 = 0;\n if (IVar12 + IVar11 + IVar13 != 0) {\n uVar51 = local_944;\n }\n uVar51 = uVar51 & (uVar54 ^ 1);\n if (uVar51 == 1) {\n IVar11 = objc_stub::count((ID)puVar27);\n if ((IVar11 != 0) &&\n (IVar11 = IVar28,\n FUN_100026360(dVar80,dVar70,dVar76,dVar75,0,0,dVar83,pcVar85,IVar28,puVar27,0,1),\n IVar11 != 0)) {\n IVar11 = objc_stub::imageByCompositingOverImage_(IVar11,pcVar39);\n pcVar38 = (cfstringStruct *)objc_stub::imageByCroppingToRect_(IVar11,0,0,dVar83,pcVar85);\n if (pcVar38 != (cfstringStruct *)0x0) {\n pcVar39 = pcVar38;\n }\n }\n IVar11 = objc_stub::count(local_8e0);\n if ((IVar11 != 0) &&\n (IVar11 = IVar28,\n FUN_100026360(dVar80,dVar70,dVar76,dVar75,0,0,dVar83,pcVar85,IVar28,local_8e0,1,0),\n IVar11 != 0)) {\n IVar11 = objc_stub::imageByCompositingOverImage_(IVar11,pcVar39);\n pcVar38 = (cfstringStruct *)objc_stub::imageByCroppingToRect_(IVar11,0,0,dVar83,pcVar85);\n if (pcVar38 != (cfstringStruct *)0x0) {\n pcVar39 = pcVar38;\n }\n }\n IVar11 = objc_stub::count(local_958);\n if ((IVar11 != 0) &&\n (FUN_100026ab4(dVar80,dVar70,dVar76,dVar75,0,0,dVar83,pcVar85,IVar28,local_958),\n IVar28 != 0)) {\n IVar11 = objc_stub::imageByCompositingOverImage_(IVar28,pcVar39);\n pcVar38 = (cfstringStruct *)objc_stub::imageByCroppingToRect_(IVar11,0,0,dVar83,pcVar85);\n if (pcVar38 != (cfstringStruct *)0x0) {\n pcVar39 = pcVar38;\n }\n }\n }\n FUN_1000270cc(0,0,dVar83,pcVar85);\n if ((uVar54 & (local_940 != 0 && local_9a8 == pcVar20)) == 1) {\n IVar11 = objc_stub::width(local_940);\n IVar12 = objc_stub::width(local_8d8);\n if (IVar11 != IVar12) goto LAB_10001fd90;\n IVar11 = objc_stub::height(local_940);\n IVar12 = objc_stub::height(local_8d8);\n uVar9 = uVar9 ^ 1;\n if (IVar11 != IVar12) {\n uVar9 = 1;\n }\n if (uVar51 != 0 || (uVar9 & 1) != 0) goto LAB_10001fd90;\n _CGRectEqualToRect(dVar68,pCVar60,pCVar69,pcVar61,dVar80,dVar70,dVar76,dVar75);\n uVar9 = (uint)IVar12;\n }\n else {\nLAB_10001fd90:\n uVar9 = 0;\n }\n IVar11 = objc_stub::deviceRegistryID(param_3);\n IVar11 = FxMTLDeviceCache::commandQueueWithRegistryID_pixelFormat_(IVar16,IVar11,IVar10);\n if (IVar11 == 0) goto LAB_10001fe4c;\n IVar12 = objc_stub::commandBuffer(IVar11);\n objc_stub::enqueue(IVar12);\n pcVar38 = pcVar39;\n pcVar61 = pcVar85;\n FUN_1000271d8(0,0,dVar83);\n IVar13 = objc_stub::width(local_8d8);\n IVar22 = objc_stub::height(local_8d8);\n IVar13 = MTLTextureDescriptor::texture2DDescriptorWithPixelFormat_width_height_mipmapped_\n ((ID)&_OBJC_CLASS___MTLTextureDescriptor,uVar2,IVar13,IVar22,0);\n MTLTextureDescriptor::setUsage_(IVar13,7);\n MTLTextureDescriptor::setStorageMode_(IVar13,2);\n IVar22 = objc_stub::newTextureWithDescriptor_(IVar17,IVar13);\n if ((uVar54 ^ 1) == 0 && (uVar9 & 1) == 0) {\n local_8e8 = objc_stub::newTextureWithDescriptor_(IVar17,IVar13);\n }\n else {\n local_8e8 = 0;\n }\n if ((IVar22 == 0) == 0 && (uVar9 & 1) == 0) {\n pcVar61 = pcVar85;\n objc_stub::render_toMTLTexture_commandBuffer_bounds_colorSpace_\n (local_8c8,0,0,dVar83,pcVar38,IVar22,IVar12,local_978);\n }\n if (local_8e8 != 0) {\n pcVar61 = pcVar85;\n objc_stub::render_toMTLTexture_commandBuffer_bounds_colorSpace_\n (local_8c8,0,0,dVar83,pcVar39,local_8e8,IVar12,local_978);\n }\n local_4f0 = 0;\n if (IVar22 == 0) {\n bVar53 = false;\n bVar1 = false;\n pcVar39 = (cfstringStruct *)0x0;\n }\n else {\n if ((uVar52 & uVar8) == 1) {\n IVar13 = objc_stub::count((ID)local_8d0);\n pcVar61 = pcVar59;\n if (IVar13 < 2) {\n pcVar39 = local_9f0;\n FUN_1000274d0(dVar67,pCVar74,pCVar58,pcVar59,dVar80,dVar70,dVar76,dVar75);\n IVar13 = objc_stub::length((ID)pcVar39);\n local_4f0 = (ulong)(0x267 < IVar13);\n }\n else {\n pcVar39 = local_8d0;\n FUN_100027304(dVar67,pCVar74,pCVar58,pcVar59,dVar80,dVar70,dVar76,dVar75,local_8d0,\n &local_4f0);\n }\n }\n else {\n pcVar39 = (cfstringStruct *)0x0;\n }\n if (uVar54 == 0) {\n bVar5 = false;\n pcVar30 = (cfstringStruct *)0x0;\n pcVar32 = (cfstringStruct *)0x0;\n }\n else {\n IVar13 = objc_stub::length((ID)pcVar39);\n pcVar30 = (cfstringStruct *)0x0;\n bVar5 = false;\n pcVar32 = pcVar30;\n if ((0x267 < IVar13) && (pcVar32 = (cfstringStruct *)0x0, local_4f0 != 0)) {\n bVar5 = true;\n pcVar30 = pcVar39;\n pcVar32 = (cfstringStruct *)(local_4f0 * 0x4d);\n }\n }\n IVar13 = objc_stub::deviceRegistryID(param_3);\n IVar13 = FxMTLDeviceCache::pipelineStateWithRegistryID_pixelFormat_(IVar16,IVar13,IVar10);\n if (IVar13 == 0) {\n bVar53 = false;\n bVar1 = false;\n }\n else {\n uVar34 = local_4f0;\n if (local_4f0 < 2) {\n uVar34 = 1;\n }\n dVar86 = local_a40 * (double)AStack_658._96_8_;\n dVar68 = 1.0;\n if (dVar86 <= 1.0) {\n dVar68 = dVar86;\n }\n uVar79 = 0;\n dVar66 = 0.0;\n if (0.0 <= dVar86) {\n dVar66 = dVar68;\n }\n dVar68 = dVar66;\n FUN_1000279f4(&local_4b0);\n FUN_100027bbc();\n IVar17 = objc_stub::length((ID)pcVar39);\n if (0x267 < IVar17) {\n objc_stub::bytes((ID)pcVar39);\n uVar3 = local_4f0;\n if (local_4f0 < 2) {\n uVar3 = 1;\n }\n uVar63 = extraout_d0_16;\n FUN_100027c34(pcVar39,uVar3 * 0x4d);\n FUN_1000181ec(local_690.field0_0x0.field0_0x0,local_690.field0_0x0.field1_0x8,\n local_690.field1_0x10.field0_0x0,local_690.field1_0x10.field1_0x8);\n FUN_1000181ec(local_920,local_928,pCStack_930,local_938);\n FUN_1000181ec(uVar63,dVar68,uVar79,pcVar61);\n }\n if ((bVar5) &&\n (IVar17 = objc_stub::length((ID)pcVar30), (ulong)((long)pcVar32 << 3) <= IVar17)) {\n if (uVar9 == 0) {\nLAB_10002052c:\n IVar17 = IVar22;\n if (local_8e8 != 0) {\n IVar17 = local_8e8;\n }\n uVar52 = 0;\n if (local_8e8 == 0) {\n uVar52 = uVar9;\n }\n if (uVar52 == 1) {\n objc_stub::render_toMTLTexture_commandBuffer_bounds_colorSpace_\n (local_8c8,0,0,dVar83,pcVar85,pcVar38,IVar22,IVar12,local_978);\n uVar52 = 1;\n }\n else {\n uVar52 = (IVar22 == 0 | uVar9) ^ 1;\n }\n IVar29 = objc_stub::deviceRegistryID(param_3);\n IVar28 = objc_stub::bytes((ID)pcVar30);\n IVar35 = objc_stub::length((ID)pcVar30);\n local_140.field0_0x0.field1_0x8 = (double)ppcStack_4a8;\n local_140.field0_0x0.field0_0x0 = (double)local_4b0;\n local_140.field1_0x10.field1_0x8 = (double)local_498;\n local_140.field1_0x10.field0_0x0 = (double)local_4a0;\n local_120 = local_490;\n IVar23 = IVar12;\n FUN_10002807c((float)dVar66,IVar12,IVar17,local_8d8,IVar16,IVar29,IVar10,IVar28,IVar35\n ,pcVar32,(int)uVar34);\n if ((IVar23 & 1) == 0) {\n if ((uVar52 & 1) == 0) goto LAB_1000202d4;\n goto LAB_1000202fc;\n }\n }\n else {\n IVar23 = objc_stub::deviceRegistryID(param_3);\n IVar29 = objc_stub::bytes((ID)pcVar30);\n IVar28 = objc_stub::length((ID)pcVar30);\n local_140.field0_0x0.field1_0x8 = (double)ppcStack_4a8;\n local_140.field0_0x0.field0_0x0 = (double)local_4b0;\n local_140.field1_0x10.field1_0x8 = (double)local_498;\n local_140.field1_0x10.field0_0x0 = (double)local_4a0;\n local_120 = local_490;\n IVar17 = IVar12;\n FUN_100027d38((float)dVar66,IVar12,local_940,local_8d8,IVar16,IVar23,IVar10,IVar29,\n IVar28,pcVar32,(int)uVar34);\n if ((IVar17 & 1) == 0) goto LAB_10002052c;\n }\n bVar53 = false;\n bVar1 = true;\n }\n else {\n if ((uVar9 & 1) != 0) {\nLAB_1000202d4:\n objc_stub::render_toMTLTexture_commandBuffer_bounds_colorSpace_\n (local_8c8,0,0,dVar83,pcVar85,pcVar38,IVar22,IVar12,local_978);\n }\nLAB_1000202fc:\n IVar17 = MTLRenderPassDescriptor::renderPassDescriptor\n ((ID)&_OBJC_CLASS___MTLRenderPassDescriptor);\n IVar23 = MTLRenderPassDescriptor::colorAttachments(IVar17);\n IVar23 = MTLRenderPassDescriptor::objectAtIndexedSubscript_(IVar23,0);\n MTLRenderPassDescriptor::setTexture_(IVar23,local_8d8);\n IVar23 = MTLRenderPassDescriptor::colorAttachments(IVar17);\n IVar23 = MTLRenderPassDescriptor::objectAtIndexedSubscript_(IVar23,0);\n MTLRenderPassDescriptor::setLoadAction_(IVar23,2);\n IVar23 = MTLRenderPassDescriptor::colorAttachments(IVar17);\n IVar23 = MTLRenderPassDescriptor::objectAtIndexedSubscript_(IVar23,0);\n MTLRenderPassDescriptor::setStoreAction_(IVar23,1);\n IVar23 = MTLRenderPassDescriptor::colorAttachments(IVar17);\n IVar23 = MTLRenderPassDescriptor::objectAtIndexedSubscript_(IVar23,0);\n MTLRenderPassDescriptor::setClearColor_(IVar23,0,0,0,0x3ff0000000000000);\n IVar17 = objc_stub::renderCommandEncoderWithDescriptor_(IVar12,IVar17);\n if (IVar17 == 0) {\n bVar1 = false;\n bVar53 = false;\n }\n else {\n IVar23 = objc_stub::width(local_8d8);\n IVar29 = objc_stub::height(local_8d8);\n FUN_1000283ac(&local_140,IVar23,IVar29);\n IVar23 = objc_stub::width(local_8d8);\n IVar29 = objc_stub::height(local_8d8);\n local_8b8 = CONCAT44((int)IVar29,(int)IVar23);\n IVar23 = objc_stub::width(local_8d8);\n IVar29 = objc_stub::height(local_8d8);\n local_1b0 = (long *)(double)IVar23;\n dStack_1a8 = (double)IVar29;\n puStack_1b8 = (undefined1 *)0x0;\n local_1c0 = (undefined1 [8])0x0;\n uStack_198 = 0x3ff0000000000000;\n local_1a0 = 0xbff0000000000000;\n objc_stub::setViewport_(IVar17,local_1c0);\n objc_stub::setRenderPipelineState_(IVar17,IVar13);\n objc_stub::setVertexBytes_length_atIndex_(IVar17,&local_140,0x40,0);\n objc_stub::setVertexBytes_length_atIndex_(IVar17,&local_8b8,8,1);\n objc_stub::setFragmentTexture_atIndex_(IVar17,IVar22,0);\n objc_stub::drawPrimitives_vertexStart_vertexCount_(IVar17,4,0,4);\n objc_stub::endEncoding(IVar17);\n bVar1 = false;\n bVar53 = true;\n }\n }\n }\n if ((bVar53) || (bVar1)) {\n uVar52 = 0;\n if (IVar15 + IVar14 + IVar21 != 0) {\n uVar52 = local_944;\n }\n if ((uVar52 == 1) && (uVar51 != 1)) {\n IVar13 = objc_stub::deviceRegistryID(param_3);\n IVar10 = FxMTLDeviceCache::solidOverlayPipelineStateWithRegistryID_pixelFormat_\n (IVar16,IVar13,IVar10);\n if (IVar10 != 0) {\n IVar13 = objc_stub::count(local_a58);\n if (IVar13 != 0) {\n FUN_10002840c(IVar12,local_8d8,local_a58,IVar10);\n }\n IVar13 = objc_stub::count((ID)local_a50);\n if (IVar13 != 0) {\n FUN_100028904(dStack_a60,local_a68,pCStack_a70,local_a78,IVar12,local_8d8,local_a50,\n IVar10,0,1);\n }\n IVar13 = objc_stub::count(0);\n if (IVar13 != 0) {\n FUN_100028904(dVar84,pCVar87,pCVar88,pcVar89,IVar12,local_8d8,0,IVar10,1,0);\n }\n }\n }\n }\n else {\n bVar53 = false;\n }\n }\n objc_stub::commit(IVar12);\n objc_stub::waitUntilCompleted(IVar12);\n IVar10 = objc_stub::error(IVar12);\n bVar5 = false;\n if (IVar10 == 0) {\n bVar5 = (bool)(bVar53 | bVar1);\n }\n objc_stub::length((ID)pcVar39);\n objc_stub::length((ID)pcVar39);\n objc_stub::error(IVar12);\n objc_stub::count((ID)local_9f0);\n objc_stub::error(IVar12);\n FUN_100021c7c();\n FxMTLDeviceCache::returnCommandQueueToCache_(IVar16,IVar11);\n }\n if (!bVar5) {\n FUN_100021c7c();\n if (uVar8 != 0) {\n IVar10 = objc_stub::count((ID)local_8d0);\n pcVar39 = local_9a8;\n if (IVar10 < 2) {\n IVar10 = objc_stub::count((ID)local_9f0);\n if (IVar10 < 0x4d) {\n pcVar39 = (cfstringStruct *)0x0;\n }\n else {\n FUN_100025058(AStack_658._96_8_,local_a40,local_9a8,local_9f0);\n }\n }\n else {\n FUN_100024eec(AStack_658._96_8_,local_a40,local_9a8,local_8d0);\n }\n if (pcVar39 != (cfstringStruct *)0x0) {\n local_9a8 = pcVar39;\n }\n }\n if (puVar19 == (undefined8 *)0x0) {\n if (pIVar42 == (ID *)0x0) goto LAB_1000212fc;\n pcVar20 = &cf_IOSurfaceunavailable;\n FUN_10001b7ac();\nLAB_10002120c:\n bVar7 = 0;\n *pIVar42 = (ID)pcVar20;\n goto LAB_100021268;\n }\n pcVar39 = local_9a8;\n FUN_100028fa0(dVar67,pCVar74,pCVar58,pcVar59);\n if (((ulong)pcVar39 & 1) == 0) {\n local_9a8 = pcVar20;\n FUN_100021d48(dVar67,pCVar74,pCVar58,pcVar59);\n }\n puVar25 = puVar19;\n _IOSurfaceGetWidth();\n puVar26 = puVar19;\n _IOSurfaceGetHeight(puVar19);\n FUN_100026200(dVar80,dVar70,dVar76,dVar75,puVar25,puVar26);\n dVar67 = dVar76;\n dVar68 = dVar75;\n dVar83 = dVar70;\n dVar84 = dVar80;\n if ((int)puVar25 != 0) {\n dVar67 = dVar80;\n _CGRectGetWidth();\n dVar68 = dVar80;\n _CGRectGetHeight(dVar80,dVar70,dVar76,dVar75);\n dVar83 = 0.0;\n dVar84 = 0.0;\n }\n FUN_100026294(dVar80,dVar70,dVar76,dVar75,dVar84,dVar83,dVar67,dVar68,local_9a8,puVar25);\n if (local_944 != 0) {\n IVar10 = objc_stub::count(local_958);\n if ((IVar10 != 0) &&\n (puVar26 = puVar25,\n FUN_100026ab4(dVar80,dVar70,dVar76,dVar75,dVar84,dVar83,dVar67,dVar68,puVar25,local_958),\n puVar26 != (undefined8 *)0x0)) {\n IVar10 = objc_stub::imageByCompositingOverImage_((ID)puVar26,local_9a8);\n pcVar39 = (cfstringStruct *)\n objc_stub::imageByCroppingToRect_(IVar10,dVar84,dVar83,dVar67,dVar68);\n if (pcVar39 != (cfstringStruct *)0x0) {\n local_9a8 = pcVar39;\n }\n }\n IVar10 = objc_stub::count((ID)puVar27);\n if ((IVar10 != 0) &&\n (puVar26 = puVar25,\n FUN_100026360(dVar80,dVar70,dVar76,dVar75,dVar84,dVar83,dVar67,dVar68,puVar25,puVar27,0,1\n ), puVar26 != (undefined8 *)0x0)) {\n IVar10 = objc_stub::imageByCompositingOverImage_((ID)puVar26,local_9a8);\n pcVar39 = (cfstringStruct *)\n objc_stub::imageByCroppingToRect_(IVar10,dVar84,dVar83,dVar67,dVar68);\n if (pcVar39 != (cfstringStruct *)0x0) {\n local_9a8 = pcVar39;\n }\n }\n IVar10 = objc_stub::count(local_8e0);\n if ((IVar10 != 0) &&\n (puVar26 = puVar25,\n FUN_100026360(dVar80,dVar70,dVar76,dVar75,dVar84,dVar83,dVar67,dVar68,puVar25,local_8e0,1\n ,0), puVar26 != (undefined8 *)0x0)) {\n IVar10 = objc_stub::imageByCompositingOverImage_((ID)puVar26,local_9a8);\n pcVar39 = (cfstringStruct *)\n objc_stub::imageByCroppingToRect_(IVar10,dVar84,dVar83,dVar67,dVar68);\n if (pcVar39 != (cfstringStruct *)0x0) {\n local_9a8 = pcVar39;\n }\n }\n }\n pcVar39 = local_9a8;\n FUN_100028fa0(dVar84,dVar83,dVar67,dVar68);\n if (((ulong)pcVar39 & 1) == 0) {\n local_9a8 = pcVar20;\n FUN_100026294(dVar80,dVar70,dVar76,dVar75,dVar84,dVar83,dVar67,dVar68,pcVar20,puVar25);\n }\n FUN_1000270cc(dVar84,dVar83,dVar67,dVar68);\n if (pcVar20 == (cfstringStruct *)0x0) {\n pcVar20 = (cfstringStruct *)0x0;\n }\n else {\n FUN_100026294(dVar80,dVar70,dVar76,dVar75,dVar84,dVar83,dVar67,dVar68,pcVar20,puVar25);\n FUN_1000270cc(dVar84,dVar83,dVar67,dVar68);\n }\n FUN_100021c7c();\n pcVar39 = local_9a8;\n FUN_10002911c(dVar84,dVar83,dVar67,dVar68,local_9a8,local_8c8,puVar19,local_978);\n FUN_100021c7c();\n if (((ulong)pcVar39 & 1) == 0) {\n FUN_100021c7c();\n FUN_1000291b4(dVar84,dVar83,dVar67,dVar68,local_9a8,local_8c8,puVar19,local_978);\n FUN_100021c7c();\n uVar52 = (uint)local_9a8;\n if (pcVar20 == (cfstringStruct *)0x0) {\n uVar52 = 1;\n }\n if ((uVar52 & 1) == 0) {\n FUN_100021c7c();\n pcVar39 = pcVar20;\n FUN_10002911c(dVar84,dVar83,dVar67,dVar68,pcVar20,local_8c8,puVar19,local_978);\n FUN_100021c7c();\n if (((ulong)pcVar39 & 1) != 0) goto LAB_100021254;\n FUN_100021c7c();\n FUN_1000291b4(dVar84,dVar83,dVar67,dVar68,pcVar20,local_8c8,puVar19,local_978);\n FUN_100021c7c();\n local_9a8 = pcVar20;\n }\n if (((ulong)local_9a8 & 1) == 0) {\n puVar26 = puVar19;\n _IOSurfaceGetWidth();\n puVar25 = puVar19;\n _IOSurfaceGetHeight();\n puVar36 = puVar19;\n _IOSurfaceGetBytesPerRow();\n puVar47 = puVar19;\n _IOSurfaceGetPixelFormat();\n if ((((puVar26 != (undefined8 *)0x0) && (puVar25 != (undefined8 *)0x0)) &&\n (puVar36 != (undefined8 *)0x0)) &&\n (puVar37 = puVar19, _IOSurfaceLock(puVar19,0,0), (int)puVar37 == 0)) {\n puVar37 = puVar19;\n _IOSurfaceGetBaseAddress();\n if (puVar37 != (undefined8 *)0x0) {\n iVar45 = (int)puVar47;\n if (iVar45 == 0x42475241) {\n do {\n _memset_pattern16(puVar37,&DAT_10005fb00,(long)puVar26 << 2);\n puVar37 = (undefined8 *)((long)puVar37 + (long)puVar36);\n puVar25 = (undefined8 *)((long)puVar25 + -1);\n } while (puVar25 != (undefined8 *)0x0);\n }\n else if (iVar45 == 0x52476841) {\n puVar47 = (undefined8 *)0x0;\n puVar48 = puVar26;\n puVar55 = puVar37;\n do {\n do {\n *puVar37 = 0x3c00000000000000;\n puVar48 = (undefined8 *)((long)puVar48 + -1);\n puVar37 = puVar37 + 1;\n } while (puVar48 != (undefined8 *)0x0);\n puVar47 = (undefined8 *)((long)puVar47 + 1);\n puVar37 = (undefined8 *)((long)puVar55 + (long)puVar36);\n puVar48 = puVar26;\n puVar55 = puVar37;\n } while (puVar47 != puVar25);\n }\n else if (iVar45 == 0x52476641) {\n puVar47 = (undefined8 *)0x0;\n puVar48 = puVar26;\n puVar55 = puVar37;\n do {\n do {\n puVar37[1] = 0x3f80000000000000;\n *puVar37 = 0;\n puVar48 = (undefined8 *)((long)puVar48 + -1);\n puVar37 = puVar37 + 2;\n } while (puVar48 != (undefined8 *)0x0);\n puVar47 = (undefined8 *)((long)puVar47 + 1);\n puVar37 = (undefined8 *)((long)puVar55 + (long)puVar36);\n puVar48 = puVar26;\n puVar55 = puVar37;\n } while (puVar47 != puVar25);\n }\n else {\n _bzero(puVar37,(long)puVar36 * (long)puVar25);\n }\n }\n _IOSurfaceUnlock(puVar19,0,0);\n }\n }\n }\nLAB_100021254:\n FUN_100021c7c();\n }\n FUN_100021c7c();\n objc_stub::count((ID)local_9f0);\n bVar7 = 1;\n }\nLAB_100021268:\n FUN_100021c7c();\nLAB_10002126c:\n if (*(long *)PTR____stack_chk_guard_1000780b8 != local_b8) {\n /* WARNING: Subroutine does not return */\n ___stack_chk_fail();\n }\n return bVar7;\n}\n\n","status":"ok"}],"succeeded":3,"total":3},"operation":"batch_decompile","parameters":{"addresses":["0x100035d78","0x100003e4c","0x10001cba4"]},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_75676ba099257fcc288824b71449716f872507b32a5c61bac165abecb53b0837","evidence_links":[],"limitations":["The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.","The imported Program and temporary project are ephemeral and deleted on close. Annotation operations edit session database metadata; original executable bytes are never written.","Cancelling an active Ghidra request terminates its ephemeral database and discards session annotations. The selected target remains open; the next provider query imports the original artifact again.","Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use :0x.","Regex mode uses Java Pattern semantics. Matcher or compiler stack exhaustion returns a resource constraint without closing the session; literal mode avoids regex recursion and returns complete matching values.","macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state."],"locations":[],"normalized_result":[{"address":"0x100003d40","value":"MSSSectionCardParameterValue::init"},{"address":"0x100004a9c","value":"MSSSectionCardParameterValue::initWithCoder:"},{"address":"0x100016e00","value":"MSSuperSkinSmoothingPlugIn::mss_faceThinRememberedPointsForBox:renderTime:source:"},{"address":"0x100018328","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPoints:forBox:renderTime:source:"},{"address":"0x100018988","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPointSets:boxes:renderTime:source:"},{"address":"0x100018bd0","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018c10","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018f94","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100018fe0","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100019490","value":"MSSuperSkinSmoothingPlugIn::mss_storeRewindFaceReferencePoints:forBox:renderTime:"},{"address":"0x10002ae04","value":"MSSuperSkinSmoothingPlugIn::applySkinSmoothingToImage:params:renderTime:faceObservations:selectedFacePoints:"},{"address":"0x10002f58c","value":"MSSuperSkinSmoothingPlugIn::deterministicFacePointsForObservations:params:selectedObservationOut:strengthMultiplierOut:"},{"address":"0x10002f700","value":"MSSuperSkinSmoothingPlugIn::temporalFacePointsForObservations:renderTime:params:selectedObservationOut:strengthMultiplierOut:pointsBoxOut:"},{"address":"0x100054000","value":"FUN_100054000"},{"address":"0x100054014","value":"FUN_100054014"},{"address":"0x100054028","value":"FUN_100054028"},{"address":"0x10005407c","value":"FUN_10005407c"},{"address":"0x1000540cc","value":"FUN_1000540cc"},{"address":"0x10005411c","value":"FUN_10005411c"},{"address":"0x100054180","value":"FUN_100054180"},{"address":"0x1000541d0","value":"FUN_1000541d0"},{"address":"0x100054234","value":"FUN_100054234"},{"address":"0x100054284","value":"FUN_100054284"},{"address":"0x1000542cc","value":"FUN_1000542cc"},{"address":"0x100054314","value":"FUN_100054314"},{"address":"0x100054344","value":"FUN_100054344"},{"address":"0x100054374","value":"FUN_100054374"},{"address":"0x10005438c","value":"FUN_10005438c"},{"address":"0x1000543a4","value":"FUN_1000543a4"},{"address":"0x10005441c","value":"FUN_10005441c"},{"address":"0x100054464","value":"FUN_100054464"},{"address":"0x100054478","value":"FUN_100054478"},{"address":"0x10005448c","value":"FUN_10005448c"},{"address":"0x1000544a0","value":"FUN_1000544a0"},{"address":"0x1000544b4","value":"FUN_1000544b4"},{"address":"0x1000544c8","value":"FUN_1000544c8"},{"address":"0x1000544ec","value":"FUN_1000544ec"},{"address":"0x100054500","value":"FUN_100054500"},{"address":"0x100054524","value":"FUN_100054524"},{"address":"0x100054538","value":"FUN_100054538"},{"address":"0x10005455c","value":"FUN_10005455c"},{"address":"0x100054570","value":"FUN_100054570"},{"address":"0x100054584","value":"FUN_100054584"},{"address":"0x1000545a8","value":"FUN_1000545a8"},{"address":"0x1000545cc","value":"FUN_1000545cc"},{"address":"0x1000545f0","value":"FUN_1000545f0"},{"address":"0x100054614","value":"FUN_100054614"},{"address":"0x100054638","value":"FUN_100054638"},{"address":"0x10005465c","value":"FUN_10005465c"},{"address":"0x100054680","value":"FUN_100054680"},{"address":"0x100054694","value":"FUN_100054694"},{"address":"0x1000546a8","value":"FUN_1000546a8"},{"address":"0x1000546cc","value":"FUN_1000546cc"},{"address":"0x1000546f0","value":"FUN_1000546f0"},{"address":"0x100054714","value":"FUN_100054714"},{"address":"0x100054738","value":"FUN_100054738"},{"address":"0x10005475c","value":"FUN_10005475c"},{"address":"0x100054770","value":"FUN_100054770"},{"address":"0x100054794","value":"FUN_100054794"},{"address":"0x1000547a8","value":"FUN_1000547a8"},{"address":"0x1000547cc","value":"FUN_1000547cc"},{"address":"0x1000547e0","value":"FUN_1000547e0"},{"address":"0x100054804","value":"FUN_100054804"},{"address":"0x100054818","value":"FUN_100054818"},{"address":"0x10005482c","value":"FUN_10005482c"},{"address":"0x100054850","value":"FUN_100054850"},{"address":"0x100054864","value":"FUN_100054864"},{"address":"0x100054878","value":"FUN_100054878"},{"address":"0x10005488c","value":"FUN_10005488c"},{"address":"0x1000548b0","value":"FUN_1000548b0"},{"address":"0x1000548c4","value":"FUN_1000548c4"},{"address":"0x1000548d8","value":"FUN_1000548d8"},{"address":"0x1000548ec","value":"FUN_1000548ec"},{"address":"0x100054900","value":"FUN_100054900"},{"address":"0x100054924","value":"FUN_100054924"},{"address":"0x100054948","value":"FUN_100054948"},{"address":"0x10005496c","value":"FUN_10005496c"},{"address":"0x100054990","value":"FUN_100054990"},{"address":"0x1000549a4","value":"FUN_1000549a4"},{"address":"0x1000549b8","value":"FUN_1000549b8"},{"address":"0x1000549cc","value":"FUN_1000549cc"},{"address":"0x1000549e0","value":"FUN_1000549e0"},{"address":"0x1000549f4","value":"FUN_1000549f4"},{"address":"0x100054a18","value":"FUN_100054a18"},{"address":"0x100054a3c","value":"FUN_100054a3c"},{"address":"0x100054a50","value":"FUN_100054a50"},{"address":"0x100054a64","value":"FUN_100054a64"},{"address":"0x100054a78","value":"FUN_100054a78"},{"address":"0x100054a8c","value":"FUN_100054a8c"},{"address":"0x100054aa0","value":"FUN_100054aa0"},{"address":"0x100054ac4","value":"FUN_100054ac4"},{"address":"0x100054ad8","value":"FUN_100054ad8"},{"address":"0x100054aec","value":"FUN_100054aec"},{"address":"0x100054b00","value":"FUN_100054b00"},{"address":"0x100054b14","value":"FUN_100054b14"},{"address":"0x100054b28","value":"FUN_100054b28"},{"address":"0x100054b78","value":"FUN_100054b78"},{"address":"0x100054b98","value":"FUN_100054b98"},{"address":"0x100054bb8","value":"FUN_100054bb8"},{"address":"0x100057300","value":"objc_stub::applySkinSmoothingToImage:params:renderTime:faceObservations:selectedFacePoints:"},{"address":"0x100059f00","value":"objc_stub::mss_faceThinRememberedPointsForBox:renderTime:source:"},{"address":"0x100059fa0","value":"objc_stub::mss_rememberFaceThinPointSets:boxes:renderTime:source:"},{"address":"0x100059fc0","value":"objc_stub::mss_rememberFaceThinPoints:forBox:renderTime:source:"},{"address":"0x10005a000","value":"objc_stub::mss_rewindFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:timeOut:"},{"address":"0x10005a060","value":"objc_stub::mss_storeRewindFaceReferencePoints:forBox:renderTime:"},{"address":"0x10005a0a0","value":"objc_stub::mss_timeLocalFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x10005a0c0","value":"objc_stub::mss_timeLocalFaceReferenceForRenderTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x10005d060","value":"objc_stub::temporalFacePointsForObservations:renderTime:params:selectedObservationOut:strengthMultiplierOut:pointsBoxOut:"}],"operation":"search_procedures","parameters":{"case_sensitive":false,"mode":"regex","pattern":"(MSSSectionCardParameterValue::init|Face.*(Warp|Points)|^FUN_100054)"},"predicate_type":"rea.analysis","provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"},"raw_result":[{"address":"0x100003d40","value":"MSSSectionCardParameterValue::init"},{"address":"0x100004a9c","value":"MSSSectionCardParameterValue::initWithCoder:"},{"address":"0x100016e00","value":"MSSuperSkinSmoothingPlugIn::mss_faceThinRememberedPointsForBox:renderTime:source:"},{"address":"0x100018328","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPoints:forBox:renderTime:source:"},{"address":"0x100018988","value":"MSSuperSkinSmoothingPlugIn::mss_rememberFaceThinPointSets:boxes:renderTime:source:"},{"address":"0x100018bd0","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018c10","value":"MSSuperSkinSmoothingPlugIn::mss_rewindFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:timeOut:"},{"address":"0x100018f94","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100018fe0","value":"MSSuperSkinSmoothingPlugIn::mss_timeLocalFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x100019490","value":"MSSuperSkinSmoothingPlugIn::mss_storeRewindFaceReferencePoints:forBox:renderTime:"},{"address":"0x10002ae04","value":"MSSuperSkinSmoothingPlugIn::applySkinSmoothingToImage:params:renderTime:faceObservations:selectedFacePoints:"},{"address":"0x10002f58c","value":"MSSuperSkinSmoothingPlugIn::deterministicFacePointsForObservations:params:selectedObservationOut:strengthMultiplierOut:"},{"address":"0x10002f700","value":"MSSuperSkinSmoothingPlugIn::temporalFacePointsForObservations:renderTime:params:selectedObservationOut:strengthMultiplierOut:pointsBoxOut:"},{"address":"0x100054000","value":"FUN_100054000"},{"address":"0x100054014","value":"FUN_100054014"},{"address":"0x100054028","value":"FUN_100054028"},{"address":"0x10005407c","value":"FUN_10005407c"},{"address":"0x1000540cc","value":"FUN_1000540cc"},{"address":"0x10005411c","value":"FUN_10005411c"},{"address":"0x100054180","value":"FUN_100054180"},{"address":"0x1000541d0","value":"FUN_1000541d0"},{"address":"0x100054234","value":"FUN_100054234"},{"address":"0x100054284","value":"FUN_100054284"},{"address":"0x1000542cc","value":"FUN_1000542cc"},{"address":"0x100054314","value":"FUN_100054314"},{"address":"0x100054344","value":"FUN_100054344"},{"address":"0x100054374","value":"FUN_100054374"},{"address":"0x10005438c","value":"FUN_10005438c"},{"address":"0x1000543a4","value":"FUN_1000543a4"},{"address":"0x10005441c","value":"FUN_10005441c"},{"address":"0x100054464","value":"FUN_100054464"},{"address":"0x100054478","value":"FUN_100054478"},{"address":"0x10005448c","value":"FUN_10005448c"},{"address":"0x1000544a0","value":"FUN_1000544a0"},{"address":"0x1000544b4","value":"FUN_1000544b4"},{"address":"0x1000544c8","value":"FUN_1000544c8"},{"address":"0x1000544ec","value":"FUN_1000544ec"},{"address":"0x100054500","value":"FUN_100054500"},{"address":"0x100054524","value":"FUN_100054524"},{"address":"0x100054538","value":"FUN_100054538"},{"address":"0x10005455c","value":"FUN_10005455c"},{"address":"0x100054570","value":"FUN_100054570"},{"address":"0x100054584","value":"FUN_100054584"},{"address":"0x1000545a8","value":"FUN_1000545a8"},{"address":"0x1000545cc","value":"FUN_1000545cc"},{"address":"0x1000545f0","value":"FUN_1000545f0"},{"address":"0x100054614","value":"FUN_100054614"},{"address":"0x100054638","value":"FUN_100054638"},{"address":"0x10005465c","value":"FUN_10005465c"},{"address":"0x100054680","value":"FUN_100054680"},{"address":"0x100054694","value":"FUN_100054694"},{"address":"0x1000546a8","value":"FUN_1000546a8"},{"address":"0x1000546cc","value":"FUN_1000546cc"},{"address":"0x1000546f0","value":"FUN_1000546f0"},{"address":"0x100054714","value":"FUN_100054714"},{"address":"0x100054738","value":"FUN_100054738"},{"address":"0x10005475c","value":"FUN_10005475c"},{"address":"0x100054770","value":"FUN_100054770"},{"address":"0x100054794","value":"FUN_100054794"},{"address":"0x1000547a8","value":"FUN_1000547a8"},{"address":"0x1000547cc","value":"FUN_1000547cc"},{"address":"0x1000547e0","value":"FUN_1000547e0"},{"address":"0x100054804","value":"FUN_100054804"},{"address":"0x100054818","value":"FUN_100054818"},{"address":"0x10005482c","value":"FUN_10005482c"},{"address":"0x100054850","value":"FUN_100054850"},{"address":"0x100054864","value":"FUN_100054864"},{"address":"0x100054878","value":"FUN_100054878"},{"address":"0x10005488c","value":"FUN_10005488c"},{"address":"0x1000548b0","value":"FUN_1000548b0"},{"address":"0x1000548c4","value":"FUN_1000548c4"},{"address":"0x1000548d8","value":"FUN_1000548d8"},{"address":"0x1000548ec","value":"FUN_1000548ec"},{"address":"0x100054900","value":"FUN_100054900"},{"address":"0x100054924","value":"FUN_100054924"},{"address":"0x100054948","value":"FUN_100054948"},{"address":"0x10005496c","value":"FUN_10005496c"},{"address":"0x100054990","value":"FUN_100054990"},{"address":"0x1000549a4","value":"FUN_1000549a4"},{"address":"0x1000549b8","value":"FUN_1000549b8"},{"address":"0x1000549cc","value":"FUN_1000549cc"},{"address":"0x1000549e0","value":"FUN_1000549e0"},{"address":"0x1000549f4","value":"FUN_1000549f4"},{"address":"0x100054a18","value":"FUN_100054a18"},{"address":"0x100054a3c","value":"FUN_100054a3c"},{"address":"0x100054a50","value":"FUN_100054a50"},{"address":"0x100054a64","value":"FUN_100054a64"},{"address":"0x100054a78","value":"FUN_100054a78"},{"address":"0x100054a8c","value":"FUN_100054a8c"},{"address":"0x100054aa0","value":"FUN_100054aa0"},{"address":"0x100054ac4","value":"FUN_100054ac4"},{"address":"0x100054ad8","value":"FUN_100054ad8"},{"address":"0x100054aec","value":"FUN_100054aec"},{"address":"0x100054b00","value":"FUN_100054b00"},{"address":"0x100054b14","value":"FUN_100054b14"},{"address":"0x100054b28","value":"FUN_100054b28"},{"address":"0x100054b78","value":"FUN_100054b78"},{"address":"0x100054b98","value":"FUN_100054b98"},{"address":"0x100054bb8","value":"FUN_100054bb8"},{"address":"0x100057300","value":"objc_stub::applySkinSmoothingToImage:params:renderTime:faceObservations:selectedFacePoints:"},{"address":"0x100059f00","value":"objc_stub::mss_faceThinRememberedPointsForBox:renderTime:source:"},{"address":"0x100059fa0","value":"objc_stub::mss_rememberFaceThinPointSets:boxes:renderTime:source:"},{"address":"0x100059fc0","value":"objc_stub::mss_rememberFaceThinPoints:forBox:renderTime:source:"},{"address":"0x10005a000","value":"objc_stub::mss_rewindFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:timeOut:"},{"address":"0x10005a060","value":"objc_stub::mss_storeRewindFaceReferencePoints:forBox:renderTime:"},{"address":"0x10005a0a0","value":"objc_stub::mss_timeLocalFaceReferenceForRenderTime:allowCurrentTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x10005a0c0","value":"objc_stub::mss_timeLocalFaceReferenceForRenderTime:pointsOut:boxOut:detectionTimeOut:outputTimeOut:usedHistoryOut:"},{"address":"0x10005d060","value":"objc_stub::temporalFacePointsForObservations:renderTime:params:selectedObservationOut:strengthMultiplierOut:pointsBoxOut:"}],"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":null,"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_942765357c7089b187a343c579687e0764d27ba2ebcb5dec2d2fef4a924f79bf","evidence_links":[],"limitations":[],"locations":[{"kind":"artifact-path","path":"/Applications/MSE18V2.app/Contents/PlugIns/MSE18V2.pluginkit/Contents/Info.plist"}],"normalized_result":{"bundle":{"executable":"MSE18V2","identifier":"com.ms.plugins.mse18v2","name":"MSE18V2","short_version":"1.0.20260617-170517","version":"20260617170517"},"format":"xml","limitations":[],"provenance":[{"command":["/usr/bin/file","-b","$PLIST"],"executable_sha256":"ea15c704c7775a47093dedbf36ff6b302acfc2e8aa64e95819c6ddd3e133c073","exit":{"code":0,"signal":null},"stderr_bytes":0,"stdout_bytes":34,"tool":"file","tool_version":null,"version_reason":"Tool exposes no uniform stable version flag; executable SHA-256 is a prelaunch file sample and does not prove atomic OS image binding."},{"command":["/usr/bin/plutil","-convert","json","-o","-","--","$PLIST"],"executable_sha256":"a1a6b15ead16a5a3238dbe6a6db403969e34d47b737e143911248a6ba22698cc","exit":{"code":0,"signal":null},"stderr_bytes":0,"stdout_bytes":1753,"tool":"plutil","tool_version":null,"version_reason":"Tool exposes no uniform stable version flag; executable SHA-256 is a prelaunch file sample and does not prove atomic OS image binding."}],"source_path":"/Applications/MSE18V2.app/Contents/PlugIns/MSE18V2.pluginkit/Contents/Info.plist","value":{"BuildMachineOSBuild":"24G419","CFBundleDevelopmentRegion":"en","CFBundleExecutable":"MSE18V2","CFBundleIdentifier":"com.ms.plugins.mse18v2","CFBundleInfoDictionaryVersion":"6.0","CFBundleName":"MSE18V2","CFBundlePackageType":"XPC!","CFBundleShortVersionString":"1.0.20260617-170517","CFBundleSupportedPlatforms":["MacOSX"],"CFBundleVersion":"20260617170517","DTCompiler":"com.apple.compilers.llvm.clang.1_0","DTPlatformBuild":"24F74","DTPlatformName":"macosx","DTPlatformVersion":"15.5","DTSDKBuild":"24F74","DTSDKName":"macosx15.5","DTXcode":"1640","DTXcodeBuild":"16F6","LSMinimumSystemVersion":"11.5.1","PlugInKit":{"Attributes":{"com.apple.protocol":"FxPlug","com.apple.version":"1.1"},"PrincipalClass":"FxPrincipal","Protocol":"PROXPCProtocol","Subsystems":["NSViewService_PKSubsystem"]},"ProPlugDictionaryVersion":"1.0","ProPlugDynamicRegistration":false,"ProPlugPlugInGroupList":[{"groupName":"MSE18V2","uuid":"23C84F4D-C18D-4FF2-979A-429BECE2C283"}],"ProPlugPlugInList":[{"className":"MSSuperSkinSmoothingPlugIn","displayName":"MSE18V2","group":"23C84F4D-C18D-4FF2-979A-429BECE2C283","infoString":"MSE18V2 build 20260617-170517","protocolNames":["FxFilter","FxAnalyzer"],"uuid":"8419CCD9-7208-45CC-B593-BAFBA5980745","version":"1.0.20260617-170517"},{"className":"MSSuperSkinSmoothingFaceSelectOSC","displayName":"MSE18V2","group":"23C84F4D-C18D-4FF2-979A-429BECE2C283","infoString":"MSE18V2 build 20260617-170517","protocolNames":["FxOnScreenControl"],"supportedPlugins":["8419CCD9-7208-45CC-B593-BAFBA5980745"],"uuid":"4CB10FB4-A139-4A72-9F17-BAF96C131A7A","version":"1.0.20260617-170517"}],"XPCService":{"JoinExistingSession":true,"RunLoopType":"_NSApplicationMain","ServiceType":"Application","_AdditionalSubServices":{"viewbridge":true}}}},"operation":"inspect_plist","parameters":{"path":"/Applications/MSE18V2.app/Contents/PlugIns/MSE18V2.pluginkit/Contents/Info.plist"},"predicate_type":"rea.analysis","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"raw_result":null,"subject":{"architecture":"arm64","digest":{"sha256":"6c5d74bc844a5c5f745718b48ea10ec6635d08aa08a5b6dc6e62653980849f8a"},"format":"mach-o","local_path":"/Applications/MSE18V2.app/Contents/PlugIns/MSE18V2.pluginkit/Contents/MacOS/MSE18V2","name":"MSE18V2"}},{"analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_e4a4692cb8beacaeb51bd601d77b16bcee30397dd9ce32b63b1f12fa0949c78a","evidence_links":[],"limitations":["The session serves operations only after Ghidra reports default auto-analysis complete; incomplete analysis does not expose partial results.","The imported Program and temporary project are ephemeral and deleted on close. Annotation operations edit session database metadata; original executable bytes are never written.","Cancelling an active Ghidra request terminates its ephemeral database and discards session annotations. The selected target remains open; the next provider query imports the original artifact again.","Default-space addresses use lowercase 0x-prefixed hexadecimal; other address spaces use :0x.","Regex mode uses Java Pattern semantics. Matcher or compiler stack exhaustion returns a resource constraint without closing the session; literal mode avoids regex recursion and returns complete matching values.","macOS sessions require a matching executable Ghidra native decompiler; REA checks for it but does not build native components or change Gatekeeper quarantine state."],"locations":[],"normalized_result":[{"address":"0x100003e4c","value":"MSSSectionCardParameterValue::defaultValue"},{"address":"0x1000339c0","value":"YUCIFilterConstructor::constructor"},{"address":"0x100033a18","value":"YUCIFilterConstructor::initForSharedConstructor"},{"address":"0x100033a4c","value":"YUCIFilterConstructor::filterWithName:"},{"address":"0x100033a64","value":"YUCIRGBToneCurve::filterKernel"},{"address":"0x100033ac4","value":"YUCIRGBToneCurve::inputIntensity"},{"address":"0x100033b08","value":"YUCIRGBToneCurve::defaultCurveControlPoints"},{"address":"0x100033ba8","value":"YUCIRGBToneCurve::setDefaults"},{"address":"0x100033bf8","value":"YUCIRGBToneCurve::outputImage"},{"address":"0x100033d54","value":"YUCIRGBToneCurve::inputRGBCompositeControlPoints"},{"address":"0x100033d9c","value":"YUCIRGBToneCurve::inputRedControlPoints"},{"address":"0x100033de4","value":"YUCIRGBToneCurve::inputGreenControlPoints"},{"address":"0x100033e2c","value":"YUCIRGBToneCurve::inputBlueControlPoints"},{"address":"0x100033e74","value":"YUCIRGBToneCurve::setInputRGBCompositeControlPoints:"},{"address":"0x100033ee8","value":"YUCIRGBToneCurve::setInputRedControlPoints:"},{"address":"0x100033f5c","value":"YUCIRGBToneCurve::setInputGreenControlPoints:"},{"address":"0x100033fd0","value":"YUCIRGBToneCurve::setInputBlueControlPoints:"},{"address":"0x100034044","value":"YUCIRGBToneCurve::dealloc"},{"address":"0x100034160","value":"YUCIRGBToneCurve::updateToneCurveTexture"},{"address":"0x10003442c","value":"YUCIRGBToneCurve::getPreparedSplineCurve:"},{"address":"0x10003487c","value":"YUCIRGBToneCurve::splineCurve:"},{"address":"0x100034ae8","value":"YUCIRGBToneCurve::secondDerivative:"},{"address":"0x100034e1c","value":"YUCIRGBToneCurve::setInputIntensity:"},{"address":"0x100034e28","value":"YUCIRGBToneCurve::inputImage"},{"address":"0x100034e38","value":"YUCIRGBToneCurve::setInputImage:"},{"address":"0x100034e44","value":"YUCIHighPass::filterKernel"},{"address":"0x100034ea4","value":"YUCIHighPass::inputRadius"},{"address":"0x100034ee8","value":"YUCIHighPass::setDefaults"},{"address":"0x100034ef0","value":"YUCIHighPass::dealloc"},{"address":"0x100034f58","value":"YUCIHighPass::outputImage"},{"address":"0x100035098","value":"YUCIHighPass::inputImage"},{"address":"0x1000350a8","value":"YUCIHighPass::setInputImage:"},{"address":"0x1000350b4","value":"YUCIHighPass::setInputRadius:"},{"address":"0x1000350c0","value":"YUCIGreenBlueChannelOverlayBlend::filterKernel"},{"address":"0x100035120","value":"YUCIGreenBlueChannelOverlayBlend::outputImage"},{"address":"0x1000351e8","value":"YUCIGreenBlueChannelOverlayBlend::dealloc"},{"address":"0x10003521c","value":"YUCIGreenBlueChannelOverlayBlend::inputImage"},{"address":"0x10003522c","value":"YUCIGreenBlueChannelOverlayBlend::setInputImage:"},{"address":"0x100035238","value":"YUCIHighPassSkinSmoothingMaskBoost::filterKernel"},{"address":"0x100035298","value":"YUCIHighPassSkinSmoothingMaskBoost::outputImage"},{"address":"0x100035360","value":"YUCIHighPassSkinSmoothingMaskBoost::dealloc"},{"address":"0x100035394","value":"YUCIHighPassSkinSmoothingMaskBoost::inputImage"},{"address":"0x1000353a4","value":"YUCIHighPassSkinSmoothingMaskBoost::setInputImage:"},{"address":"0x1000353b0","value":"YUCIHighPassSkinSmoothingMaskGenerator::outputImage"},{"address":"0x1000354b8","value":"YUCIHighPassSkinSmoothingMaskGenerator::dealloc"},{"address":"0x10003550c","value":"YUCIHighPassSkinSmoothingMaskGenerator::inputImage"},{"address":"0x10003551c","value":"YUCIHighPassSkinSmoothingMaskGenerator::setInputImage:"},{"address":"0x100035528","value":"YUCIHighPassSkinSmoothingMaskGenerator::inputRadius"},{"address":"0x100035538","value":"YUCIHighPassSkinSmoothingMaskGenerator::setInputRadius:"},{"address":"0x100035544","value":"YUCIHighPassSkinSmoothing::load"},{"address":"0x100035688","value":"YUCIHighPassSkinSmoothing::inputAmount"},{"address":"0x1000356cc","value":"YUCIHighPassSkinSmoothing::inputRadius"},{"address":"0x100035710","value":"YUCIHighPassSkinSmoothing::inputMidtoneDetail"},{"address":"0x100035754","value":"YUCIHighPassSkinSmoothing::inputHighPassDetail"},{"address":"0x100035798","value":"YUCIHighPassSkinSmoothing::inputTeethWhitening"},{"address":"0x1000357dc","value":"YUCIHighPassSkinSmoothing::inputEyeBrightening"},{"address":"0x100035820","value":"YUCIHighPassSkinSmoothing::inputSkinBrightness"},{"address":"0x100035864","value":"YUCIHighPassSkinSmoothing::inputSkinTonePreset"},{"address":"0x1000358a8","value":"YUCIHighPassSkinSmoothing::inputSkinHue"},{"address":"0x1000358ec","value":"YUCIHighPassSkinSmoothing::inputSkinSaturation"},{"address":"0x100035930","value":"YUCIHighPassSkinSmoothing::inputSharpnessFactor"},{"address":"0x100035978","value":"YUCIHighPassSkinSmoothing::inputMaskThreshold"},{"address":"0x1000359c0","value":"YUCIHighPassSkinSmoothing::inputMaskSoftness"},{"address":"0x100035a08","value":"YUCIHighPassSkinSmoothing::inputMaskEdgeProtect"},{"address":"0x100035a50","value":"YUCIHighPassSkinSmoothing::inputShowChannelInfo"},{"address":"0x100035a94","value":"YUCIHighPassSkinSmoothing::inputDebugChannelMode"},{"address":"0x100035ad8","value":"YUCIHighPassSkinSmoothing::defaultInputRGBCompositeControlPoints"},{"address":"0x100035b80","value":"YUCIHighPassSkinSmoothing::setInputToneCurveControlPoints:"},{"address":"0x100035bc4","value":"YUCIHighPassSkinSmoothing::inputToneCurveControlPoints"},{"address":"0x100035bd8","value":"YUCIHighPassSkinSmoothing::skinToneCurveFilter"},{"address":"0x100035c2c","value":"YUCIHighPassSkinSmoothing::setDefaults"},{"address":"0x100035d78","value":"YUCIHighPassSkinSmoothing::outputImage"},{"address":"0x1000377c8","value":"YUCIHighPassSkinSmoothing::dealloc"},{"address":"0x100037a38","value":"YUCIHighPassSkinSmoothing::inputImage"},{"address":"0x100037a48","value":"YUCIHighPassSkinSmoothing::setInputImage:"},{"address":"0x100037a54","value":"YUCIHighPassSkinSmoothing::inputMaskImage"},{"address":"0x100037a64","value":"YUCIHighPassSkinSmoothing::setInputMaskImage:"},{"address":"0x100037a70","value":"YUCIHighPassSkinSmoothing::inputPreviewMaskImage"},{"address":"0x100037a80","value":"YUCIHighPassSkinSmoothing::setInputPreviewMaskImage:"},{"address":"0x100037a8c","value":"YUCIHighPassSkinSmoothing::inputLocalSmoothingMaskImage"},{"address":"0x100037a9c","value":"YUCIHighPassSkinSmoothing::setInputLocalSmoothingMaskImage:"},{"address":"0x100037aa8","value":"YUCIHighPassSkinSmoothing::inputGlobalSmoothingMaskImage"},{"address":"0x100037ab8","value":"YUCIHighPassSkinSmoothing::setInputGlobalSmoothingMaskImage:"},{"address":"0x100037ac4","value":"YUCIHighPassSkinSmoothing::inputSkinEvenToneMaskImage"},{"address":"0x100037ad4","value":"YUCIHighPassSkinSmoothing::setInputSkinEvenToneMaskImage:"},{"address":"0x100037ae0","value":"YUCIHighPassSkinSmoothing::inputTeethMaskImage"},{"address":"0x100037af0","value":"YUCIHighPassSkinSmoothing::setInputTeethMaskImage:"},{"address":"0x100037afc","value":"YUCIHighPassSkinSmoothing::inputEyeMaskImage"},{"address":"0x100037b0c","value":"YUCIHighPassSkinSmoothing::setInputEyeMaskImage:"},{"address":"0x100037b18","value":"YUCIHighPassSkinSmoothing::inputEyeMaskActiveExtentVector"},{"address":"0x100037b28","value":"YUCIHighPassSkinSmoothing::setInputEyeMaskActiveExtentVector:"},{"address":"0x100037b34","value":"YUCIHighPassSkinSmoothing::setInputAmount:"},{"address":"0x100037b40","value":"YUCIHighPassSkinSmoothing::setInputSkinTonePreset:"},{"address":"0x100037b4c","value":"YUCIHighPassSkinSmoothing::setInputSkinBrightness:"},{"address":"0x100037b58","value":"YUCIHighPassSkinSmoothing::setInputSkinHue:"},{"address":"0x100037b64","value":"YUCIHighPassSkinSmoothing::setInputSkinSaturation:"},{"address":"0x100037b70","value":"YUCIHighPassSkinSmoothing::setInputMidtoneDetail:"},{"address":"0x100037b7c","value":"YUCIHighPassSkinSmoothing::setInputHighPassDetail:"},{"address":"0x100037b88","value":"YUCIHighPassSkinSmoothing::setInputTeethWhitening:"},{"address":"0x100037b94","value":"YUCIHighPassSkinSmoothing::setInputEyeBrightening:"},{"address":"0x100037ba0","value":"YUCIHighPassSkinSmoothing::setInputRadius:"},{"address":"0x100037bac","value":"YUCIHighPassSkinSmoothing::setInputSharpnessFactor:"},{"address":"0x100037bb8","value":"YUCIHighPassSkinSmoothing::setInputMaskThreshold:"},{"address":"0x100037bc4","value":"YUCIHighPassSkinSmoothing::setInputMaskSoftness:"},{"address":"0x100037bd0","value":"YUCIHighPassSkinSmoothing::setInputMaskEdgeProtect:"},{"address":"0x100037bdc","value":"YUCIHighPassSkinSmoothing::setInputShowChannelInfo:"},{"address":"0x100037be8","value":"YUCIHighPassSkinSmoothing::setInputDebugChannelMode:"},{"address":"0x100037bf4","value":"YUCIHighPassSkinSmoothing::inputInvertMaskChannel"},{"address":"0x100037c04","value":"YUCIHighPassSkinSmoothing::setInputInvertMaskChannel:"}],"operation":"search_procedures","parameters":{"case_sensitive":false,"mode":"regex","pattern":"(YUCI|MetalDevice|MSS.*Value::default|MSS.*Panel::)"},"predicate_type":"rea.analysis","provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"},"raw_result":[{"address":"0x100003e4c","value":"MSSSectionCardParameterValue::defaultValue"},{"address":"0x1000339c0","value":"YUCIFilterConstructor::constructor"},{"address":"0x100033a18","value":"YUCIFilterConstructor::initForSharedConstructor"},{"address":"0x100033a4c","value":"YUCIFilterConstructor::filterWithName:"},{"address":"0x100033a64","value":"YUCIRGBToneCurve::filterKernel"},{"address":"0x100033ac4","value":"YUCIRGBToneCurve::inputIntensity"},{"address":"0x100033b08","value":"YUCIRGBToneCurve::defaultCurveControlPoints"},{"address":"0x100033ba8","value":"YUCIRGBToneCurve::setDefaults"},{"address":"0x100033bf8","value":"YUCIRGBToneCurve::outputImage"},{"address":"0x100033d54","value":"YUCIRGBToneCurve::inputRGBCompositeControlPoints"},{"address":"0x100033d9c","value":"YUCIRGBToneCurve::inputRedControlPoints"},{"address":"0x100033de4","value":"YUCIRGBToneCurve::inputGreenControlPoints"},{"address":"0x100033e2c","value":"YUCIRGBToneCurve::inputBlueControlPoints"},{"address":"0x100033e74","value":"YUCIRGBToneCurve::setInputRGBCompositeControlPoints:"},{"address":"0x100033ee8","value":"YUCIRGBToneCurve::setInputRedControlPoints:"},{"address":"0x100033f5c","value":"YUCIRGBToneCurve::setInputGreenControlPoints:"},{"address":"0x100033fd0","value":"YUCIRGBToneCurve::setInputBlueControlPoints:"},{"address":"0x100034044","value":"YUCIRGBToneCurve::dealloc"},{"address":"0x100034160","value":"YUCIRGBToneCurve::updateToneCurveTexture"},{"address":"0x10003442c","value":"YUCIRGBToneCurve::getPreparedSplineCurve:"},{"address":"0x10003487c","value":"YUCIRGBToneCurve::splineCurve:"},{"address":"0x100034ae8","value":"YUCIRGBToneCurve::secondDerivative:"},{"address":"0x100034e1c","value":"YUCIRGBToneCurve::setInputIntensity:"},{"address":"0x100034e28","value":"YUCIRGBToneCurve::inputImage"},{"address":"0x100034e38","value":"YUCIRGBToneCurve::setInputImage:"},{"address":"0x100034e44","value":"YUCIHighPass::filterKernel"},{"address":"0x100034ea4","value":"YUCIHighPass::inputRadius"},{"address":"0x100034ee8","value":"YUCIHighPass::setDefaults"},{"address":"0x100034ef0","value":"YUCIHighPass::dealloc"},{"address":"0x100034f58","value":"YUCIHighPass::outputImage"},{"address":"0x100035098","value":"YUCIHighPass::inputImage"},{"address":"0x1000350a8","value":"YUCIHighPass::setInputImage:"},{"address":"0x1000350b4","value":"YUCIHighPass::setInputRadius:"},{"address":"0x1000350c0","value":"YUCIGreenBlueChannelOverlayBlend::filterKernel"},{"address":"0x100035120","value":"YUCIGreenBlueChannelOverlayBlend::outputImage"},{"address":"0x1000351e8","value":"YUCIGreenBlueChannelOverlayBlend::dealloc"},{"address":"0x10003521c","value":"YUCIGreenBlueChannelOverlayBlend::inputImage"},{"address":"0x10003522c","value":"YUCIGreenBlueChannelOverlayBlend::setInputImage:"},{"address":"0x100035238","value":"YUCIHighPassSkinSmoothingMaskBoost::filterKernel"},{"address":"0x100035298","value":"YUCIHighPassSkinSmoothingMaskBoost::outputImage"},{"address":"0x100035360","value":"YUCIHighPassSkinSmoothingMaskBoost::dealloc"},{"address":"0x100035394","value":"YUCIHighPassSkinSmoothingMaskBoost::inputImage"},{"address":"0x1000353a4","value":"YUCIHighPassSkinSmoothingMaskBoost::setInputImage:"},{"address":"0x1000353b0","value":"YUCIHighPassSkinSmoothingMaskGenerator::outputImage"},{"address":"0x1000354b8","value":"YUCIHighPassSkinSmoothingMaskGenerator::dealloc"},{"address":"0x10003550c","value":"YUCIHighPassSkinSmoothingMaskGenerator::inputImage"},{"address":"0x10003551c","value":"YUCIHighPassSkinSmoothingMaskGenerator::setInputImage:"},{"address":"0x100035528","value":"YUCIHighPassSkinSmoothingMaskGenerator::inputRadius"},{"address":"0x100035538","value":"YUCIHighPassSkinSmoothingMaskGenerator::setInputRadius:"},{"address":"0x100035544","value":"YUCIHighPassSkinSmoothing::load"},{"address":"0x100035688","value":"YUCIHighPassSkinSmoothing::inputAmount"},{"address":"0x1000356cc","value":"YUCIHighPassSkinSmoothing::inputRadius"},{"address":"0x100035710","value":"YUCIHighPassSkinSmoothing::inputMidtoneDetail"},{"address":"0x100035754","value":"YUCIHighPassSkinSmoothing::inputHighPassDetail"},{"address":"0x100035798","value":"YUCIHighPassSkinSmoothing::inputTeethWhitening"},{"address":"0x1000357dc","value":"YUCIHighPassSkinSmoothing::inputEyeBrightening"},{"address":"0x100035820","value":"YUCIHighPassSkinSmoothing::inputSkinBrightness"},{"address":"0x100035864","value":"YUCIHighPassSkinSmoothing::inputSkinTonePreset"},{"address":"0x1000358a8","value":"YUCIHighPassSkinSmoothing::inputSkinHue"},{"address":"0x1000358ec","value":"YUCIHighPassSkinSmoothing::inputSkinSaturation"},{"address":"0x100035930","value":"YUCIHighPassSkinSmoothing::inputSharpnessFactor"},{"address":"0x100035978","value":"YUCIHighPassSkinSmoothing::inputMaskThreshold"},{"address":"0x1000359c0","value":"YUCIHighPassSkinSmoothing::inputMaskSoftness"},{"address":"0x100035a08","value":"YUCIHighPassSkinSmoothing::inputMaskEdgeProtect"},{"address":"0x100035a50","value":"YUCIHighPassSkinSmoothing::inputShowChannelInfo"},{"address":"0x100035a94","value":"YUCIHighPassSkinSmoothing::inputDebugChannelMode"},{"address":"0x100035ad8","value":"YUCIHighPassSkinSmoothing::defaultInputRGBCompositeControlPoints"},{"address":"0x100035b80","value":"YUCIHighPassSkinSmoothing::setInputToneCurveControlPoints:"},{"address":"0x100035bc4","value":"YUCIHighPassSkinSmoothing::inputToneCurveControlPoints"},{"address":"0x100035bd8","value":"YUCIHighPassSkinSmoothing::skinToneCurveFilter"},{"address":"0x100035c2c","value":"YUCIHighPassSkinSmoothing::setDefaults"},{"address":"0x100035d78","value":"YUCIHighPassSkinSmoothing::outputImage"},{"address":"0x1000377c8","value":"YUCIHighPassSkinSmoothing::dealloc"},{"address":"0x100037a38","value":"YUCIHighPassSkinSmoothing::inputImage"},{"address":"0x100037a48","value":"YUCIHighPassSkinSmoothing::setInputImage:"},{"address":"0x100037a54","value":"YUCIHighPassSkinSmoothing::inputMaskImage"},{"address":"0x100037a64","value":"YUCIHighPassSkinSmoothing::setInputMaskImage:"},{"address":"0x100037a70","value":"YUCIHighPassSkinSmoothing::inputPreviewMaskImage"},{"address":"0x100037a80","value":"YUCIHighPassSkinSmoothing::setInputPreviewMaskImage:"},{"address":"0x100037a8c","value":"YUCIHighPassSkinSmoothing::inputLocalSmoothingMaskImage"},{"address":"0x100037a9c","value":"YUCIHighPassSkinSmoothing::setInputLocalSmoothingMaskImage:"},{"address":"0x100037aa8","value":"YUCIHighPassSkinSmoothing::inputGlobalSmoothingMaskImage"},{"address":"0x100037ab8","value":"YUCIHighPassSkinSmoothing::setInputGlobalSmoothingMaskImage:"},{"address":"0x100037ac4","value":"YUCIHighPassSkinSmoothing::inputSkinEvenToneMaskImage"},{"address":"0x100037ad4","value":"YUCIHighPassSkinSmoothing::setInputSkinEvenToneMaskImage:"},{"address":"0x100037ae0","value":"YUCIHighPassSkinSmoothing::inputTeethMaskImage"},{"address":"0x100037af0","value":"YUCIHighPassSkinSmoothing::setInputTeethMaskImage:"},{"address":"0x100037afc","value":"YUCIHighPassSkinSmoothing::inputEyeMaskImage"},{"address":"0x100037b0c","value":"YUCIHighPassSkinSmoothing::setInputEyeMaskImage:"},{"address":"0x100037b18","value":"YUCIHighPassSkinSmoothing::inputEyeMaskActiveExtentVector"},{"address":"0x100037b28","value":"YUCIHighPassSkinSmoothing::setInputEyeMaskActiveExtentVector:"},{"address":"0x100037b34","value":"YUCIHighPassSkinSmoothing::setInputAmount:"},{"address":"0x100037b40","value":"YUCIHighPassSkinSmoothing::setInputSkinTonePreset:"},{"address":"0x100037b4c","value":"YUCIHighPassSkinSmoothing::setInputSkinBrightness:"},{"address":"0x100037b58","value":"YUCIHighPassSkinSmoothing::setInputSkinHue:"},{"address":"0x100037b64","value":"YUCIHighPassSkinSmoothing::setInputSkinSaturation:"},{"address":"0x100037b70","value":"YUCIHighPassSkinSmoothing::setInputMidtoneDetail:"},{"address":"0x100037b7c","value":"YUCIHighPassSkinSmoothing::setInputHighPassDetail:"},{"address":"0x100037b88","value":"YUCIHighPassSkinSmoothing::setInputTeethWhitening:"},{"address":"0x100037b94","value":"YUCIHighPassSkinSmoothing::setInputEyeBrightening:"},{"address":"0x100037ba0","value":"YUCIHighPassSkinSmoothing::setInputRadius:"},{"address":"0x100037bac","value":"YUCIHighPassSkinSmoothing::setInputSharpnessFactor:"},{"address":"0x100037bb8","value":"YUCIHighPassSkinSmoothing::setInputMaskThreshold:"},{"address":"0x100037bc4","value":"YUCIHighPassSkinSmoothing::setInputMaskSoftness:"},{"address":"0x100037bd0","value":"YUCIHighPassSkinSmoothing::setInputMaskEdgeProtect:"},{"address":"0x100037bdc","value":"YUCIHighPassSkinSmoothing::setInputShowChannelInfo:"},{"address":"0x100037be8","value":"YUCIHighPassSkinSmoothing::setInputDebugChannelMode:"},{"address":"0x100037bf4","value":"YUCIHighPassSkinSmoothing::inputInvertMaskChannel"},{"address":"0x100037c04","value":"YUCIHighPassSkinSmoothing::setInputInvertMaskChannel:"}],"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}},{"analysis_profile":{"digest":"575a577ce88c350b8ef1d4768986d124a16377363cbf22c68a4f73cc917881d4","parameters":{"upstream_analysis_profile":{"digest":"20565088524a2d0359b9b96f46ac48e679d774c7b0092c56abc06de8fdbec11c","parameters":{"analyzer_preset":"ghidra-default","annotation_policy":"atomic-function-entry-metadata-v1","architecture":"arm64","available_architectures":["arm64"],"compiler_spec_id":"auto-default","decompiler_jump_loads":true,"function_body_evidence":"complete-inclusive-ranges-v1","function_boundary_observations":"ghidra-terminal-call-limitations-v1","function_references":"complete-body-and-entry-reference-manager-v2","import_mode":"ephemeral-source-immutable","instruction_flow_evidence":"decoded-return-pcode-v1","jump_table_evidence":"typed-case-default-blocks-v1","language_id":"auto-from-header","load_image_observations":"source-mappings-entry-context-v2","loader":"auto-from-header","location_resolution":"explicit-address-exact-entry-symbol-first-v3","no_return_repair":"returning-imports-decoded-return-v2","process_launch":"inspected-jvm-launch-support-v1","string_inventory_evidence":"defined-data-coverage-v1","target_format":"mach-o","target_kind":"executable"},"provider":{"id":"ghidra","name":"Ghidra","version":"12.1.4"}},"workflow_revision":2},"provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"}},"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_e66785c375f0fb9c669b9e34ecb3829c985894a93e5f8735ae0510def383e9b1","evidence_links":[],"limitations":["Derived by an REA composed workflow."],"locations":[{"address":"0x100003d40","kind":"address"},{"address":"0x10001c64c","kind":"address"},{"address":"0x10001c66c","kind":"address"},{"address":"0x10001c704","kind":"address"},{"address":"0x10001c70c","kind":"address"},{"address":"0x10002aa78","kind":"address"}],"normalized_result":{"failed":0,"items":[{"address":"0x100003d40","procedure":{"address":"0x100003d40","name":"MSSSectionCardParameterValue::init","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x10 bytes */\n\nID MSSSectionCardParameterValue::init(ID param_1,SEL param_2)\n\n{\n ID IVar1;\n undefined8 uVar2;\n undefined1 auVar3 [16];\n undefined8 uVar4;\n ID local_20;\n class_t *pcStack_18;\n \n pcStack_18 = &objc::class_t::MSSSectionCardParameterValue;\n local_20 = param_1;\n IVar1 = NSObject::init((ID)&local_20,\"init\");\n if (IVar1 != 0) {\n *(undefined8 *)(IVar1 + 0x60) = 0;\n *(undefined8 *)(IVar1 + 0x58) = 0;\n *(undefined8 *)(IVar1 + 0x50) = 0;\n *(undefined8 *)(IVar1 + 0x48) = 0;\n *(undefined8 *)(IVar1 + 0x40) = 0;\n *(undefined8 *)(IVar1 + 0x38) = 0;\n *(undefined8 *)(IVar1 + 0x70) = 0;\n *(undefined8 *)(IVar1 + 0x68) = 0;\n *(undefined8 *)(IVar1 + 0x80) = 0;\n *(undefined8 *)(IVar1 + 0x78) = 0;\n *(undefined8 *)(IVar1 + 0x90) = 0;\n *(undefined8 *)(IVar1 + 0x88) = 0;\n *(undefined8 *)(IVar1 + 0xa0) = 0;\n *(undefined8 *)(IVar1 + 0x98) = 0;\n *(undefined8 *)(IVar1 + 0xb0) = 0;\n *(undefined8 *)(IVar1 + 0xa8) = 0;\n *(undefined8 *)(IVar1 + 0xc0) = 0;\n *(undefined8 *)(IVar1 + 0xb8) = 0;\n *(undefined8 *)(IVar1 + 200) = 0;\n *(undefined8 *)(IVar1 + 0xd8) = 0;\n *(undefined8 *)(IVar1 + 0xd0) = 0x4020000000000000;\n *(undefined8 *)(IVar1 + 0xe8) = 0x3fd999999999999a;\n *(undefined8 *)(IVar1 + 0xe0) = 0x3fe3333333333333;\n *(undefined4 *)(IVar1 + 8) = 1;\n *(undefined1 *)(IVar1 + 0xc) = 0;\n *(undefined8 *)(IVar1 + 0xf8) = 0x3fe0000000000000;\n *(undefined8 *)(IVar1 + 0xf0) = 0x3ffccccccccccccd;\n *(undefined8 *)(IVar1 + 0x100) = 0x3fe0000000000000;\n *(undefined4 *)(IVar1 + 0xd) = 0;\n *(undefined8 *)(IVar1 + 0x120) = 0;\n *(undefined8 *)(IVar1 + 0x118) = 0;\n *(undefined8 *)(IVar1 + 0x130) = 0;\n *(undefined8 *)(IVar1 + 0x128) = 0;\n *(undefined8 *)(IVar1 + 0x110) = 0;\n *(undefined8 *)(IVar1 + 0x108) = 0;\n *(undefined8 *)(IVar1 + 0x138) = 0;\n *(undefined8 *)(IVar1 + 0x140) = 1;\n *(undefined1 *)(IVar1 + 0x11) = 0;\n *(undefined8 *)(IVar1 + 0x150) = 0;\n *(undefined8 *)(IVar1 + 0x148) = 0;\n *(undefined8 *)(IVar1 + 0x160) = 0;\n *(undefined8 *)(IVar1 + 0x158) = 0;\n *(undefined8 *)(IVar1 + 0x170) = 0;\n *(undefined8 *)(IVar1 + 0x168) = 0;\n *(undefined8 *)(IVar1 + 0x180) = 0;\n *(undefined8 *)(IVar1 + 0x178) = 0;\n *(undefined8 *)(IVar1 + 400) = 0;\n *(undefined8 *)(IVar1 + 0x188) = 0;\n *(undefined8 *)(IVar1 + 0x1a0) = 0;\n *(undefined8 *)(IVar1 + 0x198) = 0;\n *(undefined8 *)(IVar1 + 0x1b0) = 0;\n *(undefined8 *)(IVar1 + 0x1a8) = 0;\n *(undefined8 *)(IVar1 + 0x1c0) = 0;\n *(undefined8 *)(IVar1 + 0x1b8) = 0;\n *(undefined8 *)(IVar1 + 0x1d0) = 0;\n *(undefined8 *)(IVar1 + 0x1c8) = 0;\n *(undefined8 *)(IVar1 + 0x1d8) = 0;\n auVar3 = NEON_fmov(0x3fe0000000000000,8);\n uVar4 = auVar3._8_8_;\n *(undefined8 *)(IVar1 + 0x1e8) = uVar4;\n uVar2 = auVar3._0_8_;\n *(undefined8 *)(IVar1 + 0x1e0) = uVar2;\n *(undefined8 *)(IVar1 + 0x1f8) = uVar4;\n *(undefined8 *)(IVar1 + 0x1f0) = uVar2;\n *(undefined1 *)(IVar1 + 0x16) = 0;\n *(undefined4 *)(IVar1 + 0x12) = 0;\n *(undefined8 *)(IVar1 + 0x290) = 0;\n *(undefined8 *)(IVar1 + 0x278) = 0;\n *(undefined8 *)(IVar1 + 0x270) = 0;\n *(undefined8 *)(IVar1 + 0x288) = 0;\n *(undefined8 *)(IVar1 + 0x280) = 0;\n *(undefined8 *)(IVar1 + 600) = 0;\n *(undefined8 *)(IVar1 + 0x250) = 0;\n *(undefined8 *)(IVar1 + 0x268) = 0;\n *(undefined8 *)(IVar1 + 0x260) = 0;\n *(undefined8 *)(IVar1 + 0x238) = 0;\n *(undefined8 *)(IVar1 + 0x230) = 0;\n *(undefined8 *)(IVar1 + 0x248) = 0;\n *(undefined8 *)(IVar1 + 0x240) = 0;\n *(undefined8 *)(IVar1 + 0x218) = 0;\n *(undefined8 *)(IVar1 + 0x210) = 0;\n *(undefined8 *)(IVar1 + 0x228) = 0;\n *(undefined8 *)(IVar1 + 0x220) = 0;\n *(undefined8 *)(IVar1 + 0x208) = uVar4;\n *(undefined8 *)(IVar1 + 0x200) = uVar2;\n *(undefined4 *)(IVar1 + 0x2e) = 0x1010101;\n *(undefined8 *)(IVar1 + 0x27) = 0x101010101010101;\n *(undefined8 *)(IVar1 + 0x1f) = 0x101010101010101;\n *(undefined8 *)(IVar1 + 0x17) = 0x101010101010101;\n }\n return IVar1;\n}\n\n","status":"ok"},{"address":"0x10001c64c","procedure":{"address":"0x10001c64c","name":"MSSuperSkinSmoothingPlugIn::desiredAnalysisTimeRange:forInputWithTimeRange:error:","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x50 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::desiredAnalysisTimeRange_forInputWithTimeRange_error_\n (ID param_1,SEL param_2,AnonymousStructure27 *param_3,AnonymousStructure27 param_4,\n ID *param_5)\n\n{\n long_long lVar1;\n undefined8 uVar2;\n long_long lVar3;\n undefined8 uVar4;\n long_long lVar5;\n \n if (param_3 != (AnonymousStructure27 *)0x0) {\n uVar2 = *(undefined8 *)(param_4.field0_0x0.field0_0x0 + 8);\n lVar1 = *(long_long *)param_4.field0_0x0.field0_0x0;\n lVar3 = *(long_long *)(param_4.field0_0x0.field0_0x0 + 0x10);\n lVar5 = *(long_long *)(param_4.field0_0x0.field0_0x0 + 0x28);\n uVar4 = *(undefined8 *)(param_4.field0_0x0.field0_0x0 + 0x20);\n (param_3->field1_0x18).field0_0x0 = *(long_long *)(param_4.field0_0x0.field0_0x0 + 0x18);\n (param_3->field0_0x0).field3_0x10 = lVar3;\n (param_3->field1_0x18).field3_0x10 = lVar5;\n (param_3->field1_0x18).field1_0x8 = (int)uVar4;\n (param_3->field1_0x18).field2_0xc = (int)((ulong)uVar4 >> 0x20);\n (param_3->field0_0x0).field1_0x8 = (int)uVar2;\n (param_3->field0_0x0).field2_0xc = (int)((ulong)uVar2 >> 0x20);\n (param_3->field0_0x0).field0_0x0 = lVar1;\n }\n return (bool)(param_3 != (AnonymousStructure27 *)0x0);\n}\n\n","status":"ok"},{"address":"0x10001c66c","procedure":{"address":"0x10001c66c","name":"MSSuperSkinSmoothingPlugIn::setupAnalysisForTimeRange:frameDuration:error:","status":"resolved"},"pseudocode":"\n/* WARNING: Function: _objc_release replaced with injection: _objc_release_fixup */\n/* Function Stack Size: 0x60 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::setupAnalysisForTimeRange_frameDuration_error_\n (ID param_1,SEL param_2,AnonymousStructure27 param_3,AnonymousStructure0 param_4,\n ID *param_5)\n\n{\n undefined8 uVar1;\n undefined8 uVar2;\n undefined8 uVar3;\n \n objc_stub::lock(*(ID *)(param_1 + 0x368),param_3.field0_0x0.field0_0x0,param_3.field0_0x0._8_8_,\n param_3.field0_0x0.field3_0x10,param_3.field1_0x18.field0_0x0,\n param_3.field1_0x18._8_8_,param_3.field1_0x18.field3_0x10);\n *(undefined8 *)(param_1 + 0x370) = 0;\n *(undefined8 *)(param_1 + 0x378) = 0;\n *(undefined8 *)(param_1 + 0x4c0) = 0;\n *(undefined8 *)(param_1 + 0x4b8) = 0;\n *(undefined1 *)(param_1 + 0x4c8) = 0;\n *(undefined8 *)(param_1 + 0x500) = 0;\n *(undefined1 *)(param_1 + 0x508) = 0;\n *(undefined1 *)(param_1 + 0x4e8) = 0;\n uVar1 = *(undefined8 *)PTR__CGRectZero_100078118;\n uVar3 = *(undefined8 *)(PTR__CGRectZero_100078118 + 0x18);\n uVar2 = *(undefined8 *)(PTR__CGRectZero_100078118 + 0x10);\n *(undefined8 *)(param_1 + 0x3c8) = *(undefined8 *)(PTR__CGRectZero_100078118 + 8);\n *(undefined8 *)(param_1 + 0x3c0) = uVar1;\n *(undefined8 *)(param_1 + 0x3d8) = uVar3;\n *(undefined8 *)(param_1 + 0x3d0) = uVar2;\n *(undefined2 *)(param_1 + 0x431) = 0;\n *(undefined1 *)(param_1 + 0x433) = 0;\n *(undefined8 *)(param_1 + 0x518) = 0;\n objc_stub::unlock(*(ID *)(param_1 + 0x368));\n return 1;\n}\n\n","status":"ok"},{"address":"0x10001c704","procedure":{"address":"0x10001c704","name":"MSSuperSkinSmoothingPlugIn::analyzeFrame:atTime:error:","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x38 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::analyzeFrame_atTime_error_\n (ID param_1,SEL param_2,ID param_3,AnonymousStructure0 param_4,ID *param_5)\n\n{\n return 1;\n}\n\n","status":"ok"},{"address":"0x10001c70c","procedure":{"address":"0x10001c70c","name":"MSSuperSkinSmoothingPlugIn::cleanupAnalysis:","status":"resolved"},"pseudocode":"\n/* WARNING: Function: _objc_release replaced with injection: _objc_release_fixup */\n/* Function Stack Size: 0x18 bytes */\n\nbool MSSuperSkinSmoothingPlugIn::cleanupAnalysis_(ID param_1,SEL param_2,ID *param_3)\n\n{\n undefined *puVar1;\n undefined8 uVar2;\n undefined8 uVar3;\n undefined8 uVar4;\n \n objc_stub::lock(*(ID *)(param_1 + 0x368));\n *(undefined8 *)(param_1 + 0x370) = 0;\n *(undefined8 *)(param_1 + 0x378) = 0;\n *(undefined8 *)(param_1 + 0x4c0) = 0;\n *(undefined8 *)(param_1 + 0x4b8) = 0;\n *(undefined1 *)(param_1 + 0x4c8) = 0;\n *(undefined4 *)(param_1 + 0x430) = 0;\n *(undefined8 *)(param_1 + 0x500) = 0;\n *(undefined1 *)(param_1 + 0x508) = 0;\n puVar1 = PTR__CGRectZero_100078118;\n *(undefined1 *)(param_1 + 0x4e8) = 0;\n uVar2 = *(undefined8 *)puVar1;\n uVar4 = *(undefined8 *)(puVar1 + 0x18);\n uVar3 = *(undefined8 *)(puVar1 + 0x10);\n *(undefined8 *)(param_1 + 0x3c8) = *(undefined8 *)(puVar1 + 8);\n *(undefined8 *)(param_1 + 0x3c0) = uVar2;\n *(undefined8 *)(param_1 + 0x3d8) = uVar4;\n *(undefined8 *)(param_1 + 0x3d0) = uVar3;\n *(undefined8 *)(param_1 + 0x518) = 0;\n *(undefined8 *)(param_1 + 0x510) = 0;\n objc_stub::unlock(*(ID *)(param_1 + 0x368));\n return 1;\n}\n\n","status":"ok"},{"address":"0x10002aa78","procedure":{"address":"0x10002aa78","name":"MSSuperSkinSmoothingPlugIn::createViewForParameterID:","status":"resolved"},"pseudocode":"\n/* Function Stack Size: 0x14 bytes */\n\nID MSSuperSkinSmoothingPlugIn::createViewForParameterID_\n (ID param_1,SEL param_2,unsigned_int param_3)\n\n{\n class_t *self;\n class_t *self_00;\n ID IVar1;\n ID IVar2;\n ulong uVar3;\n ulong uVar4;\n int iVar5;\n double dVar6;\n double dVar7;\n double dVar8;\n \n if (param_3 != 0xd2) {\n return 0;\n }\n self = &objc::class_t::MSSSkinControlPanelView;\n _objc_alloc();\n self_00 = self;\n FUN_10000b190();\n IVar1 = objc_stub::count((ID)self_00);\n if (IVar1 == 0) {\n dVar8 = 142.0;\n }\n else {\n uVar4 = 0;\n dVar8 = 142.0;\n do {\n IVar1 = objc_stub::objectAtIndexedSubscript_((ID)self_00,uVar4);\n IVar2 = objc_stub::objectForKeyedSubscript_(IVar1,&cf_headerID);\n IVar2 = objc_stub::unsignedIntValue(IVar2);\n IVar1 = objc_stub::objectForKeyedSubscript_(IVar1,&cf_controls);\n uVar3 = objc_stub::count(IVar1);\n iVar5 = (int)IVar2;\n if (iVar5 == 0xca) {\n uVar3 = uVar3 + 1;\n }\n if (uVar3 == 0) {\n dVar6 = 0.0;\n }\n else {\n dVar6 = (double)(uVar3 - 1) + (double)(uVar3 - 1) + (double)uVar3 * 26.0;\n }\n dVar7 = dVar6 + 8.0;\n if (iVar5 != 0xca) {\n dVar7 = dVar6;\n }\n dVar6 = 100.0;\n if (iVar5 != 0xc9) {\n dVar6 = 56.0;\n }\n dVar6 = dVar8 + dVar6 + dVar7 + 12.0;\n uVar4 = uVar4 + 1;\n IVar1 = objc_stub::count((ID)self_00);\n dVar8 = dVar6 + 8.0;\n if (IVar1 <= uVar4) {\n dVar8 = dVar6;\n }\n IVar1 = objc_stub::count((ID)self_00);\n } while (uVar4 < IVar1);\n }\n IVar1 = objc_stub::initWithFrame_apiManager_pluginHost_\n ((ID)self,0,0,0x4078100000000000,(long)dVar8,*(undefined8 *)(param_1 + 8),\n param_1);\n return IVar1;\n}\n\n","status":"ok"}],"succeeded":6,"total":6},"operation":"batch_decompile","parameters":{"addresses":["0x100003d40","0x10001c64c","0x10001c66c","0x10001c704","0x10001c70c","0x10002aa78"]},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":"arm64","digest":{"sha256":"f01e8c0b7e2676b2961950b0e48efdd2589af218e4b36de7d39f5d1c76852bfb"},"format":"mach-o","local_path":"/private/tmp/paintfcp-rea.b3j9Te/MSE18V2-arm64","name":"MSE18V2-arm64"}}],"scenarios":[],"unknowns":[]}
\ No newline at end of file
diff --git a/scripts/test.sh b/scripts/test.sh
new file mode 100755
index 0000000..2ec5331
--- /dev/null
+++ b/scripts/test.sh
@@ -0,0 +1,11 @@
+#!/bin/zsh
+set -euo pipefail
+cd "${0:A:h:h}"
+output_dir=$(mktemp -d /tmp/paintfcp-tests.XXXXXX)
+trap 'rm -rf "$output_dir"' EXIT
+plugin_dir="$PWD/beatygril/beatygril/Plugin"
+common=(-fobjc-arc -fmodules -Wall -Wextra -Wno-unused-parameter -DCI_SILENCE_GL_DEPRECATION -mmacosx-version-min=13.0 -I "$plugin_dir" -framework Foundation -framework CoreImage -framework CoreGraphics -framework CoreMedia -framework Metal -framework Vision -framework ImageIO)
+xcrun clang "${common[@]}" "$plugin_dir/PGBeautyRenderer.m" tests/beauty_render_tests.m -o "$output_dir/beauty-tests"
+"$output_dir/beauty-tests"
+xcrun clang "${common[@]}" "$plugin_dir/PGFaceProcessor.m" tests/face_tests.m -o "$output_dir/face-tests"
+"$output_dir/face-tests" "$PWD/tests/fixtures/astronaut.png"
diff --git a/tests/beauty_render_tests.m b/tests/beauty_render_tests.m
new file mode 100644
index 0000000..98a7264
--- /dev/null
+++ b/tests/beauty_render_tests.m
@@ -0,0 +1,181 @@
+#import
+#import
+#import
+#import "PGBeautyRenderer.h"
+#include
+
+static const int W=96,H=64;
+static int failures=0,checks=0;
+static void Check(BOOL pass,NSString *message) {
+ checks++;
+ if (!pass) { failures++; fprintf(stderr,"FAIL: %s\n",message.UTF8String); }
+}
+static CIImage *Image(const float *pixels,CGRect extent) {
+ NSData *data=[NSData dataWithBytes:pixels length:W*H*4*sizeof(float)];
+ return [[CIImage imageWithBitmapData:data bytesPerRow:W*4*sizeof(float)
+ size:CGSizeMake(W,H) format:kCIFormatRGBAf colorSpace:nil]
+ imageByApplyingTransform:CGAffineTransformMakeTranslation(extent.origin.x,extent.origin.y)];
+}
+static float *Render(CIContext *context,CIImage *image,CGRect extent) {
+ float *p=calloc(W*H*4,sizeof(float));
+ if (image) [context render:image toBitmap:p rowBytes:W*4*sizeof(float)
+ bounds:extent format:kCIFormatRGBAf colorSpace:nil];
+ return p;
+}
+static float Difference(float *a,float *b,int x0,int x1) {
+ float sum=0;int n=0;
+ for(int y=8;y device=MTLCreateSystemDefaultDevice();
+ CIContext *context=device ? [CIContext contextWithMTLDevice:device options:options] : [CIContext contextWithOptions:options];
+ PGBeautyRenderer *renderer=[PGBeautyRenderer new];
+ CGRect extent=CGRectMake(13,-9,W,H);
+ float *p=calloc(W*H*4,sizeof(float)),*mask=calloc(W*H*4,sizeof(float));
+ for(int y=0;y0.08,@"Skin brightness has a substantial visible effect");
+ Check(Difference(base,bright,56,88)<0.00001,@"Skin-only color change respects the supplied mask");
+ s.invertMask=1;
+ float *inverse=Render(context,[renderer processImage:source settings:s skinMask:half teethMask:nil eyeMask:nil error:&error],extent);
+ Check(Difference(base,inverse,6,40)<0.00001 && Difference(base,inverse,56,88)>0.08,@"Invert mask selects the complementary region");
+ free(bright);free(inverse);
+ s=PGBeautyDefaults();s.showMask=1;s.maskSoftness=0;s.maskEdgeProtect=0;
+ float *preview=Render(context,[renderer processImage:source settings:s skinMask:half teethMask:nil eyeMask:nil error:&error],extent);
+ Check(preview[(32*W+20)*4]>0.99 && preview[(32*W+72)*4]<0.01,@"Mask preview exposes actual coverage");free(preview);
+ s=PGBeautyDefaults();s.highPassDetail=1;
+ float *global=Render(context,[renderer processImage:source settings:s skinMask:nil teethMask:nil eyeMask:nil error:&error],extent);
+ Check(Texture(global,8,W-8)base[(32*W+20)*4+2]+0.035,@"Teeth whitening neutralizes yellow and lifts blue");
+ Check(Difference(base,whiten,56,88)<0.00001,@"Teeth whitening is spatially confined");free(whiten);
+ s=PGBeautyDefaults();s.eyeBrightening=1;
+ float *eyes=Render(context,[renderer processImage:source settings:s skinMask:nil teethMask:nil eyeMask:half error:&error],extent);
+ Check(Difference(base,eyes,6,40)>0.04 && Difference(base,eyes,56,88)<0.00001,@"Eye brightening is visible and spatially confined");free(eyes);
+ for(int preset=1;preset<=6;preset++) {
+ s=PGBeautyDefaults();s.skinTonePreset=preset;s.maskSoftness=0;s.maskEdgeProtect=0;
+ float *look=Render(context,[renderer processImage:source settings:s skinMask:half teethMask:nil eyeMask:nil error:&error],extent);
+ Check(Difference(base,look,6,40)>0.002 && Difference(base,look,56,88)<0.00001,
+ [NSString stringWithFormat:@"Independent skin preset %d changes only skin",preset]);free(look);
+ }
+ s=PGBeautyDefaults();s.skinHue=30;s.maskSoftness=0;s.maskEdgeProtect=0;
+ float *hue=Render(context,[renderer processImage:source settings:s skinMask:half teethMask:nil eyeMask:nil error:&error],extent);
+ Check(Difference(base,hue,6,40)>0.025 && Difference(base,hue,56,88)<0.00001,@"Hue rotates selected skin without changing the rest");free(hue);
+ s.skinHue=0;s.skinSaturation=-100;
+ float *desaturated=Render(context,[renderer processImage:source settings:s skinMask:half teethMask:nil eyeMask:nil error:&error],extent);
+ int center=(32*W+20)*4;
+ Check(fabsf(desaturated[center]-desaturated[center+1])<0.0002 && fabsf(desaturated[center+1]-desaturated[center+2])<0.0002,@"Minus 100 saturation produces neutral gray skin");free(desaturated);
+ s=PGBeautyDefaults();s.sharpness=1;
+ float *sharp=Render(context,[renderer processImage:source settings:s skinMask:nil teethMask:nil eyeMask:nil error:&error],extent);
+ Check(Texture(sharp,8,W-8)>Texture(base,8,W-8)*1.05,@"Sharpening increases local edge contrast");free(sharp);
+ s=PGBeautyDefaults();s.midtoneDetail=1;s.maskSoftness=0;s.maskEdgeProtect=0;s.featureProtection=1;
+ float *protected=Render(context,[renderer processImage:source settings:s skinMask:white teethMask:nil eyeMask:half error:&error],extent);
+ Check(Difference(base,protected,6,40)<0.00001 && Texture(protected,56,88)=strictMask[(32*W+20)*4] && looseMask[(32*W+72)*4]==0,@"Mask threshold keeps zero coverage empty");free(strictMask);free(looseMask);
+ CIImage *grayMask=[[CIImage imageWithColor:[CIColor colorWithRed:0.5 green:0.5 blue:0.5 alpha:1]] imageByCroppingToRect:extent];
+ s.maskThreshold=220;
+ float *highThreshold=Render(context,[renderer processImage:source settings:s skinMask:grayMask teethMask:nil eyeMask:nil error:&error],extent);
+ s.maskThreshold=60;
+ float *lowThreshold=Render(context,[renderer processImage:source settings:s skinMask:grayMask teethMask:nil eyeMask:nil error:&error],extent);
+ Check(highThreshold[(32*W+20)*4]<0.01 && lowThreshold[(32*W+20)*4]>0.99,@"Mask threshold materially changes intermediate confidence coverage");free(highThreshold);free(lowThreshold);
+ // Chroma-only speckle should be reduced while its luminance stays stable.
+ float *colorNoise=calloc(W*H*4,sizeof(float));
+ for(int y=0;ylooks[3][center+2]-looks[3][center]+0.04,@"Cool white and warm white follow popup order");
+ Check(looks[4][center]-looks[4][center+1]>looks[1][center]-looks[1][center+1],@"Rosy white has stronger rosy chroma than natural white");
+ float bronzeY=looks[6][center]*0.299+looks[6][center+1]*0.587+looks[6][center+2]*0.114;
+ float wheatY=looks[5][center]*0.299+looks[5][center+1]*0.587+looks[5][center+2]*0.114;
+ float sourceY=base[center]*0.299+base[center+1]*0.587+base[center+2]*0.114;
+ Check(bronzeYlooks[6][center+2],@"Bronze is a darker warm brown than wheat");
+ for(int preset=0;preset<=6;preset++)free(looks[preset]);
+ // The renderer's optional blend is linear once; a host that also blends must
+ // pass mix=1 and blend the complete processed image against the original.
+ s=PGBeautyDefaults();s.skinBrightness=1;s.skinHue=14;s.skinSaturation=20;s.maskSoftness=0;s.maskEdgeProtect=0;
+ float *fullEffect=Render(context,[renderer processImage:source settings:s skinMask:half teethMask:nil eyeMask:nil error:&error],extent);
+ s.mix=0.5;
+ float *halfEffect=Render(context,[renderer processImage:source settings:s skinMask:half teethMask:nil eyeMask:nil error:&error],extent);
+ BOOL linearMix=YES;
+ for(int i=0;i0.0002)linearMix=NO;
+ Check(linearMix,@"Combined color controls receive exactly one linear global blend");free(fullEffect);free(halfEffect);
+ // Every operation must preserve transparency rather than creating halos/opaque pixels.
+ for(int i=0;i0.0002)alphaOK=NO;for(int c=0;c<4;c++)if(!isfinite(alpha[i*4+c]))finite=NO;}
+ Check(alphaOK,@"Combined beauty pipeline preserves fractional alpha");Check(finite,@"Combined beauty pipeline produces finite pixels");free(alpha);
+ // Explicit failure path for unbounded images.
+ CIImage *invalid=[renderer processImage:[CIImage imageWithColor:[CIColor whiteColor]] settings:s skinMask:nil teethMask:nil eyeMask:nil error:&error];
+ Check(invalid==nil && error!=nil,@"Unbounded input produces a useful error");
+ free(base);free(smooth);free(mask);free(p);
+ printf("Beauty renderer: %d checks, %d failures (%s).\n",checks,failures,device ? "Metal" : "default Core Image");
+ return failures ? 1:0;
+}}
diff --git a/tests/face_tests.m b/tests/face_tests.m
new file mode 100644
index 0000000..c2fda37
--- /dev/null
+++ b/tests/face_tests.m
@@ -0,0 +1,209 @@
+#import
+#import
+#import
+#import
+#import "PGFaceProcessor.h"
+
+// Injectable detections let geometry, selection and saved-frame behavior be
+// tested independently of the separate public-domain NASA portrait fixture.
+@interface PGFaceProcessor (TestDetection)
+- (NSArray *)observationsInImage:(CIImage *)image settings:(PGBeautySettings)settings error:(NSError **)error;
+@end
+@interface PGFaceFixture : PGFaceProcessor
+@property (nonatomic, copy) NSArray *detections;
+@property (nonatomic) NSUInteger detectionCount;
+@end
+@implementation PGFaceFixture
+- (NSArray *)observationsInImage:(CIImage *)image settings:(PGBeautySettings)settings error:(NSError **)error {
+ self.detectionCount++;
+ return self.detections ?: @[];
+}
+@end
+
+static NSUInteger PGChecks = 0;
+static void Check(BOOL condition, NSString *description) {
+ PGChecks++;
+ if (!condition) { fprintf(stderr, "FAIL: %s\n", description.UTF8String); exit(1); }
+}
+static VNFaceObservation *Face(CGRect box) {
+ return [VNFaceObservation faceObservationWithRequestRevision:VNDetectFaceLandmarksRequestRevision3 boundingBox:box roll:nil yaw:nil pitch:nil];
+}
+static NSData *Pixels(CIContext *context, CIImage *image) {
+ CGRect bounds = image.extent;
+ NSUInteger width = (NSUInteger)bounds.size.width, height = (NSUInteger)bounds.size.height;
+ NSMutableData *data = [NSMutableData dataWithLength:width * height * 4];
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ [context render:image toBitmap:data.mutableBytes rowBytes:width * 4 bounds:bounds format:kCIFormatRGBA8 colorSpace:colorSpace];
+ CGColorSpaceRelease(colorSpace);
+ return data;
+}
+static unsigned char Channel(CIContext *context, CIImage *image, double x, double y, NSUInteger channel) {
+ unsigned char pixel[4] = {0};
+ CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ [context render:image toBitmap:pixel rowBytes:4 bounds:CGRectMake(x, y, 1, 1) format:kCIFormatRGBA8 colorSpace:space];
+ CGColorSpaceRelease(space);
+ return pixel[channel];
+}
+static CIImage *Gradient(void) {
+ NSMutableData *data = [NSMutableData dataWithLength:128 * 128 * 4];
+ unsigned char *p = data.mutableBytes;
+ for (NSUInteger y = 0; y < 128; y++) for (NSUInteger x = 0; x < 128; x++) {
+ NSUInteger index = 4 * (y * 128 + x);
+ p[index] = x * 2; p[index + 1] = y * 2;
+ p[index + 2] = ((x / 8 + y / 8) % 2) * 220 + 15; p[index + 3] = 255;
+ }
+ CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ CIImage *image = [CIImage imageWithBitmapData:data bytesPerRow:128 * 4 size:CGSizeMake(128, 128) format:kCIFormatRGBA8 colorSpace:space];
+ CGColorSpaceRelease(space);
+ return image;
+}
+
+int main(int argc, const char *argv[]) {
+ @autoreleasepool {
+ CIContext *context = [CIContext contextWithOptions:@{kCIContextCacheIntermediates:@NO}];
+ CIImage *image = Gradient();
+ PGBeautySettings settings = PGBeautyDefaults();
+ PGFaceFixture *processor = [[PGFaceFixture alloc] init];
+ VNFaceObservation *left = Face(CGRectMake(0.08, 0.18, 0.36, 0.62));
+ VNFaceObservation *right = Face(CGRectMake(0.64, 0.23, 0.28, 0.53));
+ processor.detections = @[left, right];
+ NSError *error = nil;
+ PGFaceFrame *frame = [processor processImage:image settings:settings time:kCMTimeZero error:&error];
+ Check(frame != nil && error == nil, @"kernels initialize and process finite input");
+ Check(frame.faces.count == 2, @"multi-face mode retains both detections");
+ Check([Pixels(context, frame.image) isEqualToData:Pixels(context, image)], @"zero geometry controls preserve original pixels");
+ Check(Channel(context, frame.skinMask, 1, 1, 0) == 0, @"skin mask excludes background");
+ Check(Channel(context, frame.skinMask, 18, 54, 0) > 150, @"skin mask covers cheek");
+ Check(Channel(context, frame.eyeMask, 23, 71, 0) > 40, @"eye mask includes estimated eye region");
+ Check(Channel(context, frame.teethMask, 33, 42, 0) > 20, @"teeth mask includes inner mouth region");
+ PGBeautySettings unprotected = settings; unprotected.featureProtection = 0;
+ PGFaceFrame *withoutProtection = [processor processImage:image settings:unprotected time:kCMTimeZero error:&error];
+ Check(Channel(context, frame.skinMask, 23, 71, 0) < Channel(context, withoutProtection.skinMask, 23, 71, 0), @"feature protection removes eye from skin smoothing");
+
+ settings.singleFace = 1; settings.selectionX = 0.78; settings.selectionY = 0.45;
+ frame = [processor processImage:image settings:settings time:kCMTimeZero error:&error];
+ Check(frame.faces.count == 1 && frame.faces.firstObject.boundingBox.origin.x > 0.5, @"single-face selection uses normalized bottom-left point");
+ settings.selectionX = 0.25; settings.selectionY = 0.5;
+ settings.trackingEnabled = 1; settings.faceJumpGuardRange = 0.5;
+ CMTime first = CMTimeMake(1, 24), second = CMTimeMake(2, 24);
+ Check([processor analyzeImage:image settings:settings time:first error:&error], @"analysis stores first precise frame");
+ processor.detections = @[right];
+ Check([processor analyzeImage:image settings:settings time:second error:&error], @"analysis stores guarded missing-target frame");
+ NSUInteger detectionsBeforeRender = processor.detectionCount;
+ PGFaceFrame *secondFrame = [processor processImage:image settings:settings time:second error:&error];
+ PGFaceFrame *firstFrame = [processor processImage:image settings:settings time:CMTimeMake(2, 48) error:&error];
+ Check(secondFrame.faces.count == 0, @"jump guard rejects distant replacement face");
+ Check(firstFrame.faces.count == 1 && firstFrame.faces.firstObject.boundingBox.origin.x < 0.5, @"reverse render retrieves exact earlier frame");
+ Check(processor.detectionCount == detectionsBeforeRender, @"saved frame lookup does not re-run detection");
+ Check(Channel(context, secondFrame.skinMask, 33, 43, 0) == 0, @"rejected target has black mask");
+ Check([processor analyzeImage:image settings:settings time:CMTimeMake(3, 24) error:&error], @"analysis continues after a lost target");
+ Check([processor processImage:image settings:settings time:CMTimeMake(3, 24) error:&error].faces.count == 0, @"jump guard keeps last valid identity across a missed frame");
+ Check([processor processImage:image settings:settings time:CMTimeMake(7, 48) error:&error].faces.count == 0, @"unsaved frame detects current image with deterministic analyzed identity guard");
+ Check([processor analyzeImage:image settings:settings time:CMTimeMake(3, 1) error:&error], @"analysis tolerates a seek across lost detections");
+ Check([processor processImage:image settings:settings time:CMTimeMake(3, 1) error:&error].faces.count == 0, @"jump guard does not silently reacquire a stranger after a long gap");
+ NSData *archive = [processor trackingDataForTarget:0];
+ Check(archive.length > 0, @"tracking is persistable");
+ PGFaceFixture *restored = [[PGFaceFixture alloc] init];
+ [restored setTrackingData:archive forTarget:0];
+ PGFaceFrame *restoredFrame = [restored processImage:image settings:settings time:first error:&error];
+ Check(restoredFrame.faces.count == 1 && restored.detectionCount == 0, @"restored target serves exact frame without detections");
+ Check([Pixels(context, firstFrame.skinMask) isEqualToData:Pixels(context, restoredFrame.skinMask)], @"restored geometry reproduces feature masks");
+ Check([restored trackingDataForTarget:1] == nil && [restored trackingDataForTarget:2] == nil, @"three target stores are independent");
+ [restored setTrackingData:archive forTarget:2];
+ settings.targetIndex = 2;
+ Check([restored processImage:image settings:settings time:first error:&error].faces.count == 1, @"third target stores and restores separately");
+ settings.targetIndex = 0;
+ [restored processImage:image settings:settings time:CMTimeMake(4, 24) error:&error];
+ Check(restored.detectionCount == 1, @"missing exact time uses stateless detection");
+ [restored setTrackingData:[@"invalid archive" dataUsingEncoding:NSUTF8StringEncoding] forTarget:0];
+ Check([restored trackingDataForTarget:0] == nil, @"invalid archive is rejected without exception");
+ [restored resetTracking];
+ Check([restored trackingDataForTarget:2] == nil, @"reset clears all targets");
+ error = nil;
+ Check(![restored analyzeImage:image settings:settings time:kCMTimeInvalid error:&error] && error != nil, @"analysis rejects invalid times");
+
+ processor.detections = @[Face(CGRectMake(0.2, 0.15, 0.6, 0.7))];
+ settings = PGBeautyDefaults();
+ NSData *base = Pixels(context, image);
+ NSString *names[] = {@"thin", @"big eyes", @"short", @"narrow", @"chin", @"V", @"jaw", @"cheekbone", @"small head"};
+ for (NSUInteger i = 0; i < 9; i++) {
+ PGBeautySettings changed = settings;
+ float *controls[] = {&changed.faceThin, &changed.faceBigEye, &changed.faceShort, &changed.faceNarrow, &changed.faceChin, &changed.faceV, &changed.faceJaw, &changed.faceCheekbone, &changed.faceSmallHead};
+ *controls[i] = 1;
+ PGFaceFrame *warped = [processor processImage:image settings:changed time:kCMTimeZero error:&error];
+ Check(warped != nil && ![Pixels(context, warped.image) isEqualToData:base], [@"geometry control changes pixels: " stringByAppendingString:names[i]]);
+ Check(CGRectEqualToRect(warped.image.extent, image.extent), @"warp preserves image extent");
+ }
+ settings.faceShort = 0.8;
+ NSData *positive = Pixels(context, [processor processImage:image settings:settings time:kCMTimeZero error:&error].image);
+ settings.faceShort = -0.8;
+ Check(![positive isEqualToData:Pixels(context, [processor processImage:image settings:settings time:kCMTimeZero error:&error].image)], @"signed short-face control has distinct directions");
+ settings = PGBeautyDefaults(); settings.showFaceBoxes = 1;
+ frame = [processor processImage:image settings:settings time:kCMTimeZero error:&error];
+ Check(Channel(context, frame.overlayImage, 26, 64, 3) > 0, @"face outlines provide separate final-composite overlay");
+ CIImage *offset = [image imageByApplyingTransform:CGAffineTransformMakeTranslation(30, 40)];
+ frame = [processor processImage:offset settings:settings time:kCMTimeZero error:&error];
+ Check(CGRectEqualToRect(frame.image.extent, offset.extent), @"nonzero image origins survive masks and warp");
+
+ PGFaceProcessor *vision = [[PGFaceProcessor alloc] init];
+ CIImage *blank = [[CIImage imageWithColor:CIColor.grayColor] imageByCroppingToRect:CGRectMake(0, 0, 128, 128)];
+ frame = [vision processImage:blank settings:PGBeautyDefaults() time:kCMTimeZero error:&error];
+ Check(frame != nil && frame.faces.count == 0, @"real Vision request accepts blank image without false faces");
+
+ NSString *fixturePath = argc > 1 ? @(argv[1]) : @"tests/fixtures/astronaut.png";
+ CIImage *portrait = [CIImage imageWithContentsOfURL:[NSURL fileURLWithPath:fixturePath]];
+ Check(portrait != nil, @"public-domain NASA portrait fixture opens");
+ settings = PGBeautyDefaults();
+ PGFaceFrame *portraitFrame = [vision processImage:portrait settings:settings time:kCMTimeZero error:&error];
+ Check(portraitFrame.faces.count > 0, @"real Vision detects astronaut portrait");
+ Check(CGRectEqualToRect(portraitFrame.skinMask.extent, portrait.extent) && CGRectEqualToRect(portraitFrame.teethMask.extent, portrait.extent) && CGRectEqualToRect(portraitFrame.eyeMask.extent, portrait.extent), @"all real portrait masks have finite input extent");
+ VNFaceObservation *actual = portraitFrame.faces.firstObject;
+ Check(actual.landmarks.allPoints.pointCount > 30 && actual.landmarks.leftEye.pointCount > 3, @"real Vision returns detailed facial landmarks");
+ const CGPoint *eyePoints = actual.landmarks.leftEye.normalizedPoints;
+ CGPoint eye = CGPointZero;
+ for (NSUInteger i = 0; i < actual.landmarks.leftEye.pointCount; i++) { eye.x += eyePoints[i].x; eye.y += eyePoints[i].y; }
+ eye.x /= actual.landmarks.leftEye.pointCount; eye.y /= actual.landmarks.leftEye.pointCount;
+ CGRect actualBox = actual.boundingBox;
+ eye.x = (actualBox.origin.x + eye.x * actualBox.size.width) * portrait.extent.size.width;
+ eye.y = (actualBox.origin.y + eye.y * actualBox.size.height) * portrait.extent.size.height;
+ Check(Channel(context, portraitFrame.eyeMask, floor(eye.x), floor(eye.y), 0) > 80, @"landmark-derived eye mask lands on real eye");
+ Check(Channel(context, portraitFrame.skinMask, floor(eye.x), floor(eye.y), 0) < 100, @"real facial feature mask excludes eye from smoothing");
+ settings.faceThin = 0.4; settings.faceBigEye = 0.25; settings.faceChin = 0.15; settings.faceSmallHead = 0.15;
+ settings.faceSmallHeadRange = 0.6; settings.showFaceBoxes = 1;
+ PGFaceFrame *beautified = [vision processImage:portrait settings:settings time:kCMTimeZero error:&error];
+ Check(beautified != nil && ![Pixels(context, beautified.image) isEqualToData:Pixels(context, portrait)], @"real face geometry changes portrait pixels");
+ Check(abs((int)Channel(context, beautified.image, 5, 300, 0) - (int)Channel(context, portrait, 5, 300, 0)) <= 1, @"face warp preserves distant portrait background pixels");
+ settings.trackingEnabled = 1; settings.singleFace = 1;
+ settings.selectionX = CGRectGetMidX(actualBox); settings.selectionY = CGRectGetMidY(actualBox);
+ Check([vision analyzeImage:portrait settings:settings time:first error:&error], @"real landmarks analyze into persistent geometry");
+ NSData *realArchive = [vision trackingDataForTarget:0];
+ PGFaceFrame *analyzed = [vision processImage:portrait settings:settings time:first error:&error];
+ PGFaceProcessor *realRestored = [[PGFaceProcessor alloc] init];
+ [realRestored setTrackingData:realArchive forTarget:0];
+ PGFaceFrame *restoredPortrait = [realRestored processImage:portrait settings:settings time:first error:&error];
+ Check(restoredPortrait.faces.count == analyzed.faces.count && [Pixels(context, restoredPortrait.image) isEqualToData:Pixels(context, analyzed.image)], @"real face warp survives persistence byte-for-byte");
+ Check([Pixels(context, restoredPortrait.eyeMask) isEqualToData:Pixels(context, analyzed.eyeMask)], @"real landmark eye mask survives persistence byte-for-byte");
+ Check([Pixels(context, restoredPortrait.teethMask) isEqualToData:Pixels(context, analyzed.teethMask)], @"real landmark teeth mask survives persistence byte-for-byte");
+ if (argc > 2) {
+ CGFloat width = portrait.extent.size.width, height = portrait.extent.size.height;
+ CIImage *after = [[beautified.overlayImage imageByCompositingOverImage:beautified.image] imageByCroppingToRect:portrait.extent];
+ CGColorSpaceRef space = CGColorSpaceCreateWithName(kCGColorSpaceSRGB);
+ CGContextRef canvas = CGBitmapContextCreate(NULL, width * 3, height, 8, width * 3 * 4, space, (CGBitmapInfo)kCGImageAlphaPremultipliedLast);
+ NSArray *panels = @[portrait, after, portraitFrame.skinMask];
+ for (NSUInteger panel = 0; panel < panels.count; panel++) {
+ CGImageRef content = [context createCGImage:panels[panel] fromRect:portrait.extent];
+ CGContextDrawImage(canvas, CGRectMake(panel * width, 0, width, height), content);
+ CGImageRelease(content);
+ }
+ CGImageRef preview = CGBitmapContextCreateImage(canvas);
+ CGImageDestinationRef destination = CGImageDestinationCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:@(argv[2])], CFSTR("public.png"), 1, NULL);
+ Check(destination != NULL && preview != NULL, @"portrait comparison preview allocates");
+ CGImageDestinationAddImage(destination, preview, NULL);
+ Check(CGImageDestinationFinalize(destination), @"portrait comparison preview writes PNG");
+ CFRelease(destination); CGImageRelease(preview);
+ CGContextRelease(canvas); CGColorSpaceRelease(space);
+ }
+ printf("Face processing: %lu checks passed\n", (unsigned long)PGChecks);
+ }
+ return 0;
+}
diff --git a/tests/fixtures/ATTRIBUTION.txt b/tests/fixtures/ATTRIBUTION.txt
new file mode 100644
index 0000000..6e439ab
--- /dev/null
+++ b/tests/fixtures/ATTRIBUTION.txt
@@ -0,0 +1,6 @@
+astronaut.png — NASA photograph of astronaut Eileen Collins.
+Obtained from the scikit-image v0.24.0 sample-data distribution:
+https://raw.githubusercontent.com/scikit-image/scikit-image/v0.24.0/skimage/data/astronaut.png
+The upstream project states that this image has no known copyright restrictions and is in the public domain:
+https://scikit-image.org/docs/stable/api/skimage.data.html#skimage.data.astronaut
+Used solely as a local image-processing regression fixture; no endorsement implied.
diff --git a/tests/fixtures/astronaut.png b/tests/fixtures/astronaut.png
new file mode 100644
index 0000000000000000000000000000000000000000..834cda0012478c5edc8d43bade96d315dedeaab4
GIT binary patch
literal 791555
zcmbT<2e@r#SugrA`<$!qwQCyLB!NI6p@#rcLrEyot0;sdB!M(i2u)E$l%gmi(iA~N
zih@TEMN~vYu^>p7zEgJEuB*;I=l%W1$`$T?o^$Sf&fdw|bIm!%SKjyk{@?O_-7kz2>uXo_NXSS5%jZ;q2DSP++#n&n?;rJg$BSN?*VTGnUuA$^@5$?nwqD<}yk_h5Bl7x!%PzmbH5v1j
z7hHBhUVqW+-+1}87kXWLqStSD`6U-#=k+(eKIPJDFT2F+p4U4ryYRfLi=sZ4_piC|
z{ENN5x7Tx5J>zL-d;K#-(Vn~Lr(VD4r(R!k;VX=@D9*m(%2!@>$we1mv-fW2-+k|W
z9`vBI_MUU$b(dav%{8Y#<-GG>dfrtR>^=L6%dR}{@>dqc)|_)!u^id%CFC>j^Pn@&
zJpI0B5dVMw`QLu{-&g(bUqrWCSFAm?)LCWMmw)o!PwxH6dslp*D9+j-o8SJ)doOxd
zQGEK>iek_Ae)8Tae^eBUuP=&Eef6j2vnzPH_?m03eDJ;Qb=`H>opH&9=bsUQ{`a5%
z&kO$h%K!C?pX%?7^!MMg+xzGXUwq!RmtM0sLOuVAORu>0s=ZfVdEWUK?mhkg4dVaf
z8-Hq8KQ)efKJCI6UwGApm+R_TPWyMv+b;WCnUn$;Dyt(-8;`fSo7w;=RSbU`Tc=4CTr;EQW
z{-OBi;@^w^EWTBIzt~soFAfw(i_KzKsZ?5(`O5anF_jZ5cd6W?a^K2Xm4{UxQ+Z0AO^g%h&Refjm1JysPeyaKp)qk&ktGcgx
zpt?~jYO}RnwL8~NubovpyY}ST^J*`yT~+&~+M8Az?>ettg)+dem#_^4NG#=bIxAC0D
zMUCqkZ)m)u@u9{i8~@b!R%3r-v)OF!YM$DBVDp^jbDJ+|zPkCA<{vaa(foY#Yt0**
z8?9FBnASa74{bfUbzbY5)*D*yYW-R3?^|DQ?Qiwkv+Wbx_iaD6{k-<&?bo&6(f(-r
zbM3FUZ)p!ZOP#xP9^83y=Yq~FJ8$iLu=Cl@S3CPV!$Y2$Tg!J{e$4U(%dcPlyXUw)kJxkJo;U6J#GY^M8630sn8zIR(qn$-m`@+`!(;2mo_6e0kG<~L
zKRouIjy-tXj^iG3-1*17>A1f#z8_kMBj(K{c1
z=X36S?VaC$=dav(c+#mSJ@cg3o%D&5et7cC$!DGX;*;Ng@)u4%ddi8XJn59zobs_#
zzIT_-UCz48#drDryL{;`-MgN8*Jt1L*YEo2yWV>0o>R{~^;M^S?9?CJZT@Z#zuU|1
z_JO;7^X|>NpLO?_-u(~m{-38+PkX>=7oYZ?)4qC->OIc9$0hgpgL{1Ko{f7x=$@C~
z^8@$%&gpZfKl1dKpZ>AauRmkg8BaXpb!U9~jKlXje5&4d5)!ABl)`a@p&kdHp()}J}`XD>c@TloW?m%IOliH
z`Odi~oO}McA368v;~)6=Uwr%*pD_1?r$6D{Pq^WUr#=iKW#zxbSgf9|o*z2v!{
zd0y*z&wAd6p11LHkNLUZ`?>wkf57wK@ceK8{HZ_xil6`2UpV#`F8zhSd%@xh&U?XM
zy|D4ZXTR{HFC3ls62gjr!Spe`s_@*Y>d;mUn4d+^JC?`21?dcsv7y1H`p&tLtSYjy~x
zzI^T7uKl%ZuYdW&UjCk!_pW=^b$|7WZLhfe6<>bkX|H_aD{pz#V_)?rudcuP{8xYB
zHFti^ue|2^Uwq^*zW08>9739>+b!!x4mxt
zSD*c>pMCuaum9!O-}q~f`?Zg~Vc`u|z2Q5*{*YgP-*41^*k
z^lxvz_nY7G=FwZuf6Kr9=6!zioxeH#tr!2+SKfN&TmSI4o4nEo=3gs6Yo9#y>EPP_YW@kgRlSLBmVH??>pgrZ+_q4k1qM6|9b!9-v6l&-1P(R
z_~YguzxrX!Np<_Sv<`0ek^zuL5_u;2~_=_KT;7304(c?e*){j*`
zcJ0S*`?Kf&*?<1|qyPLfA3y!$@BhTEPrUgriodw_FK+)IFZ>_h{>vx)fAUSAs(k8|pE~;Ki$A^ZGtd3Z*Z%tPfBl8eKIF5X{F^iW=1>3j&VT!!
zzuWnDZ~ffN=U)H0>EFNV?>9bw<>wFn!$tpa;}>4=h4264bN=z0UwrBpzw%E{_@{sQ
z=g0o@KYr33JY_ww%zzyHfWX#C(!KV16ZJAQQhk3R6@yZ`tT`_A0=ch^7q`Y+$`^c%i^
z4xaGuKK62}QZ~fcb9(&t=-u`p9?>}(mf#Jb79NKp1y@&61
z_-+%oJ8&BEz(dK2F!|t1U$MinjKdb+x!LtXq
z46hrtM(-Toef-(U6DB{HUN)U}U%xi|`F)=i8yB4`&v~x+`HYkEf8`Z_^6&%+t!vJG
z(qmdbYM(eiv+H}Eov-!QJ+FDpbFL8tUv}Z;*A$PHlB=Q!c*Znk%lp_=+nZzV`uV-1{ky`uf9)VsCNoqaXQ>G=
zD%DzLrd3^NROjlo=43jY6q8!DIh~CCHz~%oO0!;XEo@($pBvB4wyM>^fkTIGy?Jvm
z7!}2I&+*HrowE1NCmnmjuI;ni=3A|LwbrNW#s0P^nd`La9o1I-LlQ
zD)p*Mrp2^6olLbd9Tt^FrBWMDd$n49G8t8?omy=&nH1G(rCM#3ca06UR&`gc@Ihs)
zX{{Qhc70H*)JCI0rP8hxqiJPQExc7749C+-k?Sh8$#|3SD;2{w=eoGgz4b`7pG+#_$!Ihlmcj
zvu+C0$|$p|)-slAV^WzI5;+=Gqtet}rB5Zlz~R{
zksI-l3K4sATA`+9wbCp|pxz8_-4;C6jXl~A)M#o99n%Tij3yIGtZHX6&dkSSVE_ShBrGI<@7MQt=5O-F-jvo;-1M>;X6QEgfw&nC2JIjKZ$
zq8Pxb_Xq0`18ineD;jRpUpaZRh#^xXlv64FM|6=QIMQZOZR!!s++p?tRnc&|OjoUm=%_NDoydaDh@jd6Y2gc5^8UkxK6
zjiTg}(oh0Sz>cv@2KD-^R>MN$9_|V_N7Ht#F`5j9lR>lI9*+9Ni*P_o&%|AyG_^OH
z4kPBEcK{Z(N*k`Klj=yT)9GNep?!JU1pFo#wU}s*p@DStMDhcMQ7u}7$)jFMo
z)ois|ABSKnW9$Vw)y5cWK_iAK@I%jsU{5qvTv}B6<8Gr`ukYToV{_1}&lY_SVCU?P
zrPkuYHjJ$A)gx=Y&CSv1(CX^OsH{#y=H~G5p%H5AZ&WsW!)|wDbF?@U%7FML8w_|uFFL3+!r(|ZYzL+!ODY5x
z1FOJpQ|A?uheW104#*&dVSw;7+&PF3h+ATx_0rTBQ-gLx7PXRzCnK-SYf{jn2J^Q+
z>^GW-!!5&Tywa@Ing|pd>8l(|Wi;x$zZ3{1N~(wUhMgzEkJ%x#QDViMNsOZg@i^g!$4HLqSan|dD(IEJk=yx(2PV49*D33d;
zRGZPFKCoh)$r(PiXSUShGUF*hP|^$DEj7tvnd*e3ru@*LN;-^^8bX}mS$Z5*n1PmX
zH-)7w<~ADfwQ=_KdWZVVh5V2~yuYp!0<!Ye#q{<_ZHM-|=u5iVltpamYj)+#KIJt&KDp35atl
zHAE;l;A_MoG^M}Hi(I02mvJiE^T!>CU??y$)TlK6EXWZm1Z;_!it(^#UZK~Juse-O
zTf-@1o`l-+zTq1JGa&F#aD$LW5eTl#lqVI;(w=gr$hyW$fo7c+dG#Q_Fab!@B^<@k
zXeyV8n!^2DSpubcop3WQASl_kAVUFxDUXYA4KLno%nmX(7Ci!?VL=K8P$jZB3H+$B
zAror?e7!Q~%8Ves#YJ9@#E9cjFY}nTNQ4kZ!#?vDQxaLd+Chm^%o+g(K3H}v)TBZz
zI2?`!8@>Me`ud^n+QI(XjpJdr!bwNG#43PmmX#S-WP^^*~Ck2!u$kd3fMb7PvI2SldJZPfSd-qmQ;_w3o(?e*L3
z`u4?zdLwh`Zgw}h1CFjYU47w_Y0zhDX;|yS@3|aC0!3?@T*u7y15A@VOch-tmq3Hg#(*a2+tZ_o^Y*oyf48bh4WFR$RUnu+lUiD*oqG$P{{
zb`_{c*E*?88x8r2D4w6JO%g;?P*HCP&2X0Aql?hER;}+4gP|7FdZUHM^(FABHJd^c
zJQK#rk7<82Y%z%t7U}aj?IHI&ZH@y4WWX7CTdXP`hlyaU(wfx994+W;rP^$Si_uRR
zTN?#T({}^e#cU%s_W&Hs`-O$iUHYKyh{+p
zKhlWKC{=r*<%EGWV)|(@%Fe6cRSOKaQER6)QCG$WyF(@yuL
zxfDN=yz3@p9x?$NL2J6o+vMRQ@qs+jfD&${<#<%r3!VgIz|$w9Y0)Q<@O_LT>I^6+
z{aU>p_vROE5nA#VLc><0z@)UAa*mqDx#qy>l1H>`j0w%O6)#%O#*|rUSd6O)E9#UI
zjV>ZGx=M9K)YC3=OP{pBi$q}^UWUa}Uk%2pqp`7>&mH~)p^T*3u_q%m20oGHCKVt<
zm@DN;h}97z(>rX*S%Va2lo*I&Il#(rxIwT9!0=9d2%dKb-J9#UE(-4T>lMt9bb%Wl
zj0f=0A8oolH)?PzQi(rh+_8f=vzm>rqdd09a)i_^W?Cscyf@rbk7+}u1m
z*x1L7;E?+y;%cEj@g_L})mUe|
zS~N*+tlJMam#Uix#+Z;;JlZ6MV37gWtFuI}+Q3Z+$++rb`klL4N8ek;Wlx=g>
z(>ig9-(#*uJ90xEL;#ig#t57+!rxGwfKPmptF~G;DBX+tg7PRyUvbG)7ichAbL}NR
z$~!nHzK|rfqYa}7D1vNq@_wbhefzfgx%u_p=CCiwB?LIG^?Ut|_5SMm#*x*{TW{Uy
zZ43}osvNYRm^_m&=N!9i)MxnfWcNl;tBz`SrO<}+vCN#MKN@}v8}gR96iuG
zIKYR4^^IY*G&VRT{bD#7b{ezED2W;&_`E7oCST8FHLK^u(CiUL>4%rvoaFMdDwEL8?f@u&kDi`wACv+@S(?
zQWl|7{t7aMHxhA@K{YNhkFrSA7>w2>P)S>%Rq!Qrs+LS0Gp1s^lNp1LQUGLRtavQ%
zm3Bc_m1aUDmK4NeLJ`VLcn4Xa=X&6gY-Thj4r+$A7`$tZO4yk!k2nMWxGZuihGjq+
zfvD;b#7LSDI=0V2tnE^e0trbE7el0i=w^6T(my5xuaV;*11E)|6?w)IAk*EACJ6+-
za2Sy?>`2n>1z$rrBuk3@MxD>*v2;%bKAkiY5a~2D59nw)(e+qO1D1@x4Q^u3DM~Ab
zaoN+6JRq7C_tw2hv#FjaSQvi^p&GW$9L$}xBhiqbe?)CY9VxTQxV<5~K<{YOO_CKd
zWdXp2FDBJ`6X}4rX&FBrrYMQOh_znlrIHiiIYkCCai_Vca|Q%e>JzYs2uPIBxEY=)
z>WG?>Kp5#T)T@-@Y@
z!OT^3l^RoIoc4$AGQp_U#|dk=Eas2h2kQeKX5+|4@5b@qsN_s*$%O>G9OF3QOKNtB
zzK2Lp+zcp1yQpneiotYsb>-IEuAiG-Zg-^Cjb^Jel`O^o3gmgc6nM!{CQ96*ka+4*
z-x!k03IbFjg{+l9B5rr4vg-P9tI#*^nRCRB&E!1|L?*u`C?*;9cR}U|xdRx0>sq6g
z5Yq?IUTahx#2TY_;kEY=lzID%nFm#bLuh4SF(40GqBi4Ayp_n;IP~5iH45eWL{8D5
zcwL)pIT@k3PHL~Z_T}=emI$-eSm?~rHVtj8tsgpcX#Y*O|L6y|{P2gXz0LJN1WprJ
z^rKL4Pj6gyJ2C?zn#-rjdBHu{Ev8({^3K-M^6boPz1cF+x|N3Y)p4)eV^Q;SiwpDZ
z&Rn}CC~dbQjm9@gl5RyKsmFuA$%xF8kVIC
zL)CFAXsJ7AMk!ffu3%JlFWdEr2^U5~>S)C%yw;PKf|dsT>ytg0sehv?q7SHatSYss
z$xI%%M26aMe`>-BqLae;CWrbK7}VRIm!wp!?3d`B^z=~yY*Dgw--
zX3o%`ex1`cIn_-h6TG29ei>oV;sDyBwK2gpH5=zul0vEXP10fjLIXuA4Gb-rk~|e~
zHz|Qon5ElRJP~(IVJIsW43rsZESxKvP8*<^016!p;utI?X8|+%gBk;Ko7uD)EekS@
z1|Lwgn)8ju%z!Hn0eFL`QaIGUI*DnP9;5_vsjJeK3=21*il{Q)KOv+W*vgDyr4$w}
zw2-Te&Ructb<-IYy|Pj#2vQadao4M}wS(gqeYhyL_5$eGSZfvrgk53T{ul&-(jw3t8UD3?{B0XrxDjWMX}Cpg3B2^lyFQHJTK5|{;3V%G_sFueGf
zgeSo~Y~zp+xq3ZJPJ`OvWStd&7B9=@`v@qrpfc?-#wLMS!c`WJ1jK+OFce@86ZT=$
z2$bAXpvPw5Cj_i>Pj2_S))Fr(-DJTHWyjFTXu?c5KkQJ(B2#i!&B>kuaziUwEizML
zq6-jVoE*J*1i#S4qlhRaBq1a{;UlQcotzA{jMk|L=KboY{9ZcbZdxeg2I%HSPz))!
zIY`!sj--Y>LnLZaNVGYVm_+~br>vHTo70_HfJwrNgg!z?GRN9enKz}8wmc(iqJ%V2
zW<&|4zSvA%wN}`xGSls?4K`QSH*SMPlK?6GQ9qC4pKjvhI3_~7adH{AUF@7;dW_5IY4EWM02G{i1O#VQO1XVEP;
zkg|B7Sr$gTDIBJ0@M`d|?PAZKrRAme!cwQ*>iBfPM|UmaSVb7N7sorcZ=av3%`eTX
z0@5@w8L4&~jp|U|-3U`dkQfP{!WA1UcZt9rgox%-#z9lWI4RSsL>mbx>@%Uwa!*l=
zf6EazLC5RRw_A{L83f_Yq@PK{QZ*`BAE05~9Qg=uSu?=WQmW((VY)Pu#empTs)V5t
z6-=waG4iOD54dARH}P^=_cUb6VGa~SyM(Tt6qdb^aRjAQ#qHFP2nH{U{uz7Kbk^w$M)AkJE8&8JU)e7qOZA$ifVi
zw3$31bL78KIVBQKgaY;242!6lsDRg6hD(*DOpGc}Hr~W?2_urH3p`zu{X7X~O*s};
zhTFh~OnEE*vPs10F^dZNPxzd8tu!+Y@~$xEE<+wq?5O}ALurx;81UTY8~2_ZS}C9%
zM8p7iHp7o-RMjKNEuzP6d~r%fdI)OF&NW;FrEn$sD?Pg1LEM!QQ8eFRA3^5mzbG+o
zRXkj7rizM*H9gu5Q_hqdNZSBFCIk>D#}G`|M?C5sZU9aQ-W1J^?T3yMftJE_Q_Lrl
z_t(w^KCB#o_55y}hk*o8DLsj_On@_sL-YaiN;?E;Qfe$b4ex887!5%eEKU2}&Hi9*
zef9R$qc`_fZ=3Yj64j-HY|ZJ*Qbh4E#!QWvvG9k9ArJ;G<8##1M9qcGiQV3?(G&^K
zHQE-3J64FZ#;eF<3b>U>4KjKMWE0f_sY9G`E9!?;RE6LsyS{3o3M?1`#TvFV&3?qpa5X6fmpJZS<)Og-!O2onz%p)db5XKf@5&j?wp`O@j
z#uoPFuVQ)vl_X9HP2@tvkw7xuDpzF0kq6w08AIzvsL-kWl$Gg8Wp#7?_Cp&t-P{i
z5F#5=iKpc0V!AAxqjMuF^lup{ikidAWE-WrG3gnkk!D88eM;Im<1*B7F+z+p3mDU#
zHlxruYZe9Bv3UrQ8SHH
z7>
zF4I`U&Ka{{n=w-PmhdnOmD#PE0?we9ZgB?umHN|TnJ$#_lkF**5QIWdna;Sx;1$0_
z@=0ZaOf(c*Vd@#a|Eui;p5Ec@TtEobkrJ*+b8r-c1xy#o+9s67H7&{gM8CLtTJMMtjER+aAK`g5{@gFE6d}E=dj}JzJUU%5v81{|~Mz>8Wc60DgU~HL!
zy?d?h5*4Bu{rL0U-z2hG3RtfYccj0HfX8e8wo4
z3AxFA`Me+}ZtxDjq-j+lw-!B4F8qe%_(c(1R@(=Ip8K1_;bwM&*=C;2TZy+~(g0A}
zs2&+WyS?Cjyw9JrE5PLy(pn
zQMfnQV@S(7f#3Q3Br6j3#5Lp`4JBN21y;l$mR$J>3}QLjYKnk`?-7QlxEb=yGDV7s
zg7oodE!COSz_LstF(e>555)i+Hwmg{mKrxn2tQ}iLNaz;53@j$trtKlI%W&3OCVfV
zrT~YM5X!x+DfE=|nCh!|NZHun5kXUpz9tYueYLH2%-5i~aH3{)2}lyLP8f!88`0az
zZYWvACI_X644&BYe`2b#Q?e#Wc4JyZW?{xpHpOyHFPzM(O7_pbEPJBM_=PGR*Wgb0
z1`>~~eOLohllJ!E^oktX`ZgR
znH0axBg~TV2VHjB#o5~q)GNml%$kPOU-F(1EM?d1g*Q>66A&6v|LI
z2HwcnBa`wT*JaBV@T3x1BHVWR3!FW^_s`Z?#I@VK$CP*$O7|&;faN&-yC>KbxlJ)S5ItDFdcZyDF3c0&5
zsBtlYfCc?ys!R(T<73TfK~dgfzIL;jyE?R^I#fnb?3rZ9M>8pLb&A2R`iedh5OJ
zO0Rc&nSYCLqkZFyb|7b*`m&%*aO(H81Y0QzW~PFR5nj=yV>3nN@S)omw%@wEV@Ibu
zGuNMMs$OPCGCYgtlH3qy(*}*0p}|MUZo>fjVNF;yBj+IFd#zV9!??yc4xTV2O;gbw
zDMg9lD9XzEEzVZ!L*ML(ACL1w8D%_|uul_XrLdr#`w6jVGDf1RY4;7&h>uH#BOp{^
zix1KsBU`-t7T{?{1Xn
zw*&$ys}$KOuj~^X8$`%4%TT7LKieu2^gsa~^&aU@HnnM5{vZNmWleb7(%g>Si^m?j
z{lw$9@7lGkJ;Uu~A4LLco9f{%h}CEQ%~X;uHB{xYOPPYRU6ooGwKqzSnxLLZh5Zf7
z_EfkP^^+Q1X~=p%5h@)7lnD@h9&M6;w$n7wQ`VbV8|-2
z=1YfRG~~-9B7EXci9l>Q>TXd?oOvjZd1OdNA}|pn^1R(_DZC`Zdh^Ww3d->-v1!;Wv48xf(QIML
zl=T(0dea}~A^5boP0VpaX~*~@TH#bU*zH^IV*Hs5M@$eZH&W6^_i<_EWc3nP6JWYd
zuB}tljCHrD7UF}qPK=jh%7@XNX_VX`(TR5=toTTlkUC+^FG+AbpKh)Vz$XOY2TK=BHUw3!mEz!mB1XA2#r;R!M*Fe;0mOIDn9wU~q2l!ed)
zOT0!uO_46UyJlfEY9xU7Nd)bCFFJrD!=a>wVRM3Zsfd{Cc)62tLBV^h3MJyZXvYgM(-~^$`CCcnMNK
zd9>EwTwfnB0bbYAqQE)3L1Oqs9er{>N#4i3R(;-k?u>#{HH!#r7TtZ!{0YY{w`OM+
zX6IXW7Ggf4Rql1{xLMc%ERk>G+U9Jh#oq)0%q&PwDwT4!Phr6ZDe%4KKlC)R(-%
zUFaz@(yL93s?V0;7<_|w5UXJ-v$*-LSA}R
zxP*$4MF?I@#7vboff_;ZQ?gl%j`it0cp>V}sInPHRJ!afE6A&2?n9ZX_xa^rEab
zF#>)l-YUdIBcVle0CO>bLPL%wWhB<~a%1k~thK^2$^y5TPNZ!8oN_}rtd{2t%5*@m
zfKa+kJ2GhmJZLpSiAY+!CaZ|_&_@IidbaQ$1Zq>)(3alAL?#|?5-AyD0!=3YVIXbk
z0mbBqvL1OR2m&e%=XN8HigcPVIH6qBogQthbv%rOM@t;%4NpQmpkzS
zVe-c&NwWOsdN4|yG9J9;vd!KWKRn2!3ikHBh*n?`U4ooc-qJ;q
z+H_UcK>}~?zBZZQ6z!*+9Hjk{X-M+GN`^Mq@{q8LhXB216oO2N{#R6Gh
zKyO$A_lgo8w8a7VP&qr-;$xz#7pe(eJY83t
zvQ@yUeAa42adDM;hJaL80#*gf?A$83BsK>9uAwB#W`5SCEkmS!Un1Qu?D(m~nIN%c
z;R!S?SD1T37|)!*^n}H)QfAnhXBUiz2jNe@*@c;%CkeD;&B;>i^Uz}!m#}Bu?h<6@
zjd;#L$CdP#%R_vLvh0b}iBplG1=b7+=~V*47Sc`^)YKKrKq;GxZQ(WbSUPcqBBMc9
zCY10`G71$(Qy^c}RorfU+ZOtK%FUGQ>Ry`BMB*Md1QZxgEvRH^+Gl3|q6BC7v!kYL
zt*n2glwmzjTkOQPgdB5^pJS%TEkUAr#m+;vx*!x0kXsBOK?V>DzJeV|Pbo4~ZXo%{
zjCB+^`pGBH|Oq+scl38jXmnU%!ji>dI
za%T}N!CkaOk8vJJ+IZhd)228zL26(a;;~p~yirKgMezw4OUekwU~~~e)+~`=l)_Kv
zEM)jNg)^njlrLOn*3tKHYQKse0hpDAyb|<51AV!0+6-BT)yuOES%u;ov}Y%%;v1LX
zK9-;5qU@cv-_?wC3o7Ue-8j$}$AV8v7R^E}f{3!?_DYj8wv^FgDcKwx9{@BOB+K+w
zt~}|<3`{>dyZMyxntY5rNs^(fk_Ea0|_xky?);g(NtAZJnfX3fos^O8XP%5jSbSJA!ZKD
z6*XmzFkaqEb=zu=#)T{JW5^|rhk1~#pq@l!B%xqh%2-?A+HB5`hU>IhGBg+(cfiA{
zL#oNcDJLtXFp=vOMgwJ1ca4^}YEYmSe@P>5vR}&NOQMONpuosRr{!57tKCeiRqu$6
zVL%J1eHnA)oDFew2I+*Ffb9;cR$XtFN~IBl)GoVsu%tXBUVt0`gJF|@{D;_^Mp6W`
z-^PwZsVg%_VETx!Z*X;CMWQk<>}!VxZqW`{aiS^pBp4J=#^Yu|DJ~FjvVb8zRJ>v(
zG)47_p57;IGc{>qiu(bnG?pW8Yyl`yWtor#{1QZVVoO9+m67C51e7)KyhNgrt-4w1
zOh`^^dJ562u4*EF8Zi(B^=3SwM#t{Bkhnz9aIdDViVFZq%5P*@1~;ya5Lr?Z4D1_D
zq1Nb?@cfDHNEly~Rjg<*?^{Jku8AuW?DF5K_6X&a&Dlx2EDo58?o)(IoEhE70|jzv
zG@MwDBdAE^6)@)=7D#wTZKk5Ml3>X(lcP5CNvBb?{u~P-p)3v=w~t8Agou$6Ng_r;
zQ>i-nFeXq@tW%yg)|eVFM8crp#*mB(iig{1A);omDh=7_0SoYf^~3>?6EBF~N|&iK
zZ^din9~X#VBFp^8DhVL%CGiwv=8D7xahh?lL`8PiHs$eDBK~V(n9M$qL8;{FjFB>*
zQ-Rq6?_RnocX@efLfX~?L5#W^PA(nTuovjik2f~2Wa8n|Xd~k(
zF+eP3gybC|8PAvj1Xh-CrE#IN_3m(HZf0R_v8gDbK+&2lx1}Nz(*RVg#aX9p6$sId
zck%=Yrbk``l`VM&AmC?6K%#b=D-&U$Db5HW{8}5R0Q0wDUpr1cXCez^0FXK-nZz+=
z6>v*g496ijSE#l}?*x%W1wsvOEsMufO6ALEE9o=bz7;c-vWTOJ#;nZg!{LdnCeUIC
zC%R9JQoHWzYsgsS5TghGVIE0jM5Q^?lMQ(gvvKr@XGW}J8R5SGDi;KeTFZ-OeZJA|
zD2FcXnAv^&%$-i$b@JZj&Cbl{D5$Fql5*_&?ylQ0&|wV^}hMPL`Bo5(y=OPNP)!$;v_OEm3uhhBshmG2W|ONOwiFlktQhFry#g6xL`KfJ+l$C==l(b!RRqbH+*pnxUfH
zn;i
z_ME56WDxF*Xp(tv@lwMij*G*P8Joa}v@$6^EJz@}a>YU;85d0jE})M+LTS04
zC2tMG6=af+lBLl{;N!m19(mVNRB1-KP%d<(M4RCSe(`^)dBm?UCqj)f5)tbUbh#x8
zu(u+{l0YiQ$NZO>5*@j1v1y(%q7?%$Kn)3d{fpM<-Dt$I0g*P-sjjoz&F+juIe~CM
zd`H3W<}S(qEy@)^Wb2yMQlYYWrBeVa
z&4qnsbLv)G2td<`1F+Dbx4E&twsK(g@GYyW-=7TDlCau@lh!H49a>0O6f-CpDiHNT
zV=x&TOHWx=@yIR1^_EDU*s`xF5#+Y*J7*kNRb*+-B-JxKfp_v_(~i7FWaU8d1IMXl
zx=#MOC9AR=XQV1P#6tp+u-=R;I7ucI64sVmg+64StqQnKV6Hj7J7$?;FAo1ww`K?POWobwld$#r#Pc}Do0gL0T*O6<`ZF<3+s5VT^0A%m%gr4-
zW)~N0^9wTz^K)}^oz6^iZf3sa07h(9zHC$+9T_D;
z1*Jr&Zlm04qNd@Y1poC(Q&nk+;~#ZM1EI
zxrfeD0El8uIEjCpcjzylmQaO7OT>|6&>`K))8gnpw3J$bs)+qd$*(hjvJpTk*Jex1
z!EHPUIF*BD4_rBfL^%n0xF~LkaALsOiBdX6LjoVlPkAs)e}nK?`Q!|}Wc`oLCW}OP
zSwl9~a-Rk?Dnv>$Od*jScbriR8YbO(eNLDV6qfV|JjNW0r=4)VNYVB>huzUiAV~&F
zK-rT@7~%Kunn5BM{>gqpf&|X+OGwvuPm~(qOB{FMp7TJ6SONo!UlHtPHyWHI&vr*N
zMXa$v??mFka@_NN(Z9-7>J?hxO6@~6mgYv4IAu%oH3l5Fow4!y@y$jmFACRt
zKVXrri5`eKiBya{%TrCMUP65G&Cf_XKqFjR0i=NW15O6zZPiv+kVl+EHW3(JHfvFK
z)Ikg2!&WhoucX<8<$iah4OFNbp
z7gL4>rP#8W#a1F+W4}W&x^;lY8}vtO68X+x*tH;#{lhxo=bSVw+Ie`NJkIW{#!}t>5f^Z%&f@G2%mywn;
zcq~B~&6pFI#bU~(4+$7PaeKBBxL3H%B9M-j#&rdXjm_15uQ+mKWqoZ;c4$Zuzv_xO
zHqrfbd2#00hy2iaJ(^}-eDVva@1^3Rd{x7YaYLQ+tSYVw&ht|-kzP#&d%A&
z|~K1GXu7fARr&qCL>l$QY|-(a5HAndNeGI(Pzdp=YVe1s}3%ZFqu2-Zil5ohpr=`
z1Y$idAqE5$0uD|vK0|Yk)s)sNP77REU#N)t?}`>y);89UI^1umsM)M9%x!DW%{HN_
zF_*2bF>J};L%p#tU+BsREj2f#!kE~^u%yQPqb}3$$De`DXRE4R}yBd
z%YfZJwpGT}d`}{>&`pwPGJ^!Gj48EYx8(jfO_Y+H&)jpW(L=XkG)gKvldmxO_#ICs
zsM#QprQH}9jSxNlOSlcIkRd|nl#*=4Gx07Z;qzY!_Hr7Ld+f$_#!c92g`uQ+hO71;
z>xdvd(V)^COuO}Ix$Bf>68V}qE~MsokdoHokpU0gDRA;z$UCWArEkf^MYy3(PRa+T4v;X9GQBVraVMw%XJuE#)Q`P(7P-`h=+b2^JAO
z_KI^i8NjpLO&pDZNRh;$-F)hWT~Uc=NWw&=D-@nc#XV)pJ8p~{gX*LD_k31SZ0!Z`
z9R(S%rC4E?vmnhttlp|S6TH6Ry8({gc+;VqZ#ay78r6Ph#@a>pNZG$QbRc>pSF9{A
zEv+0Kj8~N(JR)Czi81|W0e4zk>ok@dt)kQNs0|ys*boW}hH-ij4dNJ<`3WC+$D&&w
zwr4xtHizyI_o(XWAFKV<#nA$oI2atJ;&BBu4hvZgF7cF26bVsi9nsg?O&)mD@_ksk
z+-Hpogf`OQnjx`V!j8$g#XYDKBt(W;lCqY-Hq0LenJ!lu$HVOKt$;`HhWi)~CJ=s8
zaN-U8?wbsl-P&(G1fAZjrDxG=gxu@+r2a9N(QJ~+h8|;m+Y86DHx;$FIDNwOQPsE?>B>O`o
zD`c5?(0I(P;#pbn2n0gOJZXx2uzDj9viUlPijxr=2N`D3B5owEn&ENY{8RSQ5MAOD
zu2LWqbBiBkuqI`^u`|4CgA)7nTt+##c%b&mDrXTi#y(2pp_jGEr?S*NcKC-ZDdHeFr?DnN?$Kjd%
zx7^Zb&MYh*+n$>*8nfY6;!1LzCsAjCH`R$&b=*qM8K)P2EPODJl6Hw9LP-3~tw;T3$P)hhB0~Pqscas@b8}|~0-9hFWD$`T
z+Z>0wcBSSpJW!?1$%SiPEzA=Fnt9e(9@J>ZK^!_P8EJS34QMqQrJ*?GxLCnbGf&BI
z5ZXYdU1Ig9zQ&}bOXvS#!=##{HV20sg3WT~V
z>afAZ!95aYQxL+Oxtm(-F-B#wOuX@qr>5W@nF*<#hfj(le4IF$D?+_kjZ8iV!2QP
zHJ)fP#KA463QGflqn2qlevHa!&)X=qo(C6A){h=Ix^iIqwq4y#73_Yi)AT4{!MG_z
z@eJLQ6-xBR&3Z_bCnZyjWeJ_x1?rr8LMLGf8bO~TSBq(J-dITNk4sw~_YdB(sX!~o
zqlNtG!!Hc`pQY;4dpuLgS&%f$HwQ)*|x)tVrQV6%*@W)
zki+8uo3CSCxO%ChjcsL^wG<9@wSI$skZec(!jo8;PtUs&TX;wDmoNpdo%P4Z0?JifF$
zaV7oHVi_+(iZ2wU|AgC+%H_l}v)ECiHP5pHksL*##s
z%1X1o)M^$>OY;j$GgzbzSEE%4U8lCt>dY;kbUZh>dSw5~ehdXgvFH_>W{R
z+4Lm=bu8SlxmORaaidBB@!Ltj>a!C%0V@zOMx7c1UFTsN3f+khxH{!NNHa=qKJ-`>
zpe1gh5Y&cNxI1}p$T$UZlf=UfF=-Y6@Uj>SH}f53Q1AH(&avB207JDbA135POvwP8
z@6{7m1on22n2SN#k{DLP7_gK2odschOsr+s*eewbw~27eDo4FtO;QCSAdLn4V(EMBzUBdD~VYAs;4&b%$6jhS|P)}un_+ny&szu+lpo&qSG2S%bK
z{$^VeFt@n0)IWUWXvL_+j=nU?lf+v2h8kGmdWD6kA1i@X&S3LD$(rz$Q~L=OCND8K-;Sj1
zpb?y)(9TzZSiFM5C`bk}0|crmiZ&26t}=@B6dgxq_(wayq%V0on3#bLYRNt2vRYtrJveLJj>A8brmRK0=FKwU2z?Np&nPmcK~>yS0$(uYG;Fd|lJ>}ZK~}`$;ZdGW
zb^A^GHa1q)*N={Ro2%VhhxO6S!c4_82Nf9x-Q)M{&U0M&DZmSPw`b1!`kMp2fwFw&@Q&kEi5-+ZE5%1qDKTTkP=)`Jy$2uG8oiQ
z*4da1=<%DO4O!UFAs)&wu0+ZSNZji2)LAPuB)&6qWHNWu
z{198>fik|wrB-Un^l6JZQA`N{sfsU4$up?grjibba4LkP2Tqq0Y%=8FJoXR?XV!Lr
zq|)JG*I5?NVZbC?f(!!4F2m`}&{Ijom`?Wbft!bm$tIeWw}e9zWZ_SqIJ^v8oG$sL
z(nwlf4|oBe2`!AC%=5hu3`6D+63VthnM;haMCIu4%AwVj_1()=g(oqka6F#F<`kBl
z20+-&vMs06JF&xw)d+P(jTwk-d(`Bm9J9IU@fb|Etf6HKu0q&Yu>?pwqbwYi6xUNJ
z%~Xqa<5p(M{rmlqhrvSfQyDAl8uZ{>n5X18&
zWc1MK(4f_H=#d~PEf_(bzUQa1q7^E8E8BGsTsm^JcgxL(58l#a{rH`o$!-VT$=c!W
zExrP6&i0jxO1(9M6n+wB3gQ;V1rN+P)alo%-PSGp4<9+OF*7&cXkmZnzozqx&E=)#
z<(*C%Z@|R-d`pxb7Zu&ei0G%@YBaVlE%RCgU=gP8;S|;tEo8P4sP%v#HT)BN;UrQL
z|E3}VjHFniAA^PO%ZQGuC0~#c>6wIWvuN6FF`*;{Xd=&tAfG6`tnGO-h)f|33Q+?e
zA%uZbZE{ui?@&k{lwE>SmXLLun5$+z#hPWr=|d#%mZF(CraV_x?DWCH@vow4wx208
z5kTAkKFPTe<75oRrx9ztu`
zBl%kPklHun3WFIJYQscw3sW)UB%ZNP<1of-*{j=YA&Bd*=deO(Q8~5MvZ1y==&v3=
zy#IzD+6C3dmV1MZo!fU|pka5TSr<~wFD&?KBU`j%w3<|}TZHKm_0CQ?uUF;yTT+bpG|5k61m9e1h?
z&Y~28Jwgm8?-3)<6UNax;l+PaZW22+Zo;$hYt6u2keC=X1{Vps#&SZ-iny}7rh`Xg
zq9b;aMA&Pw9l#isH5Ew}Jg6WfN6g4n+ZF1ZGR-j5wQ+~_r<6DZF^Mm-K_H3`O*1OW
z&zZ@D8Y#yH6A3f2&XL$F$6Q2UC47Bi<}TL{g$GE+qoeGLOK}Gavl`wdGfdbG-R2V!
zksi?*t9y(!MZz#$z{O^>0gn$fD(k?Ty+h+oOAei?FLTWi3cRmm&s5a#Vz=RlvH({$
zvNd1=psOSwv2wnaF-7a7ruTAUAzyk6!EdgtY^<)Xt{+-lUuw^qdmtRLiS|t>HSCO3
z(juL}5qgR)qeS>|RepC8&2m)So(U(~5VL@}oG(O#ft5o&R~_*f9M4Fs01%B!DDy32
zdCFKaLEPnuq-`0n-aX|&uqLjz&=-?R0f#la*J72&)+s%EKK!tj6&HQevPc6Ky;2zy
ztdlrIE4*U6wltQ8>nm9XKeX@qLx)$_ggK58z>&zpibDQK&sGIqYe+!|DRzJ(nW+Ou
z<+RP*L}VFRqEp=;Y_3}}Xv&VAooE+xbG@C%&79KTrutd0Z&$lA2qxp8v4;>Te%T8I
z5uLV0DphY8>99BI%?M0$ndPHA%f%f1w6FlCR8dC9@Stm^0_7q(Vh2Q~Vp4Klx0I_s
z#unet((w{y7`$Y>{6gKFgNa8?GdP!Y6NTidAF$>Iy@ZqVU(76;0)iZ=2zMj;3?M2%
z0={fiT&N71JEgcD^#qb;2%D~qC)+X$?Fzn})q>+s^2QO0~bmyW?rs
zK{+h$4O&dK6_Dekvm@Izl8}k~CeM}6%7lrRmXm^K)i%))k#
zRL0njfE{N5iiYDLjobfxlkXUB@|6;#RaCa^-ZRr!NNGkkX`#Qjj{W-^N&|AQ8Jy9cu^6xrF-Ligkb7pQ~_IulpKlZe{pYfo%?Tds8KvbILoJ=M
zCj3Dg7p7&4rF}W`dB?lFJdR`5;1riM>V+E%{9W7Hx
zj=EzUe1*1Do+CHmLueLQLs(FdVrHNbh34_iiRg98Rb>SkSo5SI-{X{G4wUd=!T}|K
ztP^ZC0096J|6#za20>-3hACxIA6-y@|4fx#oKU)qNm7oACHW_2T3QPdz!6SEa6g9R
zXKCrNHqlLYi&3h@=K9*>
zt|=(v$m9YV^c|tv<1ZGV*QODqAXI!1#O7+bggqUeB96oYevpH*QYir$!FDJ5IU7gG<&2%jvcGpLD
z)RM8yxHZ%24-cuW{&3&F967r0#FOuR!U?A?Ebi(L*IKQ)^_9coubK8dYa$AYlNl#t
zBkt_AWw5Zqd*`sEke+y$u^L+92~uH>fhd|b|LDW3+#2F@w%F4{dwI-Q#3Jz7M48Tu
zs$!~vq{0&3WLah19NeOH+-a}2KR^M5*+^dQDWraqPipTW963BpdD(lfI!r=o|NqXz
z?ANd#(I(?y9U{4?AD|KT
zkdoNd==_d4Jm8+70(thB?>dut1PWBfMaAiu4ptR(!by%v2tKoBh3HauvHWlB(3N;j
zKcc(VsOQ@t_*dUpIqdiL7sa}RuM%8oI7`eo>&euKuH;MC4F=*Z4#LD3QIanJ*LDJ~
z1m`7TiGTR;a1GVO>-aBcqdh}nFg~(zYxn5-V28&d%&S;te`FMHU1z9UZ_B<9^QAEl}-Z9;VK?Ch1Pzy&*;U4gSeCwiyWu76olx?
z^eYi?t=RSY+g@G2?cmWHethKcfi)N4Sn}|^f?>sC6;D$-C8;X7dYDyCRBWn;#mC0Y
z0E|c!h=Jb5F#f9CN|#4Ir?73Gaif?Wbf>+I=)>B92PhPiww=DK>pkC1aAaj=b-n9x
zH{yq3(X$C~w%zKDTXT~+D#^i+(q824*%8YJSYWCv#VaG@bMpJAFHliexr!0E0w9
z)MmABkbMR;QpN;JPUk1iym14Q;qZ765koV
zW7=Z|B6_bF(u`%Zn{f8JTO&%`LQBbA!#k5{79yhd8oF
zytgv;2r_lmsWT(0O7*2ZyL}HVh}rq$(Zf!7uCJ|jH#a-m=H@HQq_w(o$c_cUm@mY$
z(PGet#>2PwHxAtP;~y^{yRdl7?BWu%E$`mBW7mn{AG>EK7QYa$oLXvbl`h7imuL`4lZkrFFhwWd(37uA@GT%{T(lETLK40`TGHr2f3_#3
zyx}}dS-=g0hV$uH*p^MsMr25g!TLb>ED?^~be4n!MYUmVVyUPvQnSvI{8i5w9F3$l
zTJwy3ah4}kX;Y#gZf3N)hHoRxm)fO*=!@pEhMiose1>IWd!?8y%8@jsfFE+Rzj*3d
z)Ok{MO$9g6mv>0X)(7pD1chL6hnjgxj|i|#Dgu+RG8OUQkex-p{MAHqAn3wux*%v@
zbUkPZmaIivoA<4TgVla_Z8YraFtBW9Z5&p^fP^rfl@-~N1GBQp5UGywqjfCbP+!ai`Y!}Ygho?U8NhQ94
z6t9|4uJPRp?S>Lsp4CO=w#+ze5VZtC98#-27;TCO5rVyX*@!+G&oojE@@!BrLEu7H
zEA|Qg`8iPH(D`Zkm)nY-gz%d^_uztfn-y_^>%^1C1L41pxvN@{vtr?6)8;yyh
zEgNw)s)da?BcUGK4P<6v{5mU8>0iF
zupb>*S?SHqH7p|dMxA=Gy3ko1bquvP9n6jzIcb}uD}_h<uf)d-j-Y
zjFwPXyheh6;x
zYBd#b>G{T@bgp?WAxKS@BD)i#sMs=Arf*hAsN(q)p5c~9DCN6p6JH8_a<H`>i+q=;j~a?X-KW9$h_r^8xefbgF}H
z_u$GtB^}#07dqQ~g=lA{wX|TLPiuDD(yVWG^}Tk@xnyukPu*1%?`#l&$=BsELb*=0
z?aQ5N&F1p_VuU9ojC-yuTUYXQRu4Dnt{pyf+u@^!x`!nK8~&T?%#ym&&1l`%F-!lhi_zW8?E^I$sMGitrV82{f&{`4ppt
z(Cuu(`3yU}oPz{VRPJe3j!k;Fj8uV9
zfv>CWl0vR{G^hY)_l94L!cGO7!f<|nKA>j5<)Dg}rP(u$8q?j|J7p4;Fu
zg?Wz`XuDOw!;_WcVK@epuqshkMUXA3Fi3ozRXOg5y4jkj25__kWaVC!JcS6`Ftwbc
z;Gkl&xP@4nga3=CJL%ChOVfmG(>G5xn@{248AC=^MP+qWbwahe)e?vW>{v8n!;&RG
z0f`mA0-AzN4s=PS+ezF
zAiogX5rjq?HWr(c&Dwx=B30ZjUVw*$#YsK>j)y`*U9$v)1d%wb8H@qRInaPyySv3&
zLVP>i97Q%=jIVC4UOXEMTC8>tGSoWa23fKCw$5fE4~0~pEv^}?_%@i*gXh?>;-8b)
z*qD5eHp`93e{4U~t_4Wyo=Wm+6lV%nBIn6!3p1KHCCuP@eBAZc0;|c{E@WSBi2C(5!_o!?DdNhqEjHTsT13YiN;uU4AV`;pq3oUsPACpHq?0zyznJMTVB
zuP%pPxl3GsTHEYc3P#6-X_T@&N;
z_*l%QQZ<$-AxV$8IbWDWy3~($b3Xg-`?K4tHSE{k-#X~npRI0ZWKxrxgvk87U>J0j
z!9sR(;;Qn8XjQMslj9H((Nv%X7UNvBVfhvNq?Qt0qvCg*fQi%=VwtX)x)@#v?g_y;
za}=1zcw_~;T=X5$fxkSNd;_5n8AjY(Fp(h}+}hMR*CvM*}>XXbZ6wbc9?W$@i35iR)#5
zNwH=4FcRPyT0RrTeA=_981|mykud0rx^(k&)F2$Wh|@vKiy^@UT(hh<4jdJR)99_p
zqs1nH9XoQjT*fV>R)9x%7K}w=`>@T5BuQbnVvXYJEyw+v{*SN!{@1_y*M|q~)$IK0
z?G7b3oenQ=&fCrUbTaJi?Qe7hM5m+C2tW4PT^;4MTFab80xEEW%N#a09*!%G_I$!I
z!xHzKb@sH=sMl*P^lb4$_++c4pp2T-pf0VN&Y8CeH4x@P?RF1)wT-j>M(H
z!S=!SWHc38pKy1;{DtM*R9oH6_jmovkDa~aZnw98^rTwv=yJcW*^>-m;|yUi2mow&
z*fKviy)SYB$mBJ_Ii@N-dB~GUNTf^mPd>{IKRA`v-iV82e~OWC9d0^u)1I*G;jREBJiFxzUdkVp>&
zBp6zv!mt25OHNQUmG@bOH;5f;6xhYQg-d;c*76XR9vKM#;ABjuR6^XQC^^4||Huob
zEar(sRq#eZHGI%uuV5vAyAfIu9HG$&g!d9*&Gp&vI4+@UfUV#BMa)$S%@wcD2g}8U
ztOuFWb`pzBektBXU42W$E04p%75$#l{J0hgVfi6s@;F(aCHvXldt8DZV;bn5Z-5Hv<0!cGTZ
zpgg}#qgRMM%|PT+q?%`mIf`G%a@T`n@z^1&Q2
z8GiwLT7~~%rj?L!)Rg(X>V;BagO@7Bfyx$BPHs*!?7V$*fnlA)Q!}N(-o%3hl||kfz|}HnNUE^xx$HG{i3qljK;c0|PsoHYgL8nA35eZ(h6o!DfBr6vtSIJ4p!_kpkGUjfSHi>e7OAObb0%4AV0f4fF
zmQ9r<4mb;S{SFalqkxO#0?Up8WdLx1Y-o(}3kE|?yO7!mUbz_^akSadARKG=NYSLJ
z9v;4b{SRXM7w13z@zeSGv8!)nfhRN!QrG-MxJnzoGl4DfHKD
zc6RR;6IVq_SzwBBa6QttSX-?dt=(p)gFfj`Xjj8`kyDHpS0i8ujle*5
zGAf703G3qj+`vK@s#5Z5|A-NY3_Dr9E^i8drX(UfWIf?=<-|qpCHUzDR}&Bm)Nm=n
z;S;S;yF<4;nG
z5k=2}<#D^s1|c;FOkuXDpcqwp{gFF`J8-J;$>YSV(8CqTx)rj8l8r(OvODgHR#qAr
zwCFvI)_$d}po|6QMRrFbCqW
zb%+4G=ZDChr=~9mO6sBFgqic0;vmdo=d!QDhREmAuIW!=T50O?ZF88`I>w@Js2~6c
z$WCHJN+nt>7SAp0T-10<+_9z&K|5>)16XaMO4*2Xa1ks`UF>>V#N;1{bLP<7;7;w2
z=CeL=w_i$cO6ex@Au-KgN{q8U;iXwrSb4T&i=!VCn6jgu7S+)&%HJPiZN0f*B-OVB
zbB|9Nd-`^`Aa;P&HL|M$PY9bSrjl}HAsWimGI;~E-({4FrKt-9AV?=jJ
zawv;_lnMKrl^~t{L1~K-adVO&6sDjbLbD)9?jCqQ(^?q?qTz6maU?M|6$0WMrlC8j$v_c=VN6;N7yL-U4%qQGaSkT
za49?D>#+*q2kJE;Wk~+R+qWNn{Oz}Y|2Oa6zqz^mvA5soG0Lyg~iQ=XhVggM7GVk
zD5+lI^PnvFUlh17rumM-BREm{X|vZ9j~d)urSo0A8{c`kYA8+H+8U0XdBa|=8m+zA
z!f_ZYprNe|vfj~qx}ar(qaG&n{>AD0sY=vlBLa(=qx9?_CbzlrVH6a>4qHZHh0#DP
z3bBYo{Gqh?<9|fp6w>_h4I-zgoFbMGCP)IY%D#H11h>Nrn8MeH8IX*iej;6oIH9j!
zN)XV`Ay3wXCtXicE6hg=;+FsAfBUcg|G5Be5FfHUhwr=U!yN)kfLLUVO_SV+Uqlo=zx8=K_#Lf_8uWNk
z(1av7*Y;9t(FTF*dDdujzhGQX6fNUhRIxWac}jazpyf;MYIWgMksGh)GbO(OM$zyY
zFcpX)6hnJbQ3+DetRY*GU6c%Pz+4Hfa&Ev!H$gDVw&cjA3qp&&h+00Lts_Myr8^$Z
zZL`UgoOb$PQUpQ^GRRjW<9X^wWaf6fei0#$N5Jq04&gLoo7k=p&>|xh(L0zY%?IQ`
z%*cL}T`QYsE6GAJ4PN(o(jBjh1{LK)=Y$IgdEOFC(PwgT_3?+_e*eo~|Ft%x+Rm~+
zyL|rQ)4RpWGpVc*q26m99-chY5VF6&d;H|(?%pw%R$9lp=rjS(om#!RQ%{NZq;Ht)
z)yMZ~rDTH^Gb6>RAdBZnTXzEgX3&Wx4Q}EnORcqA0zvcPQtMB5S4O#G_Q+^3ar9Bm
zEW$=-HXV`L`DALx!V#Mfs)ayIZdmQ1vIrx3Dp;t}?sOfexR{J@u1=S$(RKgB$2afm
zj!J5PNgD6cPOB
zT?4qRHuwx5MPvFo{e|umZo)X>RJ>ZCQUsN4q3P220h0rYNcvI}1lrryxbNUNmr?JQy-oFW}f?
z`61bBuhC+DE}|h&=YM|nVHfZ2b@%q4?RNHB^&BN&>DE(JNTznVtH1fd2v7tBr)v6=
zZ%P9wWRrc!yaLT+c`&5IU}Az%-vt)f&D5ImW72qv7qE!UiFi|2v6wEOi9R58V#cfmJ0o9z8wAb`Hr+WL-AIHrukYjO>av;iVE_4UzKw+$dfJOPKX1M3N5iqPv4s;xnOCo|$W|
zmmnoQi8)5{Jtbx*66G00EU?Ri8U^Y5QmgG&__kR4N9x1~i_}H)(piFJ6s8YgUOo*&
zlIJ0G#5f9Ehd{oLpREiU3B+K~otK>6zQ~C%YiiC^%CWzZTCDF2B1-AK%T}PEfo3W;
zUD#JF*rl;-^iZH#QY_i2*c0D&e>YCmkd&a+yLI$I$|xi`EG^UJf=%#W7kEzEwx}tKa-fkGPu6YB|47Y$#12)bG*J$=>nF;foW)*sI+Z3pyW+
zMR@i*hwN$2M-aSR&+iwj@n||*&8Lf*VvvJFG5O<@lc&+K&dE~{A~LJgUffbTpwX&S
zcG|n0=D}gR*JThJwRjy0Gn9A_2K}4C&|+H6BlF}`PHH|@Ht(RGRUA#
zd=z%WA{i%RgK368#9nw-xHRu648nY(j+&gqmaIi$t*i*~^^iys@lo5uD!LTaB#7Hq
zO=P9B$Wd@XR8QcHM&6~u60A4n8H;|s3u
zDl#QF*{UT!<{ZU~Tnd!HAv(ThSgglt^-Fo63rUsFpj6>7YNn8urg`F20eI*Ds%$
zEXgzPnX||Db+}a=4OB?!oeNbPjpvQ_6MzXpQ?*5NrOAqbW&?^bEwLa^Ei6tq8U`0=
z8}){Au%O^`EaK5fjxz4H=xMSDIvH=m|wmdSb&OX^g0N
zZ#24ie-5Ovv8GuX3{aAtqQUpZ)+G9EuLxE)BuFPLl?7;BUhruai$QI>9ZjAlh?wDrO;w5t<+QzJe`+?w+oU3Ys})Y!7iLmUN^6%0r%R{2
z1RJ?AC{pw>mMz6g0(0f2nwo?ABWiMj_S?+S!H@Kg$}`xcr(Fv3mQja5AzA$s#A=ii9I#FgxLl2UbD_IUYW*DJ$}<^12298yyt=gIN{bBA5XU
z6lV_Z%-~m*KhF0|*3{ml4KWG8cFtZS0MQh9KN7f6iquJoj39%AWT=|}i-0n^b7Yk#
z;k(Fiz^ktT8}5^w1okN2i4a_r8dmX1NG+8L095cXCfia@Mnxv7g(p2x5Vd9Bt&|&Z
z3!sX`=63FYQyW4DvPp7v)TQNl;<%;IscXU$v{mBTz+#fe@)Cp;V`B3F__z_aE-DGq
zoU+gW&uTewfxxHe)NYKBJ$F5=gb>WbWOaW_zLibXng@-}livOd8-IQC`~LM0$Vr6o
z4i;8|5b
zgI)=sM|%bjY}KR(Z*SCWEe6WCH+MdqkJR?L5p*A(3k0CzjUrypMhoHE*=)*%w;!rI
zEX}5|*NK%sYCcXjq!R;o
zT47-vZ>A5!v6ZG;;pLb)duwM%7lzLgQdTV9MR@E4$B3m*nF|%XwWGp&X@=EmJvD;C
z2fP>aWOId0;)LRsxRYFROdPE7u>N@d!{7bgU-$bTN{pPP(X=MxGs5{IQ0ntH?|VDd
zMsMG7pzUVkX`@yViFbwBWHcK=KUo4wps?iIpLMFx;&Rmd$_$mM|Om)HM+buVqR@#sO9|{7tNaW_QPsAn(9;oAC~G2
zsMcn^h8fI^k_kq4nTD0-Q^g8mM53K{@&p}YCITJcHNIF4iMOluJvpk`C
z7bTe7K>SwB8V>W=^rnw{TCOXjSCX05Cf98d$>=@`3xNt+iQy^F6w8fENf^o9kl0_W
zCMgnGjVPPBM({yhUPg>EyFaWRlt8#xk8}+rber%_Y6e6I
z(l{2Y6s5{Rb)w~>IQ#l$p>B_IllB?hm`DUZr@l42;G?NZ!SqqugTB#q(!-P4V$nuu;({xD
z4wQBV14o+Hb>pBaQ>PFQxo|2ZUSb+ZioWYn4x|%)O}Zis85JBtt9cJq@^h@P>(I;b
z*ztnvh8Kh0UDZu(JN9+o0>wSG#6#S(VEKGC?RtrZl2$iO;2zO(>4adyLq%c*@
z)46ww9dkvz=nIreuxOwt#$__&QABZMrN#1Q2!iW)7U!m_FM2RoI;>1RdC>58?z&T#
zuwC>AyNAc)k+}Nk^xems>s!q4VyZev{lWNQRINO8nxgW}%ggg&zc0Oi`SHE>F7u{!
zu5QyrHHM@
z9@ZKu06l7Q4;q>bYUam59(2rR<>vBCErkp6H^mVWhXZVJ3H`2#>C2jmF;I(ZOVX_2HYh-~R5e
zUVZ+LfA+_J*=z&!25Ixnad0d;WrF8;l!0;NDhyT(LL`|M<)cTLL